Classical Control — Engineering Reference

1. At a glance

Classical control is single-input single-output (SISO) feedback design carried out in the Laplace (s) domain and on the frequency-response (Bode / Nyquist) plane. A scalar measured variable y(t) is compared to a setpoint r(t); the error e = r − y drives a controller C(s) that produces an actuator command u(t); the plant G(s) maps that command back to y(t). The whole loop is analysed through two transfer functions — the open-loop L(s) = G(s)C(s) and the closed-loop T(s) = L/(1+L) — and one design currency: the gain and phase margins of L(jω).

It is the control that your grandparents learned, and in 2026 it still runs roughly 90 % of industrial regulatory loops on Earth. Distillation columns, paper-machine consistency, building HVAC zones, fuel pumps on aircraft engines, hard-disk head positioning, beam current in particle accelerators, blood-glucose pump regulation — all the way down to the cruise control in a 1985 sedan and the brushless servo in a 2025 robot joint — are governed by some flavour of PID plus, at most, a lead/lag or notch filter. Modern techniques (state-space, MPC, H-∞, adaptive, learning-based) sit on top of classical when the plant is multivariable, constrained, badly nonlinear, or fast-changing. When a project says “we need a controller” the right first question is almost always “can we close the loop with PID?”, because (a) it is usually good enough, (b) it needs no plant model beyond a step-test fit, and (c) every operator on the site already understands it.

Where it sits in the design stack: dynamics ([[Engineering/vibration-dynamics]]) → linear systems → classical control → state-space methods → MPC / robust / nonlinear / learning. The Laplace machinery on which it stands comes from [[Engineering/circuit-analysis]] (transient analysis of RLC networks). The actuators it commands live in [[Engineering/electric-motors]] and [[Engineering/power-electronics]]. The computers it runs on live in [[Engineering/microcontrollers]] and PLCs (IEC 61131-3, ISA-5.1 P&ID symbology).

2. First principles

Linear time-invariant assumption

Everything in classical control rests on three assumptions about the plant:

  1. Linearity. Superposition holds: response to (αu₁ + βu₂) equals α·response(u₁) + β·response(u₂).
  2. Time invariance. Plant coefficients do not depend on absolute time t.
  3. Causality. Output at time t depends only on input at times ≤ t.

Real plants violate all three at the edges (saturation, drift, dead-zone, dispatch latency, valve stiction). Classical design accepts these as perturbations about a nominal LTI model and uses robustness margins (GM, PM, |S|_max) to absorb them. When the perturbations dominate, classical fails and the design must move to gain scheduling, adaptive control, or MPC.

Transfer functions and the Laplace domain

The unilateral Laplace transform of a signal x(t) is

X(s) = ∫₀^∞ x(t) e^(-st) dt, s = σ + jω ∈ ℂ.

Under the LTI assumption plus zero initial conditions, every linear ODE collapses to an algebraic relation. The plant’s transfer function is

G(s) = Y(s) / U(s) = b_m s^m + … + b_0 / a_n s^n + … + a_0, m ≤ n (proper).

The roots of the numerator are zeros; the roots of the denominator are poles. Poles set stability and the natural transient modes; zeros shape the transient response (overshoot, undershoot, inverse response when in the right-half plane).

Closed-loop algebra

With unity feedback and controller C(s) in series with plant G(s):

  • Reference-to-output: T(s) = L(s) / [1 + L(s)], L(s) = G(s)C(s).
  • Reference-to-error: S(s) = 1 / [1 + L(s)].
  • Disturbance-to-output: G_d(s)·S(s) (where G_d is the disturbance path).
  • Noise-to-output: −T(s) (sensor noise enters with opposite sign of reference).

Fundamental identity: S(s) + T(s) = 1. This is the bedrock trade-off of feedback control: you cannot make both S and T small at the same frequency. You design T ≈ 1 (good tracking) at low frequency where S ≈ 0 (good disturbance rejection); you design T ≈ 0 (noise rejection, robustness to model error) at high frequency where S ≈ 1 (you can’t reject what you can’t hear).

Stability

A causal LTI system is BIBO stable iff every pole of its transfer function has Re(s) < 0 (strictly open left half-plane). For the closed loop, this means every root of the characteristic equation 1 + L(s) = 0 lies in the OLHP. Tests:

  • Routh-Hurwitz — algebraic test on the characteristic polynomial coefficients; gives a yes/no plus the count of unstable poles.
  • Root locus — graphical, parametric in gain K.
  • Nyquist criterion — graphical, in the frequency domain; works for time delays and non-minimum-phase plants.

Internal stability is stronger than BIBO: it requires every transfer function in the loop (from every input to every output, including unmeasured internal signals) to be stable. Pole-zero cancellation in the right-half plane is the classic trap that gives BIBO stability without internal stability.

Canonical second-order response

A vast amount of design intuition reduces to the canonical second-order closed loop:

T(s) = ω_n² / (s² + 2ζω_n s + ω_n²)

