Коррекция представляет собой цикл, счетчиком которого является значение, считанное из внутреннего EEPROM (для адаптивной системы счетчик корекции находится в регистре delta). Шаг коррекции (регистр suml) вычитается из младших 8 разрядов длительности сигнала, если происходит перенос, то уменьшаются старшие 8 разрядов. Положительная коррекция аналогична приведенному примеру. Далее после метки no_make2 выполняется перезапись значений из регистровой пары (tay2h,tay2) в (t2h,t2). В (tay2h,tay2) в этот момент может находиться как скорректированное значение длительности сигнала “зажигание”, так и измеренное - не требующее коррекции (вследствие предыдущих проверок). Время выполнения подпрограммы коррекции (для значения коррекции в EEPROM равном 85h - уменьшение длительности на 5*1.40625° п.к.в.) - 90 тактов.
_make25 Подпрограмма производит вычисление 25% значения, занесенного в регистровую пару (adrk,tmp), путем двух сдвигов вправо через перенос (бит C регистра STATUS). Ïåðåä êàæäûì ñäâèãîì производится очистка данного бита. Результат сохраняется в этих регистрах. Время выполнения подпрограммы 8 тактов (без команды вызова подпрограммы).
create_inj Подпрограмма, используемая при вычислении коррекции длительности сигнала “топливо”, контролирующая момент перехода на двойной счет измеряемого сигнала.
Анализируя предустановку входной линии RA3 (логический “0” - асинхронный впрыск, “1” - синхронный впрыск), программа передает управление на требуемый фрагмент кода, реализующий заданный алгоритм.
Для обоих алгоритмов входными параметрами являются длительность сигнала “топливо”, записанный в регистрах tjdh, tjd. Результатами работы обоих алгоритмов являются значения длительности выходного сигнала топливо - для асинхронного впрыска с регистрах tj1h,tj1, для синхронного впрыска - значения в регистрах tj1h,tj1, tj12,tj2.
Алгоритм асинхронного впрыска: по переднему фронту сигнала “топливо” начинается выдача выходного импульса, устанавливается флаг, сигнализирующий о начале преобразования, управление передается на подпрограмму коррекции длительности асинхронного импульса “топливо”.
Алгоритм синхронного впрыска реализуется при помощи разделения сигнала “топливо” на два выходных сигнала, управляющих парами форсунок. По переднему фронту сигнала “зажигание” начинается отсчет момента выдачи сигнала, активного для данного периода (одного из двух, причем второй сигнал может выдаваться в это время). Далее управление передается на подпрограмму коррекции.
Оба алгоритма используют часть одинаковых подпрограмм. Для корректной работы подпрограмм с обеими алгоритмами выполняются проверки линии 3 порта А, которые разделяют код разных алгоритмов. Для асинхронного впрыска не используется уменьшение длительности скорректированного сигнала на 25%; и этот алгоритм использует подпрограмму check_inj1 для проверки окончания выдачи импульса “топливо”. При этом выходной каскад на транзисторе VT коммутирует на форсунки, а транзисторный ключ на транзисторе VT отключен.
Для обоих алгоритмов вначале проверяется значение сигнала IDL, и, если он равен 0, происходит переход на метку _make_ex где выполняется запись измеренной длительности сигнала “топливо” в регистровую пару (adrk,tmp) и возврат в вызывающую подпрограмму.
Следующая проверка производится на то, был ли зафиксирован ранее момент перехода на двойной счет по сигналу “топливо”:
btfsc flag,0 ; момент перехода установлен?
goto make_double ; идем на сравнение текущего периода
Если переход ранее не фиксировался, то выполняется проверка: текущее значение длительности сигнала “топливо” сравнивается с предыдущим значением, и, если их разность положительна и больше половины предыдущего значения длительности – это есть момент перехода на двойной счет. При этом сохраняется текущее значение периода в регистры (dblh,dbl)
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.