The boost target table
The boost target table is the controller's wish. It tells the ECU: at this engine speed and this throttle position, try to make this much manifold pressure. It does not promise that pressure happens. It says what the controller is aiming at.
Every cell in the table holds one number. That number is in kilopascals absoluteAn absolute pressure measurement, with zero meaning a perfect vacuum. Standard atmospheric pressure at sea level is about 101 kPa absolute, which equals 0 psi gauge on a boost gauge.Unit · SI — kPa abs. Atmospheric pressure at sea level is about 101 kPa. Anything above 101 is boostWhen manifold pressure exceeds atmospheric pressure. A boost gauge reads zero at atmospheric and counts upward in psi or bar from there. Vacuum is below atmospheric.Glossary. Anything below is vacuum.
Reading a real one
This is the actual top half of a target table from a stock-turbo Mazdaspeed Miata. Rows are throttle position; columns are engine RPM. Cells are kPa absolute. The hot cells are colored hotter.
| 3000 | 3500 | 4000 | 4500 | 5000 | 5500 | 6000 | 6500 | |
|---|---|---|---|---|---|---|---|---|
| 100% | 152 | 160 | 160 | 139 | 135 | 122 | 119 | 115 |
| 80% | 150 | 157 | 158 | 139 | 134 | 121 | 117 | 115 |
| 60% | 135 | 142 | 154 | 140 | 132 | 119 | 115 | 115 |
| 40% | 120 | 125 | 130 | 130 | 128 | 119 | 115 | 115 |
| 20% | 105 | 108 | 110 | 110 | 110 | 108 | 108 | 105 |
| 0% | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 |
The cell at 4000 RPM, 100% throttle says 160. That means: when the driver is wide open and the engine is spinning 4000, the controller will aim at 160 kPa absolute manifold pressure.
Converting to psi gauge
The number on a boost gauge is the gauge pressure — pressure above atmospheric. To convert kPa absolute into psi gauge:
So the 160 at WOT/4000 in the table above is (160 − 101.3) × 0.145 = 8.5 psi. That's the boost target.
| psi | kPa | psi | kPa | psi | kPa |
|---|---|---|---|---|---|
| 2 | 115 | 12 | 184 | 22 | 253 |
| 3 | 122 | 13 | 191 | 23 | 260 |
| 4 | 129 | 14 | 198 | 24 | 267 |
| 5 | 136 | 15 | 205 | 25 | 274 |
| 6 | 143 | 16 | 212 | 26 | 281 |
| 7 | 150 | 17 | 219 | 27 | 287 |
| 8 | 156 | 18 | 225 | 28 | 294 |
| 8.5 | 160 | 19 | 232 | 29 | 301 |
| 9 | 163 | 20 | 239 | 30 | 308 |
| 10 | 170 | 21 | 246 | ||
| 11 | 177 | 1 bar boost (14.5 psi) = 201 kPa | |||
Why low cells matter too
The bottom row (0% TPS) is set to 100 across the board — atmospheric. That tells the controller: when the driver isn't asking for boost, don't try to make any. Wastegate stays open, manifold sits at idle vacuum.
The middle rows (40–80% TPS) hold partial-throttle targets. A driver cruising at 60% throttle at 4500 RPM doesn't want full boost — they want a moderate amount, hence the 140 in that cell instead of the 148 at WOT. This is what gives the throttle pedal a sensible feel. Per the MS3-Pro manualOfficial documentation from DIYAutoTune covering the closed-loop boost control settings, including the role of throttle position in the target table. Page 195 →MS3-Pro Manual · Page 195: "Typically, lower throttle positions will have lower boost targets. This lets you modulate the boost with the throttle."
What the controller can actually deliver
Here's the thing the table doesn't know about: hardware. A target says "aim at 160 kPa," but whether the engine can make 160 kPa depends on three independent ceilings, each of which can be lower than the target:
Compressor ceiling. Your turbo's compressor can only flow so much air. A stock IHI on a Miata peaks around 13–14 psi at its sweet spot RPM and falls off at the redline. No table value gets you above that. Target 25 psi with a stock IHI and you'll just stare at the wastegate fully closed making 13 psi.
Injector ceiling. Each injector can only stay open for so much of each engine cycle before it's commanded longer than the cycle window. Past about 85% duty cycleIndustry-consensus safety limit for static-flow injectors. At 100% the injector is fully saturated and cannot deliver more fuel even if commanded. The 15% margin handles transients, voltage sag, and dead-time variation.FIC, Injector Dynamics, RC Engineering the engine starts running lean of target. Past 100% the injector is delivering its absolute physical maximum and any further "command" goes nowhere. AFR drifts lean. Detonation risk goes up fast.
Knock ceiling. Pump fuel only resists detonation up to a certain effective compression. With a 9.5:1 static engine on 91 octane, you're typically out of timing margin around 12–14 psi. More boost = needs more octane or water/methanol injection.
The real safe boost at any RPM is the smallest of: target, compressor max, injector max, and knock max. That's what a good tune respects. It's why the table values taper down at high RPM on a small turbo with stock injectors: the injector and compressor limits drop with engine speed, and the table follows.
The bias duty table
The bias duty table is the controller's first guess. It tells the ECU: given that the target boost is X and the engine is spinning at Y, here is roughly what the wastegate solenoid duty should be. The PID then adjusts from that starting point.
What is duty cycle?
Your wastegate is held shut (or pulled open) by a solenoid that pulses on and off many times per second. Duty cycleThe fraction of each PWM period that the solenoid is energized. 25% duty means it's on for one quarter of the time, off for three quarters. MS3 supports 11.1–78 Hz in slow mode and 12–1021 Hz in mid mode.MS3-Pro Manual · Page 194 is the percentage of time the solenoid is energized. 25% duty means the solenoid is on for one quarter of every cycle. 75% means three quarters. This car's MS3 is set at 39 Hz, in the 19.5–39 Hz range that DIYAutoTune recommends for their boost control solenoid.
What duty cycle does to the wastegate depends on the Output Polarity settingSet in MS3 under boost control settings. "Normal" is the standard fail-safe configuration: loss of power → minimum boost; with this setting, higher duty cycle = more boost. "Inverted" is the opposite. Page 194 →MS3-Pro Manual · Page 194 in your boost control configuration. With Normal polarity (the standard fail-safe setup, which is what your car runs):
0% duty = solenoid de-energized = dome vented = wastegate spring controls = minimum boost (the engine lands at whatever the spring's set pressure is, plus whatever the gate can't bleed off).
100% duty = solenoid fully energized = dome held at max pressure = gate forced closed = maximum boost build effort.
From the MS3-Pro manual: "Normal is used when you have a conventionally set up boost control solenoid designed to go to minimum boost if it loses power as a fail-safe; with this setting, higher duty cycle means higher levels of boost."
If your car is set to "Inverted" polarity instead, the convention flips: lower duty makes more boost. The polarity setting is matched to your specific solenoid and plumbing such that "higher duty = more boost" should always be the result on a properly-configured setup. If you're unsure, a low-RPM 3rd gear pull will tell you immediately.
The table itself
Your bias duty table is 8 by 8. The Y axis is target boost (in kPa abs, same as the target table). The X axis is RPM. A cell answers: "if I'm being asked for this much boost at this RPM, what duty should I start with?"
| 1000 | 2000 | 3000 | 4000 | 5000 | 6000 | 7000 | 8000 | |
|---|---|---|---|---|---|---|---|---|
| 205 | 100 | 39 | 39 | 39 | 41 | 43 | 45 | 45 |
| 171 | 100 | 36 | 36 | 36 | 38 | 40 | 42 | 42 |
| 164 | 100 | 34 | 34 | 34 | 36 | 38 | 40 | 40 |
| 150 | 100 | 32 | 32 | 32 | 34 | 36 | 38 | 38 |
| 143 | 100 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 100 | 100 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Reading it: at row Y=164 (target ~9 psi gauge), column 4000 RPM, the value is 34. That means: "if the controller wants 9 psi boost and I'm at 4000 RPM, start the wastegate solenoid duty at 34%." Then the PID measures actual MAP, compares to the target, and trims duty up or down from 34 to land on target.
The 100% values in column 1000 RPM (very low RPM) are the controller's "primed for spool" state — full solenoid effort, gate forced closed, ready to make boost the moment exhaust energy arrives. At idle this doesn't actually do anything because the engine isn't producing exhaust to drive the turbine. The 0% values in the low-target rows (Y=100, Y=143) are saying "if all you're asking for is atmospheric or near-spring pressure, no solenoid effort is needed — let the wastegate spring do its thing."
Why the bias table exists at all
You could in theory let a pure PID controller figure out the duty from scratch every time. In practice that's twitchy and slow. The bias table gives the controller a head start so the PID is doing small corrections, not large ones. From DIYAutoTune's Matt CramerLead at DIYAutoTune.com, who manufactures the MS3-Pro. His description of the bias table is the canonical reference. MSExtra forum →MSExtra Forum · t=62621:
"The target boost level is simply how much boost you want to run. The bias table is how much duty cycle the MS3-Pro should start with to give you that much boost. It then uses PID to adjust the duty cycle if you don't hit your target." Matt Cramer · DIYAutoTune
Tuning the bias table
The clean way to set the bias table: log a real WOT pull, watch what duty cycle you actually settle at to hold each (target, RPM) combination, then put those duty values in the table. The PID after that has near-zero work to do in steady state, and all of its authority is available to fight transients (sudden boost spikes, sudden pedal lifts).
If your bias table is set too high, the PID will be constantly trimming downward. If it's too low, the PID will be constantly trimming up. Either way, you've burned PID authority on something the table should have known. From Ken CulverMS3 firmware developer, longtime MSExtra forum moderator. His guidance on bias-table tuning is canonical for the platform. MSExtra forum →MSExtra Forum · t=62607 on MSExtra:
"When in the setup mode, build the bias table KPA values from your wastegate spring pressure to slightly above the max desired KPA. Then you will need to fill in the rest of the table with DC values that relate to the KPA values at the various RPM's. [...] You may find that higher DC values are needed at higher RPM's because exhaust back pressure may be pushing the wastegate more open." Ken Culver · MS3 Developer
How they work together
Every few milliseconds, the ECU runs the same loop. It reads where you are (RPM, throttle, current MAP), looks up where you should be (target table), looks up roughly what duty that needs (bias table), then trims with the PID based on the gap between actual and target.
The activation gates
Closed-loop PID doesn't run continuously across all conditions. MS3 has two settings — Lower Limit DeltaDefined in Boost Control Settings. The width below target at which PID becomes dormant and the controller forces 100% duty (gate forced closed) to encourage spool. Page 195 →MS3-Pro Manual · Page 195 and Upper Limit DeltaDefined in Boost Control Settings. The width above target at which PID becomes dormant and the controller forces 0% duty (gate allowed open) to prevent integral wind-up during overshoot.MS3-Pro Manual · Page 195 — that define a window around your target where PID is allowed to modulate. Outside that window, the controller falls back to forced behavior.
Lower Limit Delta. When actual MAP is more than this far below target, the controller forces 100% duty. PID is dormant. This is MS3's built-in "wake up" mechanism — the wastegate is held primed for spool without the PID needing to do anything.
Upper Limit Delta. When actual MAP is more than this far above target, the controller forces 0% duty. PID is dormant. This is anti-overshoot — solenoid backs off completely when boost has exceeded target by more than the platform's tolerance for transient excursion.
Between these two thresholds, PID is active and modulating duty around the bias table value.
Per Ken CulverMS3 firmware developer, longtime MSExtra forum moderator. Quote from MSExtra forum thread 39019 on closed-loop boost behavior. MSExtra forum →MSExtra Forum · t=39019: "it'll come on at 150, keeping the wastegate closed (0% duty) until PID engages. The idea being that you'll get a faster spool." The gates are MS3's native spool-encouragement and anti-overshoot mechanisms. They do not need help from clever table values.
A common misconception is "encouraging spool" by setting sub-spool cells in the boost target table above atmospheric — commanding 1–2 psi at 2500 RPM, for example, with the intent of keeping the wastegate closed earlier. This is the wrong place to put that logic on every closed-loop PID boost platform that's been reviewed (MS3, Holley, AEM, Haltech, Link, MoTeC all direct spool encouragement to feedforward tables, not the target setpoint).
The controller would integrate against an unreachable target during the entire pre-spool period, and when boost finally arrives the accumulated integral dumps as overshoot. Holley's boost control documentation states the same general principle in the context of their dome pressure feedforward table: "Some people choose to use artificially high values at lower engine speeds with the hope that it will accelerate spool up… but be aware that the only thing the solenoid can do is keep the wastegate closed. If the wastegate is fully closed at 10 psig dome pressure, there is no reason to run 40 psig. It only creates more activity for the dome pressure controller." The artifact is different (Holley's dome pressure feedforward table vs. MS3's boost target table) but the misuse is the same: commanding a value the system physically can't reach just to encourage controller activity.
The right place to encourage spool is one of three places, none of which is the target table: (1) raise Lower Limit Delta so the platform's built-in 100% duty hold persists longer, (2) raise duty in the bias duty table at sub-spool RPM × high-target cells, or (3) in open-loop mode, populate the open-loop duty table at sub-spool RPM cells.
Walk through one cycle
Example: 4000 RPM, 100% throttle, current MAP = 130 kPa
The key insight: the target table is where you want to go. The bias table is how to get most of the way there. The PID is the small, fast corrections that close the rest of the gap, only inside the window defined by the activation gates. All four mechanisms working together produce smooth boost control.
Anatomy of a WOT pull
What does all this look like in motion? Below is a simulated wide-open-throttle pull with target = 160 kPa, bias = 35%, and Upper Limit Delta = 20 kPa. The top panel shows pressure over time. The bottom panel shows what the solenoid is being commanded to do. Each phase of the pull shows a different mechanism dominating.
Read it left to right and top to bottom. In pre-spool, the target table is shouting "go to 160" but the turbo can't yet — MAP barely rises above atmospheric. The solenoid sits pegged at 100% duty because the PID hasn't entered its active window. The bias table hasn't been consulted at this point either; the controller is just trying to keep the wastegate primed shut.
In spool transit, MAP rises fast through the PID's active range. The controller does math: it sees target − actual error closing, and reduces commanded duty proportionally. Duty drops from 100% toward the bias value. This is the moment when the bias table starts to matter — it's the duty the controller would land on if PID error were zero.
Then the overshoot. The wastegate physically can't open fast enough to catch the rising MAP, so MAP punches through target and exceeds target+ULD. The controller's Upper Limit Delta gate fires: PID is suspended, solenoid duty is forced to 0%, dome vents completely, wastegate snaps open. This drops MAP fast — sometimes too fast, which is what causes the bouncing pattern when the margins aren't right.
Once MAP falls back inside the PID window, the controller resumes. In settled, MAP holds at target and duty rests at bias plus or minus small PID corrections. This is what the entire pull was working toward — a stable equilibrium where the bias table value is correct enough that PID barely has to do anything.
Every cell in both tables affects this picture. Wrong target table → the orange dashed line moves. Wrong bias table → the gray dashed line moves. Wrong activation gates → the red dashed line moves and the overshoot zone changes shape. Wrong PID gains → the rise and recovery shapes change. The chart is a portrait of every setting interacting at once.
Reading the log: what duty cycle tells you
A boost duty log shows you exactly how the controller is behaving. Some patterns are obvious; others tell you something specific is broken.
Smooth 30–50% steady at peak boost. Properly tuned. PID has authority and is modulating gently around a good bias value. This is what a working boost control loop looks like.
Pegged at 100% the whole pull. Target is unreachable with current hardware. The controller is saturated, trying as hard as it can, and the engine still won't make the commanded boost. Check compressor capability, wastegate sizing, or exhaust restriction.
Bimodal — bouncing between 0% and 40–50% during peak. Boost is overshooting target enough to trigger Upper Limit Delta. PID slams duty to zero, MAP drops, PID rebuilds duty, MAP overshoots again, repeat. The system never settles. The fix is either widening the margin between ULD and the cut threshold, or lowering target so peak actual stays inside the PID's active window.
Climbs from bias to higher during steady state. Bias table value is too low for that cell. PID is contributing positive trim to hit target. Move the bias cell upward toward where the steady-state duty actually lands.
Climbs from bias to lower during steady state. Opposite — bias is too high. PID is contributing negative trim. Move the bias cell downward.
A clean log makes the next round of tuning obvious. A bouncing or saturated log tells you something structural is wrong before you start tweaking cells.
Where the math meets the metal
No table value can override physics. The most common reasons a tuner sees actual boost not match target are all hardware. The table is doing what it's told; the engine just can't comply.
Injector saturation
Static-flow injectors have a maximum amount of fuel they can deliver per cycle. Past about 85% duty cycle they start running out of headroom; past 100% they're flowing whatever they physically can and any further command does nothing. The lean condition that follows is dangerous on a boosted engine — incomplete combustion plus high cylinder pressure plus high intake temp is a recipe for pre-ignition or detonation.
The math is simple. At each RPM, the injector has a cycle window of 120000 ÷ RPM milliseconds. At 6500 RPM that's 18.5 ms. Subtract dead time (~1 ms) for opening latency. The remaining time, multiplied by the injector's flow rate, is the maximum fuel mass per cycle. If your target boost demands more fuel than that, you're saturated. The fix is bigger injectors, not table tweaks.
Wastegate spring pressure
The wastegate has a spring that holds it closed against manifold pressure. When manifold pressure exceeds spring force, the gate cracks open. With the solenoid fully inactive (gate spring-only), boost stops climbing at roughly the spring's set pressure — typically 5 to 10 psi for a stock setup, higher with a "stiffer spring."
This sets a floor on how low you can target. If you set a target of 3 psi but your spring is 7 psi, no amount of solenoid duty can take you below 7 psi at the RPMs where the turbo is making at least 7 psi worth of boost. The bias table going to 0% in those cells is the right move (max gate-open effort) but the spring is the limit.
Compressor flow ceiling
At high engine RPM, the turbo's compressor wheel is past its peak efficiency island. It's flowing a lot of air but heating it up substantially, and the pressure ratio it can sustain drops. At the same time, exhaust back pressure rises faster than charge pressure, and even with the wastegate fully open the gate can't bleed off enough exhaust energy to keep manifold pressure down.
This is why peak boost on a small turbo at redline is often higher than what you wanted, not lower — the gate physically cannot relieve the pressure fast enough. Targets and bias tables set lower don't help; they just make the controller try harder. The fix is a bigger gate, an external wastegate, or a different turbo entirely.
Knock-limited boost
Even if your hardware can fuel and flow the boost you want, your fuel might not survive it. Pump 91 octane on a 9.5:1 compression turbo engine is typically out of timing margin somewhere around 12–14 psi. More than that and the engine starts pulling spark — losing power, building heat, eventually knocking. The cure is octane (race gas, ethanol blends, water/methanol injection), not table values.
A safe, honest tune respects all four ceilings. The boost target table at any RPM should be no higher than the lowest of: compressor's capability, injector's capacity, fuel's knock margin, wastegate's bleed authority. Set a target above any of those and you're either making boost the controller can't deliver, or making boost the engine can't survive.
Overboost protection: the safety stack
Section 04 covered the hardware ceilings — what the engine and turbo can physically tolerate. This section is the matching pair: how to set MS3's safety thresholds so the controller protects against exceeding those ceilings without nuisance-firing during normal operation.
Three independent thresholds
MS3 has three separate boost safety thresholds. Each fires at a different condition, and each has a different response. They must be set with margin between them or they fight each other.
1. Upper Limit Delta (PID anti-windup). Controller forces 0% duty when MAP exceeds target + ULD. Soft response — wastegate opens via spring, no engine cut. Lives in Boost Control Settings.
2. Boost Tolerance (relative cut threshold, optional). Triggers spark and/or fuel cut when MAP exceeds target + tolerance. Hard response — engine loses ignition until MAP drops. Lives in Overboost Engine Protection.
3. Maximum MAP (absolute hard cap). Triggers cut when MAP exceeds the configured kPa value, regardless of target. Final emergency stop, no matter what the target is doing.
The margin stack
These thresholds must be ordered with proper margin between them, like layered safety nets:
The gap between Upper Limit Delta and Boost Tolerance is the critical one. The PID's anti-windup (ULD) should fire before the cut, so the controller has a chance to react softly before the hard cut takes over. If the gap is too narrow, normal spool transients will blow through both.
Spool overshoot on a closed-loop boost system is typically in the range of 15–30 kPa above target (varies with hardware — wastegate flapper area, exhaust geometry, turbo inertia, and how aggressively the driver gets on the throttle). The wastegate physically cannot open fast enough to catch a rising MAP during hard acceleration — manifold pressure rises faster than the flapper can travel. This is a hardware-response-speed phenomenon, not a tuning bug.
If Upper Limit Delta is 20 kPa and Boost Tolerance is 30 kPa, the gap is only 10 kPa. A 25 kPa overshoot triggers both: PID slams duty to zero and the cut fires. The duty trace in the log will be bimodal — flipping between 0% and ~40% repeatedly, never settling. The engine experiences nuisance cuts during otherwise-normal pulls.
The fix: widen the gap. Either raise Boost Tolerance, lower Upper Limit Delta, or drop the boost target so peak actual stays below both thresholds. As conservative starting points (not absolute rules — actual values depend on your hardware's spool transient magnitude): aim for at least 15 kPa between ULD and Tolerance, and at least 10 kPa between Tolerance and Maximum MAP. Tune from there based on what your log shows.
What Maximum MAP should be
Maximum MAP is the absolute hard cap — the threshold above which the engine cuts ignition regardless of what target was being commanded. It's not a value you should ever expect to hit during normal operation. It's the protection against catastrophic boost runaway — stuck wastegate, broken vacuum line, solenoid failure, frozen control loop.
Set it just above what your fuel system can safely fuel. If your injectors saturate around 12 psi (≈184 kPa), Maximum MAP somewhere in the 195–205 kPa range gives the controller working room up to the fuel-side ceiling, but cuts the engine if boost runs away past where the engine can safely operate.
Hysteresis (how far MAP must drop before the cut re-enables) is typically 20–30 kPa. Too tight and you'll get cut-recover-cut oscillation. Too wide and you'll lose more time per cut event before normal operation resumes.
A well-configured MS3 boost setup has all four hardware ceilings respected in the target table, and all three protection thresholds (ULD, Tolerance, Maximum MAP) layered above target with proper margin between them. Either layer alone is incomplete. The target table sets the aim; the protection stack catches what happens when the aim or the hardware is wrong.
Sources & further reading
- MS3-Pro User Manual — Boost Control Settings (Page 194) manualslib.com → page 194
- MS3-Pro User Manual — Closed Loop Specific Settings (Page 195) manualslib.com → page 195
- MS3 1.5 TunerStudio Reference msextra.com → PDF
- "Newbie Boost Control Set up questions" msextra.com → t=62621
- "Boost control issues" / 1.4.1+ msextra.com → t=62607
- "Boost Control Closed Loop" msextra.com → t=39019
- "ITT: MS3 1.4.0+ and Closed Loop EBC" miataturbo.net → 94391
- "Boost control bias duty 1" msextra.com → t=60074
- Holley EFI Boost Control Instructions (199R10628 rev2) documents.holley.com → 199r10628rev2.pdf