One of the first little quirks I noticed right off the bat with this EFI system was a delay when the throttle was moved quickly off of the idle stop. With the original carburetor setup the off idle throttle response was much better. It is very annoying when down shifting giving the throttle a quick jab to help synchronize the shift and the motor just sits there and does nothing ! Sometimes it even lean backfires which can never be a good thing. I've lived with this for long enough.
Now that I've got the In Car Programing completed it is easy to setup special code sets to log data. The normal serial interface protocol is just too slow to get real-time data out of the ECM. Each byte takes about 1ms to transmit. With all the preamble and handshaking there isn't enough time between ignition events. To this end I setup a special code set that transmitted the key information needed to see what was actually happening. The data I felt I needed was TPS ADC, MAP ADC, PW, MAP triggered transient PW and Timing period. Because of the nature of the PW data word I was able to embed when the number one ignition event occurred. This took a total of 8 bytes and 8 ms. I can get real time data up to 1875 RPM where there isn't enough time to get the serial packet out before the next ignition trigger occurred. What I did there was just skip it till the next trigger came along. So you have to watch out above this RPM in the graphs because the time frame reference goes bad. The complete data files can be found on the High Speed Data page.
The below graph shows what I believe the problem is. Basically it boils down to being that the injectors are spraying in the future by the time motor gets enough fuel to start accelerating about eight complete strokes have occurred. At idle speed this is more than 100ms. Now 100ms may not seem like a long time but when you consider this motor accelerates from 1000 to 3000 rpm in 200-250ms a third of the time nothing is happening. Also note that the throttle is almost closed before the motor even starts to accelerate ! Take a look at the plot and it should be a little easier to visualize.
The scale on this plot is a little exaggerated.
The RPM is correct. PW - 1000 equals 10ms. TPS - 400 equals
ADC 40. MAP - 1400 equals ADC 140. Each tic marker is
an ignition trigger event. The alternating tic marks on the PW
trace (FUEL)
is
when a normal injector pair gets fired. The tic marks on the MAP
trigger transient (TRAN) trace are when the
alternate injector pairs fire. The numbers below the tics (like
8-7,2)
mean 8=TDC #8 7,2=firing injector pairs for cylinder
7
and 2. You can see when the throttle starts to move we happen
to be on a non firing cylinder (doesn't help much if we happen to be on
a firing event though). If we trigger an alternate spray here we
could get a head start on what needs to happen. The next ignition
event, 8-7,2 , will spray a bit more fuel than what is required
for idle but we are still 5 to 6 strokes away from getting it into a cylinder
and firing it off. Also it will be way too lean. Note that
the MAP delta has also triggered a transient spray on this cylinder putting
some extra fuel through the 6,5 injector pairs. A little
over a millisecond won't do us much good. Two more strokes go by
till we get to number 3-1,8 firing. Finally getting enough
fuel PW to make a difference. You can see that it is cylinder #1
that finally starts to accelerate the motor. A MAP triggered spray
also adds some extra fuel to the 7,2 cylinder but still not enough
to accelerate the motor.
Something else that is wrong here is that the 5-4,3
event should have triggered a transient spray. The reason it didn't
is another bug in the code. The MAP delta is supposed to be computed
from what happened 720 crank degrees in the past when the last time that
paired fired but in fact is compared to the last cylinder. This has
the effect of both not triggering the transient spray but also reducing
the magnitude of it. Both items we need more of to get quick response
from the motor.
The below table shows when a ignition trigger occurs
what cylinders are getting fuel and where in their cycle the spraying is
occurring. Now this table is only good up to about 1550 rpm or so.
That is the first injector phasing breakpoint. At that point they
all get shifted 90 degrees advanced. The table is a little busy but
it is the only I could figure to visualize what all the other cylinders
where doing at any point in time.
Crank Degrees | |||||||||
---|---|---|---|---|---|---|---|---|---|
Cylinder | 0 | 90 | 180 | 270 | 360 | 450 | 540 | 630 | 720 |
1 | TDC - Fire | Power | BDC | Exhaust | TDC | Intake | BDC | Comp | TDC - Fire |
8 | Comp | TDC - Fire | Power | BDC | Exhaust | TDC | Intake | BDC | Comp |
4 | BDC | Comp | TDC - Fire | Power | BDC | Exhaust | TDC | Intake | BDC |
3 | Intake | BDC | Comp | TDC - Fire | Power | BDC | Exhaust | TDC | Intake |
6 | TDC | Intake | BDC | Comp | TDC - Fire | Power | BDC | Exhaust | TDC |
5 | Exhaust | TDC | Intake | BDC | Comp | TDC - Fire | Power | BDC | Exhaust |
7 | BDC | Exhaust | TDC | Intake | BDC | Comp | TDC - Fire | Power | BDC |
2 | Power | BDC | Exhaust | TDC | Intake | BDC | Comp | TDC - Fire | Power |
1 | TDC - Fire | Power | BDC | Exhaust | TDC | Intake | BDC | Comp | TDC - Fire |
8 | Comp | TDC - Fire | Power | BDC | Exhaust | TDC | Intake | BDC | Comp |
4 | BDC | Comp | TDC - Fire | Power | BDC | Exhaust | TDC | Intake | BDC |
3 | Intake | BDC | Comp | TDC - Fire | Power | BDC | Exhaust | TDC | Intake |
6 | TDC | Intake | BDC | Comp | TDC - Fire | Power | BDC | Exhaust | TDC |
5 | Exhaust | TDC | Intake | BDC | Comp | TDC - Fire | Power | BDC | Exhaust |
7 | BDC | Exhaust | TDC | Intake | BDC | Comp | TDC - Fire | Power | BDC |
2 | Power | BDC | Exhaust | TDC | Intake | BDC | Comp | TDC - Fire | Power |
If the Delta MAP is over a certain threshold since
the last time a pair of injectors was fired (supposed to be 720 degrees
in the past but is broken in the code) and we are currently on a spraying
cylinder, the code will spray extra fuel early on an open Intake and an
Intake that is just about to open. This is to help transient response
by getting fuel into the motor sooner. Take for example if we are
currently TDC #8 we would be spraying fuel for cylinders #7 and #2 (the
Light Blue cells above). It will take the crank 540 degrees before
it sees that fuel. If a MAP induced transient is trigger it will
also spray in the intakes of cylinder #6 and #5 (the White cells).
The early fuel will be seen in 270 crank degrees. We can't get it
in there any faster (unless we go to directly spraying into the cylinder
like a diesel) than spraying on an open intake valve.
One short coming with this scheme is that they only
spray the MAP triggered transient fuel a maximum of every other ignition
event. Filling in the odd cylinders should help some (the Red cells
at 360 degrees advance). Also triggering this transient response
off of TPS movement hopefully will get the motor responding quicker to
off idle throttle jabs.
This below table show the problem why Delta MAP is not being computed correctly. L0044 is the cylinder index. L004b is the index into the MAP history stash (at L002b) for a potential transient injector firing. And L0045 is the injector index of the cylinder currently spraying. The Yellow rows are the proposed transient firings to fill in the gaps between the alternating sprays. You cans see if we happen to be spraying 7,2 will store the averaged MAP value for that pair the next test will be against the 7,2 MAP stash. Not much history stored here. Could have done it with a one byte solution rather than the lists and indexes if they wanted to actually do it that way.
Cylinder | Normal
Inj Pair |
Transient
Inj Pair |
L0044 | L004b | L0045 | Test/Store |
---|---|---|---|---|---|---|
2 | 6,5 | 7 | 4 / 2 | Store (L941A:) | ||
1 | 6,5 | 0 | 2 | 4 | Test (L923w:) | |
8 | 7,2 | 6,5 | 1 | 2 | $0C | Test |
8 | 7,2 | 1 | 2 | 6 / 3 | Store | |
4 | 7,2 | 2 | 3 | 6 | Test | |
3 | 1,8 | 7,2 | 3 | 3 | $0C | Test |
3 | 1,8 | 3 | 0 / 0 | Store | ||
6 | 1,8 | 4 | 0 | 0 | Test | |
5 | 4,3 | 1,8 | 5 | 0 | $0C | Test |
5 | 4,3 | 5 | 2 / 1 | Store | ||
7 | 4,3 | 6 | 1 | 2 | Test | |
2 | 6,5 | 4,3 | 7 | 1 | $0C | Test |
2 | 6,5 | 7 | 4 / 2 | Store |
05/11/00 -
Beginning to wonder if it is worth all the trouble
to try and increase the response. Run more experiments (wjabs5
- 04/30/00) where I double the MAP induced transient,
allowed it to be fired on every ignition event, and also trigger it if
the TPS was moved. Hardly was able to improve it much. In fact
almost got too much fuel and started to stumble rich. Think now a
better tact might be to put the MAP triggered transient back to every other
ignition trigger and to bump amount of fuel added to the normal PW as the
TPS is moved. Probably increase its sensitivity also. As long
as I can keep away from lean back fires the current throttle response is
livable. Actually better than what I originally started with because
of all of the other improvements made to the code. Also getting into
the Rod Run season so experimenting is getting harder to find time to do.