I’ve spent quite a lot of time researching ignition systems for the Spitfire. Before I took it off the road for restoration, I had a basic electronic system that removed the points and added a high output coil. It did the job and was reliable. Since the points were probably worn I think it made for smoother running and a tiny bit of performance gain. This time, however, I want something that can be programmed to take full advantage of the modifications to the engine. A few options came up…
CSI ignition. A good halfway option in that the distributor has some electronics inside that allow you to choose from 16 different ignition advance curve presets. It’s nice and straight forward but you keep the distributor and it doesn’t give you a truly programmable ignition system.
123 Ignition. A step further to CSI in that it allows fully programmable advance curves, via Bluetooth with an app if you feel so inclined. It also allows you to program a rev limit and has an option for an anti-theft code. This is a solid option but still has the distributor and is around £300 before adding a coil and HT leads which put it up there with the cost of the next two options.
Nodiz. This does away with a mechanical distributor all together and replaces it with a fully programmable, Bluetooth enabled controller that works using crank position. It also has built-in coil drivers, built-in MAP sensor and a 16×16 ignition table. This is probably the pick of the bunch at £270 with a bare wiring loom. All you would need to buy on top of that would be a trigger wheel with sensor, coil pack and HT leads.
MegaJolt. Similar to the Nodiz unit except it’s been around longer and requires a few more parts to work. It is the most expensive, totalling about £400 for everything required for a Triumph Spitfire. It has several advantages in that it removes the need for a mechanical distributor by using a trigger wheel and crank position sensor, has a programmable 10×10 ignition advance table with linear interpolation and a built-in MAP sensor for engine load measurements. It also has several additional features such as a rev limiter and temperature sensor input to further fine-tune ignition timing as well as cranking advance and an option switch to flick between two saved ignition maps.
A newer version of the MegaJolt was announced in 2011. It would remove the EDIS unit, have coil drivers and VR sensor reading built-in, enabling the use of coil-on-plugs and claimed timing resolution to 0.1° through use of crank and cam position sensors. It was based on an ARM processor and had higher resolution timing as well as Bluetooth. The project was dropped though, sadly. The source code and hardware design are on their GitHub page but neither are finished and would require quite a bit of work to have a fully working system with configuration software.
I set to work and designed and built my own Megajolt since all the schematics and firmware are available. I even got the go-ahead to build my own from Autosport Labs owner, Brent Picasso, on the basis that he wouldn’t offer any support for my home-brewed version. Everything tested OK, the serial comms via Bluetooth was working. The main problem I had was programming the MCU. I realised that it was quite an old MCU but I found quite a few resources to program it. I tried 3 different circuits from NXP that I found in some of their own literature, specifically designed to program this type of chip but could not get any of them to work. In the end, I had to give up on the project because I’d literally tried everything to flash the controller. I’d resigned to the thought of just buying a Nodiz and using that until I found the Speeduino project.
I’m not sure how I hadn’t stumbled upon Speeduino before now given the amount of research I have done on the subject. It’s a completely open-source, Arduino based, engine management system. I quickly found that I could adapt it to work as a programmable ignition controller using common MCUs like the Arduino Mega, Teensy or STM. I set about making my own PCB design based on a Teensy 3.5 since the Teensy is lightning quick and small in size. Things have also progressed in terms of coil packs with many having built-in ignitors, all I’d need to do is provide some digital signals to drive one and I wouldn’t need an EDIS module.
The Speeduino also supports various sensors including throttle position, manifold pressure, inlet air temperature, coolant temperature, battery voltage, and an O2 sensor. Most of these wouldn’t play a part in controlling my ignition timing but could be useful for monitoring or tuning.
I started working on my design and came up with the “Juice Box”; a simple, Speeduino-based ignition controller.
I excluded all the injection-related parts of the circuit and added a few more inputs and outputs. The power input has reverse-polarity protection, over-voltage protection and is fused which supplies a wide-range 8-36v input, high-efficiency voltage regulator so the board stays alive while cranking. I also added an onboard Bluetooth module with an external antenna connection. I used a 24-way Molex connector which is rated to 13 amps so the high current outputs should be good for 10A. The PCB measures 120mm x 80mm and is designed to fit in an aluminium extruded enclosure (a Hammond 1457 specifically). I tried various sizes and connectors. My main focus was to try and make it a robust board that will take some abuse, provide solid connections and keep the size down as well as include everything needed to for a complete ignition system on one PCB. I went with a VR sensor for the crank position because they are generally cheaper, more reliable and readily available. I could always connect a hall effect sensor to one of the general-purpose IO pins with minimal changes to the board and firmware.
I included in my IO:
- Ignition out (x4)
- VR crank sensor input
- Tacho output
- Manifold pressure input
- Coolant temp input
- Inlet air temp input
- Throttle position input
- O2 sensor input
- Fuel pump output
- Cooling fan output
- High current output (x2, general use)
- General-purpose digital inputs (x4)
- General-purpose analogue inputs (x2)
- 5V sensor reference
- 12V supply
The basic setup would look like this:
The ignition table is comprised of engine RPM on one axis and engine load, in this case, manifold pressure, on the other. The result of these two inputs determines the ignition advance. This isn’t really any different to the original distributor which uses centrifugal weights and vacuum from the manifold to determine the ignition advance. Of course, the distributor is limited in the range of advance it can offer and relies on an outdated mechanical design. Modifying the advance curve involves adding or removing material from the weights.
With my additional inputs such as coolant temperature, I can configure an output to operate the cooling fan at a specific temperature and hysteresis range. I would plan to add oil pressure as an input too. It would be interesting to see if my baffled sump prevents any oil pressure drops.
The software used with Speeduino is Tuner Studio which is a free download although there are paid versions with more features. I made my design open-source, the schematics and PCB are available on EasyEDA. My fork of the firmware with associated pinout is available on my GitHub page. Just recently, my changes were merged back into the main project which means the Speeduino firmware will now support my board.
I was going to try JLC PCB on their PCB assembly this time around but just as I was ready to order, the Coronavirus hit and JLC PCB went into minimum service so I had to assemble it myself.
Now I had a controller that I could at least get running on the bench, it was time to start feeding it some signals and see if it will theoretically work when it’s on the car and fed from a trigger wheel. I use Darqarta as a signal generator for various tasks. It’s an excellent piece of software and it also happens to have an engine simulation module in it. From that, you can generate what approximates to a VR sensor signal from your sound card and get it to sweep through an RPM range or set it manually. The only difference is that a soundcard typically produces a single-ended signal whereas a VR sensor produces a differential signal with respect to ground. With a basic op-amp circuit, the single-ended signal could be converted to a differential signal but instead, I did some basic tests by grounding one side of the VR sensor input at the PCB. Maybe not perfect but good enough to get it to fire ignition outputs and produce a tacho signal.
With my new ignition controller flashed with my slightly modified version of the Speeduino firmware, it was connected to TunerStudio and showing me good values for the sensors I had connected. I connected the tachometer from the Spitfire to the output on my board and it worked just fine, too.
So far, so good. At this stage, I realised I had the Bluetooth module connected to the wrong serial port on the Teensy and I wanted to revise the power supply layout so I had to order a modified board. After some messing around to get the Bluetooth working by modifying the pinout in the firmware, I connected RealDash and customised some gauges. Now I could log data to my phone.
I had a 60-2 trigger wheel and my crank pulley machined so that the wheel sits on the rear of the pulley and made a bracket up for the VR sensor.
Meanwhile, I’m working on getting the engine ready to start and some of the wiring looms installed which will need some minor modifications to account for my ignition controller. I will fit a relay and fuse module to distribute some of the power from the bulkhead. The coil pack I chose to use is a “smart coil” that is fitted to various VWs which is inexpensive and will produce a much stronger spark than the original oil-filled style. It’s a “smart coil” because it has built-in ignitors and takes a relatively low current, logic-level signal as opposed to a standard coil which requires some form of coil-igniter. Usually, an IGBT (Insulated-Gate Bipolar Transistor) is used to help control back EMF from the primary side of the coil and deliver the high current required to charge the coil.
I ordered appropriate connectors and cable for my coil pack and VR sensor and some push-fit tubing to connect the MAP sensor. The Molex connector I used happens to be the same as an ATX PC motherboard so I cut the connector of an old faulty power supply to start with. I could use that to temporarily wire things in for the initial testing on the engine. I suppose at this stage, having rebuilt the whole engine, testing my newly designed and built ignition system at the same time might be a reach too far but I’m willing to give it a go.
I created a Wiki page to help anyone using my ignition controller in their setup as my contribution to the open-source community.
In my next update, I should be putting all this to the test having plumbed the cooling system in and getting the wiring sorted as far as I need to. Then I get to find out if my engine rebuild was successful…