I'm hoping to go on a Continental tour next year, and some of the route may be very cold. I've bought a StormRider Heated Body Warmer from EXO2, and it seems to be everything I want from a heated vest.
I also bought their controller, but found it had one characteristic that I didn't like, it would turn on whenever its power was turned on. Their installation suggested connecting it directly to the battery, when this characteristic wouldn't matter, but I wanted it switched so it couldn't come on unless the engine was running. With a relay controlled from the headlight circuit switching it, theirs would always come on. Not acceptable.
So, having returned the controller (for a full refund - thanks to them for their no-hassle acceptance), I wanted to find an alternative.
By profession I'm an electronics engineer (semi-retired), and thought I'd make my own. Well, with the weather as it was I couldn't ride!
Because I'm doing it myself, I decided the odd bell or whistle could be included.
The first obvious requirement would be to prevent the vest drawing current if the battery voltage was low. And, since we're monitoring the battery's voltage, why not display the voltage all the time? Also, one control I've always wanted was for the hand gear-select of my FJR1300AS to be automatically selected whenever the ignition was turned on, so this was something that the controller could also do.
(As an aside, I'd previously tried using a relay whose coil was connected between ignition and headlight circuits, the idea being the relay would give a contact closure between ignition on and engine start. Unfortunately the ECU didn't like this and ignored it. Presumably it wants to see the contacts closing after the ignition is established. Test: try holding the button in just as you turn on the ignition.)
Control - The vest does have a built-in mechanism that prevents any real burning, the conductive material that it's made from goes high resistance at about 50C (122F), so it cannot get hotter than that, but that often is still too hot for continuous heat (depending on how cold it is).
So, it needs a controller. Obviously a periodic on/off control is the way to go. I decided to arrange for the "on" period to be from one to eight eighths of the time (I might modify this when I start using it in anger). The rate isn't critical (there's a lot of thermal inertia), so the rate would be some arbitrary value; I chose about 2 seconds.
The controller I would mount off the left handlebar, it would need to be in a totally weather-proof box, and would need momentary up and down switches to change its setting and a visible display to show the setting and the voltage reading.
I'd always assumed this would use a microprocessor (uP). I chose a Microchip PIC16F873. It's relatively cheap, the software tools are free, and it will comfortably do the job. Also, having used them before, I have the necessary programming ("burning") hardware.
The display is made up of three 7-segment, 0.3" red LED displays, HDSP7501. I'd probably choose green given the choice, but I had these in my "bit box". They are driven directly from the uP. The other option would have been multiplexing them, but this would add to the complexity, and there are sufficient I/O pins for the direct drive.
For the heat control, I use a power FET that is comfortably capable of switching the 2.5 amps or so that the vest takes, without dissipating significant power itself. Availability of an N-channel device (and not of a P-channel) means it switches the negative supply; I'd prefer to switch the positive, but it's no big deal.
Although the gear-change select pulse could be done directly with a transistor, I decided to use a relay with its totally isolated contacts.
For the control unit mounted on the handlebar I had a small IP67 rated ABS box with a transparent lid, ideal for the job.
The circuit is divided into three parts, the Control Module, the Power Supply and the Relay Module.
This PIC16F873 micro-controller variant has sufficient inputs and outputs to do all that is required, including driving the display, reading the control switch inputs, driving the power circuits, and measuring the battery voltage.
A programming header is included to enable me to make adjustment to its operation in situ.
The processor uses a simple R-C oscillator for its clock (precise timing isn't needed).
The display segments are driven through resistors from individual ports on the processor. I could have used multiplexing to reduce the number of ports, but this would have increased the circuit complexity since it would then need drivers.
I use the 5 volt supply as the reference for the analogue to digital converter (ADC). A simple resistor divider is used to measure the battery voltage, a 4:1 attenuation means a 20V full scale with the 5 volt reference. This does mean that the supply must be stable.
The power supply originally used a standard 78T05 regulator, this has good stability (and is surprisingly accurate). However I subsequently changed it to a low drop-out device, a TS2940. This was after a suspicion that the battery voltage could fall low enough to reset the processor.
To protect the regulator's input from the vehicle supply's nasties there is a diode to stop any reverse voltages, and a series resistor and shunt regulator to lose any high voltage spikes.
The Relay Module (more accurately a "Power Switching Module") has three relays and a power FET.
The first relay is switched by the bike's ignition, its contacts feed battery power to the control module and to the voltage measuring circuit. This relay also feeds my Tomtom satnav.
The second relay is switched by the bike's headlamp circuit, its contacts feed battery power to the FET switching circuit and to the heated vest.
The third relay is driven from the control module, its contacts are across the hand gear-change select button contacts; this does the automatic selection when the ignition is turned on.
The FET is driven from the control module to switch power to the heated vest. It switches the negative supply, I would have preferred to switch the positive, but I couldn't find a suitable P channel FET, and without a lot of complexity, the N channel FET can't do that.
These pictures gives some idea of the control module's construction.
It consists of 3 and a bit layers inside a box. The lowest is an aluminium plate on which are bolted the voltage clamp transistor and the regulator. This plate acts as a heat-sink for these. The plate is screwed to the base of the box (special self-tapping screws into raised pillars on the box base), and I use threaded spacers to hold the other boards above it.
The next board up is a piece of strip prototyping PCB, it contains the power supply circuitry, and the two power devices are soldered to it for their connections.
The top layer is a sheet of square-pad prototyping printed circuit board on which is mounted the uP and its associated components and the displays.
Behind the displays is a small piece of the board; between this board and the top board are the display segment current limiting resistors.
In the back of the box are two holes, these were already in the box from its previous incarnation. One I use for the connection multi-core cable, the other I've put in a short length of tubing (actually a piece of the outer insulation of the multi-core cable) that will act as a breather to allow any moisture that does get into the box to evaporate out.
The relay board is made from a piece of strip-board, the relays and other components are soldered to this.
The FET is bolted to a piece of aluminium to conduct away the (small amount of) heat dissipated by it.
After wiring, the board was wrapped in self-amalgamating tape for protection, leaving the end of the aluminium in the air (it is insulated from the FET).
All the initial functional testing I did indoors (it was bloomin' cold outside and in the garage.
Using a computer 12 volt power supply that could power the vest, I could check all the basic operation. The vest got the chair back nice and toasty!
Because my power supply was lower voltage than the bike's battery, I temporarily set the "low charge" threshold to 11.5 volts, hence the reminder label inside the lid. (Old age means I could easily have forgotten this before putting it on the bike.)
After a great deal of thought (some actually about the problem in hand) I decided to use the lower screws that mount the hand gear-change switch and the light/horn/windscreen switch. Although recessed and not at the same level as each other, I could use long screws and spacers to achieve a suitable plane for my bracket.
I first made a cardboard template to check measurements and fitting (actually two, the first wouldn't fit). I transfered the measurements to some sheet aluminium, drilled, cut and bent, and it fitted perfectly!
The bracket is screwed to the switches with long screws cut to length, and spacers to hold the bracket at a suitable plane away from the switch bodies.
(I cheated and used drilled-out nuts as spacers, with washers against the switch screw-head seats.)
At first, I simply laid above the battery and fuse box under the 'A' panel, there is just room for it, not held other than the wiring and slight pressure from the panel.
Having had the side fairing off, I was able to manoeuvre the module between the battery and the fairing, supported by a plastic wire tie round the battery clip. There's plenty of room for it and it's less likely to be disturbed during routine maintenance.
All wiring between modules and the bike's wiring are directly connected. I decided any connectors would only be a source of unreliability. Should anything need to be removed for any reason, I will unsolder (or cut) wires, and make good as necessary.
Battery power is taken from the battery positive terminal via an in-line fuse that is laid directly over the battery, the earth lead to the whole system is from the battery negative.
I used the wires to one of the (UK variant) front "parking" lights to pick up the ignition for the ignition relay. By removing the contact in the connector, I soldered my wire to the crimp part of the contact, then shrink-wrapped it.
The next few photos show how I tapped into the wiring loom for the connections for the hand gear select button.
I cut the outer insulation to expose the loom wires, picked out the two button contact wires and held them out of the loom with a hex key.
I stripped a little insulation from each core, taking care not to damage the cores, I also staggered the stripped positions to reduce any chance of shorts.
My wires were soldered to the tinned loom wires, then each was wrapped in self amalgamating tape. Finally the whole joint was wrapped in the tape.
The last two pictures show where I have the connector for the vest. It tucks under the rear seat edge when not in use, or can be put completely under the seat in warmer weather.
A little duct tape protects the paintwork from any scuffing.
At turn-on, the Hand Select relay turns on, the hand shift green light comes on. Never to be forgotten again.
The display then shows the battery voltage at full brightness; after a couple of seconds the display goes dim.
Pressing the switch makes the display go bright; the first time the display shows "0H". Subsequently pressing the switch (or holding it) in the "up" direction makes the display show "1H", "2H" up to "8H". After releasing the switch it holds the last setting for a couple of seconds, then reverts to voltage, and finally goes dim. Note that, whenever the display is showing voltage, pressing the switch will show the current heat setting, so you can confirm it without changing it.
Should the battery voltage drop below the minimum programmed level (13.0V as I write this), the controller will stop powering the heated vest, and will periodically flash "0L" on the display. If the voltage goes above this, operation resumes as normal.
Note the last picture shows the temperature is 3C (37F), this was the warmest it was for weeks of mostly below freezing (sometimes down to -16C, 3F) weather.
The software I wrote in PIC16F873 assembler.
Basically, the processor runs a 1 millisecond interrupt timer. Every four milliseconds an analogue measurement is made of the battery voltage; every 64 readings the average is taken and used for voltage display and deciding whether to allow heat.
Meanwhile a flag and timer are used to drive the hand gear selection pulse, and the switch inputs are checked and acted upon.
Timers and comparators are used for display brightness and heat switching.
Realise I wrote this as a one-off, it's not intended as example of good programming practice. It is a very simple program, if anyone wants to see it, it is here.
This is the current version as I write this, and may change.
I intend to paint the control box and its bracket black to tone in with the rest of the controls, but until the weather warms there's no chance of a successful paint job.
The display could also do with some red polarising filter.
There I was, pounding away on my computer keyboard, modifying my software, when I became aware of this strange noise.
We'd had a mini-thaw, and following a couple of weeks of well-below freezing weather, the pipe running along the joists in my garage to my outside tap had burst.
Water was shooting out from the insulation onto the joist; some was running over the top of the open garage door, most was spraying within the garage.
Sorry, no pictures of the torrent of water, I was too busy turning it off.
Much was soaked in the garage, including the bike and my relay module that was exposed on the battery,
No real harm done, but it took a couple of weeks to get everything dry again.
|atrophy site map|