8. Enrichments and compensations in VE mode
In VE mode, the fuel comes from the physics: how much air enters the cylinder and what mixture you asked for in the lambda target. Everything this chapter describes comes after that, as an addition to or a subtraction from the injection time.
Knowing where each compensation enters avoids the most common mistake of those coming from the pulsewidth map: correcting in the VE what belongs to a compensation, or the opposite.
#How the fuel is assembled
First the VCU calculates each bank's base fuel, using the equation in How the VCU calculates fuel in VE mode.
Then it adds up all the active percentages into a single factor and multiplies the useful time by it.
Last it adds the injector linearization and the deadtime, which are not percentages: they are milliseconds.
factor = 1 + acceleration + post-start + warm-up + gear
+ external actions + bank + cylinder
useful = base fuel × factor
pulse = useful + linearization (ms) + deadtime (ms)
Each term enters as a fraction: +20% is 0.20 and −5% is −0.05.
"External actions" are the functions that ask for fuel on their own, including custom functions (section Gear, external actions and custom functions).
In direct injection, the Differential fuel pressure deviation compensation multiplies the whole factor.
The percentages add, they do not multiply: a base fuel of 4.00 ms with acceleration of +20%, warm-up of +10% and +3% from an external action gives factor 1.33 and 5.32 ms of useful time.
If the percentages were multiplied, it would be 5.44 ms, 2.2% more; with several large terms, the difference grows. If you are coming from an ECU that multiplies the corrections, redo the calculations: two +50% enrichments give +100% here, not +125%.
If the sum of the discounts reaches −100% (strong decay plus a negative custom function, for example), the factor stops at zero: the bank does not inject, but it also does not generate negative time.
#Who changes the time and who changes the target
All the compensations in this chapter act only on the injection time: the target the VCU chases is that of the Lambda target table by MAP, plus the flex offset when it is on.

The log shows that target in VE - O2 closed loop target, and it is what the closed loop compares the O2 sensor against; how much the compensations added shows up in another channel, VE - Total enrichment.
The VE target only varies with RPM and manifold pressure (and with ethanol content, if flex is on): there is no target by engine temperature, by gear or with the A/C on.
Hence the two rules that hold for the whole chapter:
- a percentage restores fuel that is lost along the way (cold manifold wall, acceleration, start), and the goal remains the target;
- for the engine to run on a different mixture on purpose, change the lambda target in the RPM and pressure cell where you want the change.
#Warm-up and post-start
The Engine temperature compensation adds a percentage to the useful time according to engine temperature. It is on by default and is the same table as the pulsewidth mode: when you change strategy, it comes along, with the same values.
Factory default: +45% at −10 °C, +37% at 20 °C, +22% at 50 °C, +7% at 70 °C, 0% from 80 to 100 °C and +10% from 120 °C up.
The Post start enrichment has a 4 × 4 table: engine temperature in the rows and time since start, in seconds, in the columns. It is also on by default; the percentage enters the useful time and lasts until the table's last time value (8 s by default); after that, it zeroes.
Factory default: at 10 °C, +70%, +45%, +16.7% and +4% at 0, 1, 3 and 8 s; at 80 °C, +10%, +6%, +2.5% and 0%.

The two add up: at 10 °C, with the factory tables, the engine gets +110% right after the start (40% plus 70%).
With no valid engine temperature sensor, neither the warm-up nor the post-start acts: there is no substitute value.
#Start in VE mode
#The start mode of each bank
In Engine Settings > Fuel injection, Banks tab, each bank has its own Injection mode for engine start bank A (B and C the same), with two options:

