Hi Guys,
I have implemented a digital PID controller to govern the RPM of a gasoline engine. The controller is in incremental (or velocity) form and includes filtering if the D term, etc.
The controller works well, except for the case where I believe I'm getting integral windup. In this application, it is obvious the the "actuator" saturates at wide open throttle and fully closed throttle. However, there are also rate of change limits on the throttle, particularly during throttle opening. If there is not enough fuel to generate torque with the increasing throttle (air), then we have a lean condition and the engine loses power and can't accelerate. So essentially the plant has rate of change limitations beyond which any changes in throttle makes no difference in the plant output until such time as the fuel has a chance to catch up.
During this period, I believe I am effectively seeing integral windup. This is in fact "actuator saturation" in effect and during these periods the integral will build up (the error terms get added to the throttle motor and the motor itself continues to integrate). I believe this is part of the cause of the overshoot I'm seeing. The engine becomes saturated at rapid throttle movements, and it then overshoots. In this case, the actuator has upper and lower saturation bounds but also rate of change bounds.
I'm generally familiar with windup protection, and its obvious how to do it when dealing with simple actuator limits. But in this case, how do I limit the integral term when I run into a rate of change saturation? I'm not even sure how to detect when I am saturated in order to add compensation to the integral term.
Thanks,
Paul