with natural frequency ω_n (rad/s) and damping ratio ζ (dimensionless). Closed-form metrics for the step response:

MetricFormulaNotes
Rise time (10–90 %)t_r ≈ (1.8/ω_n)·(1 + 0.6ζ + 0.5ζ²)Heuristic; exact form involves arccos(ζ)
Peak overshootM_p = exp(−πζ/√(1−ζ²))ζ = 0.5 → 16 %, ζ = 0.7 → 4.6 %, ζ = 1.0 → 0 %
Settling time (2 %)t_s ≈ 4 / (ζω_n)Dominant exponential envelope
Bandwidthω_BW ≈ ω_n · √(1 − 2ζ² + √(2 − 4ζ² + 4ζ⁴))≈ 1.0·ω_n at ζ = 0.7

Designers regularly translate spec language (“settle to 2 % in 200 ms with ≤ 10 % overshoot”) into (ζ, ω_n), then locate closed-loop poles at s = −ζω_n ± jω_n√(1 − ζ²), then pick a compensator whose root locus passes through those points.

Poles, zeros, and damping interpretation

Each closed-loop pole pair p = σ ± jω carries

  • σ < 0: stable; |σ| is the decay rate (envelope ∝ e^(σt)).
  • |ω|: damped oscillation frequency.
  • ζ = −σ / √(σ²+ω²): damping ratio of that pair.

A dominant pole pair (the closed-loop poles closest to the jω-axis) governs the late-time transient; faster poles contribute decaying spikes that vanish before the dominant pair settles. Dominant-pole approximation — pick the slowest pole pair and ignore the rest — is the basis of most hand-design rules. It fails when there is a “near-pole-zero” cancellation that leaves a slow residue, or when a fast right-half-plane zero injects inverse response.

3. Practical math / design equations

The PID controller — the practical workhorse

In time domain, the ideal PID law is

u(t) = K_p · e(t) + K_i · ∫₀^t e(τ) dτ + K_d · de/dt.

Industry uses three algebraically equivalent forms, plus an interacting “series” form. Knowing which form your vendor uses matters when copying tuning numbers between platforms.

FormEquationWhere you find it
Parallel (academic)K_p e + K_i ∫e + K_d ėMATLAB pid(), textbooks
Standard / ISA / “ideal”K_c [ e + (1/T_i)∫e + T_d ė ]Honeywell, Yokogawa, Emerson DeltaV, most DCS
Series / interactingK_c [(1 + 1/T_i s)(1 + T_d s)/(1 + T_d s/N)] eFoxboro, older Bailey, some Allen-Bradley

The conversions are textbook and built into most tuners; the bug is silently using one set of numbers in the wrong form and getting an interacting controller that drifts. Always confirm form before transcribing gains.

Each term carries a physical interpretation:

  • P (proportional, K_p): instantaneous restoring force; acts like a spring whose stiffness is the loop gain. Higher K_p → faster response, lower steady-state error, but eventually oscillation.
  • I (integral, K_i = K_p / T_i): accumulates error; eliminates steady-state offset for a step setpoint or constant load disturbance. Pole at the origin — the integrator. Too much integral → slow oscillation and windup.
  • D (derivative, K_d = K_p · T_d): anticipates future error from the slope; adds damping. Pure derivative is non-causal and noise-amplifying; production controllers implement filtered derivative T_d s / (1 + T_d s/N), with N = 8–20 (10 typical).

Setpoint weighting (β, γ) and derivative on PV

Setpoint steps with derivative-on-error cause “derivative kick” — a large instantaneous u(t) spike when the operator changes the setpoint, slamming the actuator. Two fixes, applied in all serious controllers:

  • Setpoint weighting: u = K_p (β·r − y) + K_i ∫(r − y) + K_d d(γ·r − y)/dt, with β ∈ [0,1] and γ usually 0. β = 1 is full setpoint weighting (academic PID), β = 0 removes proportional kick.
  • Derivative on PV: γ = 0 — D acts only on the process variable y, not on r. This is the default in every industrial PID since the 1980s.

Anti-windup

When the actuator saturates (valve fully open, motor at current limit), the integral term continues to accumulate as if the actuator could go further. When the error finally reverses, the controller is hopelessly wound up and overshoots wildly while the integral unwinds.

MethodMechanismNotes
Clamping / conditional integrationFreeze integrator when output saturates and error pushes deeper into saturationSimplest; default in many PLCs
Back-calculationSubtract (u_actual − u_unsaturated)/T_t from integratorTuning parameter T_t; smoother handover
TrackingSlave integrator to actuator’s measured positionBest for slow valves with positioner feedback
Integrator velocity formCompute Δu, not u; never windup possibleDefault in incremental-form PLC blocks (Siemens S7)

Bumpless transfer

When mode switches Auto → Manual or one controller hands off to another, the algorithm must initialize so that u(t) is continuous (no “bump”). Two implementations: internal-state tracking (force integrator to whatever value makes u match the current manual output at handover instant) and velocity-form algorithm (only Δu is computed, so by construction there is no jump).

