MembersPage/JorgenKarlsson/KickStartEngine (2009-03-28 20:20:29)

Kickstart engine

Big single cylinder four stroke bike engines that are kick started needs very exact ignition timing during startup. They normally rotate only 2 revolutions when kick started, this generally means that the engine only barely reach TDC when you kickstart it. The engine is normally positioned just after TDC on the power stroke before you kickstart it.

We normally get two trigger pulses during this time, one for the charge cycle and one for the compression cycle. The RPM is however fairly unpredictable and the engine needs very exact ignition timing to start.

At least one trigger pulse must be placed just before where you want your ignition to occur during the starting procedure. Usually around 10deg BTDC.

We can expect the rpm to be in the 20-120rpm range, this equals a rotational speed of approximately 8.33-1.38ms/degree. This means that we don't need to care much about dwell even if an inductive ignition system is used. If we start to charge the coil for 2-3ms after the trigger and then let it go the ignition will only be max 3deg to late. This is acceptable.

At high rpm the engine is timed from the single pulse of the crank trigger with a "tdc_after_trigger" of around 360-380 degrees.


As an alternative a long tooth can be used together with a HALL sensor, this allow us to start on one edge of the sensor pulse train, and to time the engine from the other edge if the rpm is high enough. This would be the best (one-pulse) solution.

Other alternatives:

Set tooth_wheel_twidth to the angular distance between tooth 0 and tooth 1. Than '''firmware 1.1.x will automatically trigger from tooth 1 at low ignadv (eg. during kickstart-"cranking", when ign_tdcdelay-ignadv >= tooth_wheel_twidth), and tooth 0 at higher ignadv (when ign_tdcdelay-ignadv < tooth_wheel_twidth). (assuming trigger_tooth=00).

Given the starting problems we have seen on slow cranking 4-1 trigger engines I doubt that it would be possible for the missing tooth decoder to sync reliably on a big kickstarted single. Kick starting a bike like this is VERY hard and the rpm will vary greatly over the two turns the engine rotates. Also keep in mind that if if a big single fire early the rider can end up at the hospital with a broken leg. If 1.1.x will sync on the first gap it would be better fit a 60-2 or at least a 12-1 trigger, these triggers do not suffer from the sync problems found on 4-1 triggers in 1.0.x and they are easier build then a long tooth trigger in these applications. The single tooth trigger must still be the primary for these engines, very few people would be willing to fit anything else. -Jörgen

What we need

Starting:

We need the firmware to charge and fire the coil as soon as a configurable edge is seen in the trigger signal. There could be a benefit in letting this continue even when the ignition is timed from the previous tooth (below).

Running:

Above a configurable rpm the engine is timed from the last rising of falling edge (configurable). "tdc_after_trigger" can be well over 360degrees.

This allow the engine to be run with a hall sensor that reads a single narrow tooth that is used for starting and running the engine or with a wide tooth, where one edge is used for timing the engine and the other edge is used for starting the engine.

Jörgen Karlsson

Gothenburg, Sweden.


Implementation thoughts for 1.1.x firmware

Even if one does not use the useful multitooth "time-from-last-tooth" feature, and want to run from just 1 pulse altogether, Marcell doesn't think that ign_tdcdelay = 370 deg needed (although it would be easy to change resolution to 2 degrees, trivial changes around 3 places). 10 deg setting is fine. We just need to allow some automatic += 360 deg in triggertooth() instead of

<PRE>

if(adv > delaydeg){

delaydeg = 0;

}

...

</PRE>

Just make up some sane condition for that and we're done. Maybe

<PRE>

if(adv > delaydeg){

if(ign_tdcdelay <= 19 degrees && adv > delaydeg + 2 degrees){

delaydeg += 360 degrees; // or rather += tooth_wheel_twidth ??

} else {

delaydeg = 0;

}

}

...

</PRE>

This does not seem to interfere with existing setups, and instead of limiting advance to the trigger point, it can advance further.

I like this idea a lot, it will help on some engines. But won't there be a problem with overlapping delays on engines with more then one cylinder? -Jörgen