Why mess with fans?


 

JIves

TVWBB Member
I've been using a 4.2 heatermeter for quite some time with a Primo Oval XL. I'm always intrigued at the elaborate damper/fan designs here but am a little curious why people feel the need to use a fan at all. I simply have a servo opening and closing the bottom vent on my Primo and it's worked flawlessly for temp control. Fans make me feel like I could be blowing ash around inside my smoker. Assuming this isn't a big problem given how many people use them not just with Heatermeter but also other control systems.

Just seems like a needless complication and possibly a way to introduce problems. I suppose the fan could help you get up to target temp a little bit faster but I doubt that much.

My 4.2 which I've had for several years now is really kinda wearing out so considering a 4.3 soon. I'd like to see a better app out there so I looked around at some of the newer commercial solutions and none of them really stacked up to heatermeter in my opinion other than that a few have pretty polished apps and stuff like Amazon echo integration.
 
Running damper only is fine for an efficient smoker (Kamado style) like your Primo, but with un-insulated smokers like most people have, there needs to be a fan for better control, as they tend to lose heat MUCH faster. I've tried using "damper only" on my 18" and 22" WSMs, and there's no way it will keep up.

Likewise, on my Gravity feed, I run "Fan Only" just because the cook chamber is so dang large. It keeps within 1 degree usually.
 
Last edited:
One reason to go fan only is if you want to make an inexpensive temperature controller. I have made several using a cheap Chinese PID controller with a built in relay to control a small radial fan. I 3D print a fan mount/adapter as well as a case for the PID Controller, hook up a few wires and a pit probe, and I'm good to go at around fifty bucks.

