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:

MWD Basics: Accelerometers Part 2
Publish Date 23 Jun 2017 Nathan SzantoDavid Taylor

In Part 1 of this post, we used the idea of shining a light through a cut-out in a [..]

Employee Profile: Meet Kelsie
Publish Date 23 Jun 2017 Shannon HayesDavid Taylor

Today we sat down and talked with one of our Erdos Miller employees to learn about [..]

MWD Basics: Accelerometers Part 1
Publish Date 23 Jun 2017 Nathan SzantoDavid Taylor

In a previous blog post on the building blocks of an MWD system, I mentioned that [..]

Basic Static Structural FEA TIPS
Publish Date 23 Jun 2017 Garret HallmarkDavid Taylor

Finite Element Analysis (FEA) can seem like magic when you first use it. The program [..]

Employee Profile: Meet Rohama

Today we sat down and talked with one of our Erdos Miller employees to learn about [..]

Popular Posts

Posts by Topic

See All Topic