Oxygen sensors and lambda control

“Closed loop” refers to to the function of the system, meaning fueling is driven off of feedback from the oxygen sensor. Weather it is mathematically driven or table driven as the initial calculation for the amount of fuel needed, once we are closed loop, we are completely reliant on the data provided by the oxygen sensor for the final fueling value in the cylinder.

In many cases, idle and part throttle are where we learn the fuel trim that is applied globally.

The way we learn fuel trims is with our oxygen sensor. Commonly this is with a narrow band oxygen sensor. It does not directly measure lambda, but instead can report lean of lambda of 1, or rich of lambda of 1. Based on this, the ECU will jump back and forth across that line using feedback from the oxygen sensor. Starting from one side of that line, it adjusts an offset to base injection time to move in the opposite direction. It does so until it crosses the line, then it adjusts in the opposite direction in an effort to move across the line again. If we start rich of lambda of 1, it will trim lean until it crosses the line, at which point it will trim rich until it crosses the line again.
Clearly this is subject to the response rate of the O2 sensor. If we start out at lambda of 14.0 and start subtracting fuel, we cross the line at lambda of 14.7, but the ECU does not know this until the O2 sensor reports that it has crossed over that threshold. This can be anywhere from 15:1 to 18:1 AFR. Once it detects that it is over this line, it does the same in the “adding fuel” direction. Depending on rate of response, it can overshoot by quite a bit in that direction as well. The median of the swing range it is using it assumes is lambda of 1. This is still correct with both a narrow swing range and a wide swing range, even if the resulting drivability is poor when the system is extremely lean or extremely rich. We shoot for as narrow a range as possible as deviation from that mid point is inefficient. At cruise, we generally have a very tight/fast swing, and this is assisted by the rate of mass flow and the temperature.

If we have slow O2 response, such as added volume in the exhaust, cool exhaust temperature, inadequate O2 heater, etc we have a slower response, and thus a wider swing range.


With this hopefully how the system builds the fuel trim is more clear. Now if we look at this versus where we are in a fuel map, we can end up with sections of the map that are lean or rich from an ideal target, and how fast we go into or out of those regions will set how well the fuel trims do at correcting for this incorrect bit of the table.
If we have areas that are too far off, we can quickly get in trouble. For example, if we add fuel, say 20% to just the idle range, we can now learn a fuel trim that is -20%. We will end up exactly the same at idle within a few seconds, but now when we leave idle, we are now applying that -20% fuel correction, and if we go from idle at the staging line of a drag strip, we can now have a wide open throttle pass (which is open loop) that is 20% lean. This will also be the case in just driving around on the street, especially if we go to high throttle. Part throttle will be rich and will need to relearn the correct correction, and then when we get to idle the cycle repeats.


If you need more O2 heater control, or are using cheap sensors with weak heaters, or have excessive volume and heat loss between the cylinder head and the O2 sensor location, then you can end up with problems. If the wideband is picking this up cleanly, which is often the case as most wideband controllers have very good heater control, you may consider using a wideband with a simulated narrowband output to help keep the swing range smaller at idle and light part throttle where the stock narrowband may be outside of its ideal operating range in some applications.