- Engine start fuel injection table: the cranking uses the Engine start table, in ms, by engine temperature. It is the factory default on all three banks, also in VE mode;
- Fuel injection main table: the cranking comes from the VE model itself, in the low RPM columns of the VE table, with warm-up, post-start and deadtime.
A mixed configuration is valid: one bank can start from the table and another from the VE model.
The Engine start screen only appears in the menu if some bank uses the start table; on banks set to Fuel injection main table it has no effect.
Factory default of the Engine start table: 16 ms at −10 and 0 °C, 14 ms at 10 °C, 12 ms at 20 °C, 10 ms at 40 °C, 6 ms at 60 °C and 4 ms from 80 °C up.
| At start | Engine start fuel injection table | Fuel injection main table |
|---|---|---|
| Cranking fuel | value from the Engine start table, in ms | VE model × (1 + warm-up + post-start) |
| Weak battery | not compensated: the deadtime is taken out of the pulse | compensated: the deadtime is added by the voltage at the moment |
| Post-start beginning | when the RPM goes above RPM for engine start | during cranking, at the first RPM read, with all banks on it (check in the log) |
| Floored pedal to clear a flooded engine | acts | does not act |
| Per-cylinder trim during cranking | only with Apply adjust on engine start | always |
| VE - Total enrichment during cranking | static (all banks on the table) | warm-up + post-start |
#Weak battery at start from the table
With the Engine start fuel injection table, in VE mode, the table value is the whole injector pulse: with a weak battery the injector takes longer to open, and that delay is taken out of the pulse.
With the factory deadtime table, the injector injects 0.25 ms less at 10 V and 0.43 ms less at 9 V than at 12 V.
With a cold engine (table of 12 to 16 ms), that is 2 to 4% of the fuel; with a warm engine (4 ms), 8 to 14%.
An injector with larger deadtime loses more: on a 170 lb/h injector, 0.45 ms at 10 V and 0.78 ms at 9 V.
In pulsewidth mode, the same table receives the deadtime difference and loses nothing with the battery: when converting a map and keeping the start from the table, that compensation ceases to exist.
With the Fuel injection main table, the deadtime is added on the spot, by the voltage at the moment: the weak battery is compensated.
In the start log, Injection time A minus Primary injectors deadtime is the time the injector actually injects; put the two next to Battery voltage.
#When the post-start begins to count
With the Engine start fuel injection table, the count starts when the RPM goes above RPM for engine start (400 rpm by default, in Engine Settings > Engine settings).
If the RPM falls 100 rpm below that value (300 rpm by default) and rises again, the count restarts from zero.
With all banks on the Fuel injection main table, the VCU arms the post-start at the first calculation with RPM, still during cranking, and the count starts before the engine fires; if one bank still starts from the table, the count only starts after cranking.
With all banks on the main table and the factory table, a 2 s cranking at 10 °C would reach the moment the engine fires with about 31% of post-start, not 70%, and 6 s of window would be left.
Check in your log: if VE - Total enrichment already shows warm-up plus post-start during cranking (64% at 30 °C with the factory tables) and that value drops while still cranking, the count started during cranking, and the 0 s column of the post-start table applies to the beginning of cranking, not to the moment the engine fires.
#Clearing a flooded engine and the prime pulse
Disable injection on engine start with TPS above (70% by default, General settings tab) removes the injection from cranking with the throttle wide open, to clear a flooded engine.
It only acts on the banks that start from the Engine start fuel injection table and on the prime pulse; on the Fuel injection main table the field stays on the screen, but does not act.
With an electronic throttle, the value compared is the pedal position, not the throttle's; with a cable throttle, it is the TPS itself.
The Prime pulse is a single pulse, in ms by engine temperature, on the first RPM signal, on the banks checked; it does not go through the VE model and is off by default.
Hard start in VE mode: before touching the VE, check each bank's start mode and the Battery voltage during cranking. Choose the mode by what matters most on your engine (clearing a flooded engine and the post-start after firing, or the compensated battery; see the table above) and check in the log.
#Acceleration fuel enrichment and decay in VE
#How it acts
VE mode has its own Acceleration fuel enrichment and decay (accel or tip-in enrichment), different from the pulsewidth mode's; the pulsewidth mode's is hidden and is turned off when the map is sent. The VE one is off by default: turn it on in the VE map. During start cranking, it stays at zero.
The VCU measures the speed of the chosen source (TPS, pedal or MAP).
The Fuel percentage by acceleration rate table (8 × 8 by default, which is also the maximum; speed in the rows and RPM in the columns) gives a percentage of the base fuel: positive values enrich when the throttle opens, and negative values remove fuel when it closes, which is the decay.

