WBO2 Sensor Installation

This page describes how to connect WBO2 sensor to GenBoard/VerThree


Connecting a real sensor is (almost) the last step (free-air calibration is later, of course). Otherwise a sensor can be destroyed.

therefore see GenBoard/Manual/WBSensor for the overview of steps.

most notably:

controller has been tested earlier. If you are not sure, see GenBoard/Manual/WBSensorControllerTesting

familiar with configuration on GenBoard/Manual/Config/WBoxygen

WBO connector pins:

See WideBand for LSU4 links 7057wire.gif

7057 WBO2GenBoard Name1st WBO2 Input2nd WBO2 Input
1 (Vs) black nernst_cellEC18 Pin 13EC18 Pin 1
2 xxx Rcal
3 (Heater +) greyVBATT(main relay, fused)
4 (Heater -) whiteHeater(-)EC18 Pin 18EC18 Pin 17
5 (Vs/Ip) yellowPump(-)EC18 Pin 7EC18 Pin 7
6 (Ip) redPump(+)EC18 Pin 9EC18 Pin 8

xxx: we do not use RCal. Instead calibration is achieved in software, configured with config.wbo2_calibration. This saves a pin and allows better precision, but wbo2_calibration value must be reconfigured after sensor is replaced (eg. after end-of-life, appr. 120000 km)

Note: the tape-packaged JPT (WBO2) receptacles are harder to crimp than the econoseal pins. The reason is that they need some pre-bending. We should seriously look for standalone JPT receptacles.

This page is about testing WBO2 hardware

Make sure you read GenBoard/Manual/WBSensor for overview of related steps. To complete this testing, you must have

firmware compiled with WBO2 enabled in my_make

firmware uploaded into board

configuration parameters loaded

It is a good idea to copy a member's configuration that is known to be running.

Please review GenBoard/Manual/WBSensorControllerCompleting (the same components are referred from here) and verify all parts are on board and of correct values.

Sensor Connection

It is important to understand that most of these test will be performed with the sensor not connected. The test section will instruct you to connect the sensor if it is required. See GenBoard/Manual/WBSensorConnection for details.

Enable WBO2 without engine running

(engine not running means: no inputtrigger)

You can enable WBO2 with serial command mde02: terminal "Manmde02" or PS/2 keyboard "mde02" If you are on a step that requires the sensor to be connected and don't have enough time to do all measurements, use mde00/Manmde00 to turn the sensor off and wait a while for it to cool before you restart it.

Verify heater rampump

with DVM: measure voltage between heater+ and WBO2 heater FET output (heater-). Heater+ is an alias for +11..14V power supply (VBatt).

Note that the sensor is not hooked up yet, but it's a good idea to hook up a lightbulb (eg. 12V, 5..30W) between heater+ and heater- (parallel with the DVM).

