Knock control - load vs RPM table found
#16
Evolved Member
iTrader: (31)
Eric, the second table you show is the load required at each RPM to allow the octane number to be updated. Whilst it is nice to know it is there, I don't think it will be as useful as the first table that will effectively control the RPM/load where knock control operates. False knockers need to test.
Thanks MR Turco, audit went well.
Thanks MR Turco, audit went well.
#17
Evolved Member
Thread Starter
On 88570008, 362c for load (scaled like MUT 1C), RPM is 5c6e - weird lookup through a little used RPM to RPM index table.
The knock interrupt is a massive routine. It is triggered from a timer.
Knock ADC is read and put through the filter Bez described before.
Error checking involves a test to make sure that the filtered value changes more than a certain amount in a certain time.
Assuming no errors, the load vs RPM table switch gives a value of 16 or 32 for a multiplier. Below the load threshold, 16 is used (effectively zero though - see CAPITALS BELOW), above 32 is used.
The multiplier is used to multiply the difference between the present filtered knock ADC and the long term average knock ADC, and the result is divided by the long term average knock ADC.
There are further flag controlled routines that may be something to do with knock noise that I haven't worked on yet, not sure if we need to fiddle there or not.
Next, using the load vs RPM table result is again used - if below the load threshold the maximum additional knock sum per ignition event is ZERO (disabling further increases in knock sum) and if above the load threshold then the maximum additional knock sum per ignition event is 7. THIS IS WHY THIS LOAD VS RPM TABLE IS THE CRUCIAL ONE THAT CONTROLS WHERE KNOCK SUM CAN BE INCREASED. This is added to the old knock sum which is trimmed to a max of 36.
I think we're about 75% of the way there!
The knock interrupt is a massive routine. It is triggered from a timer.
Knock ADC is read and put through the filter Bez described before.
Error checking involves a test to make sure that the filtered value changes more than a certain amount in a certain time.
Assuming no errors, the load vs RPM table switch gives a value of 16 or 32 for a multiplier. Below the load threshold, 16 is used (effectively zero though - see CAPITALS BELOW), above 32 is used.
The multiplier is used to multiply the difference between the present filtered knock ADC and the long term average knock ADC, and the result is divided by the long term average knock ADC.
There are further flag controlled routines that may be something to do with knock noise that I haven't worked on yet, not sure if we need to fiddle there or not.
Next, using the load vs RPM table result is again used - if below the load threshold the maximum additional knock sum per ignition event is ZERO (disabling further increases in knock sum) and if above the load threshold then the maximum additional knock sum per ignition event is 7. THIS IS WHY THIS LOAD VS RPM TABLE IS THE CRUCIAL ONE THAT CONTROLS WHERE KNOCK SUM CAN BE INCREASED. This is added to the old knock sum which is trimmed to a max of 36.
I think we're about 75% of the way there!
Last edited by jcsbanks; Nov 20, 2008 at 03:35 PM.
#19
Evolved Member
iTrader: (2)
Here are the addresses for 96940011. I'm not 100% positive that the RPM axis address is correct, but I think so.
These are the first two tables...since we don't know what the third one is yet, I will leave that one out:
Eric
These are the first two tables...since we don't know what the third one is yet, I will leave that one out:
Code:
<table name="Knock Load" category="Timing" address="38f2" type="2D" level="2" scaling="Load8"> <table name="X" address="594e" type="X Axis" elements="10" scaling="RPM"/> </table> <table name="Load required for Octane update" category="Timing" address="3902" type="2D" level="2" scaling="Load8"> <table name="X" address="594e" type="X Axis" elements="10" scaling="RPM"/> </table>
Eric
#20
Evolved Member
Join Date: Apr 2008
Location: Sydney, Australia
Posts: 604
Likes: 0
Received 0 Likes
on
0 Posts
I really hope this does end up as correct. I just want to be certain we are not chasing our tails here.
Last edited by Mattjin; Nov 21, 2008 at 12:26 PM. Reason: Looking at wrong maps.
#21
Evolved Member
Thread Starter
I've been concentrating on knock rather than octane, since the latter is already pretty well understood (and easily disabled if not). The octane table that was the second that Eric mentioned is a load vs RPM switch that allows octane to be updated (like the engine temp setting), it doesn't control a rate of change, however, that doesn't mean there aren't others that do like you've found and tested. During this work I've been concentrating on knock rather than octane, because if you get knock right, octane follows. There is also more to go through in the knock control so I want to concentrate on that for now in this thread.
#22
Evolved Member
Join Date: Apr 2008
Location: Sydney, Australia
Posts: 604
Likes: 0
Received 0 Likes
on
0 Posts
I am working on the short term trim too, it's just the long term shows up when you start looking around. Long term (octane) I am pretty sure I have most of the mapping for it covered and functioning, just we dont really need it. :-)
#23
Evolved Member
Thread Starter
Oh, just as you edited I loaded up your map from openecu (download from here corrupt) and was going to look at the addresses you mentioned as I thought I had octane completely sorted on the IX.
All I can find on the IX for octane is the initialisation to 255, the usual sort of sensor error checking/bypass routines, the coolant temperature thresold, the load vs RPM table that was the second one Eric posted, the knock sum of 3 or 5 to alter octane up or down, and 2 values of 0x18 for the timer to inc or dec octane number (although I haven't found where the timer variable is written). I cannot find any other code that actually alters/updates octane, although it is of course read in several other places.
I cannot find anything in my ROM equivalent to another load table that controls a rate of inc/dec of octane and I've not noticed a change in octane update rate in different circumstances - on my real life tests I set the octane low by changing the initialisation value and noticed that it did not update until the coolant temp was up or unless you were above load and RPM thresholds. Since I don't use OEM boost control I didn't look any further at the WG kill routines, but I know where they are, and my octane never moves off 255 or 100% unless I get some freakish part throttle knock where I lift as it is boosting and catch it just right to upset it.
I'm as certain as I think it is possible to be about the load/RPM tables for knock and octane, and I cannot see anything else to investigate about octane unless you have any leads to look at? I've not seen anything about the octane code or logging that has surprised me so far from what I understand of the disasm.
All I can find on the IX for octane is the initialisation to 255, the usual sort of sensor error checking/bypass routines, the coolant temperature thresold, the load vs RPM table that was the second one Eric posted, the knock sum of 3 or 5 to alter octane up or down, and 2 values of 0x18 for the timer to inc or dec octane number (although I haven't found where the timer variable is written). I cannot find any other code that actually alters/updates octane, although it is of course read in several other places.
I cannot find anything in my ROM equivalent to another load table that controls a rate of inc/dec of octane and I've not noticed a change in octane update rate in different circumstances - on my real life tests I set the octane low by changing the initialisation value and noticed that it did not update until the coolant temp was up or unless you were above load and RPM thresholds. Since I don't use OEM boost control I didn't look any further at the WG kill routines, but I know where they are, and my octane never moves off 255 or 100% unless I get some freakish part throttle knock where I lift as it is boosting and catch it just right to upset it.
I'm as certain as I think it is possible to be about the load/RPM tables for knock and octane, and I cannot see anything else to investigate about octane unless you have any leads to look at? I've not seen anything about the octane code or logging that has surprised me so far from what I understand of the disasm.
Last edited by jcsbanks; Nov 21, 2008 at 12:46 PM.
#24
Evolved Member
Thread Starter
Your ROM:
17a4 - coolant for octane update
4a50 - load for octane udpate
17a6/17a8 - 3 & 5 knocksum thresholds for octane inc/dec
17aa/17ac - 0x18 update counter for octane
Code looks identical to my IX.
Also in your ROM:
4a40 - load for knock control (as per original thread subject)
1770 - gain above load for knock control (decimal 32)
1772 - gain below load for knock control (decimal 16)
1774 - limit knock above load for knock control (7)
1776 - limit knock below load for knock control (255) (this differs from my IX, so your knock control is disabled by this being 0) - needs further work on your ROM to see the effect
4a84 - octane initialisation (on ECU reset)
17a4 - coolant for octane update
4a50 - load for octane udpate
17a6/17a8 - 3 & 5 knocksum thresholds for octane inc/dec
17aa/17ac - 0x18 update counter for octane
Code looks identical to my IX.
Also in your ROM:
4a40 - load for knock control (as per original thread subject)
1770 - gain above load for knock control (decimal 32)
1772 - gain below load for knock control (decimal 16)
1774 - limit knock above load for knock control (7)
1776 - limit knock below load for knock control (255) (this differs from my IX, so your knock control is disabled by this being 0) - needs further work on your ROM to see the effect
4a84 - octane initialisation (on ECU reset)
Last edited by jcsbanks; Nov 21, 2008 at 01:18 PM.
#25
Evolved Member
iTrader: (6)
Join Date: Jul 2005
Location: Charleston, SC
Posts: 1,228
Likes: 0
Received 0 Likes
on
0 Posts
I am going to have to try this out. My motor is knocking like crazy in certain areas, sometimes up to 36 counts. Man, the charachteristics of my 9.7:1 forges everything internals is wicked different than stock. (Obviously) Right now I am learning when and where I have to worry about the knock, and when I don't.
I might have to fiddle with this and see if she acts a little better with the phantom knock areas I am currently getting.
I might have to fiddle with this and see if she acts a little better with the phantom knock areas I am currently getting.
#26
Evolved Member
Thread Starter
Address for 94170015:
421a Load (159 max)
635a RPM
NB: Most of the ROMs I have seen do not have the clip that the JDM IX GSR has below the load threshold, so it may not disable knock control completely below there. However, it will be less sensitive at least.
What I really need to do is finish working it out on my ROM and then look how it works on others. Code is similar across the IXs, on the VII it is a bit different in details.
#27
Evolved Member
iTrader: (23)
Just for those of us who *barely* understand all this code stuff:
for the 94170014 and 94170015, just copy and paste in the following:
Tephra, I really still need your code, this only helps with phantom knock, but doesn't help with the "sensitivity" of the sensor.
Now question... why would it stop at 159.4?
If I understand this correctly by making the following changes I should be effectively changing the realm of knock control, correct?
for the 94170014 and 94170015, just copy and paste in the following:
Code:
<table name="Knock Load" category="Timing" address="421a" type="2D" level="2" scaling="Load8"> <table name="X" address="635a" type="X Axis" elements="10" scaling="RPM"/> </table>
Tephra, I really still need your code, this only helps with phantom knock, but doesn't help with the "sensitivity" of the sensor.
Now question... why would it stop at 159.4?
If I understand this correctly by making the following changes I should be effectively changing the realm of knock control, correct?
---BEFORE---
---AFTER---
Last edited by honki24; Nov 21, 2008 at 06:16 PM.
#29
Evolved Member
Thread Starter
honki24, you got it.
On ECUs I've seen other than 9 JDM GSR it looks like below that area knock control will just be less sensitive (needs confirmation, and the sensitivity and maximum is adjustable if it is a problem). Also your red outline should officially go to 159 at 2000 RPM and below as engines with MIVEC and stock turbos, or strokers on small turbos may be able to exceed.
The use of 159.4 load scaling is interesting. If it is an issue, we could change the load used, but 159.4 on a standard car is about actuator pressure in typical temperatures on a stock turbo, we probably want a good reason to have knock control disabled there unless people are getting false knock that high up.
On ECUs I've seen other than 9 JDM GSR it looks like below that area knock control will just be less sensitive (needs confirmation, and the sensitivity and maximum is adjustable if it is a problem). Also your red outline should officially go to 159 at 2000 RPM and below as engines with MIVEC and stock turbos, or strokers on small turbos may be able to exceed.
The use of 159.4 load scaling is interesting. If it is an issue, we could change the load used, but 159.4 on a standard car is about actuator pressure in typical temperatures on a stock turbo, we probably want a good reason to have knock control disabled there unless people are getting false knock that high up.
#30
Evolved Member
iTrader: (23)
honki24, you got it.
On ECUs I've seen other than 9 JDM GSR it looks like below that area knock control will just be less sensitive (needs confirmation, and the sensitivity and maximum is adjustable if it is a problem). Also your red outline should officially go to 159 at 2000 RPM and below as engines with MIVEC and stock turbos, or strokers on small turbos may be able to exceed.
The use of 159.4 load scaling is interesting. If it is an issue, we could change the load used, but 159.4 on a standard car is about actuator pressure in typical temperatures on a stock turbo, we probably want a good reason to have knock control disabled there unless people are getting false knock that high up.
On ECUs I've seen other than 9 JDM GSR it looks like below that area knock control will just be less sensitive (needs confirmation, and the sensitivity and maximum is adjustable if it is a problem). Also your red outline should officially go to 159 at 2000 RPM and below as engines with MIVEC and stock turbos, or strokers on small turbos may be able to exceed.
The use of 159.4 load scaling is interesting. If it is an issue, we could change the load used, but 159.4 on a standard car is about actuator pressure in typical temperatures on a stock turbo, we probably want a good reason to have knock control disabled there unless people are getting false knock that high up.
Or are you saying that this is merely an area if "increased sensitivity" rather than an area of "knock detection"? I know I've seen knock above 160 load.