Arduino ignition, will this work?

Hi all, i'm pretty new to arduino and this idea was produced out of boredom so i'm not sure if its even feasible.

My car runs electronic ignition utilizing a distributor, so timing is controlled by the ecu. What i want to do is convert from distributor to a coil on plug system. I've seen other arduino ignition ideas but this is different because the timing curve is still controlled by the ecu, its not in the code.

Using the arduino i want to count the pulse from the ecu to where the coil would be, then use that to trigger each individual coil.(I wont be firing direct from the arduino, it will probably require some additional hardware to do the job)

The firing order is 153624, so pulse 1 fires cylinder 1, p2-c5, p3-c3, etc. I can control dwell using the arduino and the timing curve will still be dictated by the ecu because the pulse to the arduino will be more frequent for advance and less for retard.
By doing it this way i think i can keep the coding relatively simple.

How can i make the arduino count the pulse & simultaneously trigger a coil, then when its on the sixth pulse go back to firing the first cylinder on the next pulse?

Will any of this work or am i just rambling?

Sorry for the long post
Thanks in advance

ps: i know how noisy automotive ignition and electrical systems can be, so i'll tackle that when the time comes

1 Like

Yes this is possible but it is by no means a simple or quick beginner project. I would recommend to learn about basic interrupt handling first. Then denoising. And then hardening the power supply.

Cheers, im not expecting it to be quick or simple, i've got ages to work on it and as i said the idea came about out of boredom. I've read a bit about denoising and power supplys in an automotive environment, i'll look into interupts.

Thanks

In my experience most distributor based systems have the timing defined by mechanical or electronic points within the distributor. Where these are used with electronic fuel injection, there is typically a signal from the distributor to the ECU to trigger the injection. Are you certain that in your case the timing goes the other way? Where does the ECU get its crank position information from in this case - do you have a separate crank position sensor?

Assuming it works as you describe, what the distributor sees from the ECU would be a sequence of pulses (one per spark event) with no indication of which one was associated with which cylinder. Your ignition router need to know either the crank phase or the cam phase to know which cylinder to route this spark event to.

Quite likely you could get away with a wasted spark setup, in which case you would fire the coils in pairs. With this arrangement you would need a crank phase sensor. If you already have a trigger wheel providing a crank position signal to the ECU, it would be tempting to try to use the same sensor but I don't think that will work unless you are clever enough to design some clever electronics to sense the signal without attenuating it. If you can install a second MVR sensor on the same trigger wheel that would do for your ignition router, but whether that is practical would depend on your engine design.

If you can't / don't want to use wasted spark then you would need a cam phase sensor instead. In the past I've made one of these from an ordinary dizzy by removing all but one tooth from the rotor that triggers the points. Other people have attached an MVR sensor to the rocker cover and picked up movement of a rocker arm, or overhead cam drive pulley.

If you can solve the problem of working out which cylinder is associated with which spark, the rest of it seems feasible. (I'm not convinced that this would provide any significant benefit over a distributor-based system if you're retaining the original ECU, but that's your affair.)

1 Like

Hello,
I'm Hobbyst and new to Arduino and C programming, but i have some experiences with cars and his EFI/ECU/etc systems. if your car uses a distributor only to distribute the spark at each cylinder and an ECU takes the timing of the coil charge for each cylinder/spark event, i think is possible what you want to do, but for a precise system, do you need a cam sensor because, your system don't know what cylinder is firing without this sensor! please note, the coil on plug systems works only if do you have cam sensor (and of course, crank sensor) installe in a ECU with COP capabilities. Now, i think the idea is to check a cam sensor (better if in synch with a crank sensor), in this way, we know the right sequence of cylinder, then, we measure the dwell (duration of the GND signal the ECU sends to the coil to charge it at each spark event) and make the adequate calcs to do the same at the right moment. Assume to have a system capable of sync with the cam sensor, and when this signal is HIGH the engine is at TDC with the cylinder # 1, now, we have measured the DWELL of our OEM ECU and this time is 3ms, now we can fire the coil #1 (cyl .#1) pulling the negative coil lead to GND for this DWELL time of 3 ms, but, we need to correct the retard of this first spark because, if we measure a DWELL od 3ms, and thake 0,5ms to calculate and fire the 3ms, the cylinder will receive the spark with a retard of 6,5ms ! Now we need to measure this OEM DWELL time, and save in a variable, like Actual_DWELL, at the end of the loop, we need to copy this variable in another one, --> Last_DWELL = Actual_DWELL; and for the functioning of the spark to generate, use the "Last_DWELL" or a better one (too difficult to explain better for me, sorry).

managing the interrupts is trivial, and require to know how to make it, but is the best way to do this job.

best regards,

Antonio

(sorry for my english ;))

1 Like