I'm trying to put together a control algorithm to use a heater to drive a 2nd order thermal system to the target temperature as quickly as possible. I've done a nice state-space model with an extra integrator to drive static error to 0, and picked my target poles, and get a lovely linear controller that would work if I could ask the heater to transiently provide a) truly insane amounts of power and b) cooling.
Neither of these being possible, what I need is a controller that gracefully handles the transition between railing the output at max power and moving back into a linear control mode without trying to overshoot back through 0. Just clamping the output of the linear system is very wrong; my simulations are grotesque.
Hard limits on what the output actuator can do has got to be the most common control non-linearity there is. But the moment I get outside linear controller design everything gets nebulous; discussions of a dozen different techniques with no discussion of how to align technique to problem.
Can anyone point me at "the right way" (or oh please the easy way) to design a controller where the output has hard limits, but the system is otherwise linear? Ultimate implementation will be digital with a sample rate of Hz and time-constants of minutes, so compute cycles are freely available and time quantization effects are negligible.
Gory Simulation Details
The thermal system I'm simulating looks like this, where the current source represents heater power, and voltages are temperature rise above ambient. One interesting thing is that the difference between e1 and e2 is proportional to the derivative at e2.
Simulation with heater power magical (green) and realizable (blue) looks like this:
And the results at e2 (the temperature I'm trying to control):
Finally, the integrator with anti-windup. Allowing the integrator to wind out farther makes the resulting overshoot at e2 worse; the 5k value was chosen to give some room for ambient temperature variation. Node looks like this: