2. How the VCU calculates fuel in VE mode
In VE mode, the VCU redoes the fuel calculation in four steps, on every revolution of the trigger wheel (the toothed wheel whose sensor reports the engine speed to the VCU) and at least 50 times per second.
- Calculates the mass of air that enters one cylinder in the cycle.
- Divides by the stoichiometric AFR of the fuel (the air/fuel ratio of the chemically correct mixture) and by the lambda target: that is the fuel mass.
- Divides by the injector flow rate, corrected for the fuel pressure: that is the useful time.
- Applies the enrichments and the cylinder trims and adds the linearization (short pulse correction) and the deadtime (the injector opening delay): that is the pulse the injector receives.
#Overview

air mass = P_abs × V_cyl × (VE ÷ 100) ÷ (R_air × T_air)
fuel = air mass ÷ (AFR × lambda target)
useful time = fuel ÷ injector flow rate × √(P_rated ÷ P_diff)
pulse width = useful time × (1 + enrichments) + deadtime
The VE table enters only in the first step. Fuel, injector, fuel pressure and deadtime enter in the following steps, each with its own parameter.
#Step 1: the air mass in the cylinder
The VCU uses the ideal gas law to know how much air fits in a cylinder at the manifold conditions, and multiplies by the VE.
air mass [g] = P_abs × V_cyl × (VE ÷ 100) ÷ (R_air × T_air)
P_abs = MAP on screen + 1.01325 bar
V_cyl = Engine volume ÷ number of cylinders
T_air = air temperature + 273.15
- P_abs: absolute pressure in the manifold, in bar.
- V_cyl: volume of one cylinder, in liters.
- VE: value from the VE table, in %.
- R_air: air constant, 0.0028705 bar·L/(g·K).
- T_air: air temperature, in kelvin.
#Manifold pressure
The MAP appears on the screen as gauge pressure: negative is vacuum, positive is boost pressure. For the calculation, the VCU adds 1.01325 bar to the MAP on screen and arrives at the absolute pressure; it has no barometer, and the added value is fixed.
The Calibration of the internal MAP sensor changes the pressure used in the calculation in every cell. Do not use it to make the MAP read zero: see Before you start: engine, fuel, injectors and sensors.
Without a valid MAP reading, the calculation starts using the MAP failsafe (a failsafe is the substitute value the VCU uses when the sensor is off or has failed): what triggers this switch and what it changes are in Before you start: engine, fuel, injectors and sensors.
#Air temperature
The air temperature enters in kelvin. Hotter air is less dense and needs less fuel, with no compensation table.
When the VCU uses the sensor and when it uses the Air temperature failsafe (25 °C by default) is in Before you start: engine, fuel, injectors and sensors.
The calculation uses the temperature the sensor reads. There is no charge heating model: see What makes VE advanced, and the limits.
#The VE from the table
The VE comes from the Main MAP VE table, interpolated by the engine speed and the MAP of the moment.
With the closed loop on, the VE used is the table VE multiplied by the loop factor. The table does not change.
The log shows both: VE - Efficiency % is the table one and VE - Effective efficiency % is the one used in the calculation. The table is in The tables: VE, lambda target, axes and grids; the factor, in VE closed loop.
#Step 2: the fuel mass
fuel [g] = air mass ÷ (AFR × lambda target)
- AFR: stoichiometric AFR of the fuel in use.
- lambda target: value from the Lambda target table by MAP at the engine speed and MAP of the moment.
The AFR comes from the Fuel chosen in Fuel configuration: 12.6 in Regular BR Gasoline (E27) (BR is Brazil) and 8.4 in Ethanol (pump) (Brazilian hydrous ethanol, not E85), for example.
With the Flex fuel function on and the ethanol sensor, the VCU uses the stoichiometric AFR of the mixture the sensor measures. Fuels, the difference between the E27 preset and the E30 gasoline sold in Brazil today, and the ethanol sensor are in Before you start: engine, fuel, injectors and sensors.
The target the calculation uses appears in the VE - O2 closed loop target channel.
The fuel density does not enter the injection time. The injector is specified in mass per hour, and the density cancels out.
The enrichments (warm-up, post-start, acceleration fuel enrichment, gear and events) do not change the lambda target. They enter in step 4, as a percentage of the useful time; the total appears in VE - Total enrichment, and each one is in Enrichments and compensations in VE mode.
#Step 3: the useful time of the injector
The useful time is the time the injector needs to stay open, with the opening delay already subtracted, to deliver the fuel mass.
injector flow rate [mg/ms] = flow rate [lb/h] × 453.59237 ÷ 3600
useful time [ms] = fuel ÷ injector flow rate × √(P_rated ÷ P_diff)
- flow rate: Flow rate of each primary injector, in lb/h, of one injector.
- P_rated: Primary injector rated pressure, the pressure at which the flow rate was measured.
- P_diff: differential pressure, the fuel pressure in the line minus the pressure in the manifold.
The VCU works with the flow rate in mass. If you enter the flow rate in cc/min, FuelTech Vision converts it by the density of the chosen fuel: see Before you start: engine, fuel, injectors and sensors.
#Differential pressure
The flow rate of an injector grows with the square root of the differential pressure. With the fuel pressure sensor, the VCU corrects the useful time by that root; the value used appears in the Differential fuel pressure channel (the screen shows Base fuel pressure).
With a rated pressure of 3 bar, a differential pressure of 4 bar multiplies the useful time by 0.866; one of 2 bar, by 1.225.
Below half of the rated pressure, the correction stops at the value for half: at most 1.414 times the useful time. This pressure correction never cuts fuel because of a bad pressure reading.

