Secondary Air Injection

A1C calibration can be modified and configured to operate all EFI-SD4x ECUs in 4 cylinder, 6 cylinder and 8 cylinder configurations.
efloth
Posts: 274
Joined: 2021 Feb 15, 22:12
Location: Sacramento CA
Vehicle Information: 1991 F150 4.9L J1X 80lb Injectors E85
1995 F150 5.8L MOB1

Secondary Air Injection

Unread post by efloth »

Is anyone aware of any functions that exist for Smog Pumps? I recently hooked up my air injection system as am due for inspection. It made a noticeable difference in off idle behavior. I'm curious about breaking out any functions that may exist. Is there anything documented?
wwhite
Posts: 313
Joined: 2021 Feb 16, 15:53
Location: Victoria, BC, Canada
Vehicle Information: 1994 Flarside, XLT, 351w E4OD
SD48b, Quarter Horse, Burn2

Re: Secondary Air Injection

Unread post by wwhite »

Documented:
THERMACTOR AIR STRATEGY

Thermactor air refers to air added to the exhaust gas mixture from the
belt-driven thermactor air pump.

The computer controls two solenoids to create three mutually exclusive air
states:

Thermactor Air State AM1 Solenoid AM2 Solenoid

Upstream on on
Downstream on off
Bypass off off
Nothing for the smog pump itself, it's always pumping, I believe.

Can enable/disable with THRMHP

The only function(fox) I see is:

Code: Select all

FNTP_AIR_OFF (N_RPM) := TP_REL at which to dump air below.
b656: ff,ff,00,00         func  65535,     0
b65a: 00,00,00,00         func      0,     0
b65e: 00,00,00,00         func      0,     0
b662: 00,00,00,00         func      0,     0
b666: 00,00,00,00         func      0,     0
b66a: 00,00,00,00         func      0,     0
b66e: 00,00,00,00         func      0,     0
b672: 00,00,00,00         func      0,     0
b676: 00,00,00,00         func      0,     0
different bin I have.

I would have to guess that the air pump is putting a little extra load on the engine, could by why you feel off idle behavior.

Here's my strategy:

Code: Select all

   THERMACTOR_AIR_STRATEGY:
6de0: b3,f6,4a,38         ldb   R38,[Rf6+4a]     R38 = CTBYS;                      # Minimum coolant temperature to bypass thermactor air, deg F.
6de4: 98,38,b6            cmpb  Rb6,R38          
6de7: da,05               jle   6dee             if (ECT > R38)  {
6de9: 91,20,a4            orb   Ra4,20           TAQ1 = 1;
6dec: 20,0c               sjmp  6dfa             goto 6dfa; }

6dee: 7b,f6,4b,38         sb2b  R38,[Rf6+4b]     R38 -= CTBYSH;                    # CTBYS - CTBYSH = Hysteresis term for CTBYS, deg F.
6df2: 98,38,b6            cmpb  Rb6,R38          
6df5: d6,03               jge   6dfa             if (ECT < R38)  {
6df7: 71,df,a4            an2b  Ra4,df           TAQ1 = 0; }
6dfa: ef,e9,da            call  48e6             UUWFuncLU_48e6 (
6dfd: 14,42                     #arg 1              FNTP_AIR_OFF,
6dff: b4,00                     #arg 2              N_RPM );
6e01: 88,00,38            cmpw  R38,R0           
6e04: df,10               je    6e16             if (R38 != 0)  {
6e06: 47,f5,90,00,38,36   ad3w  R36,R38,[Rf4+90] R36 = R38 + TP_AIR_OFF_H;
6e0c: d3,03               jnc   6e11             if (R36 > ffff)  {
6e0e: bd,ff,36            ldsbw R36,ff           swR36 = ff; }
6e11: 88,bc,36            cmpw  R36,Rbc          
6e14: d9,05               jgtu  6e1b             if (R36 > TP_REL) goto 6e1b; }
6e16: 71,fb,d6            an2b  Rd6,fb           TP_AIR_OFF_F = 0;                 # (allow air)
6e19: 20,08               sjmp  6e23             goto 6e23; }

