All articles
Tuning May 22, 2026 15 min read

How to reduce PID overshoot and settling time without killing the loop

Practical knobs for less overshoot and faster settle: Kp, Ti, filtered Kd, setpoint weighting, IMC λ, anti-windup, and optimiser objectives.

Overshoot and settling time are the two complaints that bring a PID back to the workshop. The PV ran past the new setpoint, or it got there and then took forever to lie down. Those are not the same disease, and the knobs that shrink one often inflate the other. This article is a practical map of the knobs that actually move those two numbers on a real loop: lower Kp, longer Ti, filtered Kd, setpoint weighting and two-degree-of-freedom structures, a slower IMC/SIMC λ, anti-windup, and an honest optimiser objective — plus the disturbance-rejection bill you will pay for a prettier setpoint step.

The workflow underneath is the one in how to tune a PID controller: identify a model, pick a robust rule, simulate, then polish. PID Solver 360 exposes every knob below in the simulator, the auto tuner and the optimiser. Use closed-loop metrics for the definitions of overshoot and 2 % settle, and gain and phase margin so you do not “fix” overshoot by parking the loop 2° from instability.

What overshoot and settling time actually are

On a setpoint step of span Δ = SP − PV0, overshoot is the peak excursion beyond SP, as a percentage of |Δ|. Settling time is the last time the PV leaves a band around SP, usually ±2 % or ±5 % of |Δ|. A loop can have almost no overshoot and a miserable settle if it creeps the last percent on a timid integrator. It can also settle into the 5 % band quickly while posting 25 % overshoot that the 5 % metric barely notices. Quote both, with the band.

Three mechanisms produce overshoot on PID loops, and they stack.

Delay. A FOPDT plant does not start moving for L seconds. The controller keeps seeing a full error and keeps filling the integral. When the PV finally arrives, the valve is already past the steady value. Some overshoot is then physics, not a tuning error. Aggressive rules that set Ti ≈ 2L, notably Ziegler–Nichols, institutionalise that pile-up.

Integral action. Even without delay, Ki drives the actuator past the eventual bias so that the area of error can go to zero. The PV therefore crosses SP with a non-zero slope and has to be braked. More Ki (smaller Ti) means more overshoot and, past a point, a longer settle because of the subsequent undershoot.

Saturation and windup. If the output hits 0 or 100 % while error is still large, a naive integrator keeps charging. Recovery overshoot is then an actuator story. Anti-windup attacks this mechanism; detuning Kp attacks it only indirectly.

Settling time has its own villains: a phase margin in the twenties (hunting), a Ti so long that the last 3 % takes minutes, a 2 % band that leftover SSE never enters, and a simulation horizon shorter than the true settle. Before you turn knobs, confirm that the number you hate is the mechanism you think it is. Look at OP. If OP is glued to a rail for a third of the step, you do not have a Kp problem; you have a move that the valve cannot make in time.

Lower Kp: the first and most abused knob

Proportional gain sets how hard the loop leans on the present error. Lower Kp and the first swing is smaller. Phase margin usually rises, ωc falls, rise time stretches. On many FOPDT loops a 20–30 % cut in Kp from a Ziegler–Nichols starting point is the difference between 35 % overshoot and 12 % overshoot. That is why “back off the gain” is the night-shift reflex, and why so many plant PIDs sit at half of what a SIMC calculation would allow.

The cost is disturbance rejection. A load step that used to be corrected in one time constant now lingers. On a quality tracker that only sees occasional setpoint changes, paying that bill is correct. On a pressure loop whose job is to eat upstream swings, it is not. If the complaint is load rejection and you lower Kp to beautify a lab setpoint step, you have optimised the demo and damaged the duty.

A better first move than an arbitrary cut is to compare the present Kp with a robust rule. SIMC for PI on FOPDT is

Kp = (1/K) · τ / (τc + L)
Ti = min(τ, 4(τc + L))

with τc ≈ L for a fast robust loop, or τc = 2L to 3L for a calmer one. If your live Kp is twice the SIMC value, you are not “a bit aggressive”; you are in Ziegler–Nichols territory. Drop to the SIMC number before you invent a custom gain. The auto tuner puts those numbers next to each other so the cut is calibrated.

If SIMC Kp already overshoots because L was underestimated, lowering Kp further is a plaster. Fix L. The Bode phase at crossover is −ωc L plus the rest; a wrong L makes every gain look guilty.

Raise Ti: slow the memory, not the present

