On Euro 4/5 diesel models fuel level is being measured by BIU and transmitted on CAN-bus as resistance value in ohms (Ω). The ECU parses this and does some processing. First it calculates artificial fuel level voltage using standard voltage divider formula. Voltage value is being damped because the source info fluctuates a lot with fluid moving. Then the damped result is being used for LUT (Lookup table).
Euro 6: Fuel level is being digitized by combination meter.
For above voltage divider, where:
- Vin: Battery Voltage (assumed constant in this case)
- R1: constant series resistor
- R2: variable fuel level resistance (two sensors in series)
- Vout: fuel level voltage (artificial ECU value in this case)
This way I eliminated ECU’s artificial fuel level voltage, creating direct relationship between resistance [ohm] (CAN value) and volume [litre].
ROM Tables and Calculated Results
gen1 Euro 4 (MY2008-2010)
Fuel tank capacity: 64 litres.
gen2 Euro 5 (MY2010-2011)
Fuel tank capacity: 65 litres.
gen3 Euro 5 (MY2012-2014) and gen4 Euro 6 (MY2015+)
Fuel tank capacity: 60 litres.
There seems to be a calibration data error as the vertical step (at 19 ↔ 23 litres) does not make sense! ECU’s LUT code can handle this but technically it is a flaw. The averaging algorithm after table lookup will mitigate this issue. Same map data was found in newer Euro 5 and Euro 6 ROMs.
Diagnostic Trouble Codes
DTCs are triggered when (artificial) fuel level voltage is outside range. As usual it’s not that simple, many conditions may affect this, too – battery voltage, CAN state etc.
- P0462 Fuel Level Sensor Circuit (Low Input)
- P0463 Fuel Level Sensor Circuit (High Input)
For some reason, above codes are not publicly exposed in Euro 6 spec models, also not available in service manual DTC listing. They are processed internally however.