Electronic Ignition with a PIC.

THE BOOK of DT's INTERRUPTS is an organization of interrupt service routines and other works written by Darrel Taylor, RIP.

Interrupt routines are arranged per Darrel's original list. Darrel Taylor's Instant Interrupts are an extension of the work of Tim Box whom in October of 2002 wrote INT_CTRL.pbp

Many of the forum members felt this is a long overdue project.

will be a valuable resource and a tribute to Darrel Taylor the "Fanatical Contributor".

THE BOOK of DT's INTERRUPTS is located at http://dt.picbasic.co.uk/

Electronic Ignition with a PIC.

  1. thronborg
    There are already a bunch of electronic ignition to buy. But if i want to make one by myself? Is it possible to do with example a PIC16F690 at 20mhz or is it to slow?

    For 4 stroke engine
    Must handle up to 6000 RPM
    4-8 cylinder
    Timing advance -40-0 degrees

    Input for Venturi air pressure
    Input for Altitude pressure
    Input from trottle posistion
    Timing wheel

    To ignition Coil.

    Any idea?
  2. enauman
    I'm currently designing an ignition system for a vintage triumph engine for Bonneville Salt Flats. I started out using an AVAGO encoder because it was small and cheap and provided a digital position via SPI. I machined a replacement for the factory "distributor" to mount the encoder. I missed something on the data sheet however. The specs said the encoder was capable of clocking the SPI at 1MHz. Plenty fast enough. However, after fiddling with it I noticed it had a sample rate limitation of 10kHz. You can clock the data out at a bit of 1MHz but you can only sample it at one reading every 100uS. Not fast enough for high RPM. At 8,000 RPM, the device only gives a reading every 4 or 5 degrees (48,000 deg/sec x 100uS = 4.8deg). I wanted to have at least 1 sample for every degree of rotation. So I tried to interpolate between readings.
  3. enauman
    I kept track of 2 successive readings to get the rotational velocity ((current reading-last reading)/(100uS)). When I was within 1 delta reading of the ignition point I used the velocity to extrapolate the actual desired ignition point to fire (turn off) the coil. Nice theory anyway. I couldn't get the code fast enough to make the interpolation within the 80uS remaining after sampling the encoder. So I tried to pick an arbitrary point well enough in advance if the ignition point to give the PIC enough time for the calculations. The problem with that was interpolating the ignition point from a greater distance caused greater error. This was largely because this simple method does not take acceleration into account.
  4. enauman
    I chose to do a steady state interpolation ignoring acceleration figuring that if I was within 4.8 degrees of the desired ignition point, there would be minimal error due to accelleration. However when moving the point of interpolation way in advance there is plenty of time for the rotational velocity to change significantly.I gave up on the digitizing encoder and switched to a quadrature encoder with an index. The one I plan on using gives 2000 pulses/rev with a zero index. It should be easier to reference the index and count pulses. I'm currently machining the distributor to try it out. If anyone is interested, I can post the results later.
    PIC16F1824 @ 32 MHz
Results 1 to 4 of 4