Single Cylinder Ignition Control

I know this has been been asked a lot before and there is speeduino, which will do fuel and spark. However i would like to control the spark of a single cylinder generator engine. I have tried searching Kartduino and spent a few hours scouring the internet looking for the answers i think i require.

The generator is a Clarke IG1000 inverter generator which i bought defective second hand. I have already used 1 x uno to control the throttle using feedback from the inverter circuit. I'm presently happy with this part

I don't really need to adjust the fixed ignition which uses a CDI unit. I have played with megasquirt/megajolt in the past so I know a few things about ignition (not everything). I have decided to challenge myself in altering the ignition events of this generator.

I know the engine could run more efficiently (fuel consumption) and with more torque compared to a fixed advance ignition system. Fixed ignition systems are most efficient at one rpm engine speed (not taking load into account).

My plan is to alter ignition compared to engine speed to begin with (small steps), then introduce a MAP sensor to measure load on the engine. So I will progress this project in 2 smaller stages

So my plans are:- 1) As the engine currently uses a Hall sensor to sense one position (firing position) of the crankshaft could I measure the time between rotations and then use the same Hall sensor position to time when to fire the coil. Will the timing of the arduino be accurate enough??

A downfall of this would be that the ignition event would always be 1 cycle behind when it would should be happening, which would be quite a large amount of time. I could turn the flywheel 180 degrees compared to the crankshaft, so that there is only 180 degrees of the crankshaft for the next ignition event post the flywheel sensor reading. This would be a wasted spark setup as it was originally.

My main issue with this system would be timing accuracy of the arduino compared to the next ignition event.

In my eyes script would be something like measure 'time' between flywheel pulses use 'time' to compare on ignition table (or some sort of Sin rule) and get 'ignitionTime' fire ignition at 'ignitionTime' after flywheel pulse

Sounds simple but reality might prove more challenging.

2) Use a 36-1 (or less) trigger for improved timing accuracy, but would require a more complicated code (for me anyway) and mechanically fitting a trigger wheel to the engine. This will require more research and using other peoples code.

Might try modelling the first solution is was thinking of with an engine strobe

Any help, thoughts or links would be appreciated.



IF the ignition sensor is on the flywheel, then it must be a 2-cycle engine. What powered the original CDI? Is there a magneto? Is there a magnet on the flywheel and a stationary coil that acts as a generator?


IF the ignition sensor is on the flywheel, then it must be a 2-cycle engine

By no means. Every Briggs and Stratton single cylinder 4-stroke engine I've ever worked on had a flywheel magneto generating 1 spark per rev.

How many million lawnmowers does it take to prove that this works?



OP : given a generator runs at constant speed, how much improvement do you expect to acheive with variable spark timing?


Correct it is a 2 cycle engine (4 stroke or 2 cycles of the crankshaft). A secondary coil powers the CDI unit so there is no magneto with this unit. Yes multiple magnets around the flywheel and a stator configured in a 3 phase delta format.


I think Paul was saying 2 cycles of the crankshaft, not 4 strokes of the piston. Yes wasted spark means a spark every revolution.

The generator does not run at a constant speed, that is the beauty of an inverter generator. If you require more power, the revs just increase. Frequency is controlled by the inverter circuitry and doesn't change compared to engine rpm.


If you want to be able to control ignition advance/retard, just move the pickup X degrees advanced, say 10 just to pick an arbitrary number. So by placing the pickup 10 degrees advanced, you have X milliseconds to process timing for THIS ignition cycle instead of being 180 out.

You wont be running more than 5000 rpm I'm sure so timing of the Arduino shouldn't be a problem with a single cylinder ignition setup.

One caveat that most should know, spark control is risky without also being able to control fuel.