Question: In my Anti-Windup code - how do I decide on the upper and
lower limits of the integrator ?
responses so far have been on how to implement anti-windup be it in comments or in responses. The question is actually HOW to decide on the values
Aspects of your system need to be understood and more specifically what the output is driving; is it another control loop or directly driving some actuator. You must have an idea.
Lets take a simple example
A velocity loop feeding a motor.
DEM is a voltage signal +-10V representing a velocity demand of +-100rpm (thus 1V = 10rpm)
FB is the feedback from some tacho such that 1V = 10rpm
Sig is the voltage that will be applied to the motor, equally of the same scaling of 1V = 10rpm.
The loops scalings are a design decision based upon feedback resolution and other implementation drivers.
Now I am showing anti-windup via the two sets of back-to-back zeners: One for the integrator and one for the final summation. Also shown is a reset for the integrator.
Now let's say I never want to command my motor to go > 80rpm, be it due to some safety concern or other considerations. I would need to limit the signals around the velocity PI controller to 80rpm => ~8V. In this case I would set the zeners to be 7v2. This way the integrator should not wind up to little over 7.8V (78rpm) and the final summation would equally be limited to 7.8V.
In this quick example I have set the domain scaling to be 10rpm per volt. In a digital controller you will also know the scaling of the variable's through the control loop ( 0.7A/lsb, 1rpm/lsb for instant) and equally you should know what you need to limit your control loops to (no more than 20Amps, no more than 50V).
Knowing the system constraints and knowing your implementation scalings, be it analogue or digital, is key in setting the appropriate gains as well as the appropriate limits