♂
Адрес: Херсон
Сообщений: 110
Машина: ВАЗ-2108 1400 EFI + МПСЗ ГБО Tomasetto AT07
Длина: 1450мкм
|
Примитивный расчёт обогащения в зависимости от температуры ОЖ, берём по пяти точкам, после +50 градусов почти не обогащаю
Цитата:
; Вычисляем уровень обогащения при прогреве
BTFSS COLT,7
GOTO COLT_MID
BTFSS COLT,6
GOTO COLT_MID2
; -12 to -43
movab COLT,MULc
BCF MULc,7
BCF MULc,6
MOVF ENR_12,W
SUBLW 0FFH
MOVWF MULp
CALL MUL8
RLF L_byte,W
RLF H_byte,W
RLF H_byte,W
ADDWF ENR_12,W
MOVWF WARM_ENR
GOTO GO_MAP
; +20 to -12
COLT_MID2 movab COLT,MULc
BCF MULc,7
MOVF ENR_COLT,W
SUBLW ENR_12
MOVWF MULp
CALL MUL8
RLF L_byte,F
RLF H_byte,F
RLF L_byte,F
RLF H_byte,W
ADDWF ENR_COLT,W
MOVWF WARM_ENR
GOTO GO_MAP
; UP +20
COLT_MID BTFSC COLT,6
GOTO COLT_MID3
; Up to +50
movab COLT,MULc
BCF MULc,7
BCF MULc,6
MOVF ENR_MID,W
SUBWF ENR_COLT,W
MOVWF MULp
CALL MUL8
RLF L_byte,F
RLF H_byte,F
RLF L_byte,F
RLF H_byte,W
ADDWF ENR_MID,W
MOVWF WARM_ENR
GOTO GO_MAP
; +50 to +80
COLT_MID3 movab COLT,MULc
BCF MULc,7
BCF MULc,6
MOVF ENR_HOT,W
SUBWF ENR_MID,W
MOVWF MULp
CALL MUL8
RLF L_byte,F
RLF H_byte,F
RLF L_byte,F
RLF H_byte,W
; ADDWF ENR_HOT,W
; MOVWF WARM_ENR
CLRF WARM_ENR
|
Вычисляем обогащение по ускорению - ускорительный насос, считаем по дельте положения дроссельной заслонки между импульсами зажигания
Цитата:
; Обогащение смеси после пуска двигателя
BTFSS STAT,7 ; Проверка флага включения обогащения после старта
GOTO GET_ACCEL
DECF D_TPS,F
BTFSC D_TPS,7
GOTO SPD_E
BCF STAT,7
; вычисление режима обогащения
GET_ACCEL MOVF TPS1,W ; Предыдущее ПДЗ
SUBWF TPS,W ; Вычитаем из предыдущего положения ДЗ настоящее
MOVWF D_TPS1 ; сохраняем как дельту
BTFSS STATUS,C ; Проверяем на наличие ускорения
GOTO D_ACCL
BTFSC STATUS,Z ; Проверяем на наличие ускорения
GOTO ACCL_END
SUBLW ACL_THR ; Вычитаем дельту с порога ускорения
BTFSC STATUS,C ; Проверяем порог ускорения
GOTO ACCL_END
BCF STATUS,C
RLF D_TPS1,F ; Поделить на 2 коэфф. обогащения
MOVF D_TPS,W ; текущее обогащение
ANDLW B'01111111'
SUBWF D_TPS1,W ; вычитаем текущее обогащение из вычисленного
BTFSC STATUS,Z
GOTO $+5
BTFSS STATUS,C ; если текущее обогащение меньше вычисленного, то
GOTO $+3
MOVF D_TPS1,W
MOVWF D_TPS
ACLEE BSF ACCEL ; Вкл. светодиод акселерации
BSF STAT,3 ; Вкл. флаг акселерации
BSF D_TPS,7
GOTO SPD_E
; Подпрограмма обеднения смеси при сбрасывании тапка
D_ACCL SUBLW 0FFH
SUBLW 80H
MOVWF D_TPS
BSF STAT,4
GOTO SPD_E
ACCL_END MOVF D_TPS,W
BTFSC STATUS,Z
GOTO $+4
DECF D_TPS,F
BTFSC D_TPS,7
GOTO ACLEE
BCF ACCEL
; CLRF D_TPS
BCF STAT,3
BCF STAT,4
|
Расчёт объёмной эффективности, простейший, выборка таблицы:
Цитата:
; Обработка таблицы объёмной эффективности в зависимости от оборотов двигателя
SPD_E CALL EngSC
MOVWF SPD_ENR
|
Экономайзер мощностных режимов: обогащает смесь на определённый коэффициент при условии давление вышле определённого (60 или 75 кпа)
Цитата:
; SPD_ENR=(обог%)/100*256
; Обогащение по скорости=SPD_ENR/256*100
; Экономайзер тапки в пол Основная смесь - 12,5
MOVF TPS,W
SUBLW 0CCH ; Порог 4.5v
BTFSC STATUS,C
GOTO TR_EN
BTFSC STAT,1 ; Проверка флага прогрева двигателя
GOTO TR_EN
MOVLW D'100' ; Нижний порог оборотов 2500
SUBWF SPD,W
BTFSS STATUS,C
GOTO TR_EN
let Mul1Lo,0B3H ; 1.339
let Mul1Hi,0H
GOTO MUL_ENR
; Экономайзер мощностных режимов Основная смесь - 13,5
TR_EN MOVF MAP,W
SUBLW 0B3H ; Порог 80H-60KPa, 99H-70KPa, B3H-80KPa, BD-85KPa
BTFSC STATUS,C ;
GOTO READ_MAP
let Mul1Lo,0A2H ; 1.244*127
let Mul1Hi,0H
MUL_ENR BSF ACCEL
MOVF SPD_ENR,W
MOVWF MULc
CALL MUL16_8
RLF Mul1Lo,W ; Помещаем бит 7 в С
RLF Mul1Hi,W ; Перемещаем карри в 1 бит
MOVWF SPD_ENR
|
Экономайзер ПХХ, выключает подачу топлива при сброшеной педали газа, флаг СТАТ,3
Цитата:
;-----------------------------------------------------
; ЭКОНОМАЙЗЕР ПРИНУДИТЕЛЬНОГО ХОЛОСТОГО ХОДА
;-----------------------------------------------------
BTFSS STAT,7
BTFSS STAT,2 ; Проверка холостого хода
GOTO Ln_Int
BTFSC STAT,5 ; Проверка
GOTO $+9
MOVF SPD,W ; Верхний порог оборотов
SUBLW SPD_EPHH+3
BTFSC STATUS,C
GOTO Ln_Int
BSF STAT,5 ; Ставим бит включённого экономайзера
CLRF T_INJ_H
CLRF T_INJ_H
GOTO EXT
MOVLW SPD_EPHH-1 ; Нижний порог оборотов
SUBWF SPD,W
BTFSC STATUS,C
GOTO EXT
|
Дальше собственно считаем время впрыска линейной интерполяцией:
Время впрыска=(время впрыска на полную (120кпа)-впемя впрыска на хх (25кпа))*давление+время впрыска на ХХ (при 25кпа)
Цитата:
;-----------------------------------------------------
; ЛИНЕЙНАЯ ИНТЕРПОЛЯЦИЯ ВЫЧИСЛЕНИЯ ВРЕМЕНИ ВПРЫСКА
;-----------------------------------------------------
Ln_Int BCF STAT,5
MOVLW OFFSET
SUBWF MAP,W
BTFSS STATUS,C
CLRW
MOVWF MULc ; MULc=(MAP-Offset)
CLRF Mul1Hi
MOVF RCOl,W
SUBWF RqFl,W
MOVWF Mul1Lo ; MULp=(RqF-RCO)
BTFSS STATUS,C ; проверяем CARRY
DECF Mul1Hi,F
MOVF RCOh,W
SUBWF RqFh,W
ADDWF Mul1Hi,F ; MULp=(RqF-RCO)
CALL MUL16_8 ; Умножение 16х8
MOVF Mul1Hi,W
ADDWF RCOl,W
MOVWF T_INJ_L
BTFSC STATUS,C ; проверяем CARRY
INCF ResHi,F
MOVF ResHi,W
ADDWF RCOh,W
MOVWF T_INJ_H
|
Корректируем смесь в зависимости от оборотов двигателя, (см. выше, вычисленный коэфф) здесь только обогащение согласно заранее расчитанному коэфф.
Цитата:
; Корректировка смеси в зависимости от оборотов
movab SPD_ENR,MULc
movab T_INJ_L,Mul1Lo
movab T_INJ_H,Mul1Hi
CALL MUL16_8 ; Умножение 16х8
; RLF Mul1Lo,W
; RLF Mul1Hi,W
MOVF Mul1Hi,W
MOVWF T_INJ_L
; RLF ResHi,W
MOVF ResHi,W
MOVWF T_INJ_H
|
проверяем флаг прогрева и выполняем обогащение на прогрев по заранее уже рассчитанному коэфф
Цитата:
BTFSS STAT,1 ; Проверка флага прогрева двигателя
GOTO ACCL
Warm_Enr RRF WARM_ENR,F
BSF WARM_ENR,7
movab WARM_ENR,MULc
movab T_INJ_L,Mul1Lo
movab T_INJ_H,Mul1Hi
CALL MUL16_8 ; Умножение 16х8
RLF Mul1Lo,W
RLF Mul1Hi,W
MOVWF T_INJ_L
RLF ResHi,W
MOVWF T_INJ_H
|
Обогащаем смесь по УН по заранее уже расчитанному коэфф, сначала проверяем флаги наличия обогащения или обеднения:
Цитата:
; Програмный модуль вычисления обогащения
ACCL BTFSC STAT,7
GOTO $+5
BTFSS STAT,3
BTFSC STAT,4
GOTO $+2
GOTO EXT2
movab D_TPS,MULc
movab T_INJ_L,Mul1Lo
movab T_INJ_H,Mul1Hi
CALL MUL16_8 ; Умножение 16х8
RLF Mul1Lo,W
RLF Mul1Hi,W
MOVWF T_INJ_L
RLF ResHi,W
MOVWF T_INJ_H
|
|