By merchgod at http://www.romraider.com/forum/viewtopic.php?t=1603
This seems to be a confusing area to a lot of shadetree tuners and I have yet to see a decent explanation on-line, so I’d figured I would detail what I know about the CL\OL process. This explanation is for the 16bit ecus (02 usdm wrx), but the general process applies to all roms with some slight differences.
‘Closed Loop Delays’
Consists of 16 individual values:
- Half the values ( 8 ) are for automatic transmissions
- The other half ( 8 ) are for manual transmissions.
So, let’s say we have an MT:
- Half of those values (4) are for lower atmospheric pressures (<13.38 psi) and the other half (4) for higher atmospheric pressures (>13.38 psi). The atmospheric pressure threshold is determined by the first value in the ‘Closed Loop Atmospheric Pressure’ table for MTs.
So, essentially, the ecu is only dealing with 4 of the 16 values. When this part of the code is executed, only one value is chosen for the delay. Which one of the 4 depends on how long since the engine was started. A counter counts off about 1 per second. Starting at the first value, every 2 minutes or so, it skips to the next value until it uses the last (4th) value from then on.
‘Closed Loop Throttle (Primary)’ and ‘Closed Loop Calculated Load’
If the current delay is not zero, these tables will be used to determine the closed loop to open loop transition (and vice versa). If either (or both) table’s thresholds are exceeded, then a counter begins from zero. When this counter’s value exceeds the closed loop delay, then fueling will switch to open loop (depending on the fuel map enrichment value - see below). Obviously, the higher the delay value, the longer it will take to switch to open loop. When TPS and load are both below the table’s thresholds (hysteresis) then the counter is reset to zero and you enter closed loop. So, you can briefly exceed the thresholds in either table and if the delay is high enough, you might not switch to open loop (the counter would be reset to zero).
However, if the current delay is zero, these tables are effectively disabled and not used.
Other misc. tables
The following tables only have one function. When the table’s high value is exceeded, closed loop delay becomes zero. When below the table’s low value, the next of these tables is checked. However, for the coolant temp threshold, if below → CL delay is zero, if above it checks next table. If the rest are all below the low threshold, then the closed loop delay value will be determined as stated above in the first section:
- ‘Closed Loop Coolant Temp’
-‘ Closed Loop RPM’
- ‘Closed Loop Vehicle Speed’
- ‘Closed Loop EGT’
- ‘Closed Loop Throttle Maximum (MT)’ - some roms have 4 values for this table. Which is chosen is based on the counter that starts on engine start.
The ATs have slightly different logic.
What happens when the closed loop delay is zero? Are you always in open loop?
When the delay is zero, the ‘Closed Loop Throttle (Primary)’ and ‘Closed Loop Cal Load’ tables are not used. From what I can tell, it appears that the ecu will check your fuel enrichment value as determined by the ‘Open Loop Fueling’ map. If it calls for no enrichment, then it will stay in closed loop regardless of the zero delay and therefore continue to use feedback from the o2 sensor for correction. However, there is a minimum enrichment value regardless of your fuel map. If below this limit, enrichment will be set to zero and you’ll remain in closed loop (anything leaner than the equivalent of a 14.5 AFR to no enrichment). There appears to be other triggers to remain in CL besides the enrichment value but I haven’t fleshed these parts out yet. From logging, it seems to be consistently based on the enrichment value when delay is zero. So, essentially, if you set your closed loop delay table to all zero’s, the transition from closed loop to open loop and back again will essentially be determined by your fuel map.