Tuning Reference / MegaSquirt MS3

What the numbers
actually mean.

A plain-English guide to the boost target table, the bias duty table, and the way they decide what your wastegate does next.

§ 01

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 · SIkPa 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.

Boost target table — rows: TPS %, columns: RPM, cells: kPa abs
30003500400045005000550060006500
100%152160160139135122119115
80%150157158139134121117115
60%135142154140132119115115
40%120125130130128119115115
20%105108110110110108108105
0%100100100100100100100100

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:

Convert psi gauge = (kPa abs 101.3) × 0.145

So the 160 at WOT/4000 in the table above is (160 − 101.3) × 0.145 = 8.5 psi. That's the boost target.

Boost pressure conversion · psi gauge ↔ kPa absolute
psikPa psikPa psikPa
21151218422253
31221319123260
41291419824267
51361520525274
61431621226281
71501721927287
81561822528294
8.51601923229301
91632023930308
1017021246  
111771 bar boost (14.5 psi) = 201 kPa 
Formula: kPa absolute = psi × 6.895 + 101.325. Values rounded to nearest whole kPa (within ±0.5 of exact). 0 psi gauge = 101.325 kPa absolute at sea level — high-altitude tuners will see lower kPa values for the same gauge pressure since baro is lower.

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:

⚠ The three ceilings

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.

§ 02

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

Convention for this car (Normal polarity)

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?"

Bias duty 1 — rows: target kPa, columns: RPM, cells: duty %
10002000300040005000600070008000
20510039393941434545
17110036363638404242
16410034343436384040
15010032323234363838
1431000000000
1001000000000

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
§ 03

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.

RPM, TPS where you are Target table → target MAP (kPa) Bias duty table → duty %, first guess PID trim ±20% authority Solenoid PWM out Wastegate opens / closes MAP sensor actual boost (feedback) target base duty % manifold pressure actual

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.

The two gates

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.

⚠ The wake-up myth

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

1.Look up target. Target table cell at (4000 RPM, 100% TPS) = 160 kPa.
2.Look up bias. Bias cell at (Y=160 kPa, 4000 RPM) interpolates ≈ 33% duty.
3.Compute error. Target 160 − Actual 130 = +30 kPa low. Need more boost.
4.Check the gates. Error of 30 may or may not exceed Lower Limit Delta. If LLD = 100, PID is active (30 < 100). If LLD = 20, PID is dormant and solenoid forced to 100%.
5.PID computes correction. With Kp = 100, the proportional term adds duty in the "more boost" direction. Bias 33 + correction → final duty ≈ 38%.
6.Output. Higher duty = solenoid more energized = dome held with more pressure = gate forced more closed = more boost build (Normal polarity).
7.Wait, measure, repeat ~100 times per second.

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.

Manifold pressure 200 180 160 130 100 80 kPa abs target 160 target+ULD 180 atm 100 Pre-spool Spool transit Overshoot Settled Slow turbo wake-up, MAP barely above atm PID climbing through activation window MAP exceeds target+ULD → controller forces 0% duty PID modulating duty around bias to hold target actual MAP Commanded solenoid duty 100 50 0 duty % bias 35% commanded duty Pegged at 100% Falling as MAP approaches target Slammed to 0% PID settled at bias 0.0s 0.6s 1.3s 1.6s 2.5s time since WOT actual MAP target (table) ULD trigger solenoid duty bias (table)

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.

Common signatures

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.

§ 04

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.

The honest tune

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.

§ 05

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.

The protection stack

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:

Margin stack target < target + ULD < target + Tolerance < Maximum MAP

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.

⚠ The bouncing pattern

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.

The complete safety picture

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