Hi all,
This will be my second foray into the world of Arduino, previously I managed to control a stepper motor through a driver module, with a potentiometer input.
This project will attempt to provide a timed ignition 'kill' for a motorbike to allow fast gear changes. The ignition type is CDI, where a capacitor is charged to approx -250v (regulated) then dumped via an SCR to the coil primary (essentially 100:1 transformer), which gives 25kV secondary voltage for the spark plug. Peak primary current is around 30A, duration is around 15us. The pulsed input is negative to ground. The coil 'rings' after the initial pulse so the signal on the line is AC. The existing kill switch button shorts the input to the coil to ground. See image of typical waveform below.
I want to mimic the operation of the existing kill switch with the Arduino, to allow the ignition to be killed for X ms based on RPM. I need to ground the negative pulse, will an SCR do this? The Arduino ground can be common with the CDI system, I imagine it will have to be.
I also want to sense engine speed by frequency on this line when the ignition is firing normally, can I use a voltage divider to bring the pulse voltage down to logic level? Can I use a diode to block the negative initial pulse then measure the positive 'ring' of the coil, rather than inverting the signal? Will the Arduino be able to catch this short (15us) positive pulse with an interrupt? Or will I need some external component? I will need to incorporate a threshold value and a delay to prevent multiple triggers as the coil rings, I only want to trigger off the first one.
If possible, you would be better of preventing the SCR firing to dump the current into the coil, rather than trying to put something in which could dump this very high current.
You could use a power FET to dump the current, if it was high enough current rated, but you'd also need to protect it from back EMF on the coil. (which is nasty stuff).
can I use a voltage divider to bring the pulse voltage down to logic level
Seems a very dodgy way to do it, e.g. bring down 250V plus noise into the Arduino, again... much better if you could get at the trigger for the SCR and use that voltage.
Will the Arduino be able to catch this short (15us) positive pulse with an interrupt
Is the signal you want to capture really that short?
You'd need to look in the ATMega328 spec, I suspect its possible to detect something that short, but really detecting on the LT side of the coil sounds like a recipe for trouble.
Thanks for the response, I've thought about it a bit more. I prefer to ground on the output side as that's how the current kill switch operates, meaning I can tie it straight into the existing loom without cutting any wires. Trigger side is possible but there's still 100VAC there to deal with, although likely less noisy.
On the output side I think an AC solid state relay would be capable of doing the switching and isolate the noise from the circuit.
Still leaves the issue of measuring engine speed, will require some isolation and slowing the signal down for easy capture by Arduino. Perhaps something that changes state when a certain voltage is exceeded. That way I can set a threshold to avoid multiple triggers, and each state change will indicate 1 engine revolution.
I have done just this. I have even made a specific module that catches signal from the coil and send it on to the Arduino for tach counting on a interrupt pin. PM if you're interested in one of these boards.