O2 sensor voltage range is .10-.90volts, O2 sensors only read Oxygen levels not fuel levels
.10 means high oxygen levels, which is Lean for fuel
.90 means low oxygen levels, Rich with fuel
Upstream O2 sensor(s) get raw exhaust, so if fuel mix is correct they will be .30-.70v, sweet spot is .45v
Downstream O2 sensor is after the Catalytic converter so it "sees" cleaned exhaust, it should always show lower voltage, higher oxygen levels, than upstream O2 sensor
So your reading looks OK, under .2v
Lean/Rich codes come from fuel injector "dwell time", open time, "pulse width".
Computer gets the MAF(mass air flow) sensor data for the "weight" of the air coming into the engine.
Computer then calculates the 14.7:1/air:fuel ratio based on the weight of the air(this is a weight ratio, 14.7lbs of air to 1lb of fuel)
Computer then opens the fuel injectors(based on expected fuel pressure) for a length of time that will allow the calculated amount of fuel to flow into the intake to achieve the 14.7:1 ratio.
Computer then reads upstream O2 sensor data to see if the calculation is correct(downstream O2 is used to see if Cat is working, not fuel trims)
If O2 sensors shows voltage under .45v "lean" then computer opens fuel injectors longer.
If O2 sensor shows above .45v "rich" then computer reduces the open time for fuel injectors.
Engine never actually runs lean or rich.
Fuel Trims = open time for fuel injectors
0 fuel trim is the computers calculation based on MAF sensor, air temp, throttle position, and fuel pressure(this is a fixed number, computer has no way to "know" the fuel pressure)
+1 fuel trim means computer is opening fuel injectors longer that calculated based on O2 sensor voltage
-1 fuel trim means computer is reducing the open time for fuel injectors based on O2 sensor voltage.
If fuel trims get over +20 for any length of time the computer will set a Lean code, like P0171
If fuel trims get under -20 for any length of time then Rich code is set, P0172.
Again, the engine is never running Lean or Rich, computer is adding or reducing fuel to the mix.
The code is to notify the driver that there is a problem with the calculations.
Air leaks, like a vacuum leak, means all the air going into the engine is not passing thru the MAF sensor, so computer is basing its calculations on bad data, so it needs to add more fuel because of the "extra" air coming in, and you get a Lean code.
Low fuel pressure is the same, computer expects 35psi at the fuel injectors on a 1997 engine, if fuel pressure is lower then less fuel flows in when injector is open, so Lean code is set when computer has to open injectors longer to get correct amount of fuel.
Since yours occurs at higher RPM/load I would first change the fuel filter, it could be causing fuel pressure to drop when fuel demand is high.
To test for air leaks, after engine is warmed up and idling, unplug the IAC(idle air control) Valve, idle should drop down to 500rpm, barely running, or engine may even stall, either is good it means no vacuum leak.
If idle stays high then you do have a leak.
MAF sensor uses a heated wire to calculate air flow, over the years it can get a coating on the wire(dirty air) which acts like an insulation, so air flow data is incorrect, MAF is easy to clean, and should be cleaned every 5 years or so.
Last edited by RonD; 03-28-2016 at 10:40 AM.