Jump to content

BKT spark table


Recommended Posts


Can some one share with me why we have 60 degree area in the table like that? How do we predict or command the exact spark for a specific cell (Load, RPM)?

For example, I am still in the blind to work out how I get 55 degree at 1500RPM for cruise. I am trying to target 45-50 for that area but have no confidence where or how to make changes to the tables.



Factory Spark 1.jpg

Link to comment
Share on other sites

Hi Loki the spark algorithms are far more complex than simply Load vs Rpm.

The final commanded spark is a combination of multiple tables. This is not an exhaustive list however this is the ones you need to look at.

Borderline Knock - auF16593 (this is the maximum spark before the engine will knock)

MBT Spark - auF16630 (this is the maximum spark before you stop increasing torque)

Coolant temp MBT adjustment - auF2433

Spark ECT Correction - auF0222 This retards timing when your coolant temp gets too hot

ECT Correction Multiplier - auF0223 This is a multiplier for the above table.

Spark IAT Correction - auF0220 This retards timing when your intake air temp gets too hot

IAT Correction Multiplier - auF0221 This is a multiplier for the above table.

Spark BLK table adder (lambda correction) - auF0218 - This adds or subtracts timing based on the commanded lambda.

This one will catch you out, it makes quite large adjustments based on your commanded lambda, a lot of people zero out the positive numbers in this table.


Steady state/cruise
This is an approximation of the calculation for when driving under normal circumstances without cold start or deacceleration active. It is an esimation, at some stage we want to make a proper write up on this from exactly what is in the assembly code. This is possibly incorrect or has omissions, so please take this into account. If anyone knows more detail than this please post up any corrections.

Final Spark = Math.Min(auF16593, auF16630-auF2433) + auF0218 + auF0223 * auF0222 + auF0220 * auF0221


Final Spark = Minimum(BLK, MBT-MBT adjustment) + lambda correction + IAT Correction + ECT Correction.


Now if you are at idle it uses a PID loop to control spark.


If you are deaccelerating (eg closed throttle) it uses auF0228 (Decel Spark Angle)

Cold Start

If you are on cold start it uses the following:

Maximum Cold Start auF0210

Maximum Cold Start Adder auF0212

Maximum Cold Start Adder #2 auF0211

Cold Start Spark = auF0210 + auF0212 + auF0211

Final Cold Start Spark = Math.Min(Cold Start Spark, BLK, MBT-MBT Adjustment) (eg whichever is smaller of the 3 numbers)

Transient conditions

This is when changing the rate of acceleration, eg a change in the rate of load (the derivative of load). For example accelerating slowly, then flattening the throttle.

Spark Retard for Tip-In auF0233

Tip in detonation control auF1705

Final Spark Transient = Final Spark (from the above calculation) + auF0233 * auF1705

Torque Control

There are various times the PCM will command torque reduction which is achieved by ignition retard and in some conditions ETC (throttle feathering/closing). This is under traction control, changing gears in an automatic etc.

Spark Retard (torque ratio) auF0263


Going forward we would like to build a spark simulator. Eg you enter in RPM, Load, IAT and ECT with sliders and you can see what the final spark will likely be, for now you would need to fill out these equations in excel by hand. If you do build anything feel free to post it up, it will be very helpful for others.

Link to comment
Share on other sites

No problem, it is a bit daunting at first but you will see that you can simplify things quite a bit.

A lot of people start by zeroing the lambda correction table and setting BLK and MBT to be equal. They also zero the positive numbers in the IAT and ECT tables, this way what you see in BLK is what you get and only once the motor gets hot do the IAT and ECT tables kick in and start pulling timing.

Link to comment
Share on other sites

Loki, one thing to remember about IDLE is that spark is one of the things the PCM uses to control IDLE. For example if IDLE RPM is dropping it will increase spark angle to get it back to the target. This is simplifying it quite a bit but as you say noted your idle spark was moving and it would be interesting to see if the RPM moving as well.

Link to comment
Share on other sites

  • 2 months later...

They will ping standard with no changes. The knock retard is quite heavy though so you can double the boost, it will knock and then it will pull up to 14 degrees of timing for you automatically. Absolutely wouldn't recommend you tune like this but some people do and the cars will survive for longer than you think. 

Have a look at some tuned cars. They will run quite low timing at peak torque. 

So to answer your quest they aren't conservative at all. 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Create New...