Originally posted by Bill Hays:
This is very interesting to me. I understand a bit about hysteresis, gain and what not but I'd like to hear more about how it works in this application. I've dealt with it in DC motor control over mechanical opposition, where mirror positioning is paramount (missile control) but I'd love to hear more about how this is controlled when you only have control of the fan feeding the fire and rely on snuffing the fire to cool it. I'm not a programmer, just into the electronic, and somewhat, mechanical end of it.
Bill
I can try to expand a bit.
First the basics for the benefit of others. The system here is "closed loop" meaning there is a feedback loop from output to input. The output is temp of the fire, measured, and fed to the input, the fan speed. As with the microphone and speakers being too close causing a whistle in a PA system, we can get into the same tight loop causing oscillations. The oscillations cause temperature variations which is undesirable.
The solutions are twofold:
1. Watch the loop gain. This reduces the oscillation rate as reduction of loop gain also reduces the chances for positive feedback. The down side may be that the system will then recover slowly. If for example the temp is way below target, you want to ramp up to maximum RPM quickly as not doing so, may cause the fire to die or as take too long to recover.
2. Deploy a filter. This is used in PA systems for example where the oscillation frequency is filtered, reducing its gain below 1. By doing so, you can still have very high gain in other frequencies (i.e. the person talking) without causing whistling noise.
Problem with both of these solutions is that this system is anything but “linear.” Unlike a motor actuator/servo, we cannot predict how much blower power will increase the fire temp. Charcoal is an unpredictable animal. It is possible that when the blower comes on, we only have a tiny bit of lit, requiring a ton of air to get going again. Or having it be fully lit but smoldering. Put the physics of the smoker on top of this with air leaks, vent size, etc. and you have something that simply will not lend itself to a linear prediction. The system can go from being linear, to being non-linear to totally random (gust of wind coming in). So no set system will work optimally in all cases.
The ideal solution therefore has fully adaption filter coefficients and gain. When the system starts, it starts with a default set of parameters and the adjusts them. For example, if the blower gets us to temp at 10% RPM, then we know the gain has to be low. Likewise, if the smoker temp is highly stable, then we don’t need to filter variations much. On the other hand, if it takes swings from 10% to 50% just to get the fire temp to move appreciably, then you need to increase gain. And if as soon as you stop the blower, the temp drops 4 degrees, then you need to ignore such drops as to avoid oscillations due to that.
You can see much of this in action with the stoker. You see it get in oscillation (filter coefficients wrong for that instant), you see it waiting a bit before turning on the fan or off (hysteresis/filter).