Closed Loop MAF Sensor Calibration – MAF CAL ADVANCE
April 23, 2026MAF CAL ADVANCE has a closed loop MAF calibration feature. When the unit is connected to the analog output of a wideband lambda sensor controller, MAF CAL ADVANCE will adjust the MAF sensor signal to achieve the AFRs target programmed by the user.
Before reading this article, be aware of potentially catastrophic issues that can come by using the MAF sensor signal to alter fuelling away from what is programmed inside the engine ECU. The MAF sensor can be used by the engine ECU for many safety critical measures. It is essential the user does their own research on the subject to understand the knock on effects, before using this method of fuel control.
Engine ECU must be running in open loop fuel control for the adjustments of MAF CAL ADVANCE to have any effect.
Setting Up Closed Loop MAF Calibration
MAF CAL ADVANCE can accept two lambda targets.

Idle/Low Load
The base lambda target is what we want the engine to make under low load/idle conditions. Usually this will be set to 1λ.
High Load
The second lambda target is what we want the engine to use under maximum load.
Load Thresholds
To determine which state the engine is in, MAF CAL ADVANCE uses a linear signal MAP sensor. User taps into the signal wire of an existing sensor or adds a dedicated sensor. MAP sensor is NOT supplied with MAF CAL ADVANCE.
Idle Load Threshold
User sets minimum manifold pressure (vacuum) at idle. Below this level, MAF CAL ADVANCE will make no adjustments to the MAF calibration.
High Load Threshold
User sets the kPa threshold, above which MAF CAL ADVANCE will attempt to achieve the chosen lambda at high load.
Enrichment Start Threshold
This threshold dictates which engine load will see the AFR start to enrich.
For example, we have set the idle load threshold as -60kPa (relative) and high load threshold as 50kPa. We do not want the AFR to start to increase as soon as the manifold pressure is above -60kPa.
We set the enrichment threshold to something like 0kPa. Between -60kPa and 0kPa the lambda target is our base lambda target, eg 1λ. Above 50kPa our lambda target may be 0.81.

Above the enrichment threshold, in this case 0kpa, MAF CAL ADVANCE interpolates the lambda target between 0kPa and 50kPa. If our manifold pressure is 25kPa (halfway between 0kPa and 50kPa) for this example, the lambda target lambda would be half the difference between 1λ and 0.81λ ie 0.91λ.
Closed loop adjustment does not happen between Enrichment Start Threshold and Maximum Load Threshold. And closed loop adjustment does not happen when engine load is below the idle load threshold.
Storing Closed Loop Adapted Values
MAF CAL ADVANCE will display the stored adjustment value, plus the current, highest and lowest value it has used to achieve the target lambda under high load conditions.
Ideally the max and min numbers should be either side of our stored value. If we see the highest value is 1.08 and the lowest and stored value is 1.04, this suggests the closed loop adaption has maxed out it’s adjustment range (+/- 4% of stored value). In this case user should increase stored value to 1.08 and test the engine again.

Top Row, MAF in voltage. (1 volt)
Second Row, stored adjustment multiplier for normal driving (0.96)
Third Row, stored adjustment for full load (1.00)
Fourth Row, current closed loop setting for normal driving (0.96)
Fifth Row, current closed loop setting for full load conditions (1.00)
Sixth Row, maximum closed loop adjustment used, for full load, since turn on (1.00)
Seventh Row, minimum closed loop adjustment used, for full load, since turn on (1.00)

To store closed loop values, use “Gen Mult” +/- to match closed normal driving value, or the value you choose.
And likewise for “Load Mult” +/- to store the new chosen full load multiplier/adjustment.
Note. The closed loop values are not stored. User must use the plus and minus buttons to set the stored value before tuning off the MAF CAL unit. When the unit is switched off all closed loop values will be lost. When unit is restarted the stored value will be used for the current, min and max values, until conditions have been met where the closed loop function has started to make adjustments.