Tuning rule families

MethodPlant modelNotes / aggressiveness
Ziegler-Nichols ultimate-gain (1942)K_u, P_u from closed-loop oscillationAggressive; ~25 % overshoot; obsolete for safety-critical
Ziegler-Nichols reaction-curve (1942)FOPDT (K, τ, θ) from open-loop stepAggressive; same family
Cohen-Coon (1953)FOPDTFor high-θ/τ ratio (dead-time dominant); tighter than ZN
Tyreus-Luyben (1992)K_u, P_uLess aggressive than ZN; ~5 % overshoot; preferred for distillation
IMC (lambda) tuning (Rivera-Morari 1986)FOPDT or SOPDTSingle tuning knob λ (closed-loop time constant); modern preferred
Skogestad SIMC (2003)FOPDTRefinement of IMC; explicit rules for stable/integrating/unstable plants
AMIGO (Åström-Hägglund 2004)FOPDTRobust auto-tuner output; tradeoff between performance and

Tuning-rule quick-reference (PI, parallel form, FOPDT plant K, τ, θ):

MethodK_pT_i
Ziegler-Nichols reaction-curve0.9·τ / (K·θ)3.33·θ
Cohen-Coon(1/K)(τ/θ)(0.9 + θ/(12τ))θ·(30+3θ/τ)/(9+20θ/τ)
IMC (λ = τ)τ / (K·(λ+θ))τ
SIMC (λ = θ)(1/K)·τ/(2θ)min(τ, 8θ)

System identification — model from data

Classical design needs at minimum a FOPDT model: gain K, time constant τ, dead time θ. Four common identification methods:

MethodProcedureWhen to use
Step test (process reaction curve)Open-loop step in u; fit K, τ, θ from y(t) using Ziegler-Nichols tangent or Smith’s method (28 % / 63 % rise times)Slow, stable, drift-tolerant plants (process chemistry, HVAC)
Doublet / bias-removal stepStep up, hold, step down — cancels drift contaminationLong time-constant plants with measurable trend
Frequency sweep / chirp / Schroeder multi-sineInject broadband u; compute empirical Bode via FFT / WelchServo loops where amplitude is bounded; structural plants with multiple modes
Relay feedback (Åström-Hägglund 1984)Close loop around an on/off relay; sustained limit cycle at K_u, P_u → tuning rules applyAuto-tuners in PLCs and DCS; no need to drive plant unstable

Smith’s two-point fit for FOPDT from a step response of magnitude Δu:

  • K = Δy_∞ / Δu (steady-state gain).
  • Find t₂₈ (time to reach 28.3 % of Δy_∞) and t₆₃ (time to reach 63.2 %).
  • τ = 1.5 · (t₆₃ − t₂₈).
  • θ = t₆₃ − τ.

Sanity-check by overlaying the fit on the data — most “FOPDT” plants are actually SOPDT, and the fit error tells you whether λ-tuning needs to be conservative.

Robustness margins — design targets

MarginDefinitionTypical target
Gain margin GM1/L(jω_180)
Phase margin PM180° + ∠L(jω_c), ω_c whereL
Delay marginPM / ω_c≥ 1.5× expected loop delay
**Sensitivity peakS_max = M_s**
**Complementary peakT_max = M_t**

The PM ↔ damping mapping for a dominant 2nd-order pair: PM = 45° ≈ ζ = 0.42 (~25 % overshoot); PM = 60° ≈ ζ = 0.61 (~9 % overshoot); PM = 70° ≈ ζ = 0.74 (~3 %). Crossover frequency relates to closed-loop bandwidth as ω_BW ≈ (1.6–1.8)·ω_c for the same dominant 2nd-order family.

Root locus

Root locus is the set of closed-loop pole locations as a single parameter (almost always loop gain K) sweeps 0 → ∞. Six construction rules:

  1. Branches. n branches start at open-loop poles (K = 0); m branches end at open-loop zeros (K = ∞); the other (n − m) branches go to infinity along asymptotes.
  2. Real-axis segments. A point on the real axis is on the locus iff the count of real poles + real zeros to its right is odd.
  3. Asymptote angles. θ_a = (2k+1)·180° / (n − m), k = 0, 1, …, n − m − 1.
  4. Asymptote centroid. σ_a = [Σ(real parts of poles) − Σ(real parts of zeros)] / (n − m).
  5. Breakaway / break-in points. dK/ds = 0 on the real axis.
  6. jω-axis crossings. Routh-Hurwitz on the characteristic polynomial gives the critical K and frequency.

Root locus is most natural when (a) the plant order is low (≤ 4), (b) the design variable is a single gain, and (c) the dominant-pole approximation is acceptable. It breaks down with significant time delay (approximate as Padé), with MIMO coupling, and when the dominant-pole assumption fails.

Frequency response — Bode plots

