3. True VE
This chapter gives the criteria that separate a true VE from a pulsewidth map under another name, and the tests for you to check them on your car.
In a pulsewidth map, the table stores milliseconds: if the injector, the pressure, the fuel or the desired mixture changed, it is the table you correct. In a true VE, the table stores only the filling of the engine. Pressure, temperature, fuel, mixture and injector enter the physical calculation, each in its own place.
The complete calculation, step by step, is in How the VCU calculates fuel in VE mode. Here you check whether it is what it promises.
#The criteria
The ten criteria below come from the physical definition of a true VE, also called speed-density: the fuel comes from the air mass that the manifold pressure and temperature give for the displacement. Each line says what the VCU does, the limit when there is one, and the test in this chapter that checks it.
| Criterion | In the VCU | How the VCU does it | Check |
|---|---|---|---|
| VE is the filling referenced to the manifold: in a turbo engine it does not double because the pressure doubled | Met | The table stores % of filling; the absolute pressure multiplies the air. In the default map, the VE is the same from +1.0 to +3.4 bar. | Test 7 |
| The air mass comes from the ideal gas law, with absolute pressure and temperature in kelvin | Met, with a limit | Adds a fixed 1.013 bar to the MAP on screen (there is no barometer) and uses the air temperature sensor reading, with no charge heating model. | Tests 6 and 7 |
| The lambda target is in a separate table | Met | The fuel is the air divided by the stoichiometric AFR and by the target. The enrichments do not shift the target. | Test 1 |
| The injector enters through its physical flow rate | Met | Flow rate in mass and rated pressure. Changing the injector means changing these numbers, with the deadtime and the linearization of the new injector. | Tests 4 and 8 |
| Fuel pressure enters the physical calculation in real time | Met, with a limit | Corrects by the square root of the differential pressure only with a sensor and Use fuel pressure sensor on. Off, it assumes constant pressure. | Tests 2 and 3 |
| Changing the fuel does not require a new table | Met | Uses the stoichiometric AFR of the chosen fuel or, with an ethanol sensor, that of the measured mixture. | Test 5 |
| The injector deadtime is modeled separately | Met | Table by battery voltage and differential pressure, in each bank, added after the calculation. | Tests 2 and 4 |
| The load axis is pressure, not throttle | Met | VE and target are always read by engine speed and MAP. There is no VE by throttle. | Test 7 |
| Pressure and air temperature enter without an empirical correction table | Met | They enter only through the gas law. Air temperature compensation exists only in pulsewidth mode. | Tests 6 and 7 |
| Empirical corrections stay outside the core and appear in the log | Met, with a limit | Warm-up, post-start, gear, events and acceleration fuel enrichment are % on the time, summed in VE - Total enrichment. Engine start in table mode stays outside. | Before the tests |
Result: 7 criteria met and 3 met with the limit written in the line itself.
Without a fuel pressure sensor, turn off Use fuel pressure sensor, which is on by default (see Before you start: engine, fuel, injectors and sensors).

