Notices
ECU Flash

Individual cylinder knock test - initial results

Thread Tools
 
Search this Thread
 
Old Apr 20, 2009 | 05:05 AM
  #1  
jcsbanks's Avatar
Thread Starter
Evolved Member
 
Joined: May 2006
Posts: 2,399
Likes: 6
From: UK
Individual cylinder knock test - initial results

It doesn't do it as standard, but can be persuaded to. At the end of the knock sum routine there is a variable stored which is "increase in knock sum". I made it run a bit of code:

Code:
mov.l (cylindexbyte),r0
mov.b @r0,r0
extu.b r0,r0
and #3,r0
mov.l (storeadr),r1
add r1,r0

mov.l (knocksumincreasebyte),r1
mov.b @r1,r1

mov.b @r0,r2
add r1,r2
mov.b r2,@r0

mov.l (return),r0
jmp @r0
nop

cylindexbyte:
.long 0xffff70cf
knocksumincreasebyte:
.long 0xffff7b51
storeadr:
.long 0xffff6600
return:
.long 0x0000b8a6
This code adds the increase in knock sum for that cylinder event to a running total for that cylinder. I store the values at FFFF6600,1,2,3 and then logged then with MUT 2,3,4,5 along with knocksum and other data.

You can see the asymmetry between the cylinders. Each time you see an increase in knock sum (blue) you can see which cylinder it was on, and I don't decay it like the knock sum. If it gets to 255 it will wrap around to zero. When the key is turned off for more than 10 seconds, the counters reset to zero as I put them in an area of RAM that gets cleared in this situation.

I filled with V-power rather than usual Tesco 99 (knocks slightly more on the same map), and it is a warm day and I had the A/C on. The single knock sum of 4 was a lift off, the other 0-3 range is satisfactory, or in the sweet spot IMHO. If I could just retard the cylinder marked as knock3 I think I could get better symmetry, more power and/or more safety. One cylinder shows no knock sum at all.

I believe that knock0 occurs when cyl1 is near TDC (5 deg BTDC), knock1 when cyl3 is near TDC, knock2 when cyl4 is near TDC, knock3 when cyl2 is near TDC. However, the knock sum is calculated from the noise above threshold on the previous cylinder, and knock sum I think is triggered off the rising edge of CAS, but the cylinder index I think is triggered off the falling edge of CAS.

So the bad cylinder MAY be Cylinder #3 or #4, and at present it is difficult to be sure. However, the asymmetry between cylinders suggests that further work would be beneficial. I think I have a way to selectively retard cylinders, so we'd soon see whether we'd matched the right cylinder when we repeat the log.
Attached Thumbnails Individual cylinder knock test - initial results-indivcylknock.png  
Reply
Old Apr 20, 2009 | 08:32 AM
  #2  
wreckleford's Avatar
Evolved Member
iTrader: (2)
 
Joined: Jun 2003
Posts: 1,171
Likes: 11
From: Jamaica
Nice work John. This is sort of an aside, but it is something that i have thought about often but never asked. Since 1 knock count equals about 1/3 of a degree, does the ECU think in terms of fractions of a degree and if so would it be possible to have greater granularity in our timing maps?
Reply
Old Apr 20, 2009 | 08:49 AM
  #3  
jcsbanks's Avatar
Thread Starter
Evolved Member
 
Joined: May 2006
Posts: 2,399
Likes: 6
From: UK
Yes.
Reply
Old Apr 20, 2009 | 09:01 AM
  #4  
jrohner's Avatar
Evolving Member
 
Joined: Oct 2008
Posts: 160
Likes: 0
From: Willmar MN
I wonder if the knock prone cylinder would switch if you swapped the injector from the cylinder that knocked the least (or never) with the one that knocked the most or if it's just that way because of design of the IM, fuel rail, cooling system, timing off a fraction of a degree between cylinders, etc.
Reply
Old Apr 20, 2009 | 09:48 AM
  #5  
jcsbanks's Avatar
Thread Starter
Evolved Member
 
Joined: May 2006
Posts: 2,399
Likes: 6
From: UK
Good point. Some say it is the exhaust manifold, in the UK they say #3 is lean and recommend a tubular manifold at 500 BHP.

I will test under load tomorrow, but I now have a trim table in RAM. Where the arrow is, one cylinder was retarded 3 degrees at idle.
Attached Thumbnails Individual cylinder knock test - initial results-3degretard.png  
Reply
Old Apr 20, 2009 | 10:55 AM
  #6  
mrfred's Avatar
EvoM Guru
iTrader: (50)
 
Joined: Mar 2006
Posts: 9,675
Likes: 132
From: Tri-Cities, WA // Portland, OR
I had always wondered if the frequency of the engine control loop was high enough to sample individual cylinders. So you're sure that it is? Or does the ECU use an interrupt to perform critical measurements at specific crank angles?
Reply
Old Apr 20, 2009 | 10:58 AM
  #7  
fostytou's Avatar
EvoM Community Team
iTrader: (15)
 
Joined: Sep 2006
Posts: 3,143
Likes: 7
From: Aurora, IL
Great work! I agree with the injector idea, I've always been thinking that also. (and wondering weather manifold or something else played a part).

Last edited by fostytou; Apr 20, 2009 at 11:21 AM.
Reply
Old Apr 20, 2009 | 11:02 AM
  #8  
jcsbanks's Avatar
Thread Starter
Evolved Member
 