Integral time Ti is the time the integrator would take, on its own, to repeat the proportional contribution. Raise Ti (lower Ki) and the memory fills more slowly. The delay-induced pile-up is smaller; the overshoot from integral braking is smaller; the last percent of offset takes longer to die. Settling into a tight band can therefore get worse while overshoot gets better — the classic “it doesn’t go past SP, it just never quite gets there” result.

On SIMC, Ti is already min(τ, 4(τc + L)). For lag-dominant plants (L/τ small) that often yields Ti = τ, which is as long as the plant lag. Shortening Ti below that to “make it settle” is how you buy a fast IAE and a 20 % overshoot. Lengthening Ti above SIMC is how you buy a gentle setpoint step and a lazy load response. For integrating processes the story changes — Ti is set from the desired closed-loop time, not from τ — but the qualitative knob is the same: more Ti, less overshoot, slower cleanup.

A practical pattern on temperature: start at SIMC, then multiply Ti by 1.5 if the overshoot is still above spec and the OP is not saturating. Do not multiply it by five. At that point you have a P controller with a ceremonial I, and a load change will leave a long ramp of error. If you need almost no overshoot and still need load rejection, the next tools are setpoint weighting and a two-DoF structure, not an infinite Ti.

Add filtered Kd: damping you can actually use

Derivative action is a brake on PV motion. Used on the measurement, it reduces overshoot of a lag-dominant loop and can shorten settling by killing the first reversal. Used on error, it also kicks the output on a setpoint step, which can increase overshoot of OP and, through the plant, of PV.

The usable form is filtered and measurement-based:

D(s) = − Kd s / (Tf s + 1) · PV(s)
Tf = Td / N,   N ≈ 8–20

Td on the order of 0.1 τ to 0.5 L is the usual process-control band. Ziegler–Nichols’ Td = 0.5 L is often too much once noise and a real filter are included. AMIGO and many IMC-PID rules are calmer.

Derivative will not rescue a delay-dominant loop. You cannot differentiate a signal that has not arrived. On L/τ > 1, adding Kd mainly amplifies noise and lifts high-frequency loop gain, which can hurt gain margin. Try D on the simulator with a realistic noise amplitude. If OP variance doubles and overshoot drops by two points, the net is a worse loop. If overshoot drops from 18 % to 8 % and OP is still calm, keep it.

Filter time is part of the tuning. Too small an N (large Tf) and D is a second lag; you have added more delay. Too large an N and D is ideal and unusable. Start at N = 10, Ts ≤ Tf / 2 as in the digital PID article, and do not copy a continuous Kd onto a 2 s PLC scan without repeating the noise test.

Setpoint weighting: make the step gentler without disarming load rejection

A two-degree-of-freedom (2-DoF) PID applies different weights to SP in the P and D terms:

P = Kp (b · SP − PV)
D on (c · SP − PV), usually c = 0
I on (SP − PV) as usual

b = 1, c = 1 is one-DoF: every term sees the full error. A unit step in SP then instantly commands Kp Δ plus a derivative pulse if c ≠ 0. The plant cannot follow, the valve slams, and overshoot follows. Set c = 0 (derivative on measurement only) and the pulse vanishes. Set b in the range 0.3–0.8 and the proportional kick is scaled down. The integrator still sees the full error, so offset still dies. A load disturbance never moves SP, so b and c do not appear in the load path: Kp, Ti and Td remain fully armed against disturbances.

That is the single most important architectural fact in this article. If your overshoot happens on operator setpoint changes and your duty is disturbance rejection, do not lower Kp. Lower b. Many DCS blocks call this “setpoint weight”, “beta”, or “2-DoF”. If the block has no b, you can fake a gentle SP by ramping the setpoint over a time of order τc. A ramp is a 2-DoF controller implemented in the operator interface.

Worked numbers, typical of a jacket temperature: FOPDT with K = 1.8 °C/%, τ = 120 s, L = 20 s. SIMC PI with τc = L gives Kp ≈ 3.3 %/°C and Ti = 80 s. A 5 °C setpoint step in one-DoF simulation shows about 18 % overshoot (0.9 °C) and a 2 % settle near 260 s. Same gains, b = 0.5, c = 0: overshoot falls to about 6 % and settle to about 210 s. A load step of equivalent size is essentially unchanged. That is the trade you wanted.

If you instead cut Kp by 40 % to chase the same overshoot, the load-step IAE rises by a similar fraction and the settle on disturbance stretches. Operators who only ever bump SP will thank you either way. The process, which mostly sees loads, will not.

