# Anti Wind-Up in PI controller

1. Nov 20, 2015

### nitishsharmabit

Hello folks,

Can anyone tell me why does a PI controller uses an Anti-Windup circuit?what is the main purpose of using it?

2. Nov 20, 2015

### Hesch

Say you control the speed of some dc-motor and you accelerate the motor from a halt to set speed = 3000 rpm.
Now, due to the set acceleration and/or the inertia of the load, the power output stage will be saturated. Thus there will be an error in the control loop, which the integrating part of the controller will integrate, requesting more and more power. But the the requested power will be limited by the output stage, and the error will sustain.

When the speed at last reaches 3000 rpm, the integrated value in the controller will have become so high that a lot of negative error is needed to "rebalance" the loop / the integrating part. Thus the speed of the motor will make an unwanted overshoot.

The anti-windup circuit will limit the set acceleration, according to a detected saturation in the output stage, thereby preventing the overshoot. The control loop will be balanced all the way.

Last edited: Nov 21, 2015
3. Dec 5, 2015

### jim hardy

We are taught to think of control loops using linear equations operating on an error term

but as Hesch pointed out , when something in the loop reaches a hardware limit the loop is no longer linear .
eg
An automobile cruise control tries to maintain speed error of zero
but it can apply no more than full throttle to do so
and if the engine is inadequate to maintain speed up a steep hill , the integrator measures and integrates that error
this integral of error , if not limited, might have integrated up to hundreds of percent .during the time it took to climb that hill.
(just think = what if it's a digital controller with floating point? Integral of error could be astronomical ! )
so when you crest the hill speed will climb above desired until integrator returns its integral-of-error term back to zero.

In the days of pneumatic controls we connected a meter to the integrator so that operator could manually adjust integrator to zero before transferring to automatic. That signal was called "Tie-Back" - just in case you ever run across it.

old jim

4. Dec 6, 2015

### Hesch

Well, here is how the wind-up can be prevented by digital control.
The desired speed is calculated by an input function with a max. speed = 10000 and a max. acceleration = 1000. So when the control-loop is activated from a halt, the output from the function should be
0, 1000, 2000, . . . , 9000, 10000, 10000, . . .
But say that the output stage ( D/A-converter ) is limited to -512 . . +511, the D/A-converter will be saturated/unlinear already by the first sample, because the PID will multiply the error by 5, giving 5000.

So to correct this error, you back-calculate:
Correction = ( 5000 - 511 ) / 5 - ( feed-back velocity ) = 898 ( always round-up ). Feed-back velocity = 0 from a halt.
This correction is subtracted from the internal set speed in the input function, giving a corrected internal set speed = 102.
Now you recalculate the loop with the new internal set speed, giving a new ( and final ) PID-value = 510, which value is within the limits.
At next sample, the input function will calculate an internal set speed = 102+1000 = 1102, but every time it suggests a value that leads to an exess in the output stage, it will be corrected. Thus the PID-controller will never wind-up, but will balance "on the edge", until internal set speed = 10000 is reached.

Last edited: Dec 6, 2015
5. Dec 7, 2015

### jim hardy

Nice, Hesch

in your digital loop it's the A/D that hits the hardware limit(runs out of bits)
in my analog it's the motor(runs out of torque)
both operate on error between measured and desired speed/velocity

and cruise controls after about 1980 no longer 'windup' on steep hills , like an old Mercury i once.rented

clever solution.

old jim

6. Dec 7, 2015

### Hesch

I just picked an easy example ( D/A-converter ), not having to explain something complicated.