Ignition Advance Computation 101

Ludis Langens ludis at cruzers.com
Sat Mar 20 11:36:16 GMT 1999


Several listees have wanted to change how an ECM computes advance.  Here
is how one application does it.  This is for a V6 Fiero.  (1227170, MAP,
 batch MPFI, and Dizzy.)  I suspect that the SyTy code is similar.


First, five advance values are computed.

A: Result from main ignition table - indexed by MAP and RPM.  In turbo
mode, a two bar MAP range is used here.  If the RPM is higher than the
table range, the excess RPM (up to a limit) is multiplied by a PROM
constant and added to the advance.

B: Set to a PROM constant if the engine is cold (CTS) and throttle is at
idle.  Otherwise, set from a table indexed by Vacuum and CTS.  (Note:
Vacuum = BAP - MAP)  The entire table row corresponding to normal
coolant temperature is set the same as the value as used during cold idle.

C: Set from a table indexed by the quantity of EGR flow.  If the EGR has
failed (essentially code 32), or the engine was recently idling, zero is
used as the quantity.

D: Normally zero.  In 10K ALDL mode, set to a PROM specified advance for
a PROM specified time since engine start.

E: Normally zero.  During WOT (actually PowerEnrichment) set from a
table indexed by RPM.

Next, A through E are added together (using 16 bit math).  The cold idle
advance (same constant as sometimes used for B) is subtracted from the
result.  (This essentially makes the Vacuum*CTS table contain both
advance and retard values.  Also, B is thus essentially zero at cold
idle and also at normal temperature.)  Then another PROM constant (zero
in this calibration) is subtracted.

In this calibration, A ranges from 1 to 50 degrees.  B from 12 to 30
degrees (essentially -8 to +10 degrees).  C from 0 to 10 degrees
(although this calibration never calls for enough EGR to use the highest
advance values).  D is 0 or 12 degrees.  E is 0 or 2 degrees.

Next, the HeadsUpDisplay system is given a crack at the computed
advance/(retard) value.

Then the distributor base advance (10 degrees in this cal) is subtracted
from the computed angle.  This changes the reference point from TDC to
the ignition module reference pulse.  At this point, the advance is
clipped to a maximum value (60 BTDC in this cal).

In zeroK ALDL mode (aka set timing mode), if the engine RPM is slow
enough, the computed advance is overridden by the set timing advance. 
(Zero in this cal which is 10 BTDC.)  In normal ALDL mode, the advance
may be overridden by a high steering effort advance.  (Not used in this cal.)

At this point, the advance is clipped to a minimum value (fractionally
ATDC in this cal).  The HUD system is now given another crack.  Finally,
the advance is converted from "degrees" to timer clock counts.  This
counts value is advanced slightly to cancel any delay in the ignition module.


So, any questions about the above?

-- 
Ludis Langens                               ludis (at) cruzers (dot) com
Mac, Fiero, & engine controller goodies:  http://www.cruzers.com/~ludis/





More information about the Gmecm mailing list