Power regulation related subpage of GenBoard/UnderDevelopment/FirmWare

A proposed power-target sublayer that consolidates

all are some way of controlling power, with a combination of

Unified fuelcut - minimalistic


if( RPM > overrun_fuelcut && (TPS < iac_tps_threshold))
|| ( kpa < fuelcut_min_kpa){
  then  cut fuel;

This works very well normally, but does not work well for broken IAC (which is not uncommon in racing). The following is a proposed candidate, under evaluation:

if( RPM > overrun_fuelcut && (TPS < iac_tps_threshold || kpa < fuelcut_min_kpa){
   then cut fuel;

In the latter case, overrun_fuelcut would be set much lower for a normal setup (IAC operational). No difference in normal operation, but it would make limp-home harder with a broken TPS sensor.

Overrun can be used to help race-start: Setting overrun fuelcut and fuelresume RPM to 3700 / 3400 RPM and applying a switchbutton that grounds the TPS signal. This way during race-start the rev is ideal for fast starting. (otherwise it is almost impossible to manually maintain the desired RPM with throttle and no load: the throttle is usually very touchy). The idle-air valve will close but who cares the throttle is opened anyway. Don't let the idle controller retard the ignition too much (a few degrees are OK).

After starting, switchbutton released, TPS signal back to normal, so rev-limit is raised to redline.

It would make sense to use a separate digital input channel (GenBoard/UnderDevelopment/DigitalInputs) instead of grounding the TPS signal: so 3 rev limits are possible.

Conditionfuelcut RPMfuelresume RPM
if TPS < tps_threshoverrun_fuelcutoverrun_fuelresume
else if the racestart switch is ONracestart_fuelcutracestart_fuelcut - (overrun_fuelcut - overrun_fuelresume))
else if the sequential gearbox switch just activated in the last 300msec ...= appr 1200 RPM ....=appr. 1000 RPM
in any case, if they are higher, they lowered torev_limit rev_limit - (overrun_fuelcut - overrun_fuelresume)


Improved AntiLagSystem implementation waiting for review and commit to stable branch.

Needs an external switch (to control its on/off state).

Patch created 11-17-2005: [This patch release] contains all items included in old (mostly bugfix) patch mentioned below, and a completely rewritten ALS code, new launch control, new spark-cut based revlimiters (idle and redline). Spark cut can be fine adjusted in 15 levels. ALS timer and EGT limiter is also implemented. Megatune part also ready for v027. LCD part is not ready, status: untested. More info with screenshots and figures can be found here: MembersPage/GaborRacz/NewAlsLaunchAndOthers.

Please REVIEW and COMMIT this patch, if you found the implementation useful


Patch created 07-13-2005 (re-generated for the current branch 10-31-2005): These modifications (diff-ed to v1.0.23 release) allow AntiLagSystem to set spark ATDC and bug fix to GenBoard/UnderDevelopment/StagedInjectors [Firmware patch] [vemsv3.ini patch]


  • we should merge variables, eg. NBO2 consumes several variables unnecessarily (when dummy NBO2 is used instead of the superior WBO2, the WBO2 variable positions should be reused!)

MembersPage/Gabor wrote:

NOTE: diff for launch control and ALS. [1]. I don't want to commit it yet, because have problem with my board and can't through test it.

We have launch control implemented on a Peugeot NA racecar (that is actually at position 1 in the Hungarian rallycross series, though budget is only 1/4 of several competitors) using overrun fuelcut. TPS is fed from TPS5V (the main point is the 270 Ohm limiting resistor) and the "launch activation" button grounds TPS signal so the GenBoard applies overrun fuelcut (set at appr. 4000 RPM) though the TPS is mechanically pressed (butterfly opened). Plans are to change this a bit, because operating button on dash and handbrake simultaneously is hard (moving button to handbrake would work, but there is a better way, read on): Take care that early_dwellstart might activate the coil timed from previous igndeact. In this case, we don't want fried coils, do we ? We can easily drop ign-activating from the early_dwellstart branch, but we can only drop ign_trigger_here() call if early_dwellstart was not activated.

MembersPage/GoranJurkovic wrote: Check my proposal for Launch Traction Control Algorithm MembersPage/GoranJurkovic/DaewooLaNOS/VemsTCMalg

Idle control

Note that number of bytes (2) and position in config remain.

Some iac stepper valve that drifts very heavily (only seen with a unipolar Mitsubishi IAC, where wiring has to be checked actually: min 20V flyback required for the unipolar channels as low voltage flyback will prevent correct operation, just think about how the coils relate) might benefit from a MAP-target iac implementation, where the ECM watches MAP while stepping IAC.

faster control for solenoid and twin-PWM-solenoid type

When the iac movement is significant (position changes a lot: this can happen eg. when the air conditioner clutch engages and RPM drops) it would be faster to apply full power ON/OFF (in the direction of the change) for time=configurable_constant * amplitude_of_iac_position_change

before the PWM duty is applied to hold the solenoid in position.

Separate AlphaN table

Currently RPM < hybrid_rpm_a of the j[] is TPS-indexed data; RPM > hybrid_rpm_m is MAP-indexed, and it's mixed (blended) in between those RPM-s.

might belong elsewhere: A new variable for VE-learning (maybe dropping an old, unused variable): target ego-correction. Only those will tune to egoc=+0% (the current target for VE-learning) who will race without WBO2 (for whatever reason). Anyone using WBO2 all the time want to tune VE a little richer, so ego-correction is normally -5 .. -10%

Advanced launch RPM limiter idea:

Here is very simple and good usable launch RPM limiter method. I think this could be implemented into VEMS.

During the RPM limit button is pushed, the RPM is limited by the softrpm limiter. We can define an RPM change rate, for example 1000 RPM/ sec. When we release the RPM limiter button, than the softRPM limit will raise until the overrun RPM limit by the given change rate. In our example rpm limit will raise by 1000 RPM/sec.