Added in MG Flasher app version 486
What is this tool
We added in-app adjustability to the Antilag Boost PID maps when flashing custom tunes. This tool reads the boost-controller PID maps and their axes straight from the custom bin you're flashing, lets you nudge them by a percentage, and writes the result into the antilag map slots.
It's there to make the antilag boost-tuning loop faster, not to replace hand calibration.
Values (including axes) come from the custom bin, not the stock map, using original PID maps.
Custom stage flashes only, gated to tuner accounts.
Every knob is optional and defaults to 0% → at 0% the bin value passes through unchanged.
Always validate with logging. Treat output as a starting point.
What you're adjusting
Map | Role | Knob(s) |
|---|---|---|
| Feed-forward compressor power — main spool lever | Single % |
| Proportional (P) correction | + and − |
| Dynamic P correction (transients) | + and − |
| Derivative (D) damping — anti-overshoot | + and − |
Signed maps scale their positive and negative regions independently; zero cells stay zero. Axes are copied verbatim from the bin.
Normal vs. Expert mode
Mode | Per-side range |
|---|---|
Normal | ±50% |
Expert Tuner Mode | ±100% |
Expert mode requires accepting a warning. Bigger numbers = bigger overboost risk — only use it when you understand the risk and will validate via logs. These limits are intentionally conservative and can be raised on demand later.
How do the maps scale
When looking at the antilag boost PID maps, you can expect the maps to change as follows.
The map screenshots do not represent physical values (power in kW, or pressure in hPa)!
The values are percentage differences when comparing antilag boost PID maps to the OEM location boost PID maps.
This is just to demonstrate how the changes are made by the MG Flasher app!
Maps scaled in halves automatically detect which rows/columns have positive and negative values. They are handled automatically if you rescale the axis or shift the axis by any number of cells.
Antilag_BMWtchctr_pwr_Pctl_M
This map is rescaled in it’s entirely. Here’s how it looks when you set -30% for the P-Portion (Pctl) %slider, all values are reduced by 30%:
Antilag_BMWtchctr_p_DifCrtnPp_M
This map is rescaled in two halves (x-axis), positive and negative boost targets. Here’s how it looks when you set -40% for the Pp Correction (+) % and 30% for the Pp Correction (-) %:
Antilag_BMWtchctr_p_DifCrtnPpDyn_M
Similarly to Antilag_BMWtchctr_p_DifCrtnPp_M, we adjust this maps in two halves (x-axis), positive and negative boost targets. Here’s how it looks when you set -10% for the Pp Correction Dyn (+) % and -10% for the Pp Correction Dyn (-) %:
Antilag_BMWtchctr_pwr_Dp_M
This map is rescaled in two halves as well, but in a different direction (y-axis); positive and negative boost gradient (Boost: Difference Gradient [BMWtchbas_p_DifGra_sw]). Here’s how it looks when you set 20% for the D-Portion (+) % and 10% for the D-Portion (-) %:
Values may appear to not show the exact percentage as requested in app. This is due to the map value resolution/precision when the values are relatively small.
General guidance
Golden rule: better to take longer to build boost than to overboost. Start at 0%, change one map at a time, in small steps, and re-log after every flash.
A rough first pass for a big-turbo antilag setup:
Flash with everything at 0% and log a few antilag events to get a baseline.
Lazy spool? Raise
Pctl_M+5–10% — it's the dominant lever. Re-log, repeat until spool is acceptable without crossing target.Slight overshoot on the way in? Add damping:
Dp_M+10–15%.Still lagging closed-loop? Nudge
DifCrtnPp (+)+5–10%, and leave the (−) side strong — that's your overboost brake.Stop as soon as the response is acceptable.
The PID maps shape how the wastegate reacts — they don't create exhaust energy. If spool is fundamentally lacking on a big turbo, fix the antilag timing first (increase “ignition/fueling aggression” sliders); use these maps to refine, not to brute-force spool.
What to log
The whole point of these knobs is to chase your target vs. actual boost trace and see what each PID
component is contributing. Log these channels during an antilag event, then drive the symptom → knob table below.
Core — target vs. actual (always log)
Friendly name | Unit | Why |
|---|---|---|
Boost Pressure: Target | hPa | What the controller is aiming for |
Boost Pressure: Intake Manifold | hPa | Actual MAP — compare to target |
Boost Pressure: Delta Actual | hPa | target − actual error sign → which side to touch |
Engine Speed (RPM) | 1/min | Spool timeline |
Custom Code: Antilag Status | bool | Confirms the antilag condition |
Custom Code: Antilag Stationary Maps | bool | Specifies if using stationary or rolling maps |
Custom Code: Antilag Usage Duration | ms | Duration of antilag conditions being active |
Custom Code: Antilag Shutdown Reason | status | Determine cancellation reason: |
PID component outputs — see what each part is doing
Friendly name | Unit | Map it reflects |
|---|---|---|
Boost: Compressor Map | kW |
|
Boost Pressure: Delta Correction | hPa |
|
Boost: Dynamic Fader (PID) | — |
|
Boost: Component-D (Dp) | kW |
|
Boost: Compressor After PID | kW | summed output → wastegate |
Axis inputs — confirm which cells you're actually landing in
Friendly name | Unit | Axis of |
|---|---|---|
Boost: Charge Factor Ratio | ratio |
|
Boost: MAF Corrected | kg/h |
|
Boost: MAF (Alt) Corrected | kg/h |
|
WG: Target Exhaust Flow | kg/h |
|
If a channel you need isn't in the logger list, flag it to the MG Flasher team to add it, we’re more than happy to help!
How to read the log → which knob to turn
Lay Boost Target and Boost Actual on the same axis vs. time/RPM. The shape of actual relative to
target tells you what to change. The sign of Boost Pressure: Delta Actual tells you which side: under target → (+) side, over target → (−) side.
What the trace shows | Likely cause | Move |
|---|---|---|
Lazy spool — actual lags toward target | feed-forward too low (check | Raise |
Overshoot — spikes past target then settles | not enough damping / too much P | Raise |
Oscillates / hunts around target | too much P or D gain | Back off |
Tip-in / transient lag only | dynamic correction faded in (watch | Nudge |
Change one map at a time, re-log after every flash, and stop as soon as the response is acceptable.
The (−) sides are your overboost brake — don't weaken them to chase spool.