Two-DoF and SP filters as a family

Setpoint weighting is one member of a family. A first-order SP filter

SP' = SP / (τsp s + 1)

with τsp ≈ τc does a similar job: the PID sees a slower reference. A 2-DoF structure with an explicit prefilter designed from the closed-loop model (IMC’s “setpoint filter”) can invert the desired T(s) more carefully than a scalar b. For PID practice, b plus D-on-PV plus an optional ramp covers almost all process loops.

Do not filter the PV the same way you filter SP. A PV filter sits inside the loop and spends phase margin. An SP filter does not. If someone “fixed overshoot” by adding a 15 s PV filter to a temperature transmitter, they also slowed every load response and ate PM. Undo that, filter D only, and use b.

Cascade is another two-DoF in disguise. A slow master with a conservative λ writing to a fast slave lets you take the master’s overshoot almost to zero without touching the slave’s disturbance path. If a single PID is being asked to be gentle on SP and savage on load, ask whether the loop should have been a cascade or a 2-DoF block before you detune it into uselessness.

Slower λ in IMC: the honest detune

IMC and SIMC expose a single speed knob λ (or τc), the desired closed-loop time constant. Faster λ (smaller) means more Kp, more overshoot, better load IAE, thinner margins. Slower λ means the opposite. On FOPDT, λ cannot usefully go below something of order L; the delay is a hard speed limit. Choosing λ = L is the usual “tight but robust” point. Choosing λ = 2L or λ = 3L is how you reduce overshoot without breaking the ratio between Kp and Ti that IMC derived.

That last point is why λ is better than random knob twiddling. If you cut Kp and also cut Ti “to keep it lively”, you may have moved along a dangerous line in gain space. If you only move λ, Kp and Ti stay in a relationship that was designed to keep a reasonable Ti / (λ + L) ratio. Overshoot falls in a controlled way. The auto tuner will emit IMC or SIMC at several λ; pick the slowest that still meets a load-rejection spec, not the fastest that still meets an overshoot spec on a noise-free SP step.

Worked continuation of the jacket: λ = L = 20 s, one-DoF, ~18 % OS, load IAE reference 1.00. λ = 2L = 40 s: Kp halves to about 1.7, Ti = min(120, 4(40+20)) = 120 s. Overshoot on the same 5 °C step drops to about 4–8 % depending on discretisation; 2 % settle may not improve much because I is slower; load IAE rises to about 1.6–1.8. λ = 3L: overshoot nearly gone, load IAE about 2.2. If the spec is “no more than 10 % OS on SP and load IAE not worse than 1.5×”, λ = L with b = 0.5 beats λ = 2L with b = 1. Always compare 2-DoF at tight λ against 1-DoF at slack λ before you give up disturbance rejection.

Anti-windup: the overshoot that is not a tuning problem

If OP rides a limit during the step, the linear overshoot formula is void. The integrator’s extra charge is

ΔI ≈ Ki · e_sat · t_sat

and that ΔI must be unwound after the PV crosses SP. t_sat of 15 s on a temperature loop with a healthy Ki is enough to add several extra percent of OS, or tens of percent if anti-windup is off.

Back-calculation, as in anti-windup explained and in PID Solver 360, rebuilds I so that P + I + D sits on the clamp. Enable it whenever limits are real, which is always. Then look at saturation fraction. If a routine 5 °C step still saturates for a large fraction of the rise, the move is larger than the actuator can support at this plant gain. Options: smaller steps, a cascade, more heating capacity, or a slower SP ramp. Detuning Kp to avoid saturation on a max-size step will make every small disturbance sluggish.

Conditional integration (freeze I while saturated in the error direction) is acceptable if that is what the PLC offers. Test it: some implementations freeze in both directions and then fail to unwind. Simulate the actual rule.

Do not use aggressive Ziegler–Nichols on temperature

Ziegler–Nichols reaction-curve PID,

Kp = 1.2 τ / (K L),   Ti = 2L,   Td = 0.5 L

was designed for quarter-amplitude decay: each peak half the last, overshoot often 20–50 %. Temperature loops usually have extra unmodelled lag (thermowell, jacket metal, mixing), noisy measurements that forbid a large Td, and a quality spec that treats 5 °C of overshoot as off-spec product or a safety valve. Applying ZN because “it is the famous method” is how those loops get their reputation for being impossible.

