Jump to content
LegacyGT.com

Everything you wanted to know about Subaru's Knock Prevention Strategy...


Recommended Posts

... but were afraid to ask.

 

The intention of this thread is to gather and share as much generic info as possible on Subaru's Knock Prevention Strategy, as it applies to

our-gen Legacies/Outbacks and most other Denso ECU and SSMIII-era Subarus (approx. USDM MY2005 - 2014, JDM MY2004-2013).

 

All 5th gen Legacies (2.5is, 3.6Rs and LGTs) have a very similar if not identical knock prevention logic in place. What differs from the factory is how their strategy is configured (thresholds, counters, limits, ranges, etc.)... this can change even more drastically with tunes, depending on how much or how little a particular tuner decides to change across the Knock/Timing/Compensation-related tables.

 

It is also, at least in part, the reason why you might notice a difference in behavior of the various knock prevention modes between an LGT a 2.5i or 3.6R.

Different limits, ranges, counter configuration will result in the modes acting ever so sightly or significantly different for each of our engine/transmission combos.

 

Based on what's been discovered over the years, Denso ECU equipped Subaru's (the older 16- and current 32-bit) have a few complementary knock strategy modes

(most of which we've all heard of):

 

Feedback Knock Correction (FKC)

Rough Correction (RC)

Fine Learned Knock Correction (FLKC)

Preemptive Knock Correction (PKC)

 

What's important to note is that at any point in time, only one of these is ever active. The ECU switches between them so quickly that even when logging at 100Hz its sometimes hard (or impossible) to catch when it happens. ECU simulations make it easier to trace the logic, step through the code, but that's not something we care about here.

 

The first three modes I list (FKC, RC, FLKC) are fairly well (but not completely) understood. The last one (PKC) has just recently been discovered and is not well understood at all... other than it exists and throws in a wrench sometimes (not unlike many of the defined and undefined compensation or alternate mode tables).

 

For each mode, there are RPM and Load ranges where they can activate, deactivate or remain active once triggered (say FKC can potentially become active above 0.65g/rev but if it does, it will remain active even if load falls to 0.55g/rev, and below that self-deactivate).

 

There are also counters that work as a function of the knock sensors (microphones/stethoscopes) that define what time-duration without knock or more noise perceived as knock that the ECU will assume is a sign of knock-free operation in each mode. Based on these the ECU will either add back or remove more timing in FKC or FLKC, raise, keep the same or drop the IAM in RC or pull some timing in anticipation of knock in PKC.

 

Finally, there are tables that define the initial, min/max and step values for all the modes. How much timing can be pulled or added under FKC, FLKC and using what step value (say +/-0.35 degrees), by what fraction should IAM be incremented/decremented if RC decides its time for IAM to move (say 0.5, then decaying to 0.25, etc.), what value in the KCA max table will be the minimum trigger point for enabling RC (if all the other pre-reqs are met).

 

On top of all this, we have lots of logic that can quickly muddle the water a bit. MAF scaling, MAF/MAP interaction in ECU code, resultant calculated load fluctuations, gear-changes, low-load/high-gear operation as well as high-load/low-gear operation, exceeding the load thresholds define in the ROM and knock tables on a tuned car without adjusting said tables to scale, load comp tables, maf comp tables, timing comp tables, fueling comp tables, tip-in/out, overrun, etc.

 

Typically what happens on a Denso ECU equipped Subaru and after a battery pull or ECU/TCU reset is this:

 

Cold start, while in OL and getting up to temp and warm idle RPM (coolant threshold), the ECU learns throttle position and idle stability, operates in FKC only if criteria for FKC are met. IAM will be at 0 at this point, awaiting conditions to set initial value.

 

Once up to temp, typically in CL now, and once another set of criteria are met, IAM will set to initial value defined in the ROM (stock is 0, many tunes set this to 1 or leave stock).

 

When driving, FKC will usually be triggered and active first with IAM chilling at whatever the initial value is/was.

 

Only once the criteria for RC are met, will IAM be re-evaluated.

It might move down (if initially at max aka 1) or it might move up (if initially as min 0 or <1) or it may remain the same.

 

Typically the ECU will settle on some value it sees fit based on this initial drive, knock sensor feedback, etc.

Let's assume our initial IAM was 0 and when triggered RC caused it to re-evaluate to 0.875.

 

At this point, once the ECU is temporarily 'happy' with the IAM, it will exit RC and enter a mix of FKC/FLKC.

ONLY once this initial RC mode behavior is triggered will you ever see any FLKC behavior.

 

And from here on out, the ECU will switch between each mode as it sees fit. It might be happy with the IAM it evaluated and based on sensor feedback will only rely on FKC and FLKC (this populated the Learned Timing RAM table and effectively 'learns' to either subtract or add timing at specific RPM/load cell locations/ranges). Or it might decide that based on further driving or some transient condition, it needs to re-evaluate IAM again by re-entering RC and the whole process starts all over again.

 

So usually, upon reset: FKC -> RC -> FLKC

After a while: a mix of FKC, FLKC, RC (if needed), PKC, FKC again, FLKC again, rinse and repeat.

 

Credit and more good info:

http://www.romraider.com/forum/topic1840.html

 

More to come...

Edited by Perscitus
Link to comment
Share on other sites

Sample temperature-based timing compensation tables (IAT and ECT).

Note what happens when the Coolant temp is <30-50F or >230F, or when Intake temp >140F.

 

In the case of the LGT, its very likely there is also a Manifold temp comp table (as Manifold temp would typically be > Intake temp and give a better indicator of the post-intercooler charge temp).

3.JPG.8c5d4cdaa43dd5d3e651b9a015a26560.JPG

4.JPG.6b0b57544ebd4bb88d0cd9683bb80fc4.JPG

5.JPG.b4a28697555b81f24a2deae941c2aa33.JPG

Edited by Perscitus
Link to comment
Share on other sites

In the case of the LGT, its very likely there is also a Manifold temp comp table (as Manifold temp would typically be > Intake temp and give a better indicator of the post-intercooler charge temp).

Thanks Perscitus, useful thread idea.

 

I've only seen such tables in some STi and Spec C ROMs as these are the only Subaru models I've seen fitted with IAT sensors in the intake manifold itself. There's no point having such a table if there's no sensor to read data from.

 

Note there is also pre-emptive knock correction, which we've discussed on RR.com before. I'm not sure when exactly Subaru implemented this strategy, though I know it's not in the 16bit ECUs and I've only seen evidence of this behavior post '06, which is when CANbus was introduced.

This system basically uses either the FLKC or FBKC logic to pull a small amount of timing (initial value usually also -1.40*) at a couple of conditions we know about. One is high throttle angle delta, ie you mashing the gas pedal hard and fast. The other is boost error being negative, meaning you've overshot the boost target. Basically Subaru see both these situations as being likely to produce knock, so they very helpfully pull that 1.40* of timing before anything is even heard on the knock sensor. In practice it makes life hard for a tuner as it's not obvious which events are pre-emptive and which are real. One thing you can do is to modify the initial and step values for these parameters by a small amount, like setting them to -1.41* initial and steps of 0.71 and 0.36 to differentiate them from the actual FLKC and FBKC values in your logs. The logic is still pretty opaque AFAIK, not too many people digging into that.

Edited by fahr_side
Obligatory '[URL="http://legacygt.com/forums/showthread.php/2008-gh8-238668.html?t=238668"]build thread[/URL]' Increased capacity to 2.7 liters, still turbo, but no longer need spark plugs.
Link to comment
Share on other sites

Yeah, thx fahr_side. I mentioned PKC (and its implications on tuning) in the first post, and linked to our trusty ol'RR thread on knock strategies.

 

Thanks for sharing your insight and some extra specifics on PKC!

 

For some odd reason I've noticed that at least a few USDM Denso-based Subarus have a Manifold Temp sensor reading when the car's equipped with a MAP sensor (makes little sense to me as to how/why, unless a temp sensor is somehow sandwiched together with the MAP, like IAT and MAF... I could never locate a separate thermistor or thermocouple in the manifold itself).

 

The thing is this different temp reading is only reported under E-OBDII (mode 0x22), not SSM or vanilla OBDII.

 

2015 WRX and 2014 FXT (so likely also 5th gen Legacy DIT, Levorg, etc) have both intake temp and manifold charge temp sensor outputs as well. Under Hitachi managememt, they appear to be actively used in the ECU logic.

Link to comment
Share on other sites

So for us end users, suppose I get my car tuned in mild weather 75-85 degrees. And fast forward to the following summer, my IAM could temporarily go down until the weather goes back to where it was tuned at? Or would the ecu make semi permanent corrections to tables to get the IAM back to 1?

 

Or as it a case of as long as the engine is happy the number doesn't matter?

Link to comment
Share on other sites

Not sure I understand the question FLlegacy. There is no direct correlation between weather, ambient temps and IAM.... and besides IAM changes are just a manifestation of Rough Correction Mode working on your car.

 

There IS a direct correlation between how your global timing compensation tables are setup (stock, or tuned if tweaked) and coolant or intake temps. What (if any) compensations are applied will depend on the ambient conditions. Say its 20F outside - on cold start when your oil/coolant/intake temps are close to ambient - chances are your car will add timing so long as the coolant temp stays below whatever temp the ECT comp tables dictates that timing should be added 'to compensate' for the very low coolant temp.

 

Or for another example, say its 85F and you're stuck in traffic and your IAT goes north of 120-140F, or that you managed to heat-soaked the engine bay in some other way (car standing after a longer drive, slower driving for extended period of time, etc). This is a very typical and common scenario. Your intake temp comp table might start to globally pull timing to account for that relatively high IAT (air entering the intake is less dense, less oxygen, timing can be pulled to help prevent knock and hit AFR targets). Remember that timing adjustments can have a far more profound effect on effective AFRs than fueling changes... the trade off is they are course, while fueling changes are fine.

 

In practice, there is nothing wrong or bad with either compensation... or most of the compensation tables typically found in our cars' ROMs.

They just make tuning a bit harder, unless some are zero'ed out (temporarily or permanently... but then typically that needs to be accounted for elsewhere in the tune changes).

Timing should be added or pulled based on low/high coolant or low/high intake temp conditions and, if setup 'right' or adjusted properly -this will usually prevent IAM from dropping because global timing will be adjusted so as to prevent additional knock before IAM has a chance to drop.

 

IAM pegged at 1 regardless of how we drive or what the ambient condition are doesn't necessarily mean the car is running optimal timing.

It just means that either a. the ECU has yet to enter RC mode b. the ECU has entered RC mode, settled on an IAM of 1, exited RC and is now operating in FKC/FLKC, pulling timing based on feedback and populating the learned timing RAM table so long as IAM doesn't move or c. RC has effectively been disabled (or is setup to activate in ranges where knock is minimal)

 

However, the ECU might have settled on an IAM of 1, because the timing maps are conservative enough to prevent most knock events.

Since it (IAM) is a multiplier, this would indicate you are running max timing for all load/rpm cells, but that doesn't mean this timing is optimal, it just means its mostly knock free.

Edited by Perscitus
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


×
×
  • Create New...

Important Information

Terms of Use