Here's one I made for a friend. It holds temperature to within one degree or less. So an alternative question is: "Who needs a damper and a fancy circuit to control it?".
[url=https://flic.kr/p/2hYUVqD]Joes temp control by Bob Walters, on Flickr[/URL]
 
Not to mention, wsm has 3 inlet dampers

Unless want 3 automated dampers, or a bunch of plumbing for high temps you need to put the air of 3....into just one spot.
 
Last edited:
Like Will said, ceramic grills and other like the big boy he built out of steel are well insulated and have excellent sealing materials on gaps and between shell half's. I use a Primo Jr. and I suspect if I used the original design of the heatermeter 4.2 with the blower, my grill would work fine. Would I be able to get my grill to maintain a +/- 2 degrees easily through the whole cook cycle, probably not. The combination of the fan and damper can help you achieve tighter control over the entire cook. One other item I have never seen discussed, for fan/damper combinations, is SIZE DOES MATTER. for all you out there, that means that a smaller fan/damper will using give you better control and results. I say this because my control strategy is always maintain 15% window above zero. It never a good idea to let the control bounce between 0 and your average control. When it does that, your control loop can and will get out of control and then you start chasing the control loop dragons and never get anywhere till your cook is over. With the dampers out there that I have found to work the best on my grill, I target to keep the 225 degree control point damper/ fan output around 15%. sometimes it will go lower, but never down to 0. So with that said, the beauty of a fan/damper is that most of the time the dampers does the work, but you configure the fan`s output scaling so it can be too aggressive down to no input at all. I have tried all the dampers out there except for Ralph`s. I think Ralph's would work just like the Small Tom Cole damper I use. Will`s Damper works well on my small unit as well. The Micro Damper on a tightly sealed grill like mine worked, but it was difficult to get a smooth control results. I suspect the fan vrs blower is the reason. Still no reason not to try this damper on a ceramic grill. I believe others have made it work well on their setup.
 
Thx I have been using ceramics so long I guess I just kinda forgot about the less efficient smokers. That said all the commercial smokers including things like WSM were designed to run at a set temp off a human controlled vent and do a pretty good job of it once you get it dialed in.

I do have a 3D printer so maybe I will give some of the fan/damper combos a go.

I tested a thermoworks Billows/Signals set up and was shocked how much smoke was coming out everywhere even sealed places when the fan ran which kinda made me think that fans are a bad approach for me.
 
I also try to use the fan as little as possible and just use a Microdamper-style damper, set to only run the fan once the damper is already fully open:
-- Fan output: Voltage, on above 50%, min 0%, max 100%, startup max 100% (although these last two values can be reduced if less fan is desired)
-- Servo output: Fully open at 50%

This way the servo opens for the first 50% then the fan is added as needed. The blower dramatically reduces startup time. When food is added, I get some blower time hovering around 50-70% until everything is fully heated up. Then the output drops to 10-40% and slowly rises as ash sort of clogs the airways a bit. As the cook goes on (8 hours), it will start bumping into fan territory again until the charcoal finally runs out and the blower has ramped up to 100%. Hopefully I've finished my cook well before that happens.

So the advantages are that the controllable duration is much longer than with just the damper, at least given the small size of the dampers we're using with fans, and their relatively restrictive air flows. For folks with WSM or other drum smokers, the fan is needed because we can't control all 3 or 4 of the vents on these setups so to work around that, all vents except one should be closed (so we can lower the temperature) and to compensate we need to pressurize the one vent with the fan attached (to get enough air to raise the temps).
 
Good point on the small opening. As you can see in the video below I can open the bottom vent quite wide using servo control

Also you can get a linear actuator capable of 17lbs of force for less than $80 this could easily rotate the plate covering the 3 vents on a WSM or even the arm on a regular weber kettle grill. They use the same input as a regular servo and interestingly can often use less current for much greater power. I've been considering switching my setup over to a linear actuator for a while but just haven't really needed to.

What I have started noticing is that after running for ~12 hours give or take suddenly my heatermeter won't actuate my servo anymore. It's pretty old and hasn't been well cared for in terms of protection from elements and such so I've been chalking it up to finally just giving up the ghost. Last time I tried some electronic contact cleaner on all the connectors, etc. and couldn't get the servo going again. Then a few days later I plug it in and everything works... but without fail after ~12 hours no go again. Maybe the power supply for the servo is getting overloaded and going into some kind of thermal shutdown state, not sure. It's very weird. I have a servo power supply that I haven't gotten around to wiring up just to see if it would help. I'm runnning a 4.2.4 version and have been thinking of upgrading anyway.

I'd still love to see a feature to turn a knob that would allow me to adjust my vent manually using the controller. If we had that feature I'd build an element hardened heater meter and make it a permament attachment to my smoker.
 
You mean some sort of option to disconnect the damper from the PID control output so it can be manually adjusted independent of the automatic blower? That would be pretty unlikely to be added. However if you just want to set a manual output percentage, you can do that by turning on manual mode in the LCD menu, or just entering the setpoint as a percentage in the webui (e.g. 50% instead of 225).

I've also looked into linear actuators and 3d printed linear actuators that use servos and found that they were either insanely expensive or bulky and unreliable, respectively. I've even designed a 3D printed box with a sliding door operated by servo but that was also bulky and jammed up a lot too. There's definitely a lot of room for improvement over using cheap servos but I feel like the more it is improved, the more it becomes specialized to a specific smoker / mounting solution which then makes it less useful. I'm always on the lookout for new ideas though.
 
Last edited:
You mean some sort of option to disconnect the damper from the PID control output so it can be manually adjusted independent of the automatic blower? That would be pretty unlikely to be added. However if you just want to set a manual output percentage, you can do that by turning on manual mode in the LCD menu, or just entering the setpoint as a percentage in the webui (e.g. 50% instead of 225).
Exactly - sort of like I mentioned ages ago here: https://tvwbb.com/showthread.php?63...are-necessary)&p=701792&viewfull=1#post701792 after posting I vaguely remembered that I'd brought it up before


I've also looked into linear actuators and 3d printed linear actuators that use servos and found that they were either insanely expensive or bulky and unreliable, respectively. I've even designed a 3D printed box with a sliding door operated by servo but that was also bulky and jammed up a lot too. There's definitely a lot of room for improvement over using cheap servos but I feel like the more it is improved, the more it becomes specialized to a specific smoker / mounting solution which then makes it less useful. I'm always on the lookout for new ideas though.
Definitely true, my servo setup is pretty adaptable to just about any ceramic that has a linear sliding vent (BGE, Primo, Kamado Joe, etc.) but would be a different beast on most anything else. I've tended to use the Hitec HS-645MG servo and in the many years I've used heatermeter I think I've only replaced it once. It lives outside and has survived both Austin, TX summers and Nortern NJ winters just fine. It is psuedo covered by my Primo table but that's about it. They run around $30 so pretty pleased with logevity of several years. The biggest potential issue is that the servo output amperage on the heatermeter can occasionally be on the low end for it but generally if I keep the vent slider area relatively clean it's not an issue.
 
Oh wow that's right! I totally forgot about that. Still no way to do it though (sad face).

I wonder if the RFM12 is not being used that i could repurpose the /RF_SEL pin on PB2 to a servo PWM output. I am interested in creating a direct PWM output that could be set via a bash script. I'd like to set an analog output from a script and PWM seems like the most promising approach. I don't see anything in the JSON url that allows the servo pulse to be set directly either. Is there any suggested path that could be independent from the blower PID architecture?
 
Argh I just typed a longer reply on my tablet but the forums ate it somehow, so I'm going to just hit the high points.

Since the servo is directly tied to the PID output, there's no functionality or any commands that will allow it to be controlled independently apart from setting the endpoints. PB2 could be used, but it is still used in the code so I'd avoid that because it is twice the work. PD7 (Pin 13 / Digial 14) has never been used by anything so you don't have to worry about cutting out any existing code.

We're also out of timers. One is currently being used to generate the 50Hz period, so that will give you the signal to set the output (digitalWriteFast(14, HIGH)) but I don't know if there's any COMP vector available to tell you to set it low again when it hits the right time.

It might be easier to use the Pi to generate the servo signal and then you wouldn't have to mess with the HeaterMeter at all. We have a ton of unused Pi GPIO and you could just make an addon package that adds the functionality to the linux side. I'm sure there's C code that can be copied to make servos go.
 
Bryan, Thank you for the insight. For whatever reason I did receive an email notification of what probably was your first post.

Using the GPIO on the PI makes sense. "Duh" on my part. Hopefully if I setup a PWM signal (slow ~50Hz or so output for analog out, not servo) on the PI that the drivers are written on a interrupt architecture that it doesn't affect Heatermeter operation. I did modify the Arduino code for the fan Long PWM timing intervals to shorten the time from 10 seconds to 2 seconds. It seems like it is by observing the behavior, but not 100% sure until I get a scope on the output signal.

On a somewhat related note, I plan on using Python and library to set the GPIO PWM. Unfortunately I am not able to install it because the System>Software page indicates 0% free space left. I am using an 8GB SD card, but I'm not sure if the base install is supposed to be that full, or I have garbage filling it up. I don't know enough where to start looking. (fdisk output below) Thoughts on freeing up space?

Disk /dev/mmcblk0: 7948 MB, 7948206080 bytes
4 heads, 16 sectors/track, 242560 cylinders
Units = cylinders of 64 * 512 = 32768 bytes

Device Boot Start End Blocks Id System
/dev/mmcblk0p1 * 129 416 9216 c Win95 FAT32 (LBA)
Partition 1 does not end on cylinder boundary
/dev/mmcblk0p2 513 1152 20480 83 Linux
Partition 2 does not end on cylinder boundary
/dev/mmcblk0p4 240513 242560 65536 83 Linux
Partition 4 does not end on cylinder boundary
root@OpenWrt:~#
 
If you set the "Long PWM" to 2 seconds, then you only get 3 levels of output from that: 0%, 50% and 100%. The Long PWM turn off is still linked to the once-per-second scheduling so it would turn on at T+0, then have a chance to turn off at T+1 (which it would do for any value 1%-50% I think?) and only run for the full T+2 if the output is 100%.

The size of the user filesystem on the SD card is just 64MB, so it is certainly possible you've run out of space. I'm sure installing all of what is necessary to run Python is quite large. A clean system will have about 53MB of that 64MB free. The small filesystem size was chosen to keep the download size as small as possible. You can try installing all the ext4fs utilities (before installing Python) then resizing the filesysytem to be larger, then adding the Python packages. You might run into the same issue I did where I couldn't get the utilities to resize the live filesystem though.
 
Re: Filesystem. Makes sense on 64MB of user space. I guess I'm interpreting the fdisk output incorrectly. I was able to get "mini-Python" to install. I wasn't sure if I had some weird anomaly occurring where it was filling up the card with Gig's of data.

Re: 2 sec update. I have some homework to review the code again on PID output and temperature sampling rates. I assumed the AVR micro was on a fast closed loop and PI was sending high level commands. Overall I'm trying to speed up the loop to ~1-2 seconds. I realize I may be bumping into limitations where it was never intended to be used like I am trying to do. (Control an electric heating element on a popcorn popper for coffee roasting). I really like the PI webserver, user interface, finished 3D enclosure, etc. instead of starting from scratch and the hope I know enough to hack up an existing design without getting into too much trouble. I know that I much prefer Python over bash scripts. :)

I'm thinking maybe going back to the "fast PWM" to convert the ~5-12V analog out to a 0-100% PWM control using an external board. That might give smoother control of the heating element despite the 1 second update rate. It mostly works now, but temp control is a little sloppy with the bang-bang behavior of turning a solid state relay on-off not as frequent as it should be.
 
The PID loop runs on a 1 second interval, it is just the long output mode ("Fan min output = 100%") that has a 10 second period. All the temperature measurement runs async using a free running ADC which loops over each probe every ~20ms to oversample/decimate so there's a lot of probe readings discarded between each 1 second interval.

I've just pushed changes to github that should allow the Long PWM mode to be much more precise when it turns off, so that it doesn't wait until a new PID interval. This means that with the default AVR firmware, a Long PWM output of 56.12% will give you 5612ms of ON time instead of the 6s it used to give.

There is a lower limit to the actual output because when the blower turns on, it gives it 100% power for the first 333ms before switching to fanSpeedMin PWM%. That makes any fan output less than 3% effectively 3% in the standard build, which is probably undesirable for shorter Long PWM periods like you want. Therefore this functionality can now be disabled by setting the TEMP_OUTADJUST_CNT to 0 in grillpid_conf.h.

Finally, you can also now adjust the Long PWM period in grillpid_conf.h via the new TEMP_LONG_PWM_CNT. Note that is now specified in TEMP_MEASURE_PERIOD units instead of milliseconds since Long PWM period must be at least one measure period. I tested it down to 1 (1000ms) and with a TEMP_OUTADJUST_CNT of 0. The resolution of the output decreases the lower you set TEMP_LONG_PWM_CNT since the timing is not exact-- the higher you can set it, the lower your error % will be.

One last thing you might run into now is that the 47u/25V capacitor on the fan output slows down the turn-off time of the SSR. If you're going full SSR, you'll want to remove this capacitor entirely or put a low value resistor across the output (100-300ohm, with a high enough power rating to take the current when shorting 12V).
 
Last edited:
Wow! Thank you Brian. I will have to borrow an oscope from work and try it out.

I am familiar with the piece of code in grillpid.cpp that you are talking about since that is where I changed the 10000ms to 2000ms. The _CNT variable and "period" was throwing me off as I didn't have a full grasp on the timing of all the variables in involved in the IF statement of LONG PWM and PID output update rate. I did look at the ISR timers settings, but it wasn't obvious to me. I just need to get a scope on the output before and after the code updates to get my mind around your last post before I ask any more questions.

Regarding the slow ramp/decay of the output...I'll be on the lookout for the slow edges. That's what I was thinking with the use of an external analog to PWM controller without modifying the onboard LC power supply low pass filter. If it looks promising in my experiments I'll probably cleanup the edge with an external schmitt trigger to keep the Heatermeter in tact. All of this is a little Rube Goldberg in what I am doing, but I am having fun....and because I can.
 
The ramp is pretty fast on the leading edge or at least plenty fast enough for a 60Hz relay since it doesn't take much to charge the cap and the small current needed to trigger the relay. The decay can be quite significant though depending on how much resistance it is. You shouldn't need any external circuitry to convert the output if you're set to Pulse output mode in the HeaterMeter config. I've used a HeaterMeter (with the capacitor) tons of times for driving an SSR-controlled heating element and never seen it get stuck or not turn off, but my minimum off time was a full second. A simple resistor across the output would be all you need if you find that it isn't turning off quickly enough, but now that I am thinking about it, there's usually an optocoupler in the SSR so the LED will drain the cap even more quickly. If you compile with a TEMP_LONG_PWM_CNT of 1 and TEMP_OUTADJUST_CNT of 0, you should get 120 power steps and output that runs at the same frequency as the control loop which should be really great control.

If you have some followup posts with more information or questions or just to show off your project, it might be nice to make a new thread for it since we're fairly off topic for this thread.
 
Last edited:
I'll start a separate thread once I have this more dialed in.
Did you mean TEMP_OUTADJUST_CNT instead of PID_OUTADJUST_CNT? That is the only one I see in the new grillpid_conf.h.
 

 

Back
Top