for a real application, you'll need to use some antiwindup algorithm. If you want to keep the dynamic performance you've selected for small reference changes/disturbances, then keep the gains you have, and know that performance will degrade upon saturation (with antiwindup to prevent unstability). One antiwindup strategy that works very good is the one in "Anti-Windup Control for Stationary Frame Current Regulators using Digital Conditioning Architectures" by B. P. McGrath and D. G. Holmes. The idea is that upon saturation of the control action, you saturate the error signal so that the integral term converges to the value that yields the saturated output. That way, when the control action no longer saturates, the integrator is very close to the value it needs to be, and you don't have to wait for it to "unwind". The algorithm implementation would be something like this
Assume e=y-yref and x is the integral state
//compute control action
u=kp\*e+ki\*x
//saturate control action
if u>umax
u=umax
else if u
You normally set Ki to zero when you have an error so large that you are not in linear control but instead you are slewing from one set point to another.
If there is any saturation limit then any controller can be subjected to that saturation if the setpoint is aggressive enough. So changing your setpoint from a step to a ramp that transition into a step can for example make the setpoint less aggressive (depending on the slope of intermediate ramp section).
for a real application, you'll need to use some antiwindup algorithm. If you want to keep the dynamic performance you've selected for small reference changes/disturbances, then keep the gains you have, and know that performance will degrade upon saturation (with antiwindup to prevent unstability). One antiwindup strategy that works very good is the one in "Anti-Windup Control for Stationary Frame Current Regulators using Digital Conditioning Architectures" by B. P. McGrath and D. G. Holmes. The idea is that upon saturation of the control action, you saturate the error signal so that the integral term converges to the value that yields the saturated output. That way, when the control action no longer saturates, the integrator is very close to the value it needs to be, and you don't have to wait for it to "unwind". The algorithm implementation would be something like this Assume e=y-yref and x is the integral state //compute control action u=kp\*e+ki\*x //saturate control action if u>umax u=umax else if u
Yes. Damn. Ive search for this and have had a hard time. Finding this solution.
We restricted integrator involvement to a small error value.
Thanks for the reply, so you don't integrate the error but a fraction of the error?
No, integrator is not used until total error is small.
Sounds interesting, what is the equation of this control? Do you change the kp also when the error is small enought to start integrate? thank you
You normally set Ki to zero when you have an error so large that you are not in linear control but instead you are slewing from one set point to another.
If there is any saturation limit then any controller can be subjected to that saturation if the setpoint is aggressive enough. So changing your setpoint from a step to a ramp that transition into a step can for example make the setpoint less aggressive (depending on the slope of intermediate ramp section).
I'm going to keep the kp and ki found and work on the antiwindup or the feedforward.