New Boostcontrol strategy allows even easier configuration since firmware 1.2.9


PID can be configured to switch to PD when boost is way too low, or to PI when boost is too high

One can of course configure an extremely large window for the PID range

Mattias Sandgren was kind to contribute some documentation embryo - will be moved to [VT help] at "birth-time"

Begin by setting the "Boostcontrol PID integral limit" to 0 and adjust the "refDC Table vs boost target" so that you get a good starting point for enabling the PID regulated boost controller.

Apply max DC until

To shorten turbo spool time you can apply the maximum dutycycle allowed. This can only be done up to a certain limit below the boost target, set this limit here. This must be kept low enough to avoid an initial boost target overshoot that the PID regulation will not be able to stop.

PD control (far from target)

PI control (close to target)

PID overlap range

Boost P, I, D

Boost control PID integral limit

Set how large the integral is allowed to build up. This value is what is added/subtracted to the reference dutycycle in order to reach boost target.

Boost PWM maximum value

Limit the maximum dutycycle the boost control valve receives.

Boost PWM minimum value

Limit the minimum dutycycle the boost control valve receives.

Copied from IRC discussions :

Overlap is PID mode, where its far enough from target to still might need the D term

PD is for not winding the integral up when too far from target

PI is close to target (its now control range)

when close to target, PI only is used, as D wouldnt make any big difference anyway

so it can be used with higher settings from far away, still not messing with close to target control

What is the buildup range and control range?

Buildup integral is frozen and control derivate is disabled. It means "too far from target, probably not physically possible to reach, don't build up a integral error" and disabling D term "close enough to target, error for P is small, so no D needed".

Overlap is PID

P is not active between max dc and buildup

Buildup = I frozen outside this range

buildup enables PD

control is PI

between buildup and maxduty there is referece only

Future ?

the buildup range might go, just enabling PD from maxduty

its easier to find the optimal P if its scaled in kpa / %


(may2013 FPhil)This is what I get from above, I hope that is correct

DOMAIN zero to maxDCmaxDC to BuildUp?BuildUp? to CntrlCntrl to TargetTarget to ? (Overlap)
PARAMS PWMmin & maxid & I limitid & I limit id & I limit
What happen if for some reasons boost enter the Cntrl to Target domain at fast increase? one can then expect a large overshoot.


My way is start tune with quite large PID values and low boost with slope RefDc? table where bottom row is W-gate minimal pressure and top row - aprox 30Kpa above my maximum boost expectations. Bottom line filled with 0...10, top line - 60...100 - spring dependant, Interpolation inbetween. With PID enabled it is easy to fill Ref DC table with correct values just by reading the log file. Wise way is match row boot value with current target - then actual BoostDC? represent DC values for table. Overshoot or slow buildup can be achieved by table increase or decrease respectively.

What is good in new strategy - it allows much larger Integral values.

First WOT run with boost valve off [minimal pressure] is helpful for further tuning. GintsK?.


Since vemstune knows the runtime integral, it can display the contribution of I term by multiplying with configured pid_ki value (and a constant):

(MAP - boost_target_raw*16) * config.boost_pid_kp / 8
  • The unit is not kPa but 1/4 kPa for MAP (and 4 kPa for boost_target_raw, that's why the *16 - only applies locally, *16 MUST not be applied to MAP !)
  • So for kp=100, with MAP 10 kPa below target: ((190-200)*4) * 100 / -2048 = 1.95 (/256 of full range, so 0.76 %)
  • perceived : KPA_ERROR * kp / 100 / 32 , when Error is 10kpa, kp is 100 , then output P is 0.3125%
  • Where did you see 0.3125 % ? Although internally higher resolution, don't you see output DC in 0.39% steps ? Maybe you mean 31.25 / 256 = 10 * 100 /32 / 256 = = 12.2%

Similarly for IAC:

Since the actuator is known (eg. boost_DC and iac_duty )

contribution of D term follows : output = reference + P + I + D

(although D term is "transient" by nature, so I compensates in the long run).

[VT playground] for testing with new variables for gauges that can be selected ( also, the custom variables can be used to test new formulas in ini file - very useful ).

Gunni is writing a complete boost control guide for VEMSīs new setup, but have found the following:

"I" value influences the Integral limit and thus the total possible DC% that the I value is able to give.

I have detailed so far the operation of getting to a final boost target in a flow chart and then getting to a final BoostDC?% but need more information about the PID values

Benchtesting shows clearly

I value:

D value contribution:

PID 0-255 scaling:

Ideally would be removed and engineering scaling implemented instead even if itīs a drop down menu with 255 pre selected values or Vemstune automatically rounds down or up to the nearest allowed value like is seen in many places already.

Boost PID output is logged (boost_DC and iac_duty).

More questions

PD control:

If PD control is set to 20kpa and PI control to 10kpa, at what point does the D control disable?

PI Control:

If PI Control is set to 10kpa and PID overlap range is set to 6kpa at what point does D disable ?

Note : if PI Control is higher then PD control then PI control is disabled until PD control is within range seemingly allowing PID control from that point until some unknow point.

PID overlap range:

What does "forever" mean. Does 6kpa mean that PID is enabled when TargetError? is within 6kpa of target?

Calibration inputs and outputs should be ALSO DISPLAYED in real world engineering values


P_DC%/100KPA_Error = 40% = Kp (Then at 20kpa error you get 0.8% )

I_DC%/100KPA_Error/sec = 20% = Ip (Then at 40Hz, this is 0.5% for 100 KPA_Error per update event or 0.1% for 20kpa error or 4%/sec).

D_DC%/1000KPA_Error_change/sec = 50% (If KPA_Error is changing at a 1000kpa/sec then reduce DC% by 50%)

I_DC%_LIMIT = 10% (Ip is capped at -10% or 10% output)

So when calibrating you have

P_DC% +

I_DC% +

D_DC% +


= BoostDC?%

And when reviewing logs you can actually see if your D_DC% is overracting or underreacting very clearly. As well as you can determine if the required BoostDC?% is mostly based on P or I in real comparable terms.