Computing Library › Control Theory
Control Theory

Anti-Windup

Anti-windup schemes prevent an integrator from accumulating error while the actuator is saturated, avoiding large overshoot and sluggish recovery.

The windup problem

When a controller commands more than the actuator can deliver, the actuator saturates and the true control input stops following the command. If the controller has an integral term, the error keeps accumulating in the integrator even though increasing the command has no effect, because the actuator is pinned at its limit. When the error finally reverses, the bloated integrator must unwind before the command drops below saturation, causing large overshoot and slow recovery. This is integrator windup.

Back-calculation

Kronos motion — control room

The most common remedy, back-calculation or tracking anti-windup, feeds the difference between the commanded and the actual, saturated, control back into the integrator through a gain, so the integrator is driven to a value consistent with the achievable input while saturated. When the actuator comes off its limit, the integrator is already at a sensible value and the loop resumes smoothly. The feedback gain sets how quickly the integrator is corrected.

Other schemes

Conditional integration simply stops integrating when the actuator is saturated and the error would push it further into saturation, a switch-based approach. The observer-based or generalized anti-windup formulation treats saturation as a modification to be compensated by an added signal, and can be designed with LMIs to guarantee stability and performance. Modern anti-windup separates nominal design from saturation handling in two stages.

python
# PI with back-calculation anti-windup (discrete)
def step(e, I, Kp, Ki, Kaw, umin, umax, dt):
    v = Kp*e + I            # unsaturated command
    u = max(umin, min(umax, v))
    I += (Ki*e + Kaw*(u - v))*dt   # back-calculate
    return u, I

Anti-windup is essential wherever integral action meets real actuator limits, which is nearly everywhere. It is a small addition with a large effect on transient behavior and connects to control allocation, which manages saturation across multiple actuators.

For any design-stage loop with limited actuators and integral action, anti-windup would preserve graceful recovery from saturation, evaluated in simulation.