Upstream O2 or A/F sensor biased lean
The upstream O2 or A/F sensor reports leaner than the gas it sits in. The module adds the same share of fuel in every cell, the engine runs rich, and the unbiased downstream sensor sits rich to say so. No misfire counts.
Fingerprint
Trims positive by about the same amount in every cell Must be present
Rule: Every closed loop total trim at least +5 percent, with no more than 3 points between them.
The sensor reports leaner than the gas it sits in by the same share at every load, so the module adds the same share everywhere.
Downstream sensor sits rich in closed loop Must be present
Rule: Downstream sensor at least 0.78 V at idle and at cruise.
The engine is really running rich, and the downstream sensor, which is not biased, says so.
Only one bank is affected Supports it on a V engine
Rule: On a dual bank engine, the two banks' total trims differ by at least 5 points in some cell.
Only the bank with the biased sensor is being corrected.
Misfire counts on one cylinder Must be absent
Rule: At least 20 misfires per 1,000 revolutions on one cylinder in some cell.
It belongs to a neighbouring fault.
Why the numbers move
Closed loop drives the upstream reading to stoichiometry. If the sensor reports a fixed share leaner than the truth, the module adds that share of fuel everywhere, so the trims are positive and flat across the cells. With the sensor satisfied, the upstream reading itself looks perfect, which is why the upstream sensor alone never finds this fault.
The engine is really rich by that share, and the downstream sensor, which is not biased, sits at a rich voltage in every closed loop cell. A misfire also puts the trims up with a rich downstream sensor, but it leaves counts on its cylinder.
The reference numbers
Computed by the model at build time: the fault at its clean reference size on a 3.5 l v6, dual bank, wideband air fuel sensors, with no noise. The fault sits on bank 2; bank 1 is healthy.
| Reading | Idle | 2,500 rpm, no load | Cruise | WOT snapshot |
|---|---|---|---|---|
| Total trim bank 1 (%) | 0.0 | 0.0 | 0.0 | open loop |
| Total trim bank 2 (%) | +7.0 | +7.0 | +7.0 | open loop |
| Airflow check (%) | 100 | 99 | 99 | 100 |
| MAF (g/s) | 4.59 | 12.72 | 19.10 | 146.81 |
| MAP (kPa) | 30.0 | 21.0 | 38.0 | 97.0 |
| Upstream B1S1 | lambda 1.00 | lambda 1.00 | lambda 1.00 | lambda 0.85 |
| Upstream B2S1 | lambda 1.00 | lambda 1.00 | lambda 1.00 | lambda 0.86 |
| Downstream B1S2 (V) | 0.66 | 0.66 | 0.66 | 0.90 |
| Downstream B2S2 (V) | 0.90 | 0.90 | 0.90 | 0.90 |
| ECT (C) | 90 | 90 | 90 | 90 |
| Misfire per 1,000 revs | 0 | 0 | 0 | 0 |
Easy to confuse with
- Single cylinder misfire. Both put the trims up with the downstream sensor rich. The misfire counter splits them: a misfire names its cylinder, a biased sensor leaves the counter at zero.
- Exhaust leak upstream of the upstream sensor. Both fool the upstream sensor into reading lean. A bias is the same share at every load and the downstream sensor sits rich; an exhaust leak fades as airflow rises and the downstream sensor sees the mixed gas at stoichiometry.
On a real car
- Compare the upstream sensor against the downstream sensor and against a known good reference, such as an exhaust gas analyser.
- Check the sensor's heater and wiring for a bias in the signal circuit.
TrimCase is a training aid built on a simulated engine model. It is not a diagnostic instruction for any real vehicle. Follow the service information for the vehicle in front of you.
Where the model is simpler than an engine
The model has no downstream fuel trim. Many control strategies use the downstream sensor to correct an upstream bias, which would make the trims smaller than shown here.
The full model is on how the model works.
An example case
Case C-ES-5, clean tier. Open it in projection mode.
Case C-ES-5
- Engine
- 3.5 L V6, dual bank, wideband air fuel sensors
- Customer says
- Failed an emissions inspection
- Check engine light
- Off
- Tier
- Single fault, clean
Warm engine, sea level, 100 kPa barometric pressure. Simulated data for training, not from a real vehicle.
Freeze frame
No code stored. Snapshot saved by the technician at warm idle.
- Codes
- None stored
- Captured at
- Idle
- Engine speed
- 634 rpm
- Vehicle speed
- 0 mph
- Calculated load
- 20.5 %
- MAP
- 30.0 kPa
- MAF
- 4.43 g/s
- ECT
- 90 C / 194 F
- IAT
- 39 C / 102 F
- Fuel system
- Closed loop
- STFT / LTFT bank 1
- +0.8 % / 0.0 %
- STFT / LTFT bank 2
- +0.7 % / +7.0 %
Live data by load cell
| PID | Idle | 2,500 rpm, no load | Cruise | WOT snapshot |
|---|---|---|---|---|
| Engine speed (rpm) | 634 | 2495 | 1807 | 5006 |
| Vehicle speed (mph) | 0 | 0 | 60 | 45 |
| MAP (kPa) | 30.0 | 20.8 | 38.0 | 97.0 |
| MAF (g/s) | 4.43 | 12.48 | 19.11 | 148.22 |
| Airflow check, MAF as % of speed density estimate (%) worked out | 99 | 99 | 99 | 101 |
| Calculated load (%) | 20.5 | 14.7 | 31.0 | 86.9 |
| IAT | 39 C / 102 F | 35 C / 95 F | 31 C / 88 F | 28 C / 82 F |
| ECT | 90 C / 194 F | 91 C / 196 F | 90 C / 194 F | 90 C / 194 F |
| Fuel system | Closed loop | Closed loop | Closed loop | Open loop |
| STFT bank 1 (%) | +0.8 | 0.0 | 0.0 | 0.0 |
| LTFT bank 1 (%) | 0.0 | 0.0 | 0.0 | 0.0 |
| Total trim bank 1 (%) worked out | +0.8 | 0.0 | 0.0 | 0.0 |
| STFT bank 2 (%) | +0.7 | +1.3 | +1.4 | 0.0 |
| LTFT bank 2 (%) | +7.0 | +7.0 | +7.0 | +7.0 |
| Total trim bank 2 (%) worked out | +7.7 | +8.3 | +8.4 | +7.0 |
| A/F sensor B1S1 | lambda 1.00 | lambda 1.01 | lambda 1.00 | lambda 0.85 |
| A/F sensor B2S1 | lambda 1.01 | lambda 0.99 | lambda 1.00 | lambda 0.85 |
| O2 sensor B1S2 (V) | 0.67 | 0.65 | 0.66 | 0.90 |
| O2 sensor B2S2 (V) | 0.90 | 0.89 | 0.92 | 0.90 |
| Injector pulse bank 1 (ms) | 4.38 | 3.27 | 6.26 | 19.39 |
| Injector pulse bank 2 (ms) | 4.67 | 3.48 | 6.71 | 20.71 |
| EVAP purge command (%) | 0 | 20 | 35 | 0 |
| Misfire count per 1,000 revs | 0 | 0 | 0 | 0 |
Rows marked worked out are arithmetic on the rows above them, done for you: total trim is STFT plus LTFT, and the airflow check divides the MAF by the speed density estimate on the model page.