Without a fuel pressure sensor, turn off Use fuel pressure sensor, which is on by default: on without a sensor, the calculation subtracts the MAP from a fixed pressure (see Before you start: engine, fuel, injectors and sensors).
#Injections per cycle
The fuel mass from step 2 is that of a complete cylinder cycle.
In Sequential and Semi-sequential, each pulse carries the whole useful time.
In Multipoint (often called batch fire), on a piston engine, the bank fires twice per cycle and each pulse carries half of the useful time. The deadtime enters in each pulse.
On the rotary engine, the cycle is one revolution and there is one pulse per revolution.
#Banks
Each bank (A, B and C: a group of injectors with their own outputs) has its own flow rate and its own rated pressure.
Bank A supplies all the fuel until it reaches the Primary injector opening to bring in the next bank, 100% by default; what is missing goes to bank B, and from B to C. A disabled bank is skipped. The split is made on the fuel already with the enrichments.
If all of them reach the limit, all receive the same added time, in milliseconds.
#Step 4: the total pulse time
effective time = useful time × (1 + enrichments + cylinder trim)
pulse width = effective time + linearization + deadtime
- enrichments: sum of the active compensations, in % (in the calculation, 10% counts as 0.10).
- cylinder trim: Individual cylinder trim by RPM - Primary plus Individual cylinder trim by MAP - Primary, also in %.
- linearization: value from Primary injector linearization for the cylinder and the effective time, in ms.
- deadtime: value from Primary injectors deadtime for the battery voltage and the differential pressure of the moment, in ms.
#Deadtime
The deadtime is the delay for the injector to open and close.
In VE mode it is the full value from the table, by battery voltage and differential pressure, added to each pulse; the value of the moment appears in the Primary injectors deadtime channel. The table is in Before you start: engine, fuel, injectors and sensors.
A wrong deadtime shows up as a mixture error that grows as the pulse gets shorter. Correct it in the deadtime, not in the VE: see Step-by-step tuning method.
#Linearization and cylinder trim
The linearization corrects short pulses, in which the injector does not deliver fuel in proportion to the time: it is a table per bank, in ms added to the effective time, with one row per cylinder. It starts at zero.
The cylinder trim, in %, corrects differences between cylinders by engine speed and by MAP.
#The pulse in the log
The pulse of bank A, before the cylinder trim and the linearization, appears in the Injection time A channel.
The injector duty cycle (opening) appears in Injection duty A: pulse × engine speed ÷ 1200 in sequential and semi-sequential, pulse × engine speed ÷ 600 in multipoint.
#Numerical example
This is the guide's reference example. The calculations use the formulas in this chapter, without rounding, and give the same values the VCU calculates; redone with the rounded values in the table, the last digit may vary.
- Engine 2.0 L, 4 cylinders, sequential injection, 5000 rpm.
- Manifold pressure of 1.5 bar absolute: the MAP on screen shows 0.487 bar.
- Air at 40 °C, table VE of 95%, lambda target of 0.85.
- Generic injector of 80 lb/h at 3 bar; manifold-referenced regulator (which follows the MAP and keeps the differential pressure constant), differential pressure of 3 bar.
- Battery at 13.5 V; example deadtime of 1.0625 ms.
- Warm engine, no enrichment, no cylinder trim, linearization at zero.
| Step | Calculation | Regular BR Gasoline (E27) | Ethanol (pump) |
|---|---|---|---|
| Absolute pressure | 0.487 + 1.01325 | 1.5 bar | 1.5 bar |
| Air temperature | 40 + 273.15 | 313.15 K | 313.15 K |
| Volume of one cylinder | 2.0 ÷ 4 | 0.5 L | 0.5 L |
| Air density in the manifold | 1.5 ÷ (0.0028705 × 313.15) | 1.6687 g/L | 1.6687 g/L |
| Air per cylinder per cycle | 1.6687 × 0.5 × 0.95 | 792.6 mg | 792.6 mg |
| AFR × lambda target | 12.6 × 0.85 and 8.4 × 0.85 | 10.71 | 7.14 |
| Fuel per cycle | 792.6 ÷ 10.71 and 792.6 ÷ 7.14 | 74.01 mg | 111.01 mg |
| Injector flow rate | 80 × 453.59237 ÷ 3600 | 10.080 mg/ms | 10.080 mg/ms |
| Pressure correction | √(3 ÷ 3) | 1.000 | 1.000 |
| Useful time | fuel ÷ 10.080 | 7.342 ms | 11.013 ms |
| Deadtime | example value, at 13.5 V and 3 bar (not the generic injector table) | 1.0625 ms | 1.0625 ms |
| Pulse (Injection time A) | useful time + deadtime | 8.405 ms | 12.076 ms |
| Opening (Injection duty A) | pulse × 5000 ÷ 1200 | 35.0% | 50.3% |
From Regular BR Gasoline (E27) to Ethanol (pump), the hydrous ethanol, the useful time went up 50% (12.6 ÷ 8.4 = 1.5) and the VE stayed at 95%. The total pulse went up less, 44%, because the deadtime does not depend on the fuel.
In Multipoint, each pulse would carry half of the useful time plus the full deadtime: 3.671 + 1.0625 = 4.734 ms with gasoline, and an opening of 39.4% (pulse × 5000 ÷ 600).
#Where each physical quantity enters
The table summarizes where each quantity enters and what changes in the VE table when it changes.
| Physical quantity | Where you enter it or the VCU reads it | What changes in the VE table |
|---|---|---|
| Displacement | Engine volume and Number of cylinders | nothing |
| Manifold pressure | MAP sensor, plus a fixed 1.01325 bar | nothing |
| Air temperature | air temperature sensor or Air temperature failsafe | nothing |
| Engine filling | Main MAP VE table | it is the table itself |
| Desired mixture | Lambda target table by MAP | nothing |
| Stoichiometric AFR | Fuel, in Fuel configuration, or Flex fuel with an ethanol sensor | nothing |
| Fuel density | Fuel specific gravity: only in the cc/min conversion and in the flow rate and power estimates | nothing |
| Injector flow rate | Flow rate of each primary injector | nothing |
| Pressure at which the flow rate was measured | Primary injector rated pressure | nothing |
| Actual fuel pressure | fuel pressure sensor or Fuel pressure failsafe | nothing |
| Injector opening and closing | Primary injectors deadtime | nothing: correct it in the deadtime |
| Short pulse | Primary injector linearization | nothing |
| Difference between cylinders | Individual cylinder trim by RPM - Primary and Individual cylinder trim by MAP - Primary | nothing |
| Enrichments | compensation and acceleration fuel enrichment screens | nothing |
The "nothing" holds with the right data. A wrong flow rate, rated pressure or deadtime appears as a mixture error, and the correction goes into the wrong data, not into the VE.
The calculation does not include the effect of the fuel on the charge temperature, such as the cooling by ethanol evaporation. After changing the fuel, check the mixture with the O2 sensor: a fine touch-up may be needed.
To see each quantity act on the engine, with the expected result, see True VE.