GenBoard/UnderDevelopment/AlphaN says-
pw = req_fuel * MAP * VE(RPM, MAP) / lambda(RPM,MAP) * gammae * ego_corr (speed density: config13 bit2=0)
pw = req_fuel * VE(RPM,TPS) / lambda(RPM,TPS) * gammae * ego_corr (with alphaN, without MAP: config13 bit2=1)
Notes:
- the gamma_enrichment is the multiple of warmup, afterstart, airdenfactor, baro, etc... enrichments.
- airden: gas law, appr. 10% enrichment for -30C change in MAT
- baro: there is a linear 4% enrichment for 10% less than normal baro (to compensate for more gasflow caused by lower exhaust backpressure)
- the lambdacorr table (the 1/lambda is stored for efficiency, so we call it lambdacorr not lambda) is used as a constant multiplier in open loop mode and closed loop as well. This is the only reasonable operation that gets the desired operation when user changes VE table.
- note that in closed loop mode, ego_corr is adjusted by the ego controller (config.ego_ ...) considering the measured lambda and target lambda (VE table)
- in open-loop mode, ego_corr is always 1.0 (stored as 128 inside SRAM) so the ego_corr is not changed according to the measured lambda.
- firmware (eg. for v3.x) sample MAP before starting, and store that value (unless it deviates from config.baro more than config.dbaro: in that case, eg. if ECM resets during engine running, we don't believe that baro is 20kPa and config.baro is used). grep baro global.h
- uint8_t config13; // c13, bit3:baro bit2:alphan bit1:WBO2 bit0:oddfire
- uint8_t baro; // mean barometric pressure
- uint8_t dbaro; // max difference in barometric pressure