The latest boost-control work on my Supra started with the PID tables. It ended up exposing a problem in the initial wastegate-duty table that PID alone wasn’t dealing with effectively.
Boost demand is influenced by the torque model, so the target moves with operating conditions. That makes Boost Target Error the useful measure: how closely actual pressure follows what the ECU is requesting.
A steady target makes diagnosis easier, but the car needs to track changing demand properly too.
How the target is built, and the PID tables as they stood before this work, are in Boost Control on the Emtron KV12: Where the Target Really Comes From. That post describes refining the initial position table by no more than 3 percent at a time. The changes here are much larger, and they are provisional.
What the original logs showed
The earlier logs contained periods where boost remained around 10–25 kPa below target, alongside substantial changes in wastegate duty.
Three features of the original calibration stood out:
- An isolated 10.00 proportional-gain cell, at −25 kPa error with manifold pressure rising at 5 %/second, compared with 0.50 in every other cell at that error.
- Integral gain dropping to zero at ±10 kPa error, limiting its ability to correct a sustained deficit outside the narrow near-target region.
- Derivative output making sizeable contributions to duty during some transients.
Those observations justified investigating the tables, but they didn’t establish a complete replacement calibration. Some logs also had gaps exceeding a second and channels updating at different rates. That limits how confidently individual output changes can be tied to events happening a few hundredths of a second apart.
The first PID revision
The first revision removed the isolated proportional-gain spike, extended modest integral action further from target and reduced the positive-error derivative gains.
These were trial values, not a finished calibration.
Proportional gain
| Error, kPa | P gain |
|---|---|
| −25 | 0.50 |
| −10 | 0.20 |
| −5 | 0.20 |
| −2 | 0.10 |
| +2 | 0.10 |
| +5 | 0.50 |
| +10 | 0.50 |
| +25 | 0.50 |
The only change from the original was the 10.00 cell. With it gone, proportional gain no longer depends on how fast pressure is rising.
That made the gain surface consistent. It did not establish that overshoot would improve. That cell was the overboost catch: boost well above target and still climbing was the one situation where the controller was allowed to hit hard. Removing it removes that correction too.
The table is also asymmetric, which was inherited rather than introduced. Gain is 0.20 at −5 and −10 kPa, against 0.50 at +5 and +10 kPa. Proportional correction is weaker when boost is above target than when it is below.
Integral gain
| Error, kPa | I gain |
|---|---|
| −50 | 0.000 |
| −10 | 0.010 |
| −5 | 0.018 |
| −2 | 0.025 |
| +2 | 0.025 |
| +5 | 0.018 |
| +10 | 0.010 |
| +50 | 0.000 |
The near-target values stayed unchanged. Adding 0.010 at ±10 kPa allowed integral action to extend beyond the original narrow region, tapering towards zero at ±50 kPa.
The integral limits remained ±5 duty percentage points.
Derivative gain
| Error, kPa | D gain |
|---|---|
| −50 | 3.00 |
| −40 | 0.00 |
| 0 | 0.00 |
| +5 | 0.00 |
| +10 | 1.50 |
| +20 | 1.50 |
| +25 | 1.50 |
| +60 | 0.00 |
The gains at +10, +20 and +25 kPa were halved from 3.00 to 1.50. The negative-error end was retained.
The output limits remained 5–80% duty, and the initial-position table was initially left unchanged.
That last decision became important.
Why boost status mattered
Some of the earlier duty changes coincided with changes between Emtron boost status 15: ON–Mass Flow Limit and 1: ON.
Those transitions could change both the final boost target and the initial duty selected from the table. A sharp duty change therefore wasn’t automatically evidence of a PID problem.
The distinction matters on this car because the final boost request is influenced by the torque model. Looking only at the base target, or only at the PID outputs, misses part of the control sequence.
Boost system status and boost PID status are also separate channels. Their numbers cannot be interpreted interchangeably.
Status names are from Emtron’s Boost Status reference.
The sixth-gear log below shows how large those transitions are. Between about 3,000 and 3,100 rpm, the status flipped between 1: ON and 15: ON–Mass Flow Limit four times. Each flip moved the target between 290 kPa and roughly 190–200 kPa, and moved commanded duty between 80% and about 31%. None of that was the PID.
At a target near 190 kPa the initial position also read zero, because the table holds zero at 200 kPa and below. From about 3,100 rpm the status stayed at 15 for the rest of the pull, so the whole overshoot happened with the mass flow limit setting the target.
The run that exposed the overshoot
The next useful log contained a sixth-gear pull from approximately 3,000 to 4,300 rpm, with no shift recorded during the pull.
It showed a clear overshoot:
| Measurement | Recorded result |
|---|---|
| Worst logged Boost Target Error | −57.6 kPa / −8.4 psi |
| Peak manifold pressure | 326.9 kPa absolute |
| Peak gauge boost | 223.7 kPa / 32.4 psi |
| Approximate time more than 10 kPa above target | 0.9 seconds |
| Median error in the short final tracking section | +4.9 kPa / +0.7 psi |
Positive error means actual pressure is below target. Negative error means it is above target.
This wasn’t simply an apparent overshoot caused by the target suddenly falling. During the initial pressure rise above target, the target itself increased from approximately 261 to 271 kPa absolute.
Actual pressure climbed much faster.
The maximum logged error and maximum manifold pressure occurred at slightly different timestamps. With independently updating channels, those figures should not be forced into an exact same-row calculation.
The initial-duty table explained much of it
At approximately 3,680 rpm, boost was almost on target:
- Boost Target Error: +3.3 kPa
- Initial duty: 75.5%
- Final commanded duty: 74.6%
The engine was already reaching the requested pressure while the controller was still commanding substantial spool duty.
The original initial-position table held 100% duty through 3,500 rpm for target rows from 220 to 340 kPa. It then dropped sharply towards the values at 4,000 rpm.
| Target vs rpm | 2,000 to 3,500 | 4,000 | 4,500 |
|---|---|---|---|
| 220 kPa | 100 | 26.5 | 20.0 |
| 240 kPa | 100 | 28.0 | 22.5 |
| 250 kPa | 100 | 29.0 | 24.0 |
| 260 kPa | 100 | 29.5 | 25.0 |
| 280 kPa | 100 | 31.0 | 28.0 |
| 300 kPa | 100 | 32.5 | 30.5 |
| 320 kPa | 100 | 35.5 | 33.5 |
| 340 kPa | 100 | 40.0 | 36.5 |
For the 260 kPa target row, interpolation produced this curve:
| Engine speed, rpm | Initial duty, % |
|---|---|
| 3,500 | 100.0 |
| 3,600 | 85.9 |
| 3,700 | 71.8 |
| 3,800 | 57.7 |
| 3,900 | 43.6 |
| 4,000 | 29.5 |
The table tapered spool assistance according to engine speed, without directly accounting for how close actual boost had come to target.
In this sixth-gear pull, boost reached target before RPM had advanced far enough through that taper. Feedback then had to remove a large amount of duty while pressure was already rising rapidly.
Between target crossing and the pressure peak, about half a second, the taper itself took initial duty from 75.5% to about 51%, and P removed roughly another 26 points. Pressure kept rising anyway.
That strongly implicated the feedforward transition. It did not prove that every aspect of the overshoot came from that table.
What P, I and D were doing
The individual outputs helped separate the causes.
P was correcting the overshoot. It eventually removed approximately 27 duty percentage points. That correction arrived as negative error developed, but it did not prevent the pressure peak.
It was also starting from its weakest settings. Between −2 and −10 kPa the gain was 0.10 to 0.20, reaching 0.50 only at −25 kPa. This overshoot passed −25 kPa with pressure still rising, which is the region the removed 10.00 cell used to cover. The log can’t show what that cell would have done, but this run went through the conditions it was there for.
I was not winding up and driving the event. Integral output was approximately zero at target crossing and slightly negative at the peak. Increasing integral correction would not address the main cause shown here.
D had a gap around target crossing. The revised table had zero derivative gain from +5 to −40 kPa error, as the original did.
As error approached zero from the positive side, derivative gain tapered away. It then remained zero through the first 40 kPa of overboost, approximately 5.8 psi. Gain only returns beyond −40 kPa, reaching 3.00 at −50. With a worst logged error of −57.6 kPa, derivative gain was available only over the last 18 kPa or so of the overshoot.
The log shows what that did. Above target, derivative output was zero from about −13 kPa to beyond −50 kPa. Its only negative contribution there was −2.1 points, at the peak. As pressure began to fall it switched to +6 and then +12 points, with boost still 30 to 50 kPa over target.
That is derivative doing its job, resisting the rate of change. Here, though, it was adding duty to an engine that was still overboosting, and final commanded duty briefly climbed from 17% back to 46% in that window. On this run, the −50 kPa end of the D table added more duty during recovery than it removed at the peak.
The combination was the problem: high initial duty approaching target, with weak proportional and no derivative correction through target crossing.
The first D revision had retained that gap. The later log showed why it could not be treated as a validated overshoot-control calibration.
Adding resolution where the problem occurred
Seven engine-speed breakpoints were added to the initial-position table: 3,250, 3,600, 3,700, 3,800, 3,900, 4,100 and 4,250 rpm.
The existing 3,500 and 4,000 rpm breakpoints were kept. The 4,000 rpm values stayed as they were. The 3,500 rpm values did not: for the 220–280 kPa rows they came down from 100% to between 50 and 57%.
Adding columns alone changes nothing if the new values simply reproduce the old interpolation. The purpose was to create enough resolution to reshape the transition deliberately.
The revision reduced duty earlier and brought it closer to the existing 4,000 rpm values before the previous target-crossing point. It covers the 220–280 kPa rows from 3,250 to 3,900 rpm.
| Target | 3,250 | 3,500 | 3,600 | 3,700 | 3,800 | 3,900 | 4,000 | 4,100 | 4,250 |
|---|---|---|---|---|---|---|---|---|---|
| 220 kPa | 80.0 | 50.0 | 42.0 | 35.0 | 30.0 | 28.0 | 26.5 | 25.0 | 23.5 |
| 240 kPa | 80.0 | 52.0 | 43.0 | 36.0 | 32.0 | 30.0 | 28.0 | 27.0 | 25.0 |
| 250 kPa | 80.0 | 54.0 | 44.0 | 37.0 | 33.0 | 31.0 | 29.0 | 28.0 | 26.0 |
| 260 kPa | 80.0 | 55.0 | 45.0 | 38.0 | 34.0 | 31.5 | 29.5 | 28.5 | 27.0 |
| 280 kPa | 80.0 | 57.0 | 47.0 | 40.0 | 36.0 | 33.0 | 31.0 | 30.5 | 29.5 |
| 300 kPa | 100.0 | 100.0 | 86.5 | 73.0 | 59.5 | 46.0 | 32.5 | 32.0 | 31.5 |
| 320 kPa | 100.0 | 100.0 | 87.0 | 74.0 | 61.5 | 48.5 | 35.5 | 35.0 | 34.5 |
| 340 kPa | 100.0 | 100.0 | 88.0 | 76.0 | 64.0 | 52.0 | 40.0 | 39.5 | 38.5 |
These are provisional trial values, chosen to reduce the excessive duty carried into target crossing. They were not calculated from measured equilibrium wastegate requirements.
At 3,700 rpm and a 260 kPa target, initial duty falls from approximately 72% to 38%. That is a substantial change, with a possible cost in spool response.
The 80% at 3,250 rpm changes less than it looks. It matches the 80% output limit, so while boost is still below target the commanded duty there is the same as before. The real reduction starts at 3,500 rpm.
The 4,100 and 4,250 rpm columns are there for later shaping. For now they hold interpolated values only.
Checking the entries mattered
The first screenshot of the edited table showed that the 280 kPa row had been missed.
That would have affected operation below 280 kPa too, because the ECU interpolates between target rows. EMtune had filled the new 3,700 rpm cell in that row with 72.5%, the original interpolation rounded to the nearest 0.5. At 270 kPa and 3,700 rpm, that would have produced approximately 55.25% initial duty, rather than the intended 39%.
The row was corrected before considering the revision complete.
A separate limitation remains above it. The 300–340 kPa rows retain the original aggressive spool profile, and the step into them is steepest at 3,500 rpm:
| Target | 3,500 rpm | 3,700 rpm |
|---|---|---|
| 280 kPa | 57.0 | 40.0 |
| 290 kPa | 78.5 | 56.5 |
| 300 kPa | 100.0 | 73.0 |
That matters in sixth gear. With the 10 kPa sixth-gear target offset, 290 kPa is the full-demand target in that gear, and this log requested exactly that whenever the status returned to 1: ON. The revised 220–280 kPa region does not establish that the rest of the table is suitable.
Where the calibration stands
The revised initial-position values have been checked in the calibration screenshots. There is not yet a subsequent log demonstrating their effect.
P, I and D are being held unchanged for the first comparison so the effect of the feedforward change can be assessed separately. Three closed-loop issues remain open: the derivative gap from +5 to −40 kPa, the weaker proportional gain above target now that the 10.00 cell has gone, and a −50 kPa derivative gain that adds duty during recovery from overboost.
The next assessment centres on Boost Target Error:
- Peak negative error during boost arrival.
- Time spent above target.
- Recovery after the peak.
- Any additional positive error or slower spool introduced by the reduced duty.
- Behaviour when the torque model changes the target or boost-control state.
The useful result will be a smaller, shorter overshoot without creating an excessive boost deficit elsewhere. Until that is demonstrated, this remains a calibration under development.
The lesson from this stage is specific: before asking PID to correct a boost error, examine the initial duty it is correcting around. In this run, boost was arriving on target with roughly three-quarters duty still commanded. That was the first problem to address.
More to come.