Jump to content

INFO: Ford Spark

Recommended Posts

A few people have asked about Spark so here is a brief explanation of how the ford spark is calculated. The parameter IDs are for BF. FG has more adders as well.

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.

This table can add up to 4 degrees of spark at peak load, make sure you are aware of it.

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 + auF0218 + auF0223 * auF0222 + auF0220 * auF0221, auF16630-auF2433)


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


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 Max = Math.Min(Cold Start Spark, BLK, MBT-MBT Adjustment) (eg whichever is smaller of the 3 numbers)

It will then use the idle feedback algorithm to add/subtract spark to obtain a given rpm. Eg if you have a setpoint of 750rpm and your idle is 700 rpm it will add spark, if it is 800 rpm it will subtract spark. The final figure will be clipped at "Final Cold Start Spark Max" which is calculated above.

There is also an "anti stall multiplier" which is added in, most of the time this does nothing unless the rpm dips very low.

If you want to datalog final cold start spark max, log the following DMR spk_lold_cld

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.


Why borderline and MBT?

Regarding the borderline and MBT tables the reasoning is to achieve maximum timing for performance in all possible conditions.

If you use an 120 octane race fuel and find the maximum torque an engine can make then log the spark, this will be your MBT (maximum brake torque) table.

Then if you use 91 octane fuel (I think the US fuel is different again) and find the maximum spark the engine can take before knocking this is your borderline knock table.

Then you vary the lambda and see how much extra timing the borderline table can take and this creates your lambda spark table.

Now this may overlap, eg the borderline knock may be higher than maximum torque. Eg you canrun 50 degrees of timing at cruise however the vehicle will stop making more torque after about 40-45 degrees hence there is no point in running any more. The PCM takes the lowest value of these two tables for this reason.

The goal of all these tables and adders is so you can run the absolute maximum timing possible at all temperatures and load. Ford have done a great job of achieving this on a stock calibration, eg the car will run on the ragged edge of knock at all times getting maximum performance and maximum fuel economy (within emissions windows) on 91 fuel. If you were to try and achieve this level of tune in the aftermarket world you would need an engine dyno cell, thousands of litres of fuel and the ability to control ECT and IAT. It would take you a long time, I've been told it takes Ford 3 calibrators 25 weeks to calibrate an engine from scratch.

The issue with aftermarket tuning is you do not have the resources to hit each load cell at every single IAT and ECT combination to determine maximum torque and maximum timing. So you compromise and tune the vehicle for the worst case, this means in cold weather/transient conditions you are probably running far less timing than you actually could.

Setting the upper loads of the MBT and Borderline tables to be the same figures means you are safe in that you can be guaranteed the PCM will not ever run any more timing than this. It also means at low ECT/IAT temps you will be running less timing and hence less power than is possible.

  • Like 4
Link to comment
Share on other sites

I'm quite impressed at the amount of spark these PCMs can pull with knock, datalogged my Patrol and it was pulling >8 degrees at WOT in some spots, with no pinging whatsoever. Have fixed it now.

Noticed that the 'Auto Octane' tables pull 4 degrees when it sees -4.55* of knock consistently, would a good way to tune for this tune for ~4.5 degrees of knock retard on 91 and turn auto octane on for when you run 95/98? It's a bit crude I know. I have knock ears and it doesn't seem to be pinging at all :/

Is there a rule of thumb for the Falcon 4L and amount of timing advance possible between 91 and 98?

Link to comment
Share on other sites

The stock calibrations knock all the time, they run permanently y on the edge of mild detonation. This is ok on stock boost levels but will grenade a motor that is making big power.

The table you mention already does this on NA falcons, so they add 4 degrees of spark when it detects 95/98 octane. 

Turbo falcons disable this feature in most strategies. 

Timing depends on load so you really need to get on a dyno with knock ears to find out. 

Link to comment
Share on other sites

  • 1 year later...
  • 1 year later...
  • 1 month later...

Knock Retard Logging - Am I right in thinking that logging SPKAD_IND_AVG is the amount of spark retard the PCM is Pulling? -

So at RPM2400 - LOAD .93   SPKAD is -1.18 using Borderline Spark Table (As Seen in Screenshot)

