Put this off for too long. Mainly because I haven't been able to come up with a way to explain it in simple terms. Also because I didn't feel it was going to be necessary for anyone to really need to modify the knock sum calculation tables. Couldn't have been more wrong about that... We all know what knock is so I'm not going to get into too much detail with that. The juicy details everyone wants to know is what does the code do with the signals sent in by the knock sensor. This isn't easy nor straight forward so you might have to read it a few times before it makes sense.
The code determines an occurrence of knock by using a statistical process and something called a Fast Fourier Transform process. The code learns an average noise value during a stable condition of the engine. This average noise value is used for determining ignition timing when the engine is in a transitional condition. Anything above the average noise level is considered real knock and the code mediates the timing to reduce a knock when the engine is in the transitional condition. To a point...
If you followed the instructions properly for setting up my EVOScan XML, one of the loggable parameters are knock voltage. I've always used this to monitor the raw sensor voltage and look for sharp/sudden spikes in the noise level to make a judgement call if the noise is real knock or not. If you've ever graphed this, there's a lot of info you can take away from it:
See that sudden dip in voltage around the 29 mark? The code switches an output port that brings the knock sensor signal thru a capacitor on the ECU board before it reaches the CPU. This switch is triggered by the average noise level reaching about 80. A few of you might remember a discussion about swapping in the correct knock circuitry hardware onto the Clone ECUs? This is what that circuitry does. Note: SOHC 3/S don't come with this on their ECUs so this is why you can't run that ECU in your car.
The advantage to this is you can filter out all the low level noises while amplifying the high level ones to get more resolution out of the base signal. To my knowledge no standalone does this.
Quick side track: Something interesting about this I've observed is when swapping out the stock crank pulley for one of those light weight non-dampened ones, there's an increase in the raw knock voltage (changing nothing else with the tune or setup with the motor). Swapping the stock pulley back then reduced the noise level. Just something to be aware of if you're considering running one. Be willing to bet an unbalanced flywheel would also resonate and get detected by by the knock sensor. ...or bad motor mounts... Anything that makes a sound.
Real knock will always be a sharp and sudden spike in the noise level of the motor. Without strapping the car on a real dyno and observing torque flattening off or some real time compression ratio monitoring inside each cylinder, there's no real way to determine if the motor is pinging. It's all a judgment call observing the raw knock voltage.
From a code stand point, there a bit more going on. Let's start with what exactly is knock sum?
We know the higher the number, the more dangerous the knock. Exactly what is it though?? Knock sum is nothing more than the number of ignition noise counts the engine noise level peaked above the limit. Basically, if you see a knock sum of 1, that means the engine got "noisier" than it should have for 1 cycle count. Sum of 15 means it was "nosier" for 15 counts.
BTW if you're wondering, the max number of Knock Sum counts the code will care about is 28 meaning the highest number you can log (assuming no garbage packets) for knock sum is 28.
So the question then becomes, how is the average engine noise calculated?
Let's start with the Knock sensor voltage. It ranges from 0-5V which translates between 0 and 255 in ECU language. This voltage after it passes thru or around the signal capacitor comes into the chip. The code does some basic min and max checking with this signal then gives it to a memory address the EVO guys refer to as KnockFilterADC. This is MUT request 6A which isn't in my public released EVOScan XML but if you wish to log it, you can (leave the scaling as X). It pretty much matches the knock voltage signals.
One request you might want to add is one called Knock Variation or KnockVar for short. This is simply the calculated average engine noise. Open up EVOScan, right click anywhere in the while space and select Edit Data Items. This will popup. Click Add New Item and fill out the box like I have shown here:
Next the code calculates a number the EVO guys refer to as Knock Base (which is logable in my EVOScan file). A better name for this number would be Noise or Knock Limit. Any time the KnockFilterADC (or knock sensor voltage) cross over this line, it's considered real knock and is added to the Knock Sum.
Add this code to your Chrome V2 XML (go ahead and delete most of the other "Knock" tables except the knock CEL and Octane ones). Future versions of Chrome will come with the XML setup with these.
Code:
<table name="Knock Signal Amplifier" category="Knock" address="10a46" type="2D" level="2" scaling="uint16">
<table name="X" type="Static Y Axis" elements="4">
<data>Multiplier</data>
<data>Triple Gain</data>
<data>Single Gain</data>
<data>MAX Knock Sum Count</data>
</table>
</table>
<table name="Background Noise Switch Points" category="Knock" address="10a62" type="2D" level="4" scaling="RPM31_16bit">
<table name="RPM" type="Static Y Axis" elements="2">
<data>Triple Gain -> Single Gain</data>
<data>Single Gain -> Triple Gain</data>
</table>
</table>
<table name="Knock Sensitivity RPM Switch" category="Knock" address="10a3a" type="2D" level="4" scaling="RPM31_16bit">
<table type="Static Y Axis" elements="1">
<data>Knock Sums below this RPM are disregaurded.</data>
</table>
</table>
<table name="Knock Sensitivity Load Switch" category="Knock" address="10a38" type="2D" level="4" scaling="Load8_16bit">
<table type="Static Y Axis" elements="1">
<data>Load switch point between the Low and High Knock Sensitivity Multiplier</data>
</table>
</table>
<table name="Knock Sensitivity" category="Knock" address="10a3c" type="2D" level="4" scaling="uint16">
<table name="Knock Sensitivity" type="Static Y Axis" elements="2">
<data>Background Noise High Load Multiplier</data>
<data>Background Noise Low Load Multiplier</data>
</table>
</table>
<table name="Sensor Fault Knock Sum" category="Knock" address="10a58" type="2D" level="4" scaling="uint16">
<table name="Knock Sum" type="Static Y Axis" elements="2">
<data>Knock Sum High Load</data>
<data>Knock Sum Low Load</data>
</table>
</table>
If you did it right, this should be what you see:
Bookmarks