DIY HVAC zoning2011/06/17
Last December (just in time for the “perfect storm” of energy credits…) we had a new heat-pump installed to replace the old gas furnace. Additional work was done to run ducts to my office upstairs. The plan was to make the upstairs actually workable during the summer, rather than having the window unit chill the office overnight, then lose the battle at 2 or 3pm and effectively end my productive work day. So far the system has worked nicely, though the actual compressor has been a persistent noise problem (which Carrier is slowly working on).
The problem is, there really is no such thing as “balance” in a straight ducted system like this. If the heat is on at any point, the duct to upstairs has to be completely closed off in order to not boil me alive, since there’s plenty of existing heat-producing equipment on my desk. If it switches to cooling mode, I have to open the duct lest the ambient temperature ooze through the roof and equally boil me alive. To help this later situation the installation included a duct-assist fan for the upstairs registers, which has to be turned on in many cases to get enough cold air (which is heavy and doesn’t want to go upstairs) where it needs to be.
Unfortunately, the assumption that there would be enough air return “falling” down the stairs hasn’t turned out to be true, which means I’m likely going to have to look into adding return registers and figuring out how to route a duct alongside the supply to the basement. That’ll mean disassembly of the supply duct because it was positioned in the middle of the available space….
All of this is of course a preamble to the real topic (as per the, um, topic line) of this post, which is my plans to turn this into a zoned system. The actual meat is after the break….The heat-pump is located in the basement, with various supply ducts spidering off it to the rooms of the house. Two come directly from the riser and go to the living room and dining/kitchen area. A trunk goes to the other side of the house and splits to supply the bathroom and both bedrooms. The upstairs is supplied by another duct that cuts through the framing just over the foundation, through the garage (where the assist fan is) and down the east knee-wall attic space.
At the point each of the per-room ducts splits off from the rest (either right at the riser or after the trunk split), there’s a rotary damper. This is nothing more than a metal disc in the duct that swivels on a rod, controlled by a handle on the outside. Rotate it through 90 degrees in order to close or open it to a variable degree. Conventional “balancing” involves opening all dampers all the way, then progressively closing down the dampers that are getting too much air (warm or cold). As long as the overall temperature outside stays in the same window in which it was balanced, this works well enough. However, the point of the heat-pump is that it accommodates a wide range of outside temperatures, so the idea of balancing to a given point is, um, pointless.
My plan is to mount conventional hobby servos (e.g. the Futaba S3003, or smaller/cheaper ones if they’re strong enough) at each damper, coupled somehow to drive the damper handle. I’ve done some experimentation with that, and so far haven’t implemented a viable system. My next attempt is going to be constructing an extended servo armature of the same radius as the damper handle, and double-stick-taping it to the duct nearby. A stiff wire will connect the two, and hopefully that’s sufficient (and simple). Upstairs there are 3 registers that really ought to be individually controlled, which means I’ll need to figure out a method for mounting the servos inside the registers. I’ve seen people do it before, and it doesn’t look particularly hard.
Controlling the servos is another matter though. The PWM signal they run off of doesn’t actually take kindly to being run over a very long wire (I’ve tried), which means I need to locate the control electronics near each one. Luckily the majority of them are all in the immediate vicinity of the fan coil in the basement. Living room, kitchen, upstairs, and the assist fan’s rheostat are right there, and the bathroom+bedrooms trunk split is about 15ft away from there.
I recently put together a lighting controller for church (which I really should post about, even though it’s pretty simple) built around an ATmega48 and an SN75176-alike Rs-485 transceiver (since DMX-512 lighting control is a 485 bus). I have plenty of those parts floating around from AnySeis(tm) development, and it’s really the only way to go for long-distance communications (it’s somewhere between 50- and 60-feet between the fan coil and my computer, along the ducting path). My plan then is to build a multi-channel servo controller out of those same parts, and use a protocol either similar or identical to DMX-512 to drive them.
The main trick there is the fact that the ATmega48 doesn’t have enough hardware PWM ports. That means I’ll need to figure out the best means of implementing a bunch of soft-PWM ports. Depending on whether I can put together a solid interrupt-based DMX receive routine or not, I can either run PWM as the main() loop, or use a timer interrupt to drive it. A simple approach for the latter would be to have a table in memory with each of the PWM step periods as a single byte, and just blindly blast them out on the port for each interrupt. Setting the PWM period for each channel is just an exercise in setting the right bits throughout the table.
I haven’t thought much about the controller yet, but for now it’s going to take the form of a USB to “DMX” protocol bridge. I could use my Enttec OpenDMX USB module, but it’s kindof wacky to deal with. I’ll probably just hook a FT232RL module to an Xmega board and make a simple command protocol to set the DMX frame.
However, there’s an aspect not discussed yet: temperature sensing. I have a batch of 10 1-wire sensors that I need to figure out how to place in the various rooms in the house. The location of each will determine how effective the system is (too close to vent means early response, in a dead-air zone means too late, near the outer walls means an offset to outside temperature, near windows means drafts, etc.) and I also don’t want these wires and little black sensors to be particularly visible….
The last part of this is something I think I just came up with a solution for. The problem is this: the heat-pump is controlled by a thermostat located in the living room. The only temperature it cares about (except for the outdoor sensor it uses for anticipation) is its internal sensor. That means that if I get into a situation where the rest of the house is too warm and I really need cooling, I don’t actually get it unless the living room is too warm. Getting the living room warm enough in any kind of expedient manner is not really feasible.
In a normal system, I could simply replace the thermostat with relays and drive the compressor, reversing, and fan terminals myself (with appropriate sanity checks for dead time and such). However, my system is a “communicating” Infinity setup, which means there’s a 4-wire bus running from the stat to the fan coil, then out to the compressor. The bus contains 24VAC power for the stat, and what I assume at this point is a proprietary RS-485-based bus (manual says “A” and “B”, which are the standard names for a 485 bus). Because the thermostat is the master on the bus, there’s really no way I can force the system to do anything at all, unless I’m prepared to completely reverse-engineer and fully replicate the existing thermostat…
However, I discovered two terminals underneath the stat that give me hope. The manual says they’re for a “remote sensor” to be used in the case where the stat is in a position that’s not representative of the rest of the building. You can attach an external sensor and locate it somewhere else in the house. It even shows how to connect multiple sensors in order to average the readings: 2×2 series/parallel arrangement. This strongly implies that the sensor is nothing but a bare thermistor, as a such an arrangement will actually perform passive averaging of a rough sort.
So, my though is to connect up a digital potentiometer to those terminals, under the control of my system. By adjusting the resistance of the digipot, I can “fake” different temperatures to the thermostat. If I set the stat with a particular fixed temperature goal, I can then control whether the system heats or cools by whether the temperature I’m faking is above or below the scheduled setpoint. Because my system is variable-speed and dual-stage, I should be able to hint the system as to how much heating or cooling I want by how far off the setpoint I tell it.
Since the weather here is finally starting to show signs of actually being mid spring (even though it’s going to officially be summer in only 4 days), this project is getting to be a pretty high priority. I’m tired of running downstairs to mess with the dampers several times a day….
I’ll post more on each piece as I get there. First will be the remote DMX-ish servo control and attempting to mount the two servos I have on the upstairs damper and assist fan rheostat.