Truncating Integral Windup?

Homebrew Talk - Beer, Wine, Mead, & Cider Brewing Discussion Forum

Help Support Homebrew Talk - Beer, Wine, Mead, & Cider Brewing Discussion Forum:

This site may earn a commission from merchant affiliate links, including eBay, Amazon, and others.

wdevauld

Active Member
Joined
Jun 30, 2012
Messages
32
Reaction score
5
Location
Calgary
So, when playing around with setpoints, I find that my error integral gets wound up to a large value in that it dominates everything else. While working out the problem, I have been running on PD mode (Setting K_i to zero).

Trying to find a better solution I hit up Wikipedia: http://en.wikipedia.org/wiki/Integral_windup

When I read the fourth solution: 'Preventing the integral term from accumulating above or below pre-determined bounds', I wondered why one of the preferred methods for controlling windup is to have the integral computed over a rolling time window.

Say you have an additional parameter, that instead of going from t=0 you start Now - Parameter seconds/minutes ago and add up all the discrete error. To me this is pretty intuitive although I am hesitant because I can't seem to find any whitepapers/websites that talk about the idea.

So for the process engineers out there, why do we set an absolute deviation on the integral instead of just time truncating it? :confused:
 
Seems an excellent question to me, maybe pitch it to Brett Beauregard who wrote the Brewtroller PID routine.
 
What I know may not be much, and may not be the answer to your question, but anyway:

One problem with PID in temp-control is if the feedback loop get's too slow, the integral tend to wind up if set to low. The need for low, low gain together with high Integral time may be needed to avoid overshoot. This you probably allready know.

If your controller have no way of deal with the integral windup, it might be better to look at the hardware. How is the sensor set up in relation to the heatsource? Is it a fast acting RIMS (easyer to set up parameters efficiantly)? Is it a slower acting HERMS? HLT? Do you use a pump?

Not shure this will help you at all, just curious about the rest of your setup.
 
Alien, thanks for the contact, I'll see if Brett can tell me why this is a bad idea.

Protto, I'm running a HERMS. Basically a HEX in my HLT, all electric at about 5500 Watts. I circulate through the coil, and keep the water turning in the HLT with two pumps. It is slower naturally than a RIMS and that is likely why if I attempt a complicated mashing schedule I end up with my temperature overshooting.
 
reading through this thread, I would suggest that you're barking up the wrong tree. if you're using the stock brewtroller pid, the overshoot you're seeing isn't caused by reset windup. I don't know if I'd call that version of the pid a well-oiled machine, but it's pretty good. you're likely to do more harm than good changing the internals.

a couple alternate suggestions:
- use less integral action. on this controller that means making the I Term bigger
- try using the SetOutputLimits() function to clamp the maximum output value (you will probably need to rescale your tunings a bit after this)
- this version of the PID library has an optional feed-forward functionality. this could let you do things to the output without confusing the pid. for example, you could force the output to 80% for 2 minutes, then drop it to 20%, all the while having the pid make additional corrections.

Cheers!
 
Br3ttb,
Unfortunately I'm not making use of a brewtroller. Your name came up as an expert in the field. I am currently driving all this using a Raspberry Pi, a ruby PID library and GPIO pins.

I am taking your first piece of advice, and just setting the integral term to zero so it does not effect the output at all. It is 'good enough' for now, this came out as an idea and then some concern because I couldn't find anyone else discussing the truncation of time. I'm not that smart, someone else must have thought about this.

I agree with your assessment via email, that keeping track of a time truncation would introduce a lot of overhead, and would complicate the implementation. I still may do this, I have tonnes of memory available on the Raspberry Pi, so keeping track of the last 5 minutes of 1-second samples would use up about 1kb of memory.

-W
 
Since you'r a programmer, could you put in a function that disables the effekt of I if the temp is, lets say 5 deg off set point, and only comes into effekt when your temp is within 5 deg. That way you will avoid integral wind up when stepping up, and the integral will enshure you always reach setpoint. You can also have your P set to a realistic value (higher).
 
Protto, I think I get what you are saying. I believe the difference is not to have the K_i term set to zero if you are far away (5 degrees in your example), I think you want to zero out the error term so that the integral does not accumulate any values.

I may spend some time playing around with the different ideas and report back.
 
Back
Top