Joined: May 2006
Posts: 2,399
Likes: 6
From: UK
Originally Posted by mrfred
I had always wondered if the frequency of the engine control loop was high enough to sample individual cylinders. So you're sure that it is? Or does the ECU use an interrupt to perform critical measurements at specific crank angles?
There are 100 and 800Hz control loops, but the knock, injector, ignition stuff is on every CAS interrupt, code I'm changing here is all interrupt based.
Reply
Old Apr 20, 2009 | 11:18 AM
  #9  
jcsbanks's Avatar
Thread Starter
Evolved Member
 
Joined: May 2006
Posts: 2,399
Likes: 6
From: UK
To add individual cylinder trim needs only 2 nops and a change of a pointer.

Code:
ROM:000257C0 loc_257C0:                              ; CODE XREF: sub_256B0+52j
ROM:000257C0                                         ; sub_256B0+F2j
ROM:000257C0                                         ; sub_256B0+F8j
ROM:000257C0                                         ; sub_256B0+10Aj
ROM:000257C0                 mov.l   @(h'29C,pc), r0 ; [00025A60] = accelflag?
ROM:000257C2                 mov.w   @r0, r0
ROM:000257C4                 tst     #8, r0          ; 0 when not running, 17 at idle/overrun, 1 on throttle
ROM:000257C6                 nop                     ; nop
ROM:000257C8                 mov.l   @(h'290,pc), r0 ; [00025A5C] = casflag4?
ROM:000257CA                 mov.w   @r0, r0
ROM:000257CC                 tst     #1, r0          ; set when running, clear when not
ROM:000257CE                 bt      loc_257F8
ROM:000257D0                 mov.l   @(h'28C,pc), r0 ; [00025A60] = accelflag?
ROM:000257D2                 mov.w   @r0, r0
ROM:000257D4                 tst     #h'20, r0       ; set if over 7000 RPM
ROM:000257D6                 nop                     ; nop
ROM:000257D8                 mov.l   @(h'290,pc), r0 ; [00025A6C] = CASINDEX
ROM:000257DA                 mov.w   @r0, r0
ROM:000257DC                 extu.w  r0, r0
ROM:000257DE                 mov.l   @(h'284,pc), r10 ; [00025A64] = unk_FFFF8CD0 ; change to FFFF8cd0
ROM:000257E0                 mov.b   @(r0,r10), r11
ROM:000257E2                 extu.b  r11, r11
ROM:000257E4                 add     r11, r2
ROM:000257E6                 bra     loc_257F8
ROM:000257E8                 nop
Reply
Old Apr 20, 2009 | 12:24 PM
  #10  
03whitegsr's Avatar
Evolved Member
iTrader: (8)
 
Joined: Nov 2006
Posts: 4,001
Likes: 17
From: Utah
You are the man!

The gap between standalone and OEM ECU is almost invisible now because of the hard work of you and others.

Oh wait... I guess there is a big line between the two... about $1500 for an AEM and $80 for a cable to work with the OEM ECU.
Reply
Old Apr 20, 2009 | 02:34 PM
  #11  
Oracle1's Avatar
Evolving Member
iTrader: (1)
 
Joined: Nov 2005
Posts: 425
Likes: 0
Well done Dr Banks. You are full of surprises!!!
Reply
Old Apr 20, 2009 | 03:10 PM
  #12  
Toxin's Avatar
Evolved Member
iTrader: (2)
 
Joined: Jan 2008
Posts: 1,595
Likes: 2
From: Way ahead...
You're a god.
Reply
Old Apr 20, 2009 | 04:07 PM
  #13  
THUB's Avatar
Evolved Member
iTrader: (5)
 
Joined: Jun 2007
Posts: 552
Likes: 0
From: Lombard IL
It's absolutely amazing that you can do this and my mind is pretty thoroughly boggled, no doubt, however, given repeatable results with this, how do we actually utilize the results? does that mean we need somebody with four WBO2 sensors and an endoscope to try to find a root cause? Can we change individual cylinders' fueling? Will that actually give us anything useful? I'm not being argumentative I just want to learn something.
Reply
Old Apr 20, 2009 | 04:15 PM
  #14  
dan l's Avatar
Account Disabled
iTrader: (3)
 
Joined: Apr 2006
Posts: 1,029
Likes: 0
From: USA
Originally Posted by fostytou
Great work! I agree with the injector idea, I've always been thinking that also. (and wondering weather manifold or something else played a part).
A good set of injectors should be flowed to well within 2% and usually 1% across the duty cycle range. Whereas the very good stock intake manifolds are off by double and triple that amount. I have a feeling it is designed like this however. In the end though I have noticed it is always one of the center two cylinders that get taken out. I have my theories but suffice it to say it is independent of fuel injector placement. I'm not saying it isn't worthwhile, just stating the end results of the motors that I have damaged and the ones that I've seen damaged.
Reply
Old Apr 20, 2009 | 04:19 PM
  #15  
nothere's Avatar
Evolved Member
iTrader: (23)
 
Joined: Jan 2004
Posts: 2,680
Likes: 1
From: Bellevue. WA
to thub,


you can keep the general timing near optimum while helping out a knock prone cylinder with lower timing. three quarters of your motor is making more power than if every cylinder is held to the weakest one.

You could also try a tiny bit fatter injector in the knocking cylinder
Reply



All times are GMT -7. The time now is 03:32 PM.