So to correct this knock event I would take 1-1.5 degrees from this part of the Borderline Spark Table?


Screenshot (2).png

Link to comment
Share on other sites

  • 9 months later...
  • 5 months later...

trying to get borderline knock to be used at all times, however, there are instances at low load 0.2 to 0.3 where the calc is resorting to MBT tables. An example

at 1240rpm, load 0.33, lamda 1.1, iat 37deg.  auF16630MBT=27.5, auF16593 BLK = 24.5.  This part is good.  my MBT table is 3deg higher than borderline.  

auf2433 - Coolant temp adjustment is zeroed out. 

The final spark advance is 23deg. 

For the life of me cant see how this is possible with the above maths:

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

auF0218 = spark lambda = zeroed out

auF0222 = ECT running at 90deg = wont be used: image.png.9d2ab58afca7c1b211090ada453c35d2.png


auF0220 = IAT running at 37deg = probably around 1 or 2 according to tableimage.png.29633859a874b1aaaed67590f10f9011.png, this coupled with AUF221 image.png.627ab42bd09147bcb52556aa7ab554b8.png which is 0.1 makes IAT correct if any at all.    


MBT image.png.2dcb75abf1716cf3ccda24041f0bd8a6.pngand BLK tables for reference image.png.194e99d074120b57c8b9461b8500be81.png


Could this table: image.png.3566f18cde854b90ac895fd8c86936b5.png

be used somehow in the final spark calc?  5 degree retard is almost the number, but that would be 22.5, whilst y final is 23.  Something is pulling 4.5deg and i can find it.  in the meantime I will zero this out, to see effect on next run.  

Link to comment
Share on other sites

update to my previous post - I have now zeroed out the emmissions table - presto the borderline knock table is in use 100% of the time.  Thank you for comments Puffwagon and Roland.  BTW how reliable are knock sensors for street tuning - off the dyno tuning.  Every now and then a couple of my points pick up -0.3knock retard which I will fix up in the tables if they truely are "knock".  

Link to comment
Share on other sites

  • 1 month later...

Hey Guys 

Does anyone know what effect does changing "au0352 Fuel Octane -95-Default fuel octane (RON) for calibration of the spark Borderline Knock table" to 91? 

Does it blanket the table with less advance? 

Cheers Rob

Link to comment
Share on other sites

5 hours ago, rfh said:

Hey Guys 

Does anyone know what effect does changing "au0352 Fuel Octane -95-Default fuel octane (RON) for calibration of the spark Borderline Knock table" to 91? 

Does it blanket the table with less advance? 

Cheers Rob

There is automatic octane detection logic in the tune. When the "higher" octane is activated it adds spark across the board. This assumes the base calibration is for 91, and the alternate octane is 95 which is detected via abscence of knock.

if the base octane is set to 95, then it assumes the higher octane is always active (and is zero'd). I think, I'm not 100% and haven't actually tested to verify this, but from what I can see I'm reasonably confident this is how it works.

In the turbo cals I believe this is always disabled. I think its enabled in some of the non turbo cals. In a turbo cal I believe it would cause too much knock attempting to detect if the better fuel was in the tank and that is why its disabled.


If you set the base fuel type to 91, and then enable all the required scalars for octane detection it will add spark as per auF0226 to your final spark.

Octane adjust is enabled via auF2097 and will be detected when the window is active as per the following scalars


In the FG they also have a wastegate adder for the higher octane detection. This is so that it reduces boost whilst attempting to detect the higher octane (I think) so that it doesn't ping too badly. However once again I assume Ford found this didn't work well or wasn't safe to enable as all the Turbo cals I've seen have auF2097 disabled.


Personally I would set up a multi tune and simply set tune 1 as a "valet" or low boost low octane tune which you select when you know you are putting unknown or 91 octane fuel in the car.

Link to comment
Share on other sites

Thanks Roland,

This vehicle has no mods but pings like mad @ 1800 to 2700 and ~40% tps,  regardless of fuel used, 91 or 98. Logs show pretty much no knock detection as if the knock sensors have gone deaf. Have you seen this before? 

So it's looking like they need to be changed..

Cheers Rob


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...