First, lightbulb is not lit and you measure 0V (note: between heater- and GND you'd measure 12V but remember you measure between heater+ and heater-).

just apply mde02 menucommand and bulb starts to light and measured voltage starts to climb to max: determined by VBatt and config.wbo2_abs_limit setting. Since the firmware cannot detect the drop of Ri, it just rails to max heater power (except that it will revert to smaller wbo2_fallback power after wbo2_limit_maxt time spent at wbo2_abs_limit - this is an attempt to save the sensor if the Ri measurement is not working because of broken nernst wire or something). You can try to put a 50 Ohm resistor between nernst1 and pump- : this should drop the heater power immediately (faking a too low Ri)

if you have a scope: measuring on heater- (to GND) you will see that signal is pulsing squarewave (0V / 14V), average value climbing (rampup). To measure anything other than constant 0V it is essential to connect a load (eg. lightbulb that act as a pullup resistor) between heater- and 14V, otherwise there is nothing to pull up the signal.

Verify 4V (pump-) voltage

The 2V (internal only) and 4V (external, pump-) reference voltages are maintained via very simple OperationalAmplifier? circuits:

Check that voltage across Pump(-) and GND is 4.00 V +/- 0.1V

If the voltage deviates by more than the specified amount:

Check the 2 inputs(pins 2&3) and output(pin 1) of the OPA that makes the pump- of the OPA closest to EC.

Check that the resistors in the voltage divider are correctly placed. If the pin3 (OPA+) of above OPA is close to 4V, these are OK. In this case check R127 (Did you miss GenBoard/Manual/WBSensorControllerCompleting ?)

If these are OK and output is still not 4V, there is significant load through R127 (measure voltage across it). Something loads the pump-, probably bad sensor connection.

10k load resistor from pump+ to pump-

The cold sensor is very high impedance. However, we use a 10kOhm parallel resistor. Check that this is in place and value is correct.

This is R132 for channel 1, R140 for channel 2

Check pump output

(Without the sensor connected) check voltage across Pump(+) and Pump(-), it should be 0.00 V +/- 0.2V. If the voltage deviates by more, adjust the config.wbo2_pump_zero_pw value (For firmware revisions older than 1.0.1 you will need to save changes with mcs, power down GenBoard than power up for the config.wbo2_zero_pw changes to take effect. Newer firmware revisions make live changes to this value.) until the difference is within 0.2 V (config.wbo2_zero_pw=65 should be a good start). Increasing wbo2_pump_zero_pw by N, the measured voltage should increase appr. N*0.2V. If the measured voltage does not change when adjusting wbo2_pump_zero_pw (remember to restart the board), it is a problem, even if voltage between Pump(+) and Pump(-) is within +-0.2V.

This test is very powerful, since it tests the pump driver circuit. This test was introduced in 2004.Septemer, all boards must pass this test before shipping, so there should not be any problem.

If there is a problem,

Check that internal 2V reference voltage (before R35; northern OPA, pin14=southwest corner pin) is 2V +/- 0.1V. This is almost same type of circuit as the 4V, except no equivalent of R127 (OPAout is connected to OPA- by an onboard trace, 0 Ohm).

Check OC3A DC (mean) voltage right after mde02 (during sensor warmup) against the internal 2V signal. +-10 mV is perfect, +-1 value change in config.wbo2_zero_pw will be about +-20mV

possible problem: symptom: measuring constant 4V on Pump(-) and 0.8V on Pump(+), regardless of wbo2_pump_pw_zero. Problem was WBO2 not enabled in my_make

Misc items to check

Do you have C86 installed (it's on the bottom of the board)? Check with scope if OC3A is really filtered. What is the peak-peak voltage of the (16usec period sharktooth-like) signal ?

Double check the R51. (510 Ohm, labelled 511).

Also, check the OPA supply. Pin4 to pin11 is appr. +8..14V.

Checking heater control

Connect sensor wires(Finally!), but only: heater- / heater+ / vs/ip / vs.

Enable the WBO2 again. As the voltage across the heater wires begins the rise, the Ri should begin to drop. You can check the Ri by running 'perl bin/ mde02' or use the LCD (currently page 7 on the 4x20). With config.wbo2_ri_target=96, Ri should drop and float to somewhere between 75 and 200. If Ri does not drop before config.wbo2_abs_limit is reached, check nernst amplifier circuit and cable connections.

it is possible to measure the nernst pulsing with 2V AC mode of a DVM. Reading should be appr. 30+-15 mV (0.040 V) when the nernst internal resistance (Ri) reaches target as approaching target temperature. The 4 Euro DVMs usually have only 200V AC, so they are not useful for this operation. But 15..40 Euro DVMs usually have 2V AC mode.

Optionally: If you have a scope, you can do this by measuring the peak-to-peak voltage on the nernst_cell signal (EC18 Pin 13 for sensor 1). Do not use a vpp function on the scope because you want to disregard some of the outlying signal (there are noise-peaks because the wire inductivity - these are neglected by the firmware, you should neglect them too). When the vpp of the major part of the signal is 20 to 80 mV that equates to 40 to 160 Ohms Ri.

After the 'mde02' heater mean voltage should start to rampup until it reaches the config.wbo2_abs_limit and then may settle as a slightly lower lower voltage. Heater mean voltage is measured between Heater(-) and Heater(+).

Below is a picture Jason took of his scope looking at the signal. You can see in the picture (at the top) that the scope measures vpp as 400 mV, but the volts/division is set to 0.05 and the signal is roughly one division, so that results in 50 mV. It's nearly impossible to take a good picture of a scope, but there is signal at the very top and bottom of that screen. That's what the scope measures for it's 400 mV. You will clearly see the majority of the signal is in one area when you have it on the screen in front of you.


Method for testing Ri measurement without real sensor

This is used before one has a real sensor or before one was confident to hook up a real sensor. Simple way of testing the Ri (acdc() output) measurement: Use a voltage divider, eg.: 100 Ohm to 4V (pump-), 200 Ohm to 5V. This is effectively a Ri=67 Ohm on a 4.33V DC

The cheat-sensor is pulsed by the 220nF and 10k from OC2 (5V, 256usec cycle, 128 low, 128 high), as a real sensor would be. This can be checked by scope and or logging (read below).

For those who want to be absolutely sure and test everything including the heater control (a bit over cautious): The ultimate method is using 2k2 NTC thermally close-wrap the NTC with a 47 Ohm 2W resistor which is connected to +12V, other end controlled (with NPN or FET) from the heater pin. This makes it possible to check the heater control as well as the Ri measurement.

LCD page7 (WBO2 page: mlp07) shows Ri:.... in hexadecimal format (implemented in lcd_wbo2_ri() function). Ri is allowed to fluctuate during operation with real LSU4 sensor, but it's supposed to be stable with a fake-Ri connected.

Method for testing nernst amplifier without real sensor

connect the pump+ signal (directly) to the nernst signal.

connect the nernst signal via a 75..100 ohm resistor to the pump-

Enable wbo2 (mde02, wait). By increasing nernst_dc_target, the measured nernst voltage should increase too, appr. 80mV every step until 450mV is reached between nernst and pump-. We introduce this quality assurance test in 2005.February. The nernst_dc_target must be documented for every board serial number just as the pump_pw_zero.

Detailed logging - post output - used for next step.

When using for this step, it's easiest for people examining the logs if you make one large log. This can be done with: perl bin/ mde02 _1200 That will make a 1200 entry log. You may want to increase or decrease the 1200 to make sure you capture the whole warmup process

Combine this with filling out the table of measured voltages below.

provide info sg. like:

log location:


first.log = just starting up

tenth.log = warmup has completed

You'll see in fourth or sixth the Ri begin to drop when heater reaches approx 60 hex.

TODO: add output for bad sensor. Typically samples are 1023 and 0 (or close) even though sensor heater gets enough (11..13V) voltage. In other words Ri target cannot be reached, it remains too high. Both lambda and O2 will read ??.? on the LCD, and GenBoard does not use lambda value for ego correction. With an analog link from a simple external lambda sensor this information is not available, which can be fatal.

[1200 entry log] of MembersPage/DaveBrul's sensor heating up (warmup almost complete) another [2100 entry log] showing a complete warmup cycle

Final (Hardware) step: Configure pump

Connect ip wire.

Power up the board and enable the sensor with mde02 and wait until it's warmed up

Check if pump can maintain the nernst at 4.45 V

Measure at EC18 Pin 13 (for sensor 1)

Adjust config.wbo2_nernstdc_target until the pump can maintain the nernst cell at 0.45V above pump- (this means appr. 4.45 V since pump- is appr. 4V):

Since there's a 0.1V tolerance in the 4V reference, it's probably better to calibrate voltage across the nernst cell itself, not between Vs (EC18-13) and ground. Adjust for 0.45V between EC18-13 (Vs) and EC18-7 (Vs/Ip) instead.

PS/2 keyboard and LCD are really convenient here, but a serial terminal will work as well. Restart the board and enable the sensor after changes to config.wbo2_nernstdc_target.

For sanity reasons, check the pump current (voltage across the 510 (R51 for sensor 1))

Ohms law specifies V/R=I so your measured voltage divided by 510 should give you amps. Multiply by 1000 to get milliAmps. The value is usually between 4mA and 5mA for free-air (0mA for stoich), sensor dependent: Ipumptotal = 2.5mA *(62/Rcal + 1). TODO: explain in more detail how free-air value relates to config.wbo2_calibration and Rcal.

Finishing up: sensor calibration via config.wbo2_calibration

The last thing that you need to configure is the free air reading of the sensor. You can find directions for this on GenBoard/Manual/Config/WBoxygen. Don't forget this step as it is crucial for proper operation. While the above tests and calibration were board-dependent, the sensor calibration is sensor dependent. Repeat after eech sensor change (LSU4 sensor life is appr. 120000km) A very good sensor calibration guess can be made by measuring RCal with a DVM. The RCal is built into the LSU4 sensor connector housing. While only 5 wires go to the sensor, upto 6 wires can go to the controller. The 6th (that is unconnected on the sensor side) is the pin of a 33..300 (usually 90..160) Ohm resistor that has other end on pump+. Especially useful if it's not possible to remove the sensor from the exhaust for free air calibration. Write the measured resistance values in comment in your config for every sensor of yours. Assign numbers (or names :-) to the sensors if you have more, to differentiate between them. GenBoard does not need the RCal connection (6th wire), the config.wbo2_calibration value known by the software makes a more precise operation possible with less wiring.

You should not need to do the advanced measurements below - unless you face problems.

Maybe we should move these to another page.

Measurements around pump OPA

Use similar table to collect your measurements. Search for Operational Amplifier if you don't know what an OPA is.

All DC voltages: (bad measurement) section needs cleanup: (TODO: make checklist instructions from

OC3A 1.98V
OC3A filtered = After R54 = Before R32 1.98V
After R32 (OPA+)2.58V
pump+ ?
reference 2V = Before R35 1.97V
After R35=expect average of reference 2V and OPAout (OPA-)3.19V
OPAout 3.67V

TODO: verification by calculation (checklist)

R35, R49 averaging

pump output current (voltage across 510 Ohm)


.... translate the below into generic instructions

R35 and R49 cannot do the averaging (half the voltage levels):

(1.97V + 3.67V)/2 = 2.82V. The 3.19V is way too bad. hmm.. either too much current flows into OPA- (3.19V - 2.82V)/50kOhm = 7.4 uA , or bad connection or bad OPA ?

but also, the OPA doesn't act as it should: for such OPA- and OPA+ the OPAoutput should go down to appr 0.4V

More datapoints around the opamp after warmup (all DCV):

OC3A 4.71V
OC3A filtered = After R54 = Before R32 4.72V
After R32 (OPA+) 7.17V
pump+ ?
reference 2V = Before R35 1.97V
After R35=expect average of reference 2V and OPAout (OPA-)5.95V

good: the R35-R49 averaging is OK here (5.95V instead of 6.01V can be OK).

but the OPA rails to +supply, as the OPA+ input is higher than the OPA-

the reason for the railing is that OPA+ is too high

the pump+ (you forgot to write this value !!!) shouldn't be more than 4V + 5mA * 500 Ohm (=6.5V); but it's obviously higher for this setup. 500 Ohm is an already too high pump, <270 Ohm are more appropriate, read below:

it's time to remove WBO2 and have a 10..270 Ohm from pump+ to pump- to measure if pump output current is good as commanded (by OC3A). I believe pump output (OC3A) can be forced to some value; but anyway, you must get the pump-idle (appr 0mA at startup) work first.

When talking about circuits, remember that nets have names. They are assigned names because it's very hard to remember numbers but easy to remember descriptive names. If you have eagle, you could use the names too (well, unfortunately the pdf schematic does not show the name of nets, except when connected to a connector).

if the OPA - and + inputs have a huge offset (not 5..10mV but much more): this means the OPA output is railed, or they are not connected somehow.

This is a test case with a 270 Ohm 1/2 watt resistor between pump- and pump+ instead of a sensor connected More datapoints around the opamp during warmup (all DCV):

OC3A 2.00V
OC3A filtered = After R54 = Before R32 2.01V
After R32 (OPA+)2.99V
pump+ 4.03V
reference 2V = Before R35 1.98V
After R35=expect average of reference 2V and OPAout (OPA-)3.03V
||OPAout||4.04V|| This looks very good. Your measurement should be similar if your pump circuit is working well.

More datapoints around the opamp after warmup (all DCV):

OC3A 3.25V
OC3A filtered = After R54 = Before R32 3.25V
After R32 (OPA+)3.92V
pump+ 4.68V
reference 2V = Before R35 1.98V
After R35=expect average of reference 2V and OPAout (OPA-)3.98V
Seems the pump circuit is working fine with the 270 across it. Good, now we use a real sensor.

Q: What is the most likely cause for high or low Ri from

A: High Ri - sensor not heating properly. Check to make sure you have adequate power supply. Car battery (fused!!!) is recommended. (but many use PC supply) Too low config.wbo2_abs_limit will also stop the heater from maintaining target temperature (and Ri).

A: Low Ri -

either the PID is not configured properly, but more likely something fundamentally wrong:

like the nernst measurement rails somewhere in it's signal path (after amplification the lower peak reaches GND). Raising nernst_dc_target can help, if the pump is working properly. If not, the pump must be fixed.

bad connection of WBO2 sensor (it can kill the sensor)