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:
- 2 pulses (3-1 trigger)
- 3 pulses (4-1 trigger)
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).
- If the ign-advance drops, say from 30 deg (which is before trigger) to 10 degree (which is after trigger), there might be a lost spark event (output actuation).
- This is not normal operation anyway.
- When (as right after kickstart) ign-advance rises from 10 degree (which is after trigger) to 30 deg (which is before trigger), there is no lost spark event
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.