Bode plots evaluate L(s) along s = jω and display |L| (dB) and ∠L (deg) on log-ω axes. Three reasons Bode dominates industrial design:

  1. Multiplication becomes addition. |L| = |G|·|C| → 20·log|L| = 20·log|G| + 20·log|C|; phases sum directly. Cascading compensators is graphical addition.
  2. Asymptotic sketches are fast. Each pole adds a −20 dB/decade slope and 90° lag; each zero adds +20 dB/decade and 90° lead. A few pencil strokes on log-graph paper give the working envelope.
  3. Measurement matches the math. A frequency sweep with a sine generator and a two-channel scope (or a network analyser) directly produces the empirical Bode plot — no model needed.

The crossover frequency ω_c (|L(jω_c)| = 0 dB) is the design centre. Bandwidth, transient speed, noise rejection, and robustness all key off it. Rule of thumb: ω_c should be a factor of 5–10 below any unmodelled high-frequency dynamic (sensor cutoff, actuator pole, structural resonance), and a factor of 2–5 above the fastest disturbance you care to reject.

Nyquist criterion

Plot L(jω) for ω: −∞ → +∞ in the complex plane and count net clockwise encirclements N of the −1 point. With P open-loop unstable poles in the OLHP, the Nyquist criterion says the closed loop has Z = N + P closed-loop unstable poles. Z = 0 is required for stability.

Nyquist is the only correct stability test that handles:

  • Time delay (just multiplies by e^(−jωθ), which rotates each frequency point by −ωθ rad without changing magnitude — Bode handles this too, but Nyquist makes the encirclement intuition direct).
  • RHP open-loop poles (P > 0) — unstable plants under feedback.
  • RHP zeros (non-minimum-phase) — limits achievable bandwidth.

Sensitivity and the Bode integral

The Bode sensitivity integral states that for a strictly proper open loop L(s) with relative degree ≥ 2 and p unstable open-loop poles:

∫₀^∞ ln|S(jω)| dω = π · Σ Re(p_i)

with the sum taken over unstable poles. Practically: if you push log|S| below 0 (good rejection) at some frequencies, the integral conservation forces log|S| above 0 (amplification) at other frequencies. This is the waterbed effect — disturbance rejection at low frequencies must be paid for somewhere else.

Right-half-plane zeros add a similar integral constraint on log|T|. The combined Bode-Freudenberg-Looze bounds quantify fundamental bandwidth limits.

4. Reference data

Compensator types — capabilities

CompensatorC(s) formAdds phase?Steady-state effectWhen to use
PK_p0Finite SS error to stepAlmost never alone
IK_i / s−90° everywhereZero SS error to stepDrives steady-state to zero; pair with P
PIK_p(1 + 1/T_i s)−90° → 0° as ω → ∞Zero SS errorWorkhorse for slow, stable plants
PDK_p(1 + T_d s)+90° at high ωFinite SS errorServo positioning, fast plants
PIDK_p(1 + 1/T_i s + T_d s/(1+T_d s/N))MixedZero SS errorDefault industrial loop
LeadK(s+z)/(s+p), z < pup to +60°Boosts ω_c; little SS effectTransient shaping
LagK(s+z)/(s+p), z > pup to −60° (avoid at ω_c)Boosts low-f gainSS error reduction without changing ω_c
Lead-lagproductup to +60° at ω_c, +20 dB at low ωBothClassic two-job compensator
Notch(s² + 2ζ₁ω_n s + ω_n²)/(s² + 2ζ₂ω_n s + ω_n²), ζ₂ > ζ₁0° at notchAttenuates ω_nLightly-damped resonance
Smith predictornested model + delay compensationCompensates θSame as plant w/o delayDead-time dominant loops

Robustness margin targets by application

Application classGMPMM_sReason
Aerospace flight control≥ 6 dB≥ 45°≤ 1.4Mission-critical, certified
Process control (refinery, chemical)≥ 10 dB≥ 60°≤ 1.7Slow plants, model uncertainty
Servo (machine tool, robot joint)≥ 4 dB≥ 30°≤ 2.0Performance dominates; closely modelled
Hard-disk head positioner≥ 3 dB≥ 25°≤ 2.5Aggressive bandwidth, well-known plant
Building HVAC≥ 12 dB≥ 70°≤ 1.5Highly variable load, comfort priority

5p. Theory

Transfer-function algebra is matrix calculus in disguise

Every classical-control result has a state-space twin. G(s) = C(sI − A)⁻¹B + D is the textbook bridge. The same poles appear as eigenvalues of A; the same zeros appear as the values of s for which the system matrix loses rank. Mesh and nodal analysis from [[Engineering/circuit-analysis]] use the same matrix machinery against passive networks, with G replaced by the conductance matrix.

Internal model principle (Francis-Wonham, 1976)

To regulate against a class of disturbances perfectly, the controller must contain a model of the disturbance generator. Step disturbance → integrator in C. Ramp → double integrator. Sinusoid at known ω₀ → second-order pole at s = ±jω₀. This is why the integrator in PI is mandatory for constant disturbance rejection, and the foundation for repetitive control, resonant control, and disturbance observers.

Youla parameterisation

