Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Эрни Каспер Программирование на языке Ассемблер...doc
Скачиваний:
120
Добавлен:
09.11.2019
Размер:
954.88 Кб
Скачать

5.5.Компенсация систематических погрешностей при помощи таблиц

Характеристики используемых в изделии измерительных и исполни­тельных устройств, как правило, описываются достаточно простыми математическими соотношениями. Однако в действительности эти харак­теристики могут отличаться от принятой идеализации. Для существенного повышения точности внешних устройств приходится усложнять технологию их изготовления и отладки и увеличивать производственные затраты. Поэтому целесообразнее решать эту задачу путем калибровки параметров и компенсации погрешностей при обработке информации в микрокон­троллере. Не следует забывать, что калибровка и компенсация имеют смысл только в том случае, когда характеристики устройств достаточно стабильны при всех условиях эксплуатации изделия, не изменяются с течением времени. Калибровке и компенсации подлежат только систе­матические составляющие погрешностей.

Под калибровкой обычно подразумевается компенсация системати­ческих погрешностей, описываемая линейной зависимостью от аргумента. В этом случае говорят о компенсации двух параметров: смещения нуля и крутизны характеристики. В случае нелинейной зависимости приходится учитывать большее количество параметров и производить более сложные вычисления. Если аналитическое выражение для систематической погреш­ности не удается найти, то эту функцию можно хранить в виде таблицы. Но даже при существовании аналитического выражения табличный метод учета может оказаться более выгодным, так как он позволяет избавиться от решения задачи оценки параметров и от сложных вычислений. При использовании табличного метода вычисления поправок в ПЗУ можно заносить экспериментально полученные таблицы даже в том случае, когда это приходится делать для каждого изделия индивидуально. При необходимости можно записывать калибровочные параметры и таблицы для компенсации в энергонезависимое ЗУ.

Приведем пример программы, позволяющей компенсировать нели­нейность характеристики датчика. В данном случае функция Y является экспериментально измеренной систематической погрешностью датчика, то есть разностью между фактическим значением измеряемой величины и показаниями датчика. Предполагается, что показание датчика хранится в двух ячейках памяти — argh, argl (старший и младший байты соответст­венно), а минимальное значение показания, соответствующее нулевой измеренной величине, и максимальный номер интервала записаны в виде чисел argmih, argmil и п в операндах соответствующих команд (непосред­ственная адресация). Шаг таблицы выбран таким образом, что старший байт определяет номер интервала, а младший — смещение относительно табличного значения аргумента. Ввиду малости поправок они хранятся в байтовом формате.

CLR С

MOV A, argl

SUBB A, #argmil

MOV R0, A ; положение в интервале

MOV A, argh

SUBB A, #argmih

JNC apl

арЗ: LJMP err ; переход по аргументу меньше минимума

apl: MOV Rl, A ; номер интервала

CJNE А, #n, ар6

JC арЗ ; переход по аргументу больше максимума

После определения номера интервала в таблице и положения в интервале нужно сделать две выборки поправок из таблицы. Поскольку поправка может иметь любой знак, этот байт используется для представления чисел от -127 до +127. Для сложения с двухбайтовым числом в случае положи­тельной поправки в старший байт производится запись нулей, в случае отрицательной — единиц,

ap6: MOV DPTR, #соrr ; адрес таблицы в регистр указателя

MOVC A, @A+DPTR ; поправка для левой границы интервала

MOV R2, А ; поправка на левой границе интервала

MOV R3, #0

JNB А.7, ар2

MOV R3, #FFH ; отрицательный знак поправки в ст. байт

ар2: MOV A, Rl

INC A

MOVC A, @A+DPTR ; поправка на правой границе интервала

CLR С

SUBB A, R2 ; приращение поправки на интервале

В данном случае предполагается достаточно медленное изменение поправки. Модуль разности поправок на границах интервала не должен превышать 127. Так как поправка может быть отрицательной, то для интерполяции вычисляются ее модуль и знак. Полученное произведение представляется в первоначальном коде и складывается с поправкой на левом интервале.

MOV С, А.7

MOV FO, С ; знак приращения

JNC ар4 ; переход по положительной разности

CPL А

INC А ; модуль для интерполяции

ар4: MOV В, R0

MUL АВ ; учет положения точки в интервале

ADD A, #80h ; для округления ст. байта

CLR A

ХСН А, В

ADDC А, #0 ; используется старший байт

JNB F0, ар4 ; переход по положительной поправке

MOV В, #FFh ; изменение знака

CPL A

ADD A, #1

JNC ар5

INC В

ар5: ADD A, R2

MOV R2, А

MOV A, R3

ADDC А, В

MOV R3, А ; вычислена поправка

Вычисленная поправка добавляется к показаниям датчика и записывается в регистры Rl, R0:

MOV A, R0

ADD A, R2

MOV R0, A

MOV A, R1

ADDC A, R3

MOV R1, А ; получено точное измерение

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

.DATA corr: .DB ; поправки

В исходный текст можно записывать поправки в десятичном виде со знаком или в двоичном формате.

Если существует более или менее точная математическая модель систематических погрешностей и в процессе настройки изделия удается поучить достоверные оценки параметров, определяющих погрешности, то может оказаться необходимым расчет поправок по формулам этой модели. Когда изделие измеряет векторную величину и существует взаимовлия­ние погрешностей каналов, то математическая модель будет двумерной. В этом случае расчет по таблицам нецелесообразен, так как их использова­ние для вычисления функций нескольких аргументов требует очень большого объема ПЗУ.