Lumpy cams present problems with detecting a stable MAP signal at low RPM. There are many possible solutions to this problem, four are listed below. Simplified equations are used, ignoring all enrichments, compensation and injector opening.
Using pure alpha-N (αN) solves the problem with idle and very low load operation, but gives rotten transitional behavior, poor tuning at mid-throttle and won't work at all with boost.
PW = reqFuel * VE(TPS,RPM) ; MS's current αN code.
Combine the above with the base speed density (SD) equation,
PW = reqFuel * MAP * VE(MAP,RPM) ; MS's current SD code.
PW = reqFuel * MAP * VE(TPS,RPM)
This is trivially accomplished in the MegaSquirt v2 code by commenting out a couple of instructions in the MAP_OVER_BARO section (see the yahoo archives for more) and running with αN turned on.
Use a blending algorithm, which transitions from TPS to MAP as the principal variable across some set of RPM bins.
loRPM = 2000 hiRPM = 3000 if RPM <= loRPM then PW = reqFuel * VE(TPS,RPM) ; Pure αN if RPM >= hiRPM then PW = reqFuel * MAP * VE(MAP,RPM) ; Pure SD otherwise beta = (RPM-loRPM) / (hiRPM-loRPM) PWan = VE(TPS,loRPM) * (1-beta) PWsd = MAP * VE(MAP,hiRPM) * beta PW = reqFuel * (PWan + PWsd)
This allows you to deal cleanly with both sides of the switching region and guarantees a reasonably controllable transition across it. Note that this is a completely general solution, since if you set lo/hiRPM to 25k, it's a pure alpha-N; if you set lo/hiRPM to 0 it becomes pure SD.
Scale some part of the TPS signal into the MAP signal, but retain the SD equation. This idea is taken directly from Electromotive's TEC3.
function f(TPS, MAP): Return interpolated curve instead of the simple ramp given in 3, above. beta = f(TPS,MAP) PW = reqFuel * beta * VE(beta,RPM)
I would guess that your VE table is going to look pretty strange when you mix these two variables in such a fashion, but it appears that it will work mostly the same as 3.