All stabilizing controllers for a stable plant G can be written C(s) = Q(s)/(1 − Q(s)G(s)) for some stable, proper Q(s). This is the modern abstraction underneath classical loop-shaping and a stepping stone to H-∞ and IMC design.

6p. Application — worked examples

Example A — DC motor speed loop, PI tuning

Plant. A small brushed DC motor driving a fan has measured transfer function (rpm per volt of armature command):

G(s) = K / (τs + 1) · e^(−θs), K = 100 rpm/V, τ = 0.05 s, θ = 0.005 s.

Specifications. Zero steady-state error to a step setpoint, no overshoot acceptable, settle in 0.05 s (4× the open-loop time constant divided by 4 — i.e. λ = 0.0125 s).

IMC / lambda tuning for FOPDT plant under PI control:

K_c = τ / [K·(λ + θ)] = 0.05 / [100·(0.0125 + 0.005)] = 0.05 / 1.75 = 0.0286 V/rpm T_i = τ = 0.050 s

In parallel form: K_p = 0.0286, K_i = K_p/T_i = 0.571 (1/s).

Verify margins. L(s) = K_c·(τs+1)/(T_i s) · K/(τs+1) · e^(−θs) = (K·K_c/T_i)·e^(−θs)/s = 57.1·e^(−0.005s)/s.

  • Crossover: |L(jω_c)| = 1 → ω_c = 57.1 rad/s.
  • Phase at crossover: ∠L = −90° − ω_c·θ·(180°/π) = −90° − 16.4° = −106.4°.
  • PM = 180° − 106.4° = 73.6° — very conservative.
  • |S|_max ≈ 1 / (2·sin(PM/2)) = 1 / (2·sin 36.8°) = 0.83 (well under target 2).

Anti-windup setup. Actuator clamps at ±24 V armature command. Implement back-calculation with T_t = √(T_i·T_d) = √(0.05·0) → use T_t = T_i = 0.05 s when T_d = 0.

Step response: rise to 95 % in ~38 ms, no overshoot, zero steady-state error. The conservative PM reflects the cost of λ = 0.0125 s; pushing λ down to θ would give ω_c ≈ 200 rad/s, PM still ~45°, but actuator effort doubles. IMC’s appeal is exactly this: one knob (λ) trades performance for robustness with no other math.

Example B — Position loop with structural resonance

Plant. A direct-drive servo positioning a thin aluminium beam. Rigid-body integrator plus a lightly-damped flexible mode at f_n = 80 Hz (ω_n = 503 rad/s), damping ratio ζ = 0.02. The plant is the non-collocated kind: the encoder reads load position, the motor pushes at the base.

G(s) = K_m / s² · ω_n² / (s² + 2ζω_n s + ω_n²), K_m = 250 (rad/s²) / V.

Problem. A naive PID with ω_c near 80 Hz hits the resonance peak (Q = 1/(2ζ) = 25 → +28 dB peak in the open-loop magnitude). Either the resonance peak crosses 0 dB (extra gain crossover → instability) or the phase wraps through −180° at the resonance (Nyquist encirclement → instability).

Solution: notch filter at 80 Hz. Design a notch with depth 30 dB and 10 % width:

C_notch(s) = (s² + 2(0.05)(503)s + 503²) / (s² + 2(0.5)(503)s + 503²)

Outer loop: PD with derivative filter to add lead phase near ω_c = 100 rad/s.

C_PD(s) = K_p · (1 + T_d s/(1 + T_d s/N)), K_p = 0.4, T_d = 0.012 s, N = 10.

Check the loop on a Bode plot: ω_c ≈ 100 rad/s (16 Hz), PM ≈ 55°, notch attenuates resonance peak to −2 dB, GM at 80 Hz ≈ 8 dB. Acceptable for a servo class loop.

Engineering judgement. Non-collocated control places a fundamental bandwidth limit at roughly ω_c < ω_n/5. Pushing ω_c above the first flexible mode without a notch invites the Bode-integral waterbed: the loop gain you save below resonance comes back as amplification above. If the resonance frequency drifts (temperature, payload variation), a fixed notch becomes a fixed problem — adaptive notch or input shaping (Singer-Seering) is the next step.

Example C — Temperature loop with dead time

Plant. A stirred reactor heater. FOPDT identified from a 5 % step test: K = 2.0 °C/% (output is heater duty 0–100 %), τ = 120 s, θ = 30 s.

Why ZN ultimate-gain is unsafe here. ZN’s K_u test requires driving the plant to sustained oscillation, which on a 30 s dead-time chemistry process can take 10+ minutes per cycle and produce 20 °C swings — risking off-spec product or operator panic. Use a model-based method instead.

IMC PID tuning for FOPDT (with derivative; λ = τ = 120 s for conservative tuning):

K_c = τ / [K·(λ + θ)] · (1 + θ/(2τ)) approx = 0.5·τ / [K·(λ + 0.5θ)] = 60 / (2·135) = 0.222 %/°C T_i = τ + 0.5θ = 120 + 15 = 135 s T_d = (τ·θ) / (2τ + θ) = 3600 / 270 = 13.3 s

