Current Harware Version: 0.0.1 Current Firmware version: 0.0.3
Version 0.0.3 ARM-GCC compiler http://www.vscp.org/download/thehulk2_firmware003.zip
The HULK was a project built many years ago to control a wood burning furnace. The project came about because the control card for the system was broken when I bought the used system. Originally this was a tank for wood-chips (not sure this is the right English word) which I used for wood pellets. A motor driver screw that fill up a burning chamber in front of the furnace with fuel.
The original HULK did not have any light mechanism and the fire must be kept lit all the time so the functionality of this system was to keep a full fire in the burning chamber when the preset furnace temperature has not been reached and a slow burning fire when the preset temperature was reached. Quite an easy task.
The system is used to warm up our house (wish is both the home of my family and the office for my wifes and my business on the ground floor).
This original system had some problems from a security perspective. The main problem was that the fuel transport mechanism and the burning chamber was on the same level and therefore there was a risk for a fire in the transport mechanism itself which in worst case could reach the fuel storage tank. To prevent this a security mechanism was mounted on the screw that filled it with water when it reached above a certain temperature.
I bought the mechanics for the HULK II from a good friend of mine. This was a combination of things he built him selves and a commercial system. The system also had a lightning mechanism wish is a good plus. The first two years I had this system I used the embedded control card that came with the system. This worked good most of the time but there was some pickups in the system that made it fill fuel in an uncontrolled way and sometimes start and stop the fuel fill motor also in an uncontrolled way.
As seen in the drawing above the fuel transport mechanism does not live on the same level as the burning mechanism also the fuel storage is smaller. I now have to fill fuel very day but I will solve this later by adding a second screw from my 30 m3 main fuel storage.
The schematics picture above show the burning chamber. The transport mechanism screw that fill fuel. The fan that provide primary and secondary air for the fire. The heater that light the fire when needed. The fire detector that detect a fire. This is just a LDR that have have a main sensitivity in the IR region of the spectra. Its the same thing that is found in most oil burners.
The control scenarios are very simple really
To light the fire and start up the system.
While the furnace temperature set point is not reached the fuel screw and the fan is running. When the set point is reached the fan is run for some time to burn out fuel in the burning chamber and lastly the screw is run for a short time to prevent any backfire in the screw. The system is then put to rest until its time to start up again.
Some years ago a lightning strike took out the water heater in my house. The control mechanism was fried and looked more like a piece of toast then a circuit board. I then built a Microchip PIC16F84 based board to control this unit.
The unit got four 3kW electrical elements. There should be a delay between switch on of elements and in the original design there where two stages. First 6kW was switched on and after two hours another 6kW was switched on.
The temperature in the heater is sensed with a Smartec temp sensor (see http://www.vscp.org/vscp/modules/kelvin_smart2/index.html ) and there is a mechanical over temperature protection to prevent the system from boiling in case of control system failure. This has been needed a couple of times when the sensor has been burned buy other nearby lightning strikes.
The heater is used both as a backup during the winter in case the main system fails and during the summer for hot water production.
The system got a RS-232 control interface that allows me to control certain functionality of the system.
With this functionality the hot water temperature could be lowered during periods and raised just before the need for a lot of hot water occurred.
I decided to add control for this system also into the HULK II. This was because of two reasons. The original control software was written in assembler and the PIC16F84 was now obsolete.
For those interested in this original control software (!!!) it is available in the VSCP CVS under /can/src/eda/hardware/mumin/picnode/esc1
So the new system should control the new HULK II hardware and the water heater. Another important consideration was that I wanted to use VSCP to control the system externally as this is what I use for the rest of the functionality of my house. I use CAN and Ethernet for this but decided to use can for this system.
When I was thinking of the design Circuit Cellar ran a design contest for the LPC21xx series of ARM based controllers from Phillips. I entered this contest and got a Keil MCB2130 board. This board have a LPC2138 on board and thus plenty of I/O, Flash, A/D's etc for my project. I have never before worked with the ARM core and also saw this as a great way to get to now that arcitechture.
The main design goals was something like the following:
The Keil MNC2130 board is documented here http://www.keil.com/mcb2130/ It is a great board but was missing CAN so I used the Lawicel CAN232 for the CAN link. http://www.can232.com/ The second serial port is used for the CAN232 adapter and the first is used for status and debug information.
Above is the driver for the LED's and relays to control the two 380V three phase motor (Motor A, Motor B), the relay for the 240V FAN, the relay for the 240V Heater and the relays for the two water heater stages.
This is the alarm driver. Note that R5 may not be needed for some alarms as they has enough internal resistance.
This drawing show the control connections for the furnace control
and this show the control connections for the water heater.
The above schema is the control electronics for the water heater.
The above is the fire detector input stage. Some input protection is also added but not shown.
Dallas 1-wire interface is used to read less important temperatures.
Also needed an eeprom for persitant storage both for VSCP data and for device parameters.
Added to this is a switched power suppluy for +5V DC and +12V DC, button and LED interfacing. Mounted in the box it all looks like this
This picture show the clectronics mounted on the chassis
Another chassis picture
The driver stage
The alarm driver
EEPROM and 1-Wire electronics
and mounted in the box
The front
This is another picture of the front on an active system. The LCD display show the water temp of the furnace (no temp sensor connected here). The system is active and therefor the fan an transport A+B is running feeding fuel to the burning chamber.
The Forward, Down, Up, Enter buttons can be used to move around in the menu system and look at different live data, enable disable the system or certain functionality and configurate setpoints and other parameters. The force transport allow me to manually fill fule in the burn chamber. A feture that is very useful when the transport mechanism has been run empty and the preset fule fill time before start is to short.
This is the realybox
Fire in the burning chamber
The HULK II
The HULK II
The HULK II
The HULK II
The old water heater control unit
The water heater elements with the accumulator tank.
| Register | Name | Description |
|---|---|---|
| 0 (0x00) | Zone | The zone for the Hulk Module. |
| 1 (0x01) | States 0. | bit 0 - Furnace transport Motor A. bit 1 - Furnace transport Motor B. bit 2 - Furnace fan. bit 3 - Furnace heat Element. bit 4 - bit 5 - bit 6 - bit 7 – Furnace Enabled. |
| 2 (0z02) | States 1. | bit 0 - Water heater element A state bit 1 - Water heater element B state bit 2 - bit 3 - bit 4 - bit 5 - Alarm. bit 6 - Alarm enabled. bit 7 – Water heater enabled. |
| 3 (0x03) | Fire Detector MSB. | This is the A/D value from the fire detector. 0-1023. |
| 4 (0x04) | Fire Detector LSB. | |
| 5 (0x05) | Temp Furnace MSB. | This is the temperature in the furnace in degrees Celsius. Reserved for future functionality |
| 6 (0x06) | Temp Furnace LSB. | |
| 7 (0x07) | Reserved | |
| 8 (0x08) | Reserved | |
| 9 (0x09) | Reserved | |
| 10 (0x0A) | Reserved | |
| 11 (0x0B) | Preset furnace water temperature. | This is the temperature the furnace should try to get the outgoing water temperature to reach. 0-255 degrees Celsius. |
| 12 (0x0C) | Preset electrical water heater temperature. | This is the temperature the temperature the electrical water heater should try to get the electrical heater core water temperature to reach. 0-255 degrees Celsius. |
| 13 (0x0D) | Current electrical water heater temperature. | This is the current temperature for the core water temperature of the electrical heater. 0-255 degrees Celsius. |
| 14 (0x0E) | Temp Smoke gases MSB. | Future functionality |
| 15 (0x0F) | Temp Smoke gases LSB. | Smoke gas temperature can be used for air mix (primary/secondary). This value should be written from an external sensor through the decision matrix. |
| 16 (0x10) | CO measurement MSB. Future functionality | |
| 17 (0x11) | CO measurement LSB. | This is the A/D value form a CO measurement sensor. |
| 18 (0x12) | Electrical Heater Control. | Bit 0 – Enable element 1 Bit 1 – Enable element 2 Bit 2 – Bit 3 - Bit 4 – Bit 5 - Bit 6 - Bit 7 - |
| 19 (0x13) | Time before element 2 is activated. MSB. | |
| 20 (0x14) | Time before element 2 is activated. LSB. | Element 2 will be activated this amount of seconds after element 1 has been activated. 0 is off. |
| 21 (0x15) | Minutes to run fan after target temperature reached. | The fan will continue to run for this time to burn out fuel in the burning chamber after the preset temperature has been reached. |
| 22 (0x16) | Seconds to run transport motor B before rest. | The transport Motor B will continue to run for this time to empty the transport mechanism on fuel after the preset temperature has been reached and the fan has turned off. |
| 23 (0x17) | Seconds to run motor A + B to fill fuel. | The transport Motor A + B will run for this time to fill fuel in the burning chamber during startup. |
| 24 (0x18) | Furnace restart attempts. | Max number of retries that should be done to fire up the furnace. 0 is no retries. Alarm if unable to fire up the furnace. |
| 25 (0x19) | Temperature hysteresis electrical water heater. | The temperature in the electrical heater has to go down with this amount for the heater to be turned on again. |
| 26 (0x1A) | Temperature hysteresis furnace. | The temperature in the furnace has to go down with this amount for the heater to be turned on again. |
| 27 (0x1B) | Fire Detector hysteresis MSB. | |
| 28 (0x1C) | Fire Detector hysteresis LSB. | The fire detector has to be this amount below the preset value to detect no fire. |
| 29 (0x1D) | Temp electrical water heater outgoing water. | Temperature on outgoing water from water heater. 0-255 degrees Celsius. |
| 30 (0x1E) | Furnace start timeout | This is the time in minutes a furnace fire attempt should be carried out before a retry should be performed. |
Send event every minute. CLASS.MEASUREMENT TYPE=6, Temperature Format: Integer Format (one byte). Data coding: 0x60 Index = 0
Send event every minute. CLASS.MEASUREMENT TYPE=6, Temperature Format: Integer Format (one byte). Data coding: 0x61 Index = 1
Send event every minute. CLASS.MEASUREMENT TYPE=6, Temperature Format: Integer Format (one byte). Data coding: 0x60 Index = 2
Send event every minute. CLASS.MEASUREMENT TYPE=6, Temperature Format: Integer Format (one byte). Data coding: 0x60 Index = 3
Send event every minute. CLASS.MEASUREMENT TYPE=6, Temperature Format: Integer Format (one byte). Data coding: 0x60 Index = 4
Send event every minute. CLASS.MEASUREMENT TYPE=50, Relative Level Format: Integer Format (two byte). Data coding: 0x60 Index = 0
On/off
CLASS.INFORMATION TYPE=3/4, ON/OFF Zone=Configurated SubZone=0
On/off. CLASS.INFORMATION TYPE=3/4, ON/OFF Zone=Configurated SubZone=1
On/off. CLASS.INFORMATION TYPE=3/4, ON/OFF Zone=Configurated SubZone=2
On/off. CLASS.INFORMATION TYPE=3/4, ON/OFF Zone=Configurated SubZone=3
On/off. CLASS.INFORMATION TYPE=3/4, ON/OFF Zone=Configurated SubZone=4
On/off. CLASS.INFORMATION TYPE=3/4, ON/OFF Zone=Configurated SubZone=5
On/off. CLASS.INFORMATION TYPE=3/4, ON/OFF Zone=Configurated SubZone=6
CLASS.ALARM TYPE=2, Alarm occurred. Zone=Configurated SubZone=7
On/off. CLASS.INFORMATION TYPE=3/4, ON/OFF Zone=Configurated SubZone=8
On/off. CLASS.INFORMATION TYPE=3/4, ON/OFF Zone=Configurated SubZone=9
The following events can be sent to the module to control certain functionality.
Send CLASS.CONTROL TYPE=5/6, TurnOn/TurnOff Zone=Configurated SubZone=7
Send CLASS.CONTROL TYPE=5/6, TurnOn/TurnOff Zone=Configurated SubZone=8
Send CLASS.CONTROL TYPE=5/6, TurnOn/TurnOff Zone=Configurated SubZone=9
| Pin | Description |
|---|---|
| P0.00 | TX2 – Debug and diagnostics |
| P0.01 | RX2 – Debug and diagnostics |
| P0.02 | I2C SCL for 24LC512 EEPROM |
| P0.03 | I2C SDA for 24LC512 EEPROM |
| P0.04 | DB4 LCD Display. |
| P0.05 | DB5 LCD Display. |
| P0.06 | DB6 LCD Display. |
| P0.07 | DB7 LCD Display. |
| P0.08 | Serial TX1 - ISP and Lawicel CAN232.. |
| P0.09 | Serial RX1 - ISP and Lawicel CAN232.. |
| P0.10 | RS LCD Display. |
| P0.11 | Reserved |
| P0.12 | R/W for LCD Display. |
| P0.13 | E for LCD Display. |
| P0.14 | Enable ISP. / Button – State 0. |
| P0.15 | Electrical water heater core temperature sensor. |
| P0.16 | Over temp sensor. |
| P0.17 | Furnace Core temperature. |
| P0.18 | Button - Display page forward. |
| P0.19 | Button - Up. |
| P0.20 | Button - Down. |
| P0.21 | Button - Button - Enter. |
| P0.22 | Button - Force transport motors on. |
| P0.23 | Reserved for CAN LPC 212x. |
| P0.24 | Reserved for CAN LPC 212x. |
| P0.25 | AOUT - Sound - CANRX0 on LPC 212x. |
| P0.26 | CAN TX0 on LPC 212x. |
| P0.27 | ANALOG INPUT - Stove Fire Detector. |
| P0.28 | ANALOG INPUT - POT (Fire detect level). |
| P0.29 | Reserved. |
| P0.30 | Reserved. |
| P0.31 | Reserved. |
| p1.16 | LED 16 + Transport Motor A relay. |
| p1.17 | LED 17 + Transport Motor B relay. |
| p1.18 | LED 18 + Fan relay. |
| p1.19 | LED 19 + Heater element relay. |
| p1.20 | LED 20 |
| p1.21 | LED 21 + Alarm. |
| p1.22 | LED 22 + Electric water heater element A |
| p1.23 | LED 23 + Electric water heater element B |
| p1.24 | Reserved for JTAG i/f |
| p1.25 | Reserved for JTAG i/f |
| p1.26 | Reserved for JTAG i/f |
| p1.27 | Reserved for JTAG i/f |
| p1.28 | Reserved for JTAG i/f |
| p1.29 | Reserved for JTAG i/f |
| p1.30 | Reserved for JTAG i/f |
| p1.31 | Reserved for JTAG i/f |
| Pos | Pin | Colour | Description |
|---|---|---|---|
| 1 | P0.15 | White/Blue | Smarttemp – Water heater core |
| 2 | P0.16 | Blue/White | Over temperature sensor |
| 3 | P1.27 | Brown/Black | Fire Sensor |
| 4 | — | — | — |
| 5 | P1.23 | Heat Element B | |
| 6 | P1.22 | Heat Element A | |
| 7 | P1.19 | Furnace Heater | |
| 8 | P1.18 | Furnace Fan | |
| 9 | P1.17 | Transport Motor B | |
| 10 | P1.16 | Transport Motor A | |
| 11 | P1.21 | Alarm + | |
| 12 | P0.17 | Smarttemp - Furnace Core Temperature |
| Pin | Colour | Description |
|---|---|---|
| 1 | Black | Transport motor A. |
| 2 | Brown | Transport Motor B. |
| 3 | Red | Furnace Fan. |
| 4 | Orange | Furnace Heater. |
| 5 | Yellow | Over temp Sensor. |
| 6 | Green | Fire Detector. |
| 7 | Blue | GND. |
| 8 | Purple | Temperature Transport B. |
| 9 | ||
| 10 | ||
| 11 | ||
| 12 | ||
| 13 | ||
| 14 | ||
| 15 | ||
| 16 | ||
| 17 | ||
| 18 | ||
| 19 | ||
| 20 | Grey | +5V DC |
| 21 | ||
| 22 | White | +3.3V DC |
| 23 | ||
| 24 | ||
| 25 |
| Pin | Cable Colour | Description |
|---|---|---|
| 1 | GND | |
| 2 | +5V | |
| 3 | ||
| 4 | Black/Blue | RS, P0.10 |
| 5 | Blue/Black | R/W, P0.12 |
| 6 | Grey/Black | E, P0.13 |
| 7 | NC | |
| 8 | NC | |
| 9 | NC | |
| 10 | NC | |
| 11 | White/Orange | DB4, P0.04 |
| 12 | Red/Black | DB5, P0.05 |
| 13 | Black/Green | DB6, P0.06 |
| 14 | Green/Black | DB7, P0.07 |
| 15 | ||
| 16 |
| Port | Cable color | Description |
|---|---|---|
| P0.11 | Orange/white | Status LED. |
| P0.14 | Black/Red | State 0 – Internal. |
| P0.15 | White/Blue | Smart temp Sensor, Heater Core temperature. |
| P0.16 | Blue/White | Over temp Sensor. |
| P0.20 | Black/Brown | Button Down. |
| P0.21 | Orange/Blue | Button Enter. |
| P0.22 | Black/Yellow | Button Force Transport ON. |
| P0.18 | White/Black | Button Forward. |
| P0.19 | Black/White | Button Up. |
| P1.27 | Brown/Black | Fire Sensor. |
| P1.23 | Blue/White | Element B – Main Connector 5. |
| P1.22 | White/Blue | Element A – Main Connector 6. |
| P1.19 | Green/Black | Furnace Heater – Main Connector 7. |
| P1.18 | Black/Green | Furnace Fan – Main Connector 8. |
| P1.17 | Black/Blue | Transport Motor B – Main Connector 9. |
| P1.16 | Blue/Black | Transport Motor A – Main Connector 10. |
Discussion