PID Anti-windup Techniques


Integrator windup is a problem in PID feedback controllers that results in overshoot that would not occur if the system were being controlled only in its linear range.

The linear range of a control system can be limited by saturation of the feedback controller output. The rise time of a system step response when the controller must initially be saturated is longer than that of the step response in the linear region. Because of this, the integrator will accumulate a larger output during the rise, causing overshoot.

Integrator anti-windup can be used to avoid this overshoot. Several anti-windup techniques exist; two common ones are back-calculation and clamping.


Back-calculation uses the difference between the unsaturated and saturated controller output as feedback that unwinds the integral accumulator. It introduces a constant to tune: Kb, the back-calculation gain.


Clamping, or conditional integration, prevents the integral output from accumulating in the appropriate direction when the controller output is saturated.

Comparing Anti-Windup Methods

After tuning your controller in the linear region, it's time to evaluate anti-windup techniques if the controller will be operating in saturation.

Time Domain

Time Domain.png

The step response in the time-domain can help you decide whether the controller behavior is good or not, but it does not give a good visualization of the anti-windup implementation behavior.

Error vs. Integrator Action
pi space.png
This graph shows the state of the integral accumulator as the controller drives error to 0. The upward step response can be seen on the right half of the chart, and the downward step response on the left.


We can clearly see where the clamped controller leaves saturation.


We can also see the accumulator unwinding in the controller with back-calculation.

It's important to note that in this example either the controller with back-calculation is not properly tuned, or this system with these gains does not lend itself to back-calculation anti-windup.

LabVIEW Example Code

Example code can be downloaded here. It depends on LV-PID, a simple PID library that can be downloaded here and OpenG Toolkit, which can be downloaded from VI Package manager.

Recent Posts:

Communication Through Design - Making Assembly Easier
Publish Date 23 Jun 2017 Garret HallmarkDavid Taylor

After dozens of hours designing an assembly and weeks of waiting for parts to [..]

The Virtual Water Cooler

We have all experienced many changes to our daily lives over the past few months. [..]

Implementing OAuth2 Authorization in LabVIEW
Publish Date 23 Jun 2017 John AmstadtDavid Taylor

  What is OAuth2?

Oil and Gas from a Sales Perspective

I have been fortunate enough to work in the oil and gas industry for over a year [..]

4 Simple Rules to Write Clean Code
Publish Date 23 Jun 2017 Yifang YangDavid Taylor

  Computer code may seem structured and sterile. But, like any skill there is an art [..]

Popular Posts

Posts by Topic

See All Topic