#Tests you can repeat
The tests are for those who tune the car. The result of each one comes from the VCU's calculation, not from measurement: repeat it on your car and compare.
#Before the tests
- Warm engine at steady state, in a fixed cruise cell: same engine speed and same manifold pressure before and after each change.
- Check that VE - Total enrichment is at 0% in the test cell.
- In tests 1 to 7, turn off the Fuel closed loop (VE): that way the O2 sensor shows what the calculation delivered, with no correction on top.
- The useful time is the Injection time A minus the Primary injectors deadtime. That is where the physics shows.
- Keep the VE channels visible in the log (see Reading the log: the VE channels).
#Test 1: change only the lambda target
- Do this: in the cruise cell, change the Lambda target table by MAP from 0.85 to 0.80. Do not touch the VE.
- What should happen: the useful time goes up 6.25% (0.85 ÷ 0.80 = 1.0625). If the VE was right, the O2 sensor goes to near 0.80.
- Look in the log: VE - O2 closed loop target at 0.80 (with an ethanol sensor, 0.80 plus the ethanol shift from test 5), VE - Efficiency % unchanged and Lambda error (O2 sensor vs target) near zero.
#Test 2: change the fuel pressure, with the sensor
- Do this: with the pressure sensor installed and Use fuel pressure sensor on, raise the pressure on the manifold-referenced regulator from 3 to 4 bar (the differential goes from 3 to 4 bar).
- What should happen: the useful time drops to 0.866 of the previous one (√(3 ÷ 4)). The O2 sensor stays where it was.
- Look in the log: Differential fuel pressure (the screen shows Base fuel pressure) 1 bar higher, Primary injectors deadtime with the value from the 4 bar row and Closed Loop / VE Probe steady.
#Test 3: the control, without the sensor
- Do this: repeat test 2 with Use fuel pressure sensor off and Fuel pressure failsafe at 3.0 bar.
- What should happen: the pulse does not change and the mixture gets about 15.5% richer, because the injector delivers √(4 ÷ 3) = 1.155 times more fuel. With target 0.85, the O2 sensor goes to near 0.74.
- Look in the log: Injection time A unchanged and Closed Loop / VE Probe richer. This shows that, in test 2, what compensated was the sensor together with the calculation.
#Test 4: change the injector, entering the new flow rate
- Do this: replace the 30 lb/h injectors with 45 lb/h injectors and enter the flow rate, rated pressure, deadtime and linearization of the new injector. Do not touch the VE and send the map to the VCU before starting the engine.
- What should happen: with the same rated pressure on both injectors, the useful time drops to 0.667 of the previous one (30 ÷ 45). VE and O2 sensor stay the same, if the data of the new injector is right.
- Look in the log: new Injection time A and Primary injectors deadtime, VE - Efficiency % and Closed Loop / VE Probe unchanged.
#Test 5: change the fuel
- Without an ethanol sensor: change the fuel in the tank and, in Fuel, change from Regular BR Gasoline (E27) to Ethanol (E100).
- What should happen: the useful time goes up 40% (12.6 ÷ 9.0 = 1.40). VE and target stay the same.
- Look in the log: FlexFuel - Fuel injection compensation stays at 0%. It compares the chosen fuel with the fuel in use, and without a sensor the two are the same.
- With an ethanol sensor: leave Regular BR Gasoline (E27) chosen and increase the ethanol in the tank gradually, up to E100.
- What should happen: with the O2 closed loop target compensation table of the Flex fuel zeroed, the useful time goes up to 1.395 times the initial one, calculated from the chemistry of the mixture. The factory table is not zero: with it, the target also changes with the ethanol content and the time changes along with it.
- Look in the log: FlexFuel - Fuel injection compensation goes from about +0.4% to +40%; VE - O2 closed loop target shows the ethanol shift of the target.
#Test 6: let the air heat up
- Do this: without changing anything, make back-to-back pulls until the intake air rises from 30 to 60 °C. Compare the same cruise cell before and after.
- What should happen: with the VE held constant, the useful time drops about 9% on its own (303 K ÷ 333 K = 0.910). The O2 sensor should stay on target.
- Look in the log: Air temperature - intake and Injection time A together. If the O2 sensor leaves the target along with the air, first suspect that the sensor does not measure the air that enters the cylinder: review its position.
#Test 7: compare vacuum and boost at the same engine speed
- Do this: on a turbo engine, log the same engine speed at 0 bar and at +1 bar (the MAP as it appears on the screen).
- What should happen: with the same VE, the same lambda target, the same differential fuel pressure and the same air temperature, the useful time almost doubles, because the absolute pressure in the calculation goes from 1.013 to 2.013 bar (× 1.987). In a pulsewidth map that is only called VE, the +1 bar row would have to have almost double the 0 bar row.
- Look in the log: VE - Efficiency % shows only the filling of the engine: it does not need to double for the fuel to double. In the factory default map, the VE is the same from +1.0 to +3.4 bar at each engine speed.
#Test 8: the diagnostic separates injector error from VE error
- Do this: write down the original flow rate and, with the closed loop on, deliberately enter an injector flow rate 5% above the real one. Run in idle and cruise cells, not in boost (from 0.5 bar up, by default, the learning keeps less and less of the error), until the learning has at least 4 cells with confidence.
- Then, on the computer, open Tools > VE learning (LTFT), Diagnostic page, and click Analyze.
- What should happen: the learning goes up in all the cells that learned, almost equally across them, by somewhat less than the 5% inserted: with the default 20 hits, the table keeps about 87% of the error at cruise and 69% at idle (about 4.4% and 3.5%; see Self-learning: VE learning (LTFT)). The screen flags a Global error (flow / pressure / stoich) of that size, with the advice to fix the source and not the VE.
- To undo: divide the entered flow rate by 1.05. Positive learning means fuel was missing, so the entered flow rate has to decrease.
- Afterwards: write the map to the VCU and only then use Clear LTFT: the learning made with the deliberate error stays in the VCU until it is cleared.
If any test comes out different from the description, first check the displacement and the number of cylinders, the injector data, the fuel pressure, the sensors and the chosen fuel: together with the lambda target, that is all the calculation uses besides the VE (see Diagnosis: symptoms and causes).