View Single Post
Old 09-09-2010, 10:07 PM   #37 (permalink)
Olympiadis
oldschool
 
Olympiadis's Avatar
 
Join Date: May 2010
Location: Illinois
Posts: 184

White2003Focus - '03 Ford Focus SE 4-door sedan
Team Ford
90 day: 38.53 mpg (US)

White2001S10pickup - '01 Chevy S10 extended cab LR
Last 3: 24.51 mpg (US)

1989DodgeOMNI - '89 Dodge Omni
Last 3: 30.38 mpg (US)

1991ChevyC1500pickup - '91 Chevy C1500
Last 3: 24.03 mpg (US)

White1986Irocz - '86 Chevy Irocz LB9
Last 3: 30.14 mpg (US)

1999 C5 Corvette - '99 Chevy Corvette

2008 Infinity G37 - '08 Infinity G37
Thanks: 21
Thanked 35 Times in 25 Posts
DFCO strategy

This is about 95% of the calibration and algorithm concerning DFCO in one particular ECM.


Quote:
;---------------------------------------------
; DFCO DECELERATION FUEL CUT-OFF 4 LINE TABLE
;---------------------------------------------
LD2E3 FCB 56 ; 1400 RPM, FUEL CUT-OFF, UPPER LIMIT 2500
LD2E4 FCB 40 ; 1000 RPM, FUEL CUT-OFF, LOWER LIMIT 1200
LD2E5 FCB 18 ; 18 MPH, FUEL CUT-OFF, UPPER LIMIT
LD2E6 FCB 15 ; 15 MPH, FUEL CUT-OFF, LOWER LIMIT
LD2E7 FCB 8 ; 22.5 Kpa, S/D MAP DECEL FUEL Cut-Off Thresh, Lower ((X * 0.3125)+20)
LD2E8 FCB 64 ; 40.0 Kpa, S/D MAP DECEL FUEL Cut-Off Thresh, Upper ((X * 0.3125)+20)
LD2E9 FCB 255 ; 3188 RPM/12.5, RPM DIFF DECREMENT (decel rate) THRESH To disable DFCO
LD2EA FCB 255 ; 79.7 Kpa, S/D MAP DIFF INCREMENT THRESH to disable DFCO (X * 0.3125)
LD2EB FDB 0464 ; 7.07 msec, Fuel PW IF EXITING DFCO BY RPM, OR Park/Neut PW * 65.536
LD2ED FCB 160 ; 2 sec REQ FOR DFCO
LD2EE FCB 32 ; 400 Msec AFTER DFCO FOR BPW
LD2EF FCB 240 ; 3 secs MIN TIME BETWEEN DFCO (Sec * 80)
LD2F0 FCB 14 ; 5% MAX TPS FOR DECEL FUEL Cut Off
LD2F1 FCB 96 ; 0.375 MULTIPLIER FOR BPW IN DFCO EVERY 12.5 msec LOOP (sub'd, not mult)
LD2F2 FCB 128 ; 75c/167f, LINEAR COOLANT THRESHOLD TO DISABLE DFCO

__________________________________________


LD5D3 FDB 40 ; 40 Steps, ADDED TO IAC WHEN DFCO IN EFFECT (single byte)

__________________________________________


D87A: LD87A LDAA L0021 ; GET LINEAR COOLANT
D87C: CMPA LD2F2 ; COMPARE A TO (75c/167f, DISABLE DFCO BELOW COOLANT THRESHOLD)
D87F: BCC LD884 ; IF COOLANT GT THRESH, BRANCH TO $D884 (DO DFCO CHECKS)
D881: JMP LD946 ; JUMP TO $D946 (TURN DFCO OFF)
;---------------------------------
D884: LD884 LDAA L000F ; GET STATUS, b4=1= (IN PARK/NEUT)
D886: BITA #$10 ; TEST b4 (IN PARK/NEUT?)
D888: BNE LD8B5 ; IF b4 BRANCH TO $D8B5 (EXIT FUEL DFCO ROUTINE)
D88A: LDAB L0009 ; GET STATUS WORD
D88C: BITB #$24 ; TEST b5,b2
D88E: BNE LD89F ; IF b5,b2 BRANCH TO $D89F
D890: LDAA L0049 ; GET CURRENT TPS
D892: CMPA LD2F0 ; COMPARE TO 5% MAX TPS FOR DECEL FUEL Cut Off
D895: BCS LD89F ; IF TPS LT 5% BRANCH TO $D89F (SKIP DFCO UPDATE)
D897: LDAA L0003 ; GET STATUS WORD FOR DFCO
D899: ORAA #$10 ; SET b4, IN FUEL DFCO
D89B: STAA L0003 ; UPDATE STATUS WORD FOR DFCO
D89D: BRA LD8CB ; BRANCH ALWAYS TO $D8CB
;---------------------------------
D89F: LD89F LDAA L0020 ; GET OLD RPM/12.5
D8A1: SUBA L001F ; SUBTRACT FILTERED RPM/12.5 (OLD - CURRENT FILTERED)
D8A3: BCS LD8AA ; IF RPM INCREASING, BRANCH TO $D8AA
D8A5: CMPA LD2E9 ; COMPARE TO RPM/12.5, 3188 RPM DIFF To disable DFCO (Decel rate)
D8A8: BHI LD8B5 ; IF DIFF RPM GT CALIBRATION, BRANCH TO $D8B5 (EXIT DFCO ROUTINE)
D8AA: LD8AA BITB #$48 ; TEST b6 & b3, L0009
D8AC: BNE LD8E2 ; IF b6,b3, BRANCH TO $D8E2
D8AE: LDAA L0032 ; GET DIFF MAP (S/D MAP)
D8B0: CMPA LD2EA ; COMPARE TO 100 kpa MAP INCREASE TO DISABLE DFCO
D8B3: BLS LD8D0 ; IF MAP INCREASE LT THRESH TO DISABLE, BRANCH TO $D8D0 (CONTINUE DFCO CHECKS)
;=================================================
; HERE TO EXIT DECEL FUEL CUT/0FF (DFCO)
;=================================================
D8B5: LD8B5 LDAA L00A0 ; GET POST DFCO TIMER
D8B7: BEQ LD8CB ; BRANCH IF TIMER = 0
D8B9: LDD L0096 ; GET BPW, ASYN
D8BB: ADDD LD2EB ; ADD FUEL PULSE WHEN EXITING DFCO, 7.07 Msec BY RPM < OR Park/Neut
D8BE: BCC LD8C3 ; BRANCH IF NO OVERFLOW
D8C0: LDD #$7FFF ; GET USE MAX VALUE
D8C3: LD8C3 STD L0096 ; UPDATE BPW, ASYN
D8C5: LDAA L000D ; GET STATUS WORD
D8C7: ORAA #$80 ; SET b7
D8C9: STAA L000D ; UPDATE STATUS WORD
D8CB: LD8CB CLR L00A0 ; CLEAR POST DFCO TIMER
D8CE: BRA LD937 ; BRANCH ALWAYS TO $D937
;---------------------------------
D8D0: LD8D0 LDAA L0026 ; GET S/D MAP
D8D2: LDAB L0008 ; GET STATUS WORD FOR DFCO
D8D4: CMPA LD2E7 ; COMPARE MAP TO DFCO MAP Thresh, Lower, 22.5 Kpa
D8D7: BCS LD8E2 ; IF S/D MAP LT DFCO MAP THRESH LOWER, BRANCH TO $LD8E2 (DO OTHER CHECKS)
D8D9: BITB #08 ; TEST b3, (IN DFCO ALREADY?)
D8DB: BEQ LD937 ; IF NOT b3, BRANCH TO $LD937 (TURN DFCO OFF)
D8DD: CMPA LD2E8 ; COMPARE MAP TO DFCO MAP Thresh, Upper, 45 Kpa
D8E0: BCC LD937 ; IF MAP GT DFCO MAP THRESH UPPER, BRANCH TO $LD937 (TURN DFCO OFF)
;=================================================
; Limits for FUEL CUT-OFF In decel (DFCO)
; 1000/1400 RPM 4-LINE TABLE 15/18 MPH
;=================================================
D8E2: LD8E2 LDX #$D2E3 ; POINT TO 4 LINE TABLE DFCO PARAMS
D8E5: LDAB L0008 ; GET STATUS WORD
D8E7: BITB #$08 ; TEST BIT 3 (IN DFCO ALREADY?)
D8E9: BEQ LD8EC ; IF NOT B3, BANCH TO $LD8EC (NO DFCO, CHECK RPM LIMIT UPPER)
D8EB: INX ; INCREMENT REGISTER X BY ONE (IN DFCO, CHECK RPM LIMIT LOWER)
D8EC: LD8EC LDAA L001C ; GET RPM/25
D8EE: CMPA 0,X ; COMPARE RPM TO 1000/1400 RPM HYSTERESIS
D8F0: BLS LD8B5 ; IF RPM LT 1000/1400 LIMIT, (EXIT DFCO)
D8F2: LDAA L0034 ; GET FILTERED VSS MPH/1
D8F4: CMPA 2,X ; COMPARE TO 15/18 MPH
D8F6: BCS LD8B5 ; IF MPH LT 15/18 MPH, (EXIT DFCO)
;=================================================
; CHECK DECEL FUEL CUT/OFF TIMER (DFCO)
;=================================================
D8F8: LDAA L00A1 ; GET DFCO TIMER
D8FA: BNE LD934 ; IF NOT TIMED OUT, BRANCH TO $D934 (DECREMENT TIMER, TURN DFCO OFF)
D8FC: LDAB LD2EF ; GET CALIB 3 Secs MIN BETWEEN DFCO
D8FF: LDAA L0003 ; GET STATUS WORD
D901: BITA #$10 ; TEST b4, (IN FUEL DFCO?)
D903: BEQ LD90B ; IF NOT b4, BRANCH TO $D90B
D905: ANDA #$EF ; CLEAR b4
D907: STAA L0003 ; UPDATE STATUS WORD
D909: STAB L009F ; UPDATE BETWEEN DECEL FUEL C/0 TIMER
D90B: LD90B CMPB L009F ; COMPARE TO BETWEEN DECEL FUEL C/0 TIMER
D90D: BLS LD914 ; IF LOWER OR SAME, BRANCH TO $D914
D90F: INC L009F ; INCREASE DECEL FUEL C/0 TIMER
D912: BRA LD946 ; BRANCH ALWAYS TO $D946 (TURN DFCO OFF)
;---------------------------------
D914: LD914 LDAB L0008 ; GET STATUS WORD
D916: ORAB #8 ; SET b3,
D918: STAB L0008 ; UPDATE STATUS WORD
D91A: LDAA LD2EE ; GET CALIBRATION, 400msec AFTER DFCO FOR BPW
D91D: STAA L00A0 ; UPDATE POST DFCO TIMER (AFTER DFCO TIL PW)
D91F: LDAA L000D ; GET STATUS WORD
D921: ORAA #$10 ; SET b4, (DECEL ENLEANMENT IN EFFECT)
D923: STAA L000D ; UPDATE STATUS WORD
D925: LDAA L009E ; GET DECEL FUEL MULTIPLIER
D927: SUBA LD2F1 ; SUBTRACT ( A - CALIBRATION, 10.2% MULT FOR BPW IN DFCO)
D92A: BCC LD92D ; IF DECEL FUEL MULT GT CALIBRATION, BRANCH TO $D92D (DO NOT RESET MULT)
D92C: CLRA ; CLEAR A REGISTER (RESET DECEL MULTIPLIER TO ZERO)
D92D: LD92D STAA L009E ; UPDATE DECEL FUEL MULTIPLIER
D92F: JSR LD839 ; GOSUB $D839 (POINT TO BPW SYNC, AND DO CALC)
;---------------------------------
D932: BRA LD9A4 ; BRANCH ALWAYS TO $D9A4
D934: LD934 DECA ; DECREMENT DECEL FUEL TIMER
D935: BRA LD93A ; BRANCH ALWAYS TO $D93A
;---------------------------------
D937: LD937 LDAA LD2ED ; GET 2 Sec REQ FOR DFCO
D93A: LD93A STAA L00A1 ; DECEL FUEL CUT/OFF TIMER
D93C: CLR L009F ; CLEAR BETWEEN DECEL FUEL CUT/OFF TIMER
D93F: LDAA L00A0 ; GET POST DFCO TIMER
D941: BEQ LD946 ; IF TIMED OUT, BRANCH TO $D946 (SKIP DECREASE POST DFCO TIMER)
D943: DEC L00A0 ; DECREASE POST DFCO TIMER
D946: LD946 LDAA L0008 ; GET STATUS WORD
D948: ANDA #$F7 ; CLEAR b3 (TURN DFCO OFF)
D94A: STAA L0008 ; UPDATE STATUS WORD
D94C: LDAA #255 ; LOAD A REGISTER WITH MAX VALUE (255)
D94E: STAA L009E ; UPDATE DECEL FUEL MULTIPLIER
D950: LDD L004D ; GET FILTERED TPS (TWO BYTES) INTO D
D952: ASLB ; REGISTER Bx2
D953: ADCA #0 ; REGISTER A ROUND OFF
D955: BCC LD958 ; IF NO OVERFLOW, BRANCH TO $D958
D957: DECA ; DECREMENT A REGISTER
D958: LD958 SUBA L0049 ; SUBTRACT (A FILTERED TPS - CURRENT TPS)
D95A: BCS LD99E ; IF A LT CURRENT TPS, BRANCH TO $D99E (TPS INCREASING, TURN DECEL OFF)
D95C: CMPA LD2E0 ; COMPARE DIFF TPS TO 1% TPS, DECEL ENLEAN INCREMENT THRESH
D95F: BLS LD99E ; IF DIFF TPS LT 1% DECEL THRESH, BR TO $D99E(NOT DECREASING ENOUGH FOR DECEL)
D961: LDD L002F ; GET FILTERED MAP (TWO BYTES) INTO D
D963: ASLB ; REGISTER Bx2
D964: ADCA #0 ; REGISTER A ROUND
D966: BCC LD969 ; IF NO OVERFLOW, BRANCH TO $D969 (DON'T DECREMENT A)
D968: DECA ; DECREMENT A REGISTER
D969: LD969 SUBA L0026 ; SUBTRACT (A, FILTERED MAP - CURRENT S/D MAP)
D96B: BCS LD99E ; IF A LT S/D MAP, BRANCH TO $D99E (MAP INCREASING, TURN DECEL OFF)
D96D: CMPA LD2E1 ; COMPARE DIFF MAP TO 2.5 Kpa S/D MAP DIFF DECREMENT THRESH FOR DECEL ENLEAN
D970: BLS LD99E ; IF DIFF LT 2.5 THRESH, BRANCH TO $D99E (NOT DECREASING ENOUGH FOR DECEL)
D972: LDAB LD2E2 ; GET 0.375 ENLEAN MAP FACTOR (Mult .375 * DIFF MAP for calc)
D975: MUL ; MULTIPLY A x B = D
D976: LDAB L009D ; GET DECEL COOLANT FACTOR
D978: MUL ; MULTIPLY A x B = D
D979: ASLD ; REGISTER Dx2
D97A: BCS LD982 ; IF OVERFLOW, BRANCH TO $D982
D97C: ASLD ; REGISTER Dx2
D97D: BCS LD982 ; IF OVERFLOW, BRANCH TO $D982
D97F: ASLD ; REGISTER Dx2
D980: BCC LD984 ; IF NO OVERFLOW, BRANCH TO $D984 (DON'T USE MAX VALUE)
D982: LD982 LDAA #255 ; USE MAX VALUE
D984: LD984 NEGA ; INVERT
D985: BEQ LD99E ; IF ZERO, BRANCH TO $D99E (TURN DECEL ENLEAN OFF)
D987: LDAB L000D ; GET STATUS WORD
D989: ORAB #$10 ; SET b4, (TURN ON DECEL ENLEAN)
D98B: STAB L000D ; UPDATE STATUS WORD
D98D: STAA L0058 ; UPDATE PROP DURATION, Secs
D98F: LDX #L0096 ; POINT TO L0096 & L0097 BPW, ASYNC
D992: JSR LFBB9 ; GOSUB $FBB9 (FUEL OUT ROUTINE)
;------------------------------------
D995: STD L0096 ; UPDATE L0096 & L0097, BPW, ASYNC
D997: LDAA L0058 ; GET PROP DURATION, SECs
D999: JSR LD839 ; GOSUB $D839 (POINT TO BPW SYNC, AND DO CALC)
;------------------------------------
D99C: BRA LD9A7 ; BRANCH ALWAYS TO $D9A7
;------------------------------------
D99E: LD99E LDAA L000D ; GET STATUS WORD
D9A0: ANDA #$EF ; CLEAR b4 (TURN DECEL ENLEAN OFF)
D9A2: STAA L000D ; UPDATE STATUS WORD
D9A4: LD9A4 LDX #L00AB ; GET L00AB & L00AC BPW, SYNC INTO X
D9A7: LD9A7 LDAA L00B2 ; GET BATTERY COMPENSATION MULTIPLIER INTO A
D9A9: JSR LFBB9 ; GOSUB $FBB9 (FUEL OUT ROUTINE)
;------------------------------------
__________________
#####################################
  Reply With Quote