6e1b: 88,bc,38            cmpw  R38,Rbc          
6e1e: d1,03               jleu  6e23             if (R38 > TP_REL)  {
6e20: 91,04,d6            orb   Rd6,4            TP_AIR_OFF_F = 1; }               # (dump air)
6e23: 71,fb,25            an2b  R25,fb           CHKAIR = 0;                       # (force O.L.)
6e26: 8b,ea,ae,00         cmpw  R0,[Rea+ae]      
6e2a: d7,6c               jne   6e98             if (DFSO_A_TMR = 0)  {
6e2c: 3f,a5,69            jb    B7,Ra5,6e98      if (b7_CRKFLG_a5 = 0)  {
6e2f: 51,af,a6,32         an3b  R32,Ra6,af       R32 = (B0_ETV_ERROR_a6|
                                                        B1__a6|
                                                        B2_TFMFLG_a6|
                                                        B3_MFMFLG_a6|
                                                        B5_CFMFLG_a6|
                                                        B7_AFMFLG_a6);
6e33: d7,63               jne   6e98             if (R32 = 0)  {
6e35: b3,e4,ce,30         ldb   R30,[Re4+ce]     R30 = [14e];
6e39: 9b,f6,47,30         cmpb  R30,[Rf6+47]     
6e3d: db,59               jc    6e98             if (R30 < [b95b])  {
6e3f: 31,27,06            jnb   B1,R27,6e48      if (B1_DFSFLG_R27 = 1)  {
6e42: 9b,f6,4c,00         cmpb  R0,[Rf6+4c]      
6e46: d7,50               jne   6e98             if ([b960] != 0) goto 6e98; }
6e48: 45,44,00,f6,30      ad3w  R30,Rf6,44       R30 = b958;
6e4d: ef,ce,db            call  4a1e             Sub_4a1e ();
6e50: d3,46               jnc   6e98             if (R42 >= [R30+2])  {
6e52: 3d,a4,43            jb    B5,Ra4,6e98      if (TAQ1 = 0)  {
6e55: b3,ee,84,42         ldb   R42,[Ree+84]     R42 = KAM_BIT_FLAGS;
6e59: 3d,42,3c            jb    B5,R42,6e98      if (B5_R42 = 0)  {
6e5c: b3,e4,d2,30         ldb   R30,[Re4+d2]     R30 = WOTTMR;
6e60: 9b,f6,41,30         cmpb  R30,[Rf6+41]     
6e64: d3,03               jnc   6e69             if (R30 >= BYPWOT)  {
6e66: 3a,a5,2f            jb    B2,Ra5,6e98      if (B2_APT_a5 = 1) goto 6e98; }
6e69: 36,25,06            jnb   B6,R25,6e72      if (B6_MPGFLG_25 = 1)  {
6e6c: 9b,f6,52,00         cmpb  R0,[Rf6+52]      
6e70: d7,26               jne   6e98             if (SW_MPD != 0) goto 6e98; }
6e72: 3a,d6,23            jb    B2,Rd6,6e98      if (TP_AIR_OFF_F = 0)  {
6e75: 9b,f4,5f,00         cmpb  R0,[Rf4+5f]      
6e79: df,03               je    6e7e             if (T75LSW != 0)  {
6e7b: 32,9f,1a            jnb   B2,R9f,6e98      if (B2_OLFLG = 0) goto 6e98; }
6e7e: b3,e4,cf,30         ldb   R30,[Re4+cf]     R30 = LMBTMR;
6e82: 9b,f6,48,30         cmpb  R30,[Rf6+48]     
6e86: db,0a               jc    6e92             if (R30 < [b95c])  {
6e88: b3,e4,ca,30         ldb   R30,[Re4+ca]     R30 = [14a];
6e8c: 9b,f6,40,30         cmpb  R30,[Rf6+40]     
6e90: d7,10               jne   6ea2             if (R30 != [b954]) goto 6ea2; }
6e92: 9b,f6,49,00         cmpb  R0,[Rf6+49]      
6e96: df,03               je    6e9b             if ([b95d] = 0) goto 6e9b; } } } } } } } } } } } }
6e98: 91,04,25            orb   R25,4            CHKAIR = 1; }                     # (not forced O.L.)
6e9b: 71,bf,47            an2b  R47,bf           AM2 = 0;
6e9e: 71,fe,46            an2b  R46,fe           AM1 = 0;
6ea1: f0                  ret                    return; }                         # (bypass air)

