Микропроцессорная система коррекции режимов работы двигателя внутреннего сгорания (Проектная часть дипломного проекта), страница 9

Если переход был зафиксирован, то сравнивается текущее значение периода вращения коленчатого вала и, если оно не более сохраненного, то длительность импульса делится пополам и записывается для последующей коррекции в (adrk,tmp):

call               _make_ex    ; подготавливаем adrk и tmp

clrf               _status         ; сбрасываем STATUS

rrf                adrk,f ; делим на 2 длительность сигнала

rrf                tmp,f            ; "топливо"

return                     ; выход: в (adrk,tmp) - скорр. длительность

_make_ex    movf            tjdh,w          ; записываем в adrk и tmp

movwf         adrk             ; подготовленное для коррекции значение

movwf         o_inj_h        ; длительности сигнала "топливо"

movf            tjd,w            ; в (o_inj_h,o_inj) вместо старого значения

movwf         tmp              ; длительности записываются скорректированное

movwf         o_inj            ; значение сигнала "топливо"

cr_inj_com            Основная подпрограмма коррекции длительности сигнала “топливо”, аналогичная по структуре подпрограмме коррекции “зажигания”.

Вначале вызывается подпрограмма create_inj, определяющая переход на двойной счет сигнала “топливо”. Выходные результаты работы этой подпрограммы, записанные в регистрах (adrk,tmp) переписываются в пару (sumh,suml). Проверяется значение сигнала IDL - при равенстве нулю идем на уменьшение длительности сигнала на 25%.

В остальном все выполняется аналогично, как с коррекцией сигнала “зажигание: определение текущего интервала коррекции, чтение значения коррекции из внутреннего EEPROM, анализ прочитанного значения, коррекция значения, находящегося в паре (sumh,suml). По окончанию коррекции происходит уменьшение скорректированного  значения на 25% , и прибавление текущего времени к полученному значению длительности. При выходе из подпрограммы анализируется флаг переноса, для определения переполнения старшего разряда времени окончания выдачи импульса.

Средняя длительность работы подпрограммы (при коррекции сигнала на 15% длительности) составляет 135 тактов.

make_inj_t             Подпрограмма коррекции длительности сигнала “топливо”, выполняющая настройку длительности выходного импульса для каждой пары форсунок.

Вначале работы подпрограммы проверяется условие: достигла ли программа того момента времени, когда требуется начать выдачу импульса:  вычисляется значение разности текущего времени и момента начала импульса. Если эта разность не более нуля, то определяется какой импульс (на какую пару форсунок) будет выдаваться в данном периоде:

btfss             flagh,7         ; если очередь импульса 1,4 форсунок

goto             m_i_t_1       ; идем туда

По значениям бита 7 регистра flagh определяется активная пара форсунок в данном периоде (“0” соответствует 1,4 форсункам, “1” - 2,3 форсункам). Далее эта часть программы разветвляется на две структурно одинаковые ветви, каждая из которых отвечает за свою пару форсунок.

Производится вызов подпрограммы cr_inj_com входными параметрами которой является значение измеренной длительности сигнала впрыска, находящееся в паре  (tjdh,tjd). При выходе из этой подпрограммы анализируется флаг переноса (C общего регистра STATUS), и, при выполнении проверки, устанавливается флаг переноса для скорректированного значения. Следом за этим идет перезапись  скорректированного значения из регистров (sumh,suml) в нужную регистровую пару (tj1h,tj1) или (tj2h,tj2).

check_inj1 (check_inj2)  Подпрограмма, аналогичная check_outC, отвечающая за выходной сигнал “топливо” (соответственно за 1,4 и 2,3 форсунки). Подпрограмма анализирует флаг переполнения, и когда этот флаг сброшен, сравнивает значение текущего времени и момента прекращения выдачи импульса “топливо”. При положительном исходе проверок выдача импульса прекращается, устанавливается флаг окончания и подпрограмма заканчивает свою работу. Длительность работы подпрограммы 16 циклов.


2.4. Выбор элементной базы. Разработка принципиальной схемы