Transistor Controlled Ignition module - timing problem

I have been using my own ignition control for some time now, it functions, however there is something that has been bothering me for quite some time. Previously I could not find the answer, and now I turn to the forum for some help.

The issue:

This ignition works by charging an inductor and then suddenly discharging it by closing a transistor (or mosfet). The ignition moment is timed by use of a hall sensor, detecting a rotating magnet (on the crank of the engine). I switch on the change of magnet field (where the magnet turns from N to S). All this works fine to some extent, if the ignition is running at 4000 RPM, I can see about a degree of delay on the crank of the engine (strobe timing light). I understand this is not much, but the whole point of this project was to learn. I time the ignition at the "hard point" so it shuts of the coil directly when it finds the rising edge of the hall sensor (see the test code below).

The schematic:

To be complete, here is the schematic I have used. The IGBT I use has been designed especially for inductive ignitions. There are two hall sensors in the schematic, however for simplicity of this test, I only use one (top dead center). The hall sensors are actually DRV5023AJQDBZT, not A1202LH (just used those for the dimensions)

The test code:

I have thrown out everything but the bare minimum, this is the code that I run in my test, to check the timing. With this code I detect about 1.0 degree of delay at a speed of about 4000 RPM. The code is compiled with avr-gcc for an ATTINY84.

#define set_low(port,pin) port &= ~(1<<pin)
#define set_high(port,pin) port |= (1<<pin)
#define set_input(portdir,pin) portdir &= ~(1<<pin)
#define set_output(portdir,pin) portdir |= (1<<pin)
#define is_set(adr, pin) (adr & (1<<pin))
#define is_clear(adr, pin) (!(adr & (1<<pin)))

while (1)
{
    if(is_clear(ADV_BNK, ADV_PIN))
    {
        set_high(COIL_BNK, COIL_PIN);
    }
    else
    {
        set_low(COIL_BNK, COIL_PIN);
    }
}

I hope that someone might be able to suggest a reason why I am getting a timing delay of about ~30uS. I have tested with ext. interrupts, the result is the same.

Up to 11us of that could be the device itself, if you look at the worst-case statistics.

Change the 1k gate resistor to 150 ohms and you'll improve it a little.

First of, thank you for taking the time to reply. I have replaced the resistor with a 180R one (1k + 220). No impact as far as I can measure (still a full degree of delay -> 41uS).

I wonder if I should be driving the IGBT directly from the MCU? Perhaps I should use another device to power the gate of the IGBT?

This is why real ignition systems have the ability to move the pickup device. You need to make the position of the Hall sensor adjustable. Then you can ignore the system delay.

Paul

I thought spark plugs fired for a duration of ~1ms. You're looking at .03ms of lag time and I can't help but wonder if that's just the nature of the speed of an ignition coil.

FWIW, even a lawn mower with a solid state ignition ("magnetron") performs timing advance. You'd have to go back ~35 years to find an engine without it.

Chagrin:
FWIW, even a lawn mower with a solid state ignition ("magnetron") performs timing advance. You'd have to go back ~35 years to find an engine without it.

Magnetron ?? or do you mean Magneto

See http://www.cpii.com/docs/related/2/Mag%20tech%20art.pdf and Ignition magneto - Wikipedia

I know it's only words but a magnetron is a wholly different beast (even if a lawnmower company has decided to steal it as a brand name)

Chagrin:
I thought spark plugs fired for a duration of ~1ms. You're looking at .03ms of lag time and I can't help but wonder if that's just the nature of the speed of an ignition coil.

You might have a point there, the voltage depends on the rate of change of current
for a pure inductor, but there is capacitance as well, and the output has to rise to a very high
voltage before the spark strikes. Even a small load capacitance (partly external and partly
intra-winding capacitance in the coil secondary) will mean a lot of charge is needed
to get to 10kV or whatever.

If we assume the secondary can source upto 10mA and a spark strikes at 10kV, then
just 30pF of capacitance will cause a delay of 30us

The spark itself will form extremely fast - no big delay there, but the flame front
has to develop too which will take time as matter has to move, not just electroncs.

jackrae:
Magnetron ?? or do you mean Magneto

"Magnetron" is the trademark name for a Briggs & Stratton solid-state ignition.

Chagrin:
I thought spark plugs fired for a duration of ~1ms. You're looking at .03ms of lag time and I can't help but wonder if that's just the nature of the speed of an ignition coil.

FWIW, even a lawn mower with a solid state ignition ("magnetron") performs timing advance. You'd have to go back ~35 years to find an engine without it.

Not related to the OP, but some trivia. My 1978 International Scout, 4 cylinder engine, with solid state ignition, fired each spark plug multiple times. Drove the emissions check people crazy!

Paul

Chagrin:
I thought spark plugs fired for a duration of ~1ms. You're looking at .03ms of lag time and I can't help but wonder if that's just the nature of the speed of an ignition coil.

FWIW, even a lawn mower with a solid state ignition ("magnetron") performs timing advance. You'd have to go back ~35 years to find an engine without it.

Tied the same coil to a hall sensor triggered tip122 setup. Zero delay. My guess its a summation of problems, the bulk of it coming from the device just not being driven properly.

The datasheet states a typical gate resistor at 70 ohm. I know the attiny can never source that kind of amperage, so I will need to drive it with something else. Then theres the delay of the mcu, but cant really change that (appart from optimization in code).

If you want to estimate the software delay, replace the MCU with an inverter?

To drive the IGBT harder use a low-side driver like a MIC4420 - no gate resistor
needed as the driver's output impedance will do the job.