6ea2: 45,58,00,f6,30      ad3w  R30,Rf6,58       R30 = b96c;
6ea7: 3a,8f,05            jb    B2,R8f,6eaf      if (B2_R8f = 0)  {
6eaa: 45,55,00,f6,30      ad3w  R30,Rf6,55       R30 = b969; }
6eaf: ef,6c,db            call  4a1e             Sub_4a1e ();
6eb2: d3,2b               jnc   6edf             if (R42 >= [R30+2])  {
6eb4: b3,e4,c9,30         ldb   R30,[Re4+c9]     R30 = [149];
6eb8: 9b,f6,5b,30         cmpb  R30,[Rf6+5b]     
6ebc: db,03               jc    6ec1             if (R30 < [b96f])  {
6ebe: 3a,a5,1e            jb    B2,Ra5,6edf      if (B2_APT_a5 = 1) goto 6edf; }
6ec1: 37,24,0a            jnb   B7,R24,6ece      if (B7_HUMTMR_FLG_24 = 1)  {
6ec4: b3,e4,cc,30         ldb   R30,[Re4+cc]     R30 = HMUTMR;
6ec8: 9b,f6,54,30         cmpb  R30,[Rf6+54]     
6ecc: d3,11               jnc   6edf             if (R30 < [b968]) goto 6edf; }
6ece: 9b,f6,53,00         cmpb  R0,[Rf6+53]      
6ed2: df,03               je    6ed7             if ([b967] != 0)  {
6ed4: 3a,9f,08            jb    B2,R9f,6edf      if (B2_OLFLG = 1) goto 6edf; }
6ed7: 91,04,25            orb   R25,4            CHKAIR = 1;                       # (not forced O.L.)
6eda: 71,bf,47            an2b  R47,bf           AM2 = 0;                          # (downstream air)
6edd: 20,03               sjmp  6ee2             goto 6ee2; } } } }

6edf: 91,40,47            orb   R47,40           AM2 = 1;                          # (upstream air)
6ee2: 91,01,46            orb   R46,1            AM1 = 1;
6ee5: f0                  ret                    return;
Comments might be off, haven't looked at this for a while.
wwhite
Posts: 313
Joined: 2021 Feb 16, 15:53
Location: Victoria, BC, Canada
Vehicle Information: 1994 Flarside, XLT, 351w E4OD
SD48b, Quarter Horse, Burn2

Re: Secondary Air Injection

Unread post by wwhite »

wwhite wrote: 2021 Oct 26, 14:12 I would have to guess that the air pump is putting a little extra load on the engine, could by why you feel off idle behavior.
Or is the air pump helping push exhaust out?
red5.0fogger
Posts: 148
Joined: 2021 Mar 22, 15:58
Location: Newington CT
Vehicle Information: 1986 Mustang GT, Stock block, TFS 170 Heads , N41 cam, ported cobra intake, nitrous, T5 , 3.73s

Re: Secondary Air Injection

Unread post by red5.0fogger »

The pump adds extra air so the catalyst can reburn any fuel residue left after combustion. I'm sure it's more technical than that but that's a simplified explanation.

You could have vacuum leaks at the actuators. Leaks at air pump valves or the hoses.
efloth
Posts: 274
Joined: 2021 Feb 15, 22:12
Location: Sacramento CA
Vehicle Information: 1991 F150 4.9L J1X 80lb Injectors E85
1995 F150 5.8L MOB1

Re: Secondary Air Injection

Unread post by efloth »

This is great information, thanks!

I found the sub in my bin just trying to discern if the target lambda is modified to account for the extra air when injected upstream. Looking at the code you posted do you know what Sub_4a1e is?
wwhite
Posts: 313
Joined: 2021 Feb 16, 15:53
Location: Victoria, BC, Canada
Vehicle Information: 1994 Flarside, XLT, 351w E4OD
SD48b, Quarter Horse, Burn2

Re: Secondary Air Injection

Unread post by wwhite »

Sub_4a1e checks for engine coolant temperature at startup, hot start minimum and cold start maximum.

I would have to assume no, the target lambda is not modified when extra air is injected upstream.
Upstream refers to air added at or near the exhaust ports. This is done to
provide better oxidation of the exhaust gas mixture when a richer exhaust gas
mixture is anticipated. It is not possible to operate in closed loop fuel
control while air is introduced upstream (the EGO sensor may always indicate
a lean condition).
Post Reply