PID Tuning Helper Loops
A toy loop, not your loop — the process below is a simple first-order model with dead time. It's here to build a feel for what each knob does, not to hand you gains for a real system. The Reveal loop details panel below states the model's assumptions — including an anti-windup refinement that lets the derivative here damp overshoot more cleanly than a generic controller's. New to PID? Start with the basics →
Step-Response Simulator
Reveal loop detailsspoiler
Loop Speed Reference
"Fast loop / slow loop" is loose shorthand for the dominant time constant — roughly how long the process takes to get most of the way to a new value after the output changes. Loops with longer time constants and more dead time need gentler tuning and benefit more from integral; fast loops can take more aggressive gain. The Equipment selector picks one of these buckets:
| Speed | Time constant (τ) | Dead time | Typical HVAC examples |
|---|---|---|---|
| Fast | ~5–15 s | ~1–3 s | Duct static pressure, mixing-box damper position, fan VFD speed |
| Medium | ~30 s – 2 min | ~5–15 s | Discharge air temperature, chilled-water valve, hot-water valve |
| Slow | ~2 – 10 min | ~30 s – 2 min | Space / zone temperature, return-air humidity, large tank or basin temperature |
The ratio that matters most for controllability is dead time ÷ τ. Below ~0.2 the loop is well-behaved; up around 0.5 you need to be careful (slower gain, longer reset); past 1.0 you're usually fighting transport delay, and a Smith predictor or feedforward starts to look attractive. The first three buckets above all sit comfortably under 0.2, which is most HVAC — though toward the slow end of a bucket's range the ratio climbs. The fourth, reheat at the end of a long run (dead ÷ τ ≈ 0.5), is the one to pick when you want to see the symptoms in the next table: crank the gain on it and the loop overshoots, then rings, then won't settle — the "too much P" failure the well-behaved buckets never quite reach.
Symptom → Tuning Move
Quick reference for when you already know your way around a loop. ↑ = more, ↓ = less; P = gain, I = reset, D = rate.
| Symptom | Tuning move |
|---|---|
| Slow to respond | ↑ P |
| Crawls toward setpoint | ↑ P · ↑ I |
| Steady-state offset | ↑ I |
| Overshoots, then recovers | ↓ P slightly · ↑ D on laggy loops |
| Oscillates / hunts | ↓ P · ↓ I |
| Jumpy / noisy output | ↓ D · filter input |
| Pinned at 0 % / 100 % | check sizing & sequencing |
| PV runs away when the loop acts | flip acting (direct ↔ reverse) |
One modeling note: the simulated loop's integrator pauses while derivative action is braking hard toward setpoint, so adding rate damps overshoot more cleanly here than on a controller that lacks that anti-windup refinement. The rate slider also re-ranges with the Equipment — useful derivative time scales with the loop's time constant, so it stretches from a few seconds on a fast loop to a couple of minutes on a slow one.
Rule of thumb on this tool: most HVAC loops are PI, not full PID. Start with reset off, raise the gain until the loop just begins to cycle, back it off, then add only as much reset as you need. Vendors differ on the knobs — Niagara LoopPoint exposes bare proportional / integral / derivative constants (closest to the gain · reset · rate view), EBO uses gain with integral and derivative times in seconds (Ti / Td), and a proportional-band style swaps the gain for a proportional band while keeping the same time-in-seconds Ti / Td; flip the Parameter Style selector above to read the loop in whichever terms you use. Same idea, different clothes — the numbers here show the relationships between the knobs, not drop-in values for any one platform.
Starting Gains from a Bump Test
The toy loop above builds the feel; this turns a short test on your loop into a defensible place to start. With the loop in manual and the process steady, step the output 5–10 % and trend the PV. Read two times off the trend: dead time (θ) — how long before the PV clearly starts to move — and time constant (τ) — from that first movement to about 63 % of the total change (let the PV settle fully so the total is real). Enter the PV change as a percentage of the loop's span: an 8 °F rise on a 0–100 °F span is 8 %. Signs follow the trend — a downward output step or a falling PV go in as negatives. Every real loop has some dead time — if the trend shows none, use the controller's sample interval.
Inputs are seeded with an example — edit them to your numbers.
Method: SIMC PI rule (Skogestad 2003) with the closed-loop time set conservative, λ = 3θ — K = ΔPV % ÷ ΔCO %, Kc = (1/K) · τ ÷ (θ + λ), Ti = min(τ, 4(θ + λ)). These are starting gains to commission from, not a finished tuning: make the first setpoint change watching the trend, and expect to trim. The result reads in whichever Parameter Style is selected above. Kc here is dimensionless (% of span per % of output), the same convention as the sliders — if your platform takes a proportional band in engineering units instead, PB in EU = PB % × span ÷ 100. The seeded example (τ 120 s, θ 15 s, K = 1) computes to Kc 2.0, reset 0.50 rep/min — the same numbers as the Decent PI preset above.