Closed Loop Tuning

Elite Software Programmer › ESP - Tuning Guide › Boost Control TuningUpdated Sep 2026

Closed loop boost control is only as good as the duty it starts from. Our method on Haltech Elite ECUs is simple: switch the PID controller off, find the start duty that gets you just under target, then bring the gains in one at a time.

Before you start

Get the basic boost control settings in place first (output, solenoid and control type), as covered in Elite boost control. Two ground rules apply to everything below:

  • Every boost target must be above your wastegate spring pressure. The solenoid can only add boost on top of the spring. It can't hold the turbo below it.
  • You need real load to tune boost, which usually means a dyno. See applying load to the engine.

Stage 1: find the start duty with the controller off

The idea is to make the open loop part do nearly all the work, so the PID controller only has to fine-tune.

  1. Set the Control Type to Closed Loop and set the solenoid Frequency. Haltech's wastegate solenoid is designed for 20 to 30 Hz.
  2. Zero out Proportional, Integral and Derivative. With all three at 0%, the controller can't correct anything.
  3. Put Control Point Before Target at its default of 3 psi (20 kPa) and Delay till Boost Control at its default of 0.5 seconds.
  4. Fill the Target Boost table with one flat value across the RPM range.
  5. Enter a small Start Duty. Start low on purpose: too much duty on the first pull is how engines get overboosted.
  6. Load the engine and make a pull. Watch boost and the duty channel of the output you're using. For example, if boost control is on DPO1, display Digital Pulse Output 1 Duty.
  7. Adjust and repeat. Over target: lower the start duty. Well short: raise it. You're done when boost comes up close to target but sits just below it.

What the logs are telling you: a start duty that's too high shows up as a spike as the turbo comes on boost. Too low and boost arrives soft and creeps up toward target.

Stage 2: bring in the gains, one at a time

  1. Proportional first. Restore the controller with Proportional at 50% and Integral and Derivative at 0%. Raise Proportional until boost begins to oscillate, then halve that value. Don't worry if boost still isn't exactly on target. That's the integral's job.
  2. Integral second. Raise Integral until boost settles as close to the target as you need.
  3. Derivative last, and only if needed. If boost overshoots the target as it arrives, add Derivative in very small steps until the overshoot is tamed. It's the most sensitive of the three, and too much of it makes boost unstable.

For more on how each gain behaves, see tuning PID settings.

Stage 3: a start duty table for changing targets

A single start duty works when target boost is flat. If the target changes with RPM, a boost trim knob or a gear-based correction, a single value will be too high for low targets and too low for high ones. That's where the Start Duty table comes in: it gives the ECU a start duty for each target.

  1. Leave Use Start Duty Table unticked. Set the whole Target Boost table to the lowest boost you'll ever run.
  2. Run Stage 1 up to the point where the start duty is found (the controller stays off). Note the target and the start duty.
  3. Raise the target by about 3 psi (20 kPa) and find the start duty again. Keep stepping up until you reach the engine's maximum boost. You now have a list of start duties at roughly 3 psi intervals.
  4. Enter those values in the Start Duty table. Above your highest target, carry the highest start duty across. Below your lowest target, taper the values down so they reach zero at the column matching wastegate spring pressure.
  5. Tick Use Start Duty Table.

For example, if the engine runs between 100 and 140 kPa of target boost, the columns above 140 would repeat the 140 kPa duty, and the columns below 100 would slope down toward zero as they approach spring pressure.

Fine-tuning tip

Set up a boost control trim on an analog input and use it to sweep through different boost levels under load. It's the quickest way to check that every region of the start duty table gives smooth boost.

Troubleshooting

SymptomUsually
Spike coming onto boostStart duty too high
Slow creep up to targetStart duty too low
Boost oscillates around targetProportional too high
Settles just under targetIntegral too low
Unstable after adding derivativeDerivative too high; back it off

If you prefer to control duty directly, open loop tuning is the simpler route.