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.

image-20260618-211219.png

What you're adjusting

Map

Role

Knob(s)

BMWtchctr_pwr_Pctl_M (Bx8) / BMWtchctr_pwr_PctlWideRng_M (S58)

Feed-forward compressor power — main spool lever

Single %

BMWtchctr_p_DifCrtnPp_M

Proportional (P) correction

+ and −

BMWtchctr_p_DifCrtnPpDyn_M

Dynamic P correction (transients)

+ and −

BMWtchctr_pwr_Dp_M

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.

image-20260618-211810.png
image-20260618-211849.png

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%:

image-20260618-213518.png

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 (-) %:

image-20260618-214334.png

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 (-) %:

image-20260618-214820.png

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 (-) %:

image-20260618-215328.png

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:

  1. Flash with everything at 0% and log a few antilag events to get a baseline.

  2. Lazy spool? Raise Pctl_M +5–10% — it's the dominant lever. Re-log, repeat until spool is acceptable without crossing target.

  3. Slight overshoot on the way in? Add damping: Dp_M +10–15%.

  4. Still lagging closed-loop? Nudge DifCrtnPp (+) +5–10%, and leave the (−) side strong — that's your overboost brake.

  5. 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:
1 = Under Coolant Temp Limit
2 = Over Coolant Temp Limit
4 = Over EGT Limit
8 = Over IAT Limit
16 = Over Boost Limit
32 = Over Duration Limit

PID component outputs — see what each part is doing

Friendly name

Unit

Map it reflects

Boost: Compressor Map

kW

BMWtchctr_pwr_Pctl_M (feed-forward)

Boost Pressure: Delta Correction

hPa

BMWtchctr_p_DifCrtnPp_M (P)

Boost: Dynamic Fader (PID)

—

BMWtchctr_p_DifCrtnPpDyn_M fade

Boost: Component-D (Dp)

kW

BMWtchctr_pwr_Dp_M (damping)

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

BMWtchctr_pwr_Pctl_M X-axis

Boost: MAF Corrected

kg/h

BMWtchctr_pwr_Pctl_M Y-axis (B58)

Boost: MAF (Alt) Corrected

kg/h

BMWtchctr_pwr_PctlWideRng_M Y-axis (S58)

WG: Target Exhaust Flow

kg/h

BMWtchctr_p_DifCrtnPp_M / BMWtchctr_p_DifCrtnPpDyn_M Y-axis

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 Boost: Compressor Map vs. airflow)

Raise Pctl_M +5–10%

Overshoot — spikes past target then settles

not enough damping / too much P

Raise Dp_M +10–15%; make sure DifCrtnPp (+) isn't too aggressive; keep (−) strong

Oscillates / hunts around target

too much P or D gain

Back off DifCrtnPp (+) and/or trim Dp_M

Tip-in / transient lag only

dynamic correction faded in (watch Boost: Dynamic Fader (PID))

Nudge DifCrtnPpDyn_M (+)

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.