Filter the derivative: N = 10 → derivative pole at 1/(T_d/N) = 1/1.33 = 0.75 rad/s.

Anti-windup. Heater output saturates at 0 % and 100 %. Use back-calculation with T_t = √(T_i·T_d) = √(135·13.3) = 42 s.

Setpoint response. A 5 °C setpoint step rises to 95 % in ~5 minutes, no overshoot, zero offset. Load disturbance (sudden 10 % heat-loss step from a draft) recovers in ~3 minutes with ~1 °C peak excursion — load rejection is the demanding test case, not setpoint tracking.

Alternative: Smith predictor. For θ/τ > 0.5, Smith predictor with a PI inside the inner (delay-free) loop reduces effective dead time. Requires a good plant model; sensitive to model mismatch. Industrial uptake is limited (Honeywell PlantTriage offers it as an advanced regulatory option) because robustness to τ-mismatch can be worse than a well-tuned plain PID.

7p. Edge cases & assumptions

Right-half-plane zeros (non-minimum phase). Cause inverse response (output goes the wrong way before settling). Examples: boiler-drum level (water level drops when feedwater valve opens because cold water condenses steam bubbles), tail-controlled aircraft pitch. Achievable bandwidth bounded by ω_c < z_RHP/2 typical. RHP zeros cannot be cancelled by controller poles — that would produce an internally unstable cancellation.

Right-half-plane poles (open-loop unstable). Examples: inverted pendulum, magnetic levitation, certain nuclear reactor power loops. Bandwidth has a lower bound: ω_c > 2·p_RHP. Combined with an upper bound from RHP zeros or delay, the design window can be empty — the plant is “not stabilisable by classical control” and needs state feedback.

Time delay ωθ. Each radian of delay at ω_c costs (ω_c·θ)·(180°/π) degrees of PM. A useful guide: ω_c·θ < 1 (one radian of delay at crossover). Beyond that, classical control gets fragile; consider Smith predictor or MPC.

Sensor noise amplified by derivative. Pure D has +20 dB/decade slope — at 1 kHz it amplifies 20 dB more than at 100 Hz. Always filter derivative. N = 10 is industry default (pole at N/T_d).

Sample-and-hold delay in digital implementation. A discrete controller running at sample period T_s introduces an effective half-period delay (T_s/2) plus the zero-order-hold reconstruction shape. Budget T_s/2 into the phase margin; pick T_s such that T_s ≤ 0.05·(1/ω_c) (one twentieth of the closed-loop period) to keep digitization invisible.

Aliasing. Frequencies above f_s/2 (Nyquist) fold into the baseband. Always anti-alias before the A/D — typically a 2nd or 3rd order analog low-pass at 0.3–0.4·f_s. Failure mode: 60 Hz mains pickup aliases into a slow phantom disturbance that the loop hopelessly chases.

Integrator windup. Discussed in §3; the #1 cause of “this works on the bench but oscillates wildly in the field” complaints.

Process gain sign change. Some plants (pH titration around the equivalence point, level loops with siphon flow) reverse the sign of dy/du as the operating point crosses a threshold. Fixed-gain classical control flips from stable to unstable across the change. Mitigations: operator-set manual override, gain scheduling, or operating-region partitioning. The pH loop is classic enough to have its own literature (Shinskey Ch. 8).

Inverse-response steam-drum level. Feedwater control with three-element strategy (drum level + steam flow + feedwater flow) — the textbook example that classical-only solutions must use cascade + feedforward because the inverse response defeats single-loop tuning.

Cascade vs feedforward.

  • Cascade = nested feedback loops with the inner loop ~10× faster than the outer. Inner loop linearises the actuator and rejects disturbances entering between actuator and primary measurement. Inner-loop PV becomes outer-loop OP. Example: motor current loop inside velocity loop inside position loop.
  • Feedforward = open-loop compensation based on measured disturbance. Subtracts predicted disturbance effect before it shows up in the controlled variable. Cuts response time dramatically when the disturbance is measurable; needs a process model.
  • Use cascade when the inner variable is measurable, inner loop is fast, and the disturbance enters the inner loop. Use feedforward when the disturbance is measurable in advance and a plant model exists. They are routinely combined.

Bumpless transfer at mode switch. §3 above; not optional in any DCS implementation.

Derivative kick on setpoint change. Solved by derivative-on-PV (γ = 0); §3 above.

8p. Tools & software

Analysis and simulation:

  • MATLAB Control System Toolbox + Simulink Control Design. The industry-standard analysis environment. tf, pid, feedback, bode, nyquist, rlocus, margin, pidtune, pidTuner GUI. Simulink for nonlinear simulation, fixed-point code generation, and HIL.
  • Python python-control (ctrl). Open-source MATLAB-like API. control.tf, control.bode_plot, control.root_locus, control.pid_design. Pair with scipy.signal and harold/tbcontrol for richer feature set.
  • Julia ControlSystems.jl. Modern functional API, very fast, good plot output via Plots.jl.
  • GNU Octave with the control package. Free, MATLAB-syntax-compatible; teaching / hobby workhorse.
  • Mathematica with the Control Systems package — symbolic stability analysis, parametric root locus.

