After writing a similar post on 1/15/2012 I find myself saying basically the same thing, after a -10F night the boiler has kept up. Additionally except for a 12 hour period when I made some boiler modifications the boiler has run continuously for 14 days. There are several differences however. The software is 100% better and controlling the temperature to within a few degrees. The burner is now a waterfall type burner that is much safer and runs more consistently. The hopper and auger setup is much more consistent and dependable as a worm and worm gear than the chain and sprocket setup from last year. Most significantly the burner has proved it can run on chips as well as pellets. During these colder nights it is more difficult for the burner to keep up with chips because of the density differences. The chips are much less dense and because of this the auger must feed significantly more of them. The auger motor may need to be changed to accommodate this burning however during weather that does not require so much energy the chips will burn just fine. I could have easily burned chips for most of December with no issues if they had been dry enough. Which brings me to my second topic.
A test plan. I have taken the Holidays off but it is now the new year and time to make some constant progress. To facilitate the test plan I want to make some incremental improvements in the software. The first change in the software is to gather more data to make better decisions. To do this I am going to first add the date and outside temperature readings to both the LCD display and the data collected. By knowing these I can correlate the feed times to temperature and see how close a relationship between them exists. Next I would like to total the run time of the auger per minute and correlate that to both outside temperature and fuel usage. Armed with this additional data I can then make various burner modifications and see the differences if any graphically. The data is good now but could be better. As you can see from the data below the software is not working properly now. The derivative portion of the formula is not contributing at all. This needs to be fixed in the software.
Proportional, Integrative, Differential control. There is a function in Arduino that implements this and I started thinking about how I would do this and if it would be appropriate. The function, really an algorithm is all based on error and time. In this case the error is the difference between the set point and the actual tank temperature.
All three functions Proportional, Integrative and Differential have a factor, Kp, Ki and Kd. For example let’s calculate each portion of the formula starting with the proportional contribution Kp, if the current temperature of the tank is 100°F and the set point is 140°F the error is 40. The integrative portion of the formula adds the contribution of the error over time. This would be the Ki factor multiplied by 40 and added to the previous Ki*error for every time period. The differential portion is the Kd multiplied by the difference in the tank temperatures or in other words the tank temperature at the beginning of the time period minus the tank temperature at the end of the time period. Let’s take some of the data collected by the OpenLog microSD card and take a stab at this in Excel. We’ll assume Kp=6, Ki=.6 and Kd =.2. The time period is one minute.
Now in practical terms how is the the fire being controlled now? The auger time is being controlled. Of course practically the fire must not go out so there is a minimum time the auger must run, since in this program the auger is on a fixed time of 5 secs this really means that all of the control comes from varying the time the auger is not running. But again the fire can’t go out so I figure the max amount of time between the fixed auger feeds of five seconds is forty seconds. So that is the slowest the fire can go. How fast can it go? Well theoretically the feed could run continuously but again we are dealing with a chemical process that cannot simply absorb 100% fuel feed. In this case the auger motor added a practical aspect by limiting the feed to a duty cycle of 50%, so the maximum time that the feed can be on is half the time.
Since the PID control is based on time periods and the data collection time period is one minute,lets choose a time of 1 minute for argument. In one minute at max run the feed will be on 30 seconds and off 30 seconds. In one minute at min run the feed will be on for 5 secs, off for 40 secs, on for 5 secs and then off for the remaining 10 seconds of the minute. So again we don’t control the on time only the off time and the difference between the max on time (min off time) and min on time (max off time) is 30 secs on, 30 secs off for the max and 10 secs on and 50 secs off for the min. So the only control between full bore and idle is the difference between 50secs and 30 secs or 20 secs per minute.
This explains some of the challenge, the other challenge is the inertial effect of the combustion reaction especially if unburned fuel has built up. So now that the PID output has been calculated I’m having a hard time wrapping my mind around how this would translate to control of the time, I know I could set up a simple proportion between the PID output and the 0-20 scale of auger off time dwell. However in this example the PID output increases as the error decreases. I guess that’s the beauty of a spreadsheet I will play around with Kp, Ki and Kd to see if I can get this to work a little better.
It took me longer than I would like, but the hopper/auger assembly is now painted and the electrical box is mounted and the wiring is functional. I have mounted the Arduino and LCD display. That box also contains the board that accommodates the thermistor electronics, which are the sensors that read various temperatures.
The main electrical box is a stainless steel box I picked up used from a scrap yard, putting the frugal in frugaltinker.com. That’s the reason that there are so many holes in the box, however it was such a good deal I thought it was worth it, despite the cosmetics. The cover was just too ugly to leave be, so I attempted to skin the cover with a plate which I plasma cut in “Frugaltinker.com”. This doesn’t show up too well, I probably should paint a background behind it to make it stand out better. Painting a background seems low on the to do list right now, so I think I will skip that task and focus on the burner.
The CNC was invaluable in the production of the electrical mounting plate, mounted inside the electrical box. It was great to not have to drill any holes to mount anything. All the holes were cut with the CNC and fit just fine.
So the final task is complete before the burner is welded up and tested.
I often have to cut multiple parts, so when I do, I take the opportunity to experiment a bit. In this series of cuts I changed the amperage of the Plasma cutter, a Hypertherm 45. Hypertherm plasma cutters are American made, designed and built, only about a 45 minute drive away from me. I still haven’t gotten my free T shirt for buying and registering the machine but I guess that’s another story… anyway, amazingly enough there really is not a lot of difference in the dross or slag between the three different amp settings I tried. I’ll keep experimenting to try to optimize the cut quality and speed of the CNC machine, plasma cutter combination.
The auger pipe connects the burn plate which attaches to the boiler and forms the interface between the auger feed and the boiler/burner units. I took a piece of 6″ pipe and welded it to the boiler plate and this attaches the plate to the auger feed via screws that tighten. With this assembly I can detach the auger and hopper and test a different burner simply by loosening 6 screws. Modular design for ease of design changes and maintenance.
I attached the hopper plate first because this determines the wheel height required. I slotted the holes in the saddle plates so that there is about 3/8″, or about a centimeter of adjustment up or down adjustment. Then after careful alignment I assembled the entire assembly with clamps and threaded rods. I did cut and weld in some cross pieces with gussets
This will make maintenance of the boiler, ash removal, scraping of the burner holes, boiler tube cleaning very easy by simply rolling the auger/hopper assembly out of the way.
In this step I mount the auger drive motor, it has a built in right angle drive and speed reducer which adds torque. The motor comes complete ready for wiring and mounting using four screws. Again I drew up the parts in SketchUp and then cut them out on the CNC plasma cutter, it was almost too easy. The further I get down this path the more I take advantage of the CNC’s capabilities. Note the rounded corners, I also added an extra hole on top of the motor mount plate to make adding a wire routing clip easier in the future. I remade the worm drive plate to improve some of the adjustment capabilities and added at the same time some decoration, rounded corners and used less material.
I used a Lovejoy type shaft connector to connect the motor to the worm shaft with a Buna-N spider in between to minimize any vibration or backlash to the motor, although with the worm and worm gear combination there should be none.
This step was made simple by the use of the CNC plasma cutter to make a part which I then bent up on both ends using my homemade brake. But first let’s revisit the old configuration for comparison.
I had to rob the motor and some parts from this transmission so it is in disarray but you get the idea of the complexity. It requires four sprockets, two chains, a motor and two chain tensioners. Here is a picture of the newly implemented and untested solution for mounting the worm and worm gear.
The CNC made it easy to slot the holes for adjustment, so the vertical adjustment comes from the plate to plate mounting screws, and the bearing mounting holes are slotted to get correct in and out adjustment to the keyed worm. After cutting the part and mounting it I decided what to change in the next iteration. I modified the part to round all the corners so that there are no sharp edges and extended the plate to pick up a second set of holes so the plates are attached with four screws instead of two. I think this part is perfectly functional so I won’t implement the changes but at least the SketchUp drawing has been updated.
It may seem like a small bite but step two actually requires some machining and tweaking to get correct. In this step I am going to add the auger to the pipe assembly I have already built. To do this I need to support the auger with bearings so the shaft will be cantilevered in the pipe. The auger should not touch the pipe and needs to be centered in the pipe, at least within a reasonable distance. To do this I cut some 1 x 2 square tubing and then drilled holes on the Bridgeport using the Digital Readout to measure the distance so that the bearings would fit perfectly. These particular bearings are an oil impregnated bronze bushing in a pillow block configuration. The pillow block configuration is aluminum which makes machining the pillow block easy. Here’s a picture of the key way which I machined into a piece of 1″ cold rolled. If you have the choice cold rolled is much easier to work with then hot rolled for shafts. Of course this is really not shaft stock it is round stock but it works just fine and is inexpensive.
After welding the auger onto the shaft I do the calculations to center the shaft in the pipe. To make the shaft centered I have to mill some of the pillow block bearing, as you can see in the picture I had to use a circular shim to get the auger centered in the pipe.
Finally after some adjustment you can see the end result of the auger centered in the feed pipe.