3 cylinder CDI ignition

Hi Folks

I need your help !

I have an 3 cylinder outboard engine where the CDI ignition system has decided to give up.
A new part cost above 400 Euros..... What to do ?

Arduino/ESP8266, a couple of parts, some time and BAM that should do the trick !

The Hardware I have and I thought that the software was quite easy. But.....

At the engines flywheel there are three hall sensors that tells the position of the cylinders. A potentiometer is attached to the throttle, telling the electronics to shift the ignition a couple of degrees depending on how fast one wants to go.

Sounds pretty simple.... read a signal and put it out in the other end again (to switch on the ignition coil), sometimes whit a little delay.

If there only where one cylinder - no problem. But I have three !

Max rev. of the engine is about 6000 Rpm. Giving 100 rpS and a frequency of about 33 Hz for every single spark plug. This then allows the controller 25mS to do the ignition before the next cylinder needs its attention - And not to forget the timing potentiometer.

I thought: make a loop checking on three analog inputs and when ever a signal is detected ignite the coil on a digital pin.

NO... This is not stable, it skips to many signals.

Then, what about using interrupts..... But are they fast enough ? I only have 25mS between every cylinder at WOT. What if the one cycle isn't done before the next comes ?

Is there any of you guys out there on this fabulous internet that have any suggestion on how I should aproach this task ?

(It is an 50Hp Yamaha outboard DET0)

1/ Your Hall sensors are almost dertainly switches - use digital inputs.

2/ This is a very noisy environment - I take it you're using copious decoupling on eg the power line?

3/ Posting your circuit diagram and your code would enable us to give a bit more help


Does this engine have a distributor or does it have three separate coils, one per cylinder?

"Sounds pretty simple.... read a signal and put it out in the other end again (to switch on the ignition coil), sometimes whit a little delay." To generate the spark, the coil is switched OFF, so the collapsing magnetic field generates the high voltage.

Have you tried to repair the original board?


In my experience with outboards, all of the electronics are integrated into one main "sealed" board for obvious reasons. Operations such as ignition, injection, battery charging are all affected by changing environment and must be adjusted accordingly. At $400 for a replacement , I would consider it reasonable.

Are you sure they are Hall Effect and not purpose built inductive sensors that are used in many engine applications?

Tom.. :slight_smile:


Thanks for your replies.

@TomGeorge: They are inductive and not hall (I mixed up two projects). When the magnet mounted on the flywheel passes they generate a voltage of 12v which i “put through” an optocopler to isolate the controller from voltage peeks.

@Bluejets: No, this circuit only manages the ignition, but yes, it is sealed and impossible to repair.

@Paul_KD7HB: There are three seperate coils.

I can post the circuit later (Do not have it on this computer).
My code is practically not existing, only a small test skript.

It is like in school … I just need a hint :slight_smile: :slight_smile: on how to read the three input signals more the less simultanious with controlling the output signals.

A typical Arduino has a 16Mhz clock, so a digitalRead takes much less than a uS.

Apply your sensors with appropriate signal conditioning to 3 inputs : input1, input2, input3.

and something like this might do:

int lastspark;

enum( number_1, number_2, number_3);


if ((digitalRead ( input1) && ( lastspark |= number_1)) {
  lastspark = number_1;

if ((digitalRead ( input2) &&  (lastspark |= number_2)) {
  lastspark = number_2;

if ((digitalRead ( input3) &&  (lastspark |= number_3)) {
  lastspark = number_3;


would be plenty quick enough