Go Down

Topic: Homebrew 2-stroke ignition? (Read 3 times) previous topic - next topic

soulid

Hi,
I am thinking about making my scooter ignition mit an Arduino being able to adjust the igntion timing curves by myself:
1) Using a voltage divider with a Hall sensor detecting the top death center TDC. The attachInterrupt command gives the according accuracy. Timing needs to be recorded in microseconds.
2) Having some tiny calculation understanding how long to "wait" (without delay - command ) before to ignite in [microseconds]
3) Pull the ignition coil pin to low to get the ignition spark.

Here is my question: As the igntion timing is critical I need to pull the coil pin to low with an internal interrupt command. I've never used interrupts except the existing commands like attachInterrupt. Can someone guide me?

PeterH

Have you ever monkeyed with engine ignition systems before?

Timing is critical, and I think you'll find it very difficult to get an accurate indication of crank angle and speed around the firing angle from a single sensor positioned at TDC.
I only provide help via the forum - please do not contact me for private consultancy.

cyclegadget


  To get accurate spark timing, you will need many pulses per revolution of the crank. On my 4 cylinder suzuki, it has 22 pulses and a 2 non-pulse are to determine 'TDC on #1 cylinder.

For a single cylinder engine I would think you need at least 6 pulses per revolution.

soulid

You are right that TDC accuracy is important. Please bear in mind that the scooter originally works with a FIXED (!!!) ignition value and one sensor/ actuator in the CDI ignition system- you can make it only better  :)
I do not mind too much about the lower RPMs- here are the biggest variations regarding angular speed over 360° crankshaft angle. The higher revs are of more importance- and here is luckily the changes much lower.

Important to me is that the sensor in and acuator out is perfectly running. Sensor "in" is no problem with AttachInterrupt. 

But how to kick out the OUT actuator signal with highest accuracy? I'd like to avoid the "ifthen" loop looking for micorseconds, which is timingwise not what I need!

nitrolx



  To get accurate spark timing, you will need many pulses per revolution of the crank. On my 4 cylinder suzuki, it has 22 pulses and a 2 non-pulse are to determine 'TDC on #1 cylinder.

For a single cylinder engine I would think you need at least 6 pulses per revolution.

Nearly every high performance/drag racing style engine runs an MSD crank trigger ignition. 4 magnets located around a trigger wheel on the balancer at 90 degree intervals corresponding to each 4 TDC positions (V8). A pickup fires the ignition each time a magnet flies past.
These engines turn 10,000 rpm plus and make thousands of horsepower.

The trick I can see here is having the pickup trigger advanced some amount before you actually want the ignition to fire and work a delay into the controller. This allows you time for processing. (I've got no idea how much timing a 2 stroke engine runs but to use my drag engine as an example, we run (depending on gear, fuel, weather and other tune up factors) somewhere around 38 degrees BTDC ignition timing. The pickup is actually adjusted to be somewhere around 40 - 42 degrees. The processing in the ignition controller then fires at 38 (as seen if you check the timing with a timing light).

You can then work a 'retard' curve into your controller, referencing RPM or boost/MAP or any other factor you care to use. Remember, the controller can only retard the timing from your base setting. It can't predict into the future to fire before the trigger, it can only trigger after the trigger, so your pickup must be set at the maximum amount of advance you want anywhere in the curve, then retard back from that value in your curve.

In my case we pull 1 degree out when it shifts from low to top gear, and can ramp a few degrees out on launch if traction is marginal, or plot an entire curve for each gear based on RPM or time.

The maths/interfacing for an Arduino to do this and whether it can actually do the job; I have no idea. But I do know it works with only 1 reference per cylinder TDC event in some pretty high performance applications, so it may well be possible.

Have fun with it!

Go Up