The Temperature correction table multiplies that value according to engine temperature: the factory one multiplies the acceleration fuel enrichment by 2.15 at −10 °C and adds nothing from 70 °C up.
Below the Minimum variation of TPS/MAP for pump shot (15%/s by default; pump shot is the app's name for this same enrichment) nothing fires; the factory value is low, so the acceleration fuel enrichment is sensitive.

It only fires again with a larger request, in absolute value, than the one in progress.
With the engine temperature sensor in failure, the correction uses 0 °C: with the factory table, the acceleration fuel enrichment becomes 2.1 times larger.
#How long it lasts
The acceleration fuel enrichment is sustained for Fuel enrichment duration (Injection events) and then falls by the Acceleration fuel pump shot reduction per event, in points of base fuel per event.
On a 4-stroke engine each cylinder has RPM divided by 120 events per second: at 3000 rpm, 25 events per second, one every 40 ms.
Example with the factory values (5 events, 10 points per event): a +20% acceleration fuel enrichment at 3000 rpm stays 0.2 s at the plateau and fades out in 2 more events, 80 ms. That is 0.28 s in total.
With the reduction per event at 0, the acceleration fuel enrichment falls in a straight line over the function's decay time, which the screen does not show (0.100 s by default).
A closing that asks to remove more than the acceleration fuel enrichment in progress flips the sign immediately.

#How it coexists with the loop and learning
With Minimum acceleration fuel enrichment that freezes the correction at 0 (default), any nonzero acceleration fuel enrichment, up or down, freezes the fast correction and blocks learning. The state is shown at Enrichment active.
When the acceleration fuel enrichment ends, the correction still waits one O2 sensor delay plus 0.3 s before correcting again.
With a value above 0, only an acceleration fuel enrichment above it freezes the correction. A smaller one only blocks learning, while it exists and for one more O2 sensor delay plus 0.3 s, with the state Correcting (waiting for acceleration fuel enrichment to end); after that the 4 s learning count restarts.
While the acceleration fuel enrichment acts, learning is stopped: collect data with a steady foot. The loop and the learning are in VE closed loop and Self-learning: VE learning (LTFT).
#Which source to use
In Acceleration fuel enrichment source selection, choose the source by the throttle type, set in Engine Settings > Pedal / ETC, in the Pedal/Throttle field:
| Throttle | Source | Why |
|---|---|---|
| Cable (TPS) | TPS | the throttle sensor is the TPS itself; in this type, the Pedal source receives a copy of the TPS and adds nothing |
| Electronic, commanded by the VCU (Single Electronic Throttle or Dual Electronic Throttle) | TPS | the TPS is the opening request above idle: it stays at zero at idle and includes what the other functions request |
| Electronic, commanded by another module, read as TPS | TPS | raise the Minimum variation of TPS/MAP for pump shot until the acceleration fuel enrichment does not light at idle and check in the log |
| Any | do not use MAP | with the factory values, the MAP source does not fire the acceleration fuel enrichment in normal use |
With an electronic throttle commanded by the VCU, the Pedal source follows the foot, not the throttle: it does not see heel-and-toe (the throttle blip on a downshift), anti-lag or custom functions that move the throttle.
With an electronic throttle commanded by the VCU, if the log shows the acceleration fuel enrichment lighting at idle at the moment the A/C or the fan turns off, the probable cause is the idle lowering the opening faster than the Throttle speed lets the throttle close: choose a faster speed, raise the Minimum variation of TPS/MAP for pump shot or switch the source to Pedal.
If you come from the pulsewidth mode with an electronic throttle: there the acceleration fuel enrichment looked at the real throttle position; in VE it looks at the opening request and the factory threshold is more sensitive.
#Gear, external actions and custom functions
The Gear based compensation is a table by gear and RPM, in percent of the useful time, which only acts with the gear detected.
The Gear change compensation is a table by gear and time, with the optional filter Apply compensation when TPS above, and enters together with the external actions. Both are off by default.
These functions add their percentage in the same factor calculation:
- 2-step, 3-step and burnout (the launch functions) and anti-lag;
- A/C (Fuel enrichment) and thermatic fan, the electric cooling fan (Fuel compensation), both at 0% by default;
- drag race time-based compensations, water/methanol injection and the RPM enrichment of the progressive nitrous;
- the Fuel injection compensation action of custom functions.
The thermatic fan enriches when the fan output turns on, including when the A/C is what turns it on.
The Injection compensation - Primaries actions (B and C) add only to their own bank; while one of them acts, the closed loop stays stopped.
#Launch, anti-lag and pit limit
On launch (2-step, 3-step and burnout) and on anti-lag, VE mode adds the percentage of those functions to the useful time; the drag race time-based compensations enter through the same sum.
While the launch, the anti-lag (ALS) or the pit limit (pit lane speed limiter) are active, the loop freezes the correction and does not discount that fuel; the state is Launch / ALS / pit limit (see VE closed loop). The lambda targets specific to those functions do not act in VE: see What does not run in VE mode, below.
#Cuts, battery, pressure and air temperature
The total cut zeroes the fuel of all banks: injection cut level at 100%, deceleration cut-off active, or engine off.
The partial cut (below 100%) draws pulse by pulse which injections happen, the same as in pulsewidth mode; the Fuel injection cut action of custom functions uses that mechanism.
The Deceleration fuel cut-off arms with the RPM above Cut when TPS=0 and RPM above and the TPS below 0.8%, and then waits the configured delay.
With Pedal/Throttle at None, the cut-off does not arm; while the anti-lag acts, it is also blocked.
There is no percentage compensation for battery: the voltage enters through the injector deadtime (voltage × differential pressure table), added to each pulse; the exception is the start from the table, seen above. Deadtime and linearization are in Before you start: engine, fuel, injectors and sensors.
In the Differential fuel pressure deviation compensation, only the direct injection references (DI Fuel pressure 1 and DI Fuel pressure 2) act in VE mode: the other two are already in the equation (see Before you start: engine, fuel, injectors and sensors).
#What does not run in VE mode
When you move the map to VE, these functions stop acting; if your map relied on them, that has to be in the VE or the target.
| Function | In VE mode |
|---|---|
| Overall fuel trim | hidden; does not act |
| Intake air temperature compensation | hidden; air temperature is already in the equation |
| TPS auxiliary compensation, MAP auxiliary compensation and RPM compensation | hidden; do not act |
| Idle speed by TPS table and Main TPS VE table | hidden; do not act (the VCU has no VE by TPS) |
| O2 closed loop correction of the pulsewidth mode | hidden and turned off when the map is sent; VE uses the Fuel closed loop (VE) |
| Acceleration fuel enrichment and decay of the pulsewidth mode | hidden and turned off when the map is sent; VE has its own |
| Flex Fuel percentage compensations by MAP and by TPS | do not act: in VE the flex changes the equation's fuel |
| Pro-Nitrous fuel (milliseconds added per bank and per cylinder) | not applied |
| Progressive nitrous: fuel by PWM | not applied |
| Additional time in ms added by other functions | not applied |
| Lambda targets of other functions (by time, auxiliary after launch, Pro-Nitrous, anti-lag, selector) | do not act |
| O2 closed loop target override action of custom functions | does not act |
| Ignition advance by ethanol | blocked in VE mode |
FuelTech Vision warns about the Pro-Nitrous fuel and the time-based and auxiliary targets; the other items in the table, you check.
These keep acting in both modes: warm-up, post-start, start (with the battery difference seen above), prime pulse, gear, gear change, external actions, bank compensation, cylinder trim, linearization, deadtime, cuts, cut-off and Cold start auxiliary.
#Steady-state enrichment with the loop on
The VE closed loop stays stopped with the engine below the Minimum engine temperature (70 °C by default) and during the post-start plus the Time after start to begin (15 s by default).
In that phase, warm-up and post-start work alone: tune them from the log and do not zero them, otherwise the cold engine goes lean with nobody to compensate.

Past that phase, the loop compares the O2 sensor with the table's target; a percentage that stays on leaves the mixture richer than the target, and the loop treats it as error:
- it removes the excess only up to its limit, and what goes beyond the limit stays in the mixture: by default, 10% from vacuum to −0.2 bar, 8% at 0 bar, 5% at 0.5 bar and 3% from 1 bar up (gauge pressure, as the MAP appears on the screen); with Apply the learned LTFT on (off by default), learning adds to the discount up to 15% per cell, with a 25% cap in total, in the cells where it learns (by default, below 1 bar);
- learning writes the discount into the cell, which only knows RPM and pressure, and not the temperature or the gear.
Example: with the engine at 120 °C, the factory warm-up asks for +10%; from vacuum to about −0.1 bar the loop cancels everything, but at 1 bar it removes 3% and about 6.7% of rich mixture remains.
With the factory tables, the loop turns on at 70 °C with the warm-up still at +7%: from vacuum to about 0.2 bar it removes about 6.5% at 70 °C, and less and less until it reaches zero at 80 °C.
The recorded discount does not know where it came from: if it reaches the VE through Apply to VE, the engine goes lean in the same proportion when the enrichment goes away.
So, with the loop on, follow this rule in the range where it acts:
- Zero the Engine temperature compensation from the loop's Minimum engine temperature upward; on the factory table, those are the 70 °C point (+7%) and the hot range (+10% from 120 °C up).
- Zero the Gear based compensation.
- Leave the A/C and thermatic fan enrichment at 0% (it is the factory default) and the custom functions that stay on at steady state.
- For a different mixture on purpose, change the Lambda target table by MAP in the RPM and pressure cells where you want it; it applies to the whole cell, at any temperature and gear.
Zeroing the 70 °C point also reduces the warm-up between 60 and 70 °C, because the table is interpolated in a straight line: check the cold phase in the log after the change.
With Only enrich above the set pressure on, the loop does not remove fuel above the set pressure, and the enrichment stays whole there; see VE closed loop.
Event enrichments are outside that rule: during launch, anti-lag, pit limit and acceleration fuel enrichment, the loop stops or freezes and discounts nothing.
FuelTech Vision does not flag warm-up above the loop's minimum temperature, nor gear compensation, with the loop on: check both before turning the loop on (steps 1 and 2 above).
The Enrichment active warning, on the VE learning (LTFT) screen, only lights with acceleration fuel enrichment or bank compensation; warm-up, A/C and gear do not light it, even while enriching.
Before Apply to VE, check in the log that VE - Total enrichment stayed near zero where the car learned; if not, use Clear LTFT and learn again (see Self-learning: VE learning (LTFT)).
#Seeing the enrichments in the log
- VE - Total enrichment: sum of the acceleration fuel enrichment and decay, post-start, warm-up, gear and external actions, in % of the useful time; it does not include bank compensation, cylinder trim or linearization.
- VE - O2 closed loop target: the table's target plus the flex offset; it does not discount any enrichment.
- Acceleration fuel enrichment, Decay injection and Acceleration fuel enrichment and decay: the acceleration fuel enrichment converted to ms over bank A's base pulse, which can fall only because the base pulse fell; the log may show them without decimal places (0.4 ms appears as 0), so use the total for the percentage.
- Custom functions, launch, thermatic fan and gear change have no channel of their own: they appear only in the total.
- Thermatic fan 1: Fuel compensation and the Post start enrichment channel always stay at zero: use the total.
With the engine warm and no acceleration fuel enrichment, VE - Total enrichment should be near zero; a constant value is extra fuel across the whole map.
To correct the VE from the O2 sensor, use only segments with VE - Total enrichment near zero; the method is in Step-by-step tuning method and the full channel list in Reading the log: the VE channels.