Multispark
Multispark adds extra coil discharges after the primary spark. It does not replace the main spark or its dwell table. Open Ignition > Multispark and configure the RPM, angular window, extra-spark limit, post-spark delay, and subsequent-spark dwell.
Count and scheduling
getMultiSparkCount(rpm) returns zero unless multisparkEnable is true, RPM is
nonzero and at or below multisparkMaxRpm, and
multisparkMaxExtraSparkCount is greater than zero. The allowed extra count is:
floor((time_per_degree * multisparkMaxSparkingAngle) / (multisparkSparkDuration + multisparkDwell))
capped by multisparkMaxExtraSparkCount. The main spark is not included. The
configured count is recalculated during the periodic ignition calculation.
After the main discharge, firmware waits multisparkSparkDuration, charges
for multisparkDwell, and fires. It repeats in real time while sparks remain,
provided ignition is enabled and the current cut state still permits charging.
A cut that begins during an active charge still allows that pulse to end, but
it suppresses subsequent extra sparks. Every pulse retains the independent
physical overdwell guard.
Experimental ignition paths
ignitionCycleProfile changes final angle-to-time conversion for the primary
ignition event. The extra sparks that follow remain scheduled as elapsed-time
charge/fire events after the main discharge. ignitionTimeBudget can plan the
primary event only when Individual Coils, full cam phase sync, and a supported
cycle profile are available; otherwise primary scheduling falls back to
Legacy. Neither experimental option provides a separate multispark strategy or
removes the live cut and physical-dwell gates.
With trailing sparks enabled, the trailing event waits while multispark is still charging and firing. Firmware then hands off to the trailing event and retains the trailing dwell snapshot; multispark cannot rewrite it.
Diagnostics and limits
multiSparkCounter reports engineState.multispark.count, the allowed extra
count, rather than proof that every extra discharge occurred. Check
sparkCutReason, RPM versus multisparkMaxRpm, the configured angular window,
and the delay/dwell pair. A small or zero window can intentionally produce no
extra sparks. Multispark can overheat coils, drivers, and ignition components;
multiplying dwell or assuming a universal safe configuration is not
supportable. Validate coil current, temperature, and trigger behavior on the
actual hardware.