All topics
Engine & fuel

VE and speed-density fuelling

The VE table is the ECU's model of how much air gets into each cylinder. Everything about fuel starts here.

A speed-density ECU never measures airflow. It estimates it from manifold pressure (MAP), intake air temperature (IAT) and engine speed, using the ideal gas law — and then multiplies by volumetric efficiency (VE), the fraction of the cylinder's swept volume that actually fills with fresh air at that RPM and load.

air per cylinder = VE × MAP × displacement ÷ (R × IAT)then fuel = air ÷ (stoich AFR × target λ), then pulse width = fuel ÷ injector flow + dead time

So the VE table is not "fuel": it is the ECU's belief about airflow. When the belief is right, the measured λ matches the target. When the engine gets more air than the table says, it runs lean; less air, rich. That is why you correct VE from the wideband instead of guessing.

What shapes the true VE surface

  • RPM: cylinder filling peaks where the intake and exhaust lengths resonate, and falls off at low speed (slow flow) and high speed (not enough time).
  • Load: at low MAP the exhaust left in the cylinder (residual gas) takes up room, so VE drops; big cam overlap makes this worse at idle and cruise.
  • Hardware: intakes, headers and cams change the surface. That is why a stock table is wrong after a mod.
  • Boost: under boost the number can pass 100 % because the manifold is above atmospheric; exhaust backpressure from the turbine pulls it back down.

The correction loop

VEnew = VEold × (λmeasured ÷ λtarget)Lean (λ above target) means more air than claimed: VE goes up. Rich means VE goes down.

Only correct cells with clean data: steady operation, no fuel cuts, injectors not static, fuel pressure holding, no misfire. The correction tool excludes those samples and shows its maths; apply it to the cells you choose and run again. Two or three passes usually land within a couple of percent.

If every cell is off by the same percentage, that is not VE. It is injector data or the stoich setting. Fix the scalar, not the table.
Now try it.

Edit the VE table on a virtual car, pull it on the dyno and read the result. Free, in the browser, no account.

Open the VE table in the dyno →