# This is highly experimental.

(If it proves to be accurate, it will be added to the official ROM definitions.)

What follows is a condensed version of this thread in the ECU analysis forum.

The ECU’s calculation of “Final Fueling Base” contains a few compensations that are added to the primary fueling enrichment. One of those compensations, here dubbed Enrichment Compensation 2, or “EC2,” is responsible for an excessively rich condition during spoolup.

The EC2 parameter itself is calculated from four input parameters:

Input A | Change in load since the previous iteration |

Input B | Change in load in the previous two iterations (clamped between −0.2 and +0.2) |

Input C | This is a function of input B and two or three tables, see below. |

Input D | This is a function of input A, one of two scalars, and a table. |

(I suspect that the ECU’s iterations are 7 milliseconds apart, but I don’t have solid evidence to support that claim. I just know that it contains a counter that increases at roughly that rate.)

Input A is multiplied by another value to become Input D. That ‘other value’ may be 0.1, 0.03125, or a value that depends on RPM. The conditions that determine the multiplier have not yet been studied.

Input B is turned into Input C through a series of operations, starting the “EC2 delta-Load Transform” table, shown here…

The transformed Input B is then scaled by one or both of the tables shown below. The table on the left is always used; the table on the right is applied when load is falling rather than rising. The tables are “EC2 Input C Load Compensation” and “EC2 Input C Falling Load Compensation” respectively.

Inputs C and D are each scaled by Engine Coolant Temperature (ECT) compensation tables, and the resulting values are added together to form Enrichment Compensation 2:

EC2 = (InputD * EctMultiplierD) + (InputC * EctMultiplierC)

EctMultiplierC is strictly a function of ECT, and there are separate tables for rising load and falling load (rising is on the left in the picture below).

EctMultiplierD is a function of both ECT and load (grams of air per combustion charge).