Use SIMC, AMIGO or IMC with λ ≥ L. Use PI rather than PID if the thermocouple is noisy; see P, PI, PD or PID. Use 2-DoF for operator changes. If someone insists on ZN as a starting point, immediately apply a detune: half Kp, double Ti, drop Td, then simulate. You will often land near a robust rule anyway, having taken a scenic route through a 40 % overshoot.

Cohen–Coon is in the same bin for temperature: designed to minimise IAE on the model, not to respect a hard OS cap. Tyreus–Luyben and AMIGO were born from the observation that ZN is too lively for chemical process work. Believe them.

The disturbance-rejection trade-off, stated as a budget

Write the spec as two experiments, not one.

Experiment A: setpoint step of the size operators actually use, with b and ramps as they will be in production. Record OS%, ts, and whether OP saturated.

Experiment B: load step or output disturbance of a realistic size, SP held constant. Record peak error, IAE, and ts.

Improving A with Kp, Ti or λ always spends B. Improving A with b, c, SP filter or a ramp spends almost nothing of B. Improving A with anti-windup can improve B as well, because windup also wrecks disturbance recovery after a long saturation. Put the budget in a table and you will stop arguing about a single trend.

If A and B both fail, the loop is too slow for its delay or the model is wrong. No amount of 2-DoF helps a load. Then you need a better actuator, a cascade, feedforward, or a slower plant (more inventory) — not a smaller Kp.

ITAE versus an overshoot cap in the optimiser

The optimiser needs a scalar. ITAE,

ITAE = ∫ t |e(t)| dt

punishes late error and therefore tends to shorten the tail. It does not know that 12 % OS is illegal. An ITAE champion on a FOPDT setpoint step is often a lively Kp/Ki pair with a modest Td and 15–25 % overshoot: the early error is accepted, the tail is not. If you minimise ITAE and then complain about overshoot, the objective disagreed with the spec.

ISE is worse for this job. Squaring error pays for a fast first move; overshoot is cheap in ISE compared with a long small tail. IAE is in between.

The engineering pattern is: constrain OS% (and maybe GM/PM, and maybe a Kd max), then minimise ITAE or IAE on the remaining freedom. If the optimiser has no explicit OS constraint, fold a penalty,

J = ITAE + w · max(0, OS% − OS_max)²

and raise w until the cap is met. Start the search from SIMC, not from (Kp, Ki, Kd) = (1, 1, 1). Local minima are real; a ZN start will often sit in a high-overshoot basin that looks “optimal” for ISE.

Worked finish of the jacket: unconstrained ITAE from a SIMC start might return Kp ≈ 3.8, Ti ≈ 65 s, Td ≈ 6 s, OS ≈ 22 %, ts(2 %) ≈ 190 s, ITAE = 1.00 (normalised). The same search with OS_max = 10 % returns Kp ≈ 2.6, Ti ≈ 90 s, Td ≈ 8 s filtered, OS ≈ 9 %, ts ≈ 230 s, ITAE ≈ 1.25. Adding b = 0.5 outside the optimiser (because b does not hurt loads) can take OS to ~4 % at the unconstrained-ITAE gains, with load IAE essentially at 1.00. That last design dominates the constrained 1-DoF result on both experiments. Always give the optimiser the same 2-DoF knobs you are willing to load in the DCS.

A short sequence that usually works

Confirm the FOPDT (or second-order) model against the bump test. Enable OP limits and anti-windup. Choose Ts ≤ τ/10. Generate SIMC or IMC at λ = L with PI, D off. Simulate a production-size SP step and a load step.

If SP overshoot is the only problem, add D-on-PV if the signal is clean, then reduce b, then slow λ. If load rejection is also poor, you cannot spend Kp; fix the plant or the structure. If OP saturates, stop tuning and change the move size or the actuator. If Ziegler–Nichols is what is currently loaded on a temperature loop, replace it; do not trim it forever.

Check PM 30–60° and GM > 6 dB so the calmer step is not a loop on the edge. Then, if you want a last few percent, run the optimiser from the robust start with an overshoot cap and ITAE, not with ISE and hope.

Overshoot and settling time are not moral failures of Kp. They are the visible edge of delay, integral memory, saturation, and the difference between a one-DoF demo and a two-DoF plant. Turn the knob that matches the mechanism, and leave the disturbance path intact unless the spec explicitly spends it.

Try it in the solver

Put this into practice — model your process, auto-tune it and check the stability margins.

Launch PID Solver 360