logo
Многофункциональный прибор для учебного автомобиля

4.3 Выбор разрядности переменных и микроконтроллера

Диапазон измеряемых значений длительности составляет T1=937…75000.

Разрядность переменной T1 выбирается как

N[T1]log2(T1). Получим, что N[T1]=17.

Пересчет значений длительности T1 в частоту производится по формуле

.

Пусть T1`=5105/Nизм, разрядность константы k3=5105,

N[k3]=19.

Разрядность переменной T1,

N[T1`]log2(5105/937)=10.

Разрядность константы

k1=60/Nцил=5.

Разрядность переменной Nk=100…8000 (значение числа оборотов в об/мин) равна

N[Nk]log2(8000)=13.

Так как величина Nk выводится на индикатор в виде 4-х разрядного десятичного числа, то разрядность двоично-десятичного значения Nk,

N[Nk10]=4*4=16.

Для датчика скорости:

Разрядность переменной измеренного числа импульсов

v=0…533, N[v]=10.

Для приведения значения скорости к величине км/час используется преобразование

V=v*200/333=v2/333, где v2=v*200.

Разрядность

N[v2]log2(533)+log2(200)=17.

Разрядность

N[V]17-log2(333)=8.

Так как величина V выводится на индикатор в виде 3-х разрядного десятичного числа, то разрядность двоично-десятичного значения V,

N[V10]=3*4=12.

Для датчика напряжения:

Разрядность АЦП равна 9, то есть

N[T2]=9.

Нормировка выходного значения к значению напряжения в единицах вольт производится по формуле

U=10*T2/32=T2`/32.

Следовательно, разрядность

N[Т2`]=9+4=13,

а разрядность

N[U]=13-5=8.

Так как величина U выводится на индикатор в виде 3-х разрядного десятичного числа, то разрядность

N[U10]=3*4=12.

В настоящее время распространены однокристальные микроконтроллеры с разрядностью 8 и 16 бит. Для данной работы был выбран 8-разрядный микроконтроллер AT89С51, исходя из требований к стоимости тахометра.

Микроконтроллер имеет 2 16-разрядных аппаратных таймера-счетчика. Для датчика частоты разрядность счетчика N[T1]=17, поэтому 17-й бит формируется программно по признаку переполнения счетчика.

Остальные счетчики, с разрядностью N[v]=10 и N[T2]=9 организуются программно.

В соответствии с выбранным значением разрядности контроллера равной 8 бит, уточним разрядности переменных:

N[T1]=N[k3]=N[v2]=24

N[T1`]=N[Nk]=N[v]=N[T2]=N[T2`]=16

N[k1]=N[V]=N[U]=8.

АЛУ микроконтроллера AT89С51 позволяет производить арифметические и логические операции с 8-разрядными данными. Поэтому для операций сложения чисел с большей разрядностью (например для организации счетчиков) используется число сложений (с учетом переноса из младших разрядов) nсл=N[оп]/8, где N[оп] - разрядность операндов.

Для выполнения деления и умножения в микроконтроллере предусмотрены операции 8-разрядного деления и умножения. Так как в данной работе требуется выполнять

При обработке данных используется 16-разрядное умножение, которое реализуется с помощью 8-разрядного следующим образом:

P16*16[31…0]=A[15…0] B[15…0]=

=(a[7…0] 28+b[7…0]) (c[7…0] 28+d[7…0])=

=a[7…0]c[7…0]216+(a[7…0]d[7…0]+b[7…0]c[7…0])28+d[7…0] b[7…0].

То есть заменяется на 4 операции 8-разрядного умножения и 3 операции сложения.

Операция умножения 16-разрядной величины на 8-разрядную соответственно заменится на

P16*8[23…0]=A[15…0] B[7…0]=

=(a[7…0] 28+b[7…0]) d[7…0]=a[7…0]d[7…0]28+d[7…0] b[7…0].

Операция деления 24/24 бит, 24/16 бит реализуется алгоритмом целочисленного деления, приведенному в [5].