Industrial PID auto-tuners & loop-performance monitors:

  • Honeywell ExperTune PlantTriage (now Aspen). Reads DCS historian, identifies model, recommends tuning. De-facto standard in oil & gas / chemicals.
  • Emerson DeltaV InSight / DeltaV Tune. Integrated with DeltaV DCS; bundled relay-feedback auto-tuner.
  • Yokogawa Exaplog / Exaopc Tune. CENTUM VP DCS companion.
  • AspenTech IMC-Optimo / DMC3. IMC tuning plus APC step from PID to MPC.
  • Matrikon ProcessDoc / Loop Performance Monitor. Vendor-agnostic; reads OPC-UA.
  • ControlSoft INTUNE+. Older, still widely used in pulp & paper.

PLC PID function blocks (IEC 61131-3 compliant):

  • Siemens TIA Portal / S7: PID_Compact (single-loop, auto-tuning), PID_3Step (3-position valve control). Velocity-form internally.
  • Rockwell Studio 5000 / ControlLogix: PIDE enhanced PID with adaptive gain, autotune (Logix Pro Loop Pro module).
  • Schneider EcoStruxure / Modicon M580: PID2, PIDFF (with feedforward), AUTOTUNE.
  • ABB AC800M: PidCC, PidLoop. Integrates with ABB’s IndustrialIT Control Builder M.
  • Beckhoff TwinCAT: FB_BasicPID, FB_CTRL_PID from TC3_Controller library.
  • CODESYS: standard PID and PID_FIXCYCLE blocks, vendor-neutral.

Open-source process control / MPC stacks:

  • APMonitor / GEKKO (BYU). Python interface, mixed PID + MPC.
  • OpenModelica. Acausal modelling, full process flowsheet.
  • do-mpc (TU Dortmund). Nonlinear MPC, robust MPC.

Hardware-in-the-loop & rapid prototyping:

  • dSPACE MicroAutoBox — automotive HIL gold standard.
  • Speedgoat real-time — Simulink-native, MathWorks-aligned.
  • National Instruments PXI + LabVIEW Real-Time — heavy in test & measurement.
  • Arduino + MATLAB Support Package — teaching / hobby HIL.

9p. Practical loop-design checklist

When you start a new loop, work the list in order — most catastrophic loop failures trace back to a skipped step here.

  1. Define the controlled variable and the manipulated variable. Verify they are physically coupled (du affects dy) with the correct sign in the operating region of interest.
  2. Specify the disturbance and the worst-case disturbance magnitude. Loops are designed to reject disturbances, not just track setpoints; if you don’t know the disturbance, you can’t size the controller.
  3. Identify the plant. Step test or relay feedback. Get K, τ, θ. Note the actuator saturation limits.
  4. Pick the topology. Single-loop PI/PID, cascade, feedforward+feedback, ratio, override — in that order of preference. Do not jump to MPC until classical genuinely cannot meet spec.
  5. Tune. IMC or SIMC for stable FOPDT. Cohen-Coon for high θ/τ. Tyreus-Luyben for safety-critical. ZN only if you must, and never on a hot reactor.
  6. Verify robustness. Bode margins (GM ≥ 6 dB, PM ≥ 45°, |S|_max ≤ 2). Sweep ±50 % on each FOPDT parameter and check margins survive.
  7. Implement anti-windup. Always. Always. Always. The integrator will saturate; assume it.
  8. Implement bumpless transfer. Auto ↔ Manual, controller-A ↔ controller-B handoff.
  9. Implement derivative on PV (γ = 0). And filter the derivative (N = 8–20).
  10. Set output rate and amplitude limits. Slew rate and absolute clamps protect actuators and downstream equipment.
  11. Test step response, load disturbance, and operator setpoint moves on the real plant (or a high-fidelity simulator). Watch for actuator chatter, sticky valve cycling, sensor noise amplification.
  12. Document the tuning in the loop sheet. K_c, T_i, T_d, filter time constants, anti-windup mode, ramp limits, and the date — operators will retune it, and you want to know what you set vs. what they changed.

11. Cross-references

  • [[Engineering/circuit-analysis]] — Laplace and transient-response foundations.
  • [[Engineering/ac-analysis-three-phase]] — phasor / impedance analysis is frequency response by another name; the Bode plot lives here too.
  • [[Engineering/vibration-dynamics]] — second-order mechanical systems are the plants classical control most often regulates; modal analysis and resonance handling.
  • [[Engineering/electric-motors]] — current-loop and velocity-loop dynamics; back-EMF as a disturbance.
  • [[Engineering/power-electronics]] — switching-converter small-signal models and current-mode control.
  • [[Engineering/op-amps]] — analog implementation of PID and lead/lag networks; op-amp compensation is itself classical control.
  • [[Engineering/digital-logic]] — sample-clock generation, FPGA-based controllers.
  • [[Engineering/microcontrollers]] — where PID actually executes; fixed-point implementation, anti-windup in C.
  • [[Engineering/pcb-design]] — sensor anti-alias filtering, ground loops affecting feedback noise.
  • [[Engineering/transformers-power-systems]] — generator excitation control, AVR tuning.
  • planned [[Engineering/state-space-methods]] — observer + state feedback when classical hits its limits.
  • planned [[Engineering/digital-control]] — z-domain, discretization (Tustin, ZOH), aliasing.
  • planned [[Engineering/mpc-control]] — constrained, multivariable, model-predictive.
  • planned [[Robotics/pid-control]] — robot-joint PID, gravity compensation, computed-torque.
  • planned [[Robotics/state-space-lqr]] — full-body manipulator dynamics, impedance, force control.
  • planned [[Languages/Tier3/scientific]] — language reference for the canonical tool.

12. Citations

  • Åström, K. J. & Murray, R. M. (2021). Feedback Systems: An Introduction for Scientists and Engineers (2nd ed.). Princeton University Press. Free PDF: https://fbswiki.org/. The modern canonical text.
  • Franklin, G. F., Powell, J. D. & Emami-Naeini, A. (2019). Feedback Control of Dynamic Systems (8th ed.). Pearson. The standard undergraduate course text in North America.
  • Ogata, K. (2010). Modern Control Engineering (5th ed.). Pearson. Especially strong on root locus and frequency response.
  • Dorf, R. C. & Bishop, R. H. (2022). Modern Control Systems (14th ed.). Pearson. Extensive worked examples; companion MATLAB code.
  • Goodwin, G. C., Graebe, S. F. & Salgado, M. E. (2001). Control System Design. Prentice Hall. Free online: http://csd.newcastle.edu.au/. Sits between classical and modern.
  • Skogestad, S. & Postlethwaite, I. (2005). Multivariable Feedback Control: Analysis and Design (2nd ed.). Wiley. Definitive on fundamental bandwidth limits from RHP zeros/poles and Bode integral.
  • Skogestad, S. (2003). “Simple analytic rules for model reduction and PID controller tuning.” J. Process Control 13(4), 291–309. doi:10.1016/S0959-1524(02)00062-8. The SIMC paper.
  • Åström, K. J. & Hägglund, T. (2006). Advanced PID Control. ISA. The PID bible — comprehensive on auto-tuning, anti-windup, gain scheduling.
  • Åström, K. J. & Hägglund, T. (1984). “Automatic tuning of simple regulators with specifications on phase and amplitude margins.” Automatica 20(5), 645–651. The relay-feedback auto-tuner paper.
  • Shinskey, F. G. (1996). Process Control Systems: Application, Design and Tuning (4th ed.). McGraw-Hill. The industrial-PID culture and gotcha catalogue.
  • Smith, C. L. & Corripio, A. B. (2005). Principles and Practice of Automatic Process Control (3rd ed.). Wiley.
  • Seborg, D. E., Edgar, T. F., Mellichamp, D. A. & Doyle, F. J. (2017). Process Dynamics and Control (4th ed.). Wiley.
  • Ziegler, J. G. & Nichols, N. B. (1942). “Optimum settings for automatic controllers.” Trans. ASME 64, 759–768. The original PID tuning paper.
  • Cohen, G. H. & Coon, G. A. (1953). “Theoretical consideration of retarded control.” Trans. ASME 75, 827–834.
  • Tyreus, B. D. & Luyben, W. L. (1992). “Tuning PI controllers for integrator/dead time processes.” Ind. Eng. Chem. Res. 31, 2625–2628.
  • Rivera, D. E., Morari, M. & Skogestad, S. (1986). “Internal Model Control. 4. PID Controller Design.” Ind. Eng. Chem. Process Des. Dev. 25(1), 252–265. doi:10.1021/i200032a041. The IMC-PID paper.
  • Francis, B. A. & Wonham, W. M. (1976). “The internal model principle of control theory.” Automatica 12(5), 457–465.
  • Freudenberg, J. S. & Looze, D. P. (1985). “Right half plane poles and zeros and design tradeoffs in feedback systems.” IEEE Trans. Automat. Contr. 30(6), 555–565.
  • IEEE Std 1242-1999. IEEE Guide for Specifying and Selecting Power, Control, and Special-Purpose Cable for Petroleum and Chemical Plants. (Includes PID loop tuning guidance for the petrochemical context.)
  • IEC 61131-3:2013. Programmable controllers — Part 3: Programming languages. The PLC PID function-block standard.
  • ANSI/ISA-5.1-2009 (R2022). Instrumentation Symbols and Identification. P&ID symbology for control loops.
  • ISA-S75.25.01-2000 (R2018). Test Procedure for Control Valve Response Measurement from Step Inputs. Standard step-test protocol for FOPDT identification.