As everybody knows, there are two variables we can use for injector calibration, namely the injector constant, and the dead time.The last is also dependant on voltage, so we use a table for that one. Now during the iterative process we used to find the correct values for both,two things became apparent:
1. The injector constant has the biggest influence on AFR (obvious)
2. The dead time is also of significant influence on the resulting AFR
Apart from that it is important to realise that the influence the dead time has on AFR isn't constant with respect to injection time, while the injector constant is.If you think about this, this becomes logical because the dead time is a time constant, and the injector constant is a flow constant.In more simple terms:
-At idle, you have a low pulsewidth (low injection time), let's just say about 4 ms for example. If the dead time is 0.5 ms, then 12,5% of the pulsewidth is a result of the dead time.
-Now let's say you're cruising at a constant load on the highway, and the injection time is around 8ms for example. Now the dead time is still at 0.5 ms, but now only 6,25% of the pulsewidth is a result of the dead time.
-Finally let's say your engine is being pushed to a high load situation, and the injection time is about 20ms. Width a dead time still being 0.5 ms, only 2,5% of the pulsewidth is a result of the dead time.
Okay now why is this important? Well let's say you changed your injectors, and you don't know the exact dead times of those particular injectors, or you find some values on the internet and use them. Big chance those values don't exactly match with the actual values of the injectors you have. Now you go and drive your car and after a while the trims make sure to compensate for the error in the dead time. This correction is a constant, so it will only be correct for one particular pulsewidth value. Any other pulsewidth calculation will be off, so afr's will be slightly off and the system has to compensate a little again. Doesn't seem like a big deal, and maybe it isn't, but getting the dead time right will definately make for more consistent and stable fueling. Especially at partial load.
Back to the injector constant calculation.The current method is to calculate the constant from values that came from a stock bin, related to the stock injectors that came in that particular car. (blues if I'm not mistaken). At first glance this seems like a sound way of doing this, but there's a catch. When you do this, you are actually assuming the dead times of the new injectors are the same as those blue injectors. Why is this so?
Well, first let's establish that the dead times have a pretty significant influence on AFR's. While we where driving around iterating towards our optimal values, we experimented a little as well. At one point, while driving at a constant 60mph on a flat road, I made a change to the deadtimes (I believe of about .05 ms or so). The car began running lean immediately (fuel trims where disabled of course). The effect of that small change was immediate, and substantial. Knowing this, we can safely say that the dead times, and the injector constant are very much dependant on each other. So a significant part of the constant for those blue injectors is a result of their dead time. If you try to calculate a constant for other injectors (with a different dead time) from the original constant, you are actually also using the (wrong) dead time 'embedded' in the original constant. This is why you cannot use the original constant to calculate an accurate constant for your new injectors, and you certainly cannot use the original constant to calculate a flow rate for your new injectors. Your deadtimes just don't match.
Seems depressing doesn't it?
Well, it's not that bad, you can use the old method as a good starting point, and use your trims to refine your constant so your car will run fine. And there is also a GIANT upside to this story. The fact that the deadtime, and the constant are so dependant on each other is the whole reason that the iteration method works nicely to establish the right values for your individual car. From my experience, if your first 'guess' is not way off, you can probably find your values within a very small margin of error in just 3 iterations.After completing this process, the fuel trims are rock solid. LTFT-p is at 0,00, ltft-i is at -20 microseconds (which is just about 0 as well honestly).You can really feel the difference as well. So much smoother throughout the rpm range, Remember that the dead time has a different amount of influence on AFR depending on pulsewidth.. If the dead times are correct, then the fuel trims won't have to compensate for a non linear effect, and the engine will be running much smoother as a result.
-While iterating we discovered the ECU used mainly one cell in the dead time table, both while idling and while driving. Even when the fan, or the AC kicked in I never saw it deviate more than one cell, and only for a very short time. We simply filled in the same dead time in the cells at 13.00, 13.50, 14.00, and 14.50 volts. I don't think this will be problematic, as the ECU spends by far the most of it's time in one and the same cell.
-For fast spooling turbo's It's very important to change the lambda control threshold table. We changed every value above 4ms load to 4ms. So if the load reaches 4ms, the stft will be disabled. This will make sure the ECU won't try to reach stoich using the o2 sensor while the turbo is allready building boost. This will further stabilize the fuel trims, and will make sure the stft won't mess up your AFR while the turbo is spooling up (making it lean for a second).
I'll finish with some details about the exact method we used (I think it's a safe method if you're also using your brain, but use at own risk):
- Make sure you have a well functioning wideband!! - We used stock maps for this, I think this is optimal. (ofc with diagnostics disabled where required etc.) - Make sure your maf table is correct, or use the stock maf + table. - To start with, dial in your best guess of the injector constant (use old method for example) - If you happen to have some dead times, or estimates for them, dial those in as well.
-This works best if you have an ostrich. If you don't have one, it's still possible but time consuming. On the other hand, if you wont change injectors any time soon, it's well worth the effort imo! - In case of ostrich: make sure you have a partner in crime, either to drive or to make the changes. - disable the AC-disable the fuel trims, by setting all values in the lambda control threshold table (lower and upperbank !!) to 0. - make sure all of the trims are at 0. If they're not, pull the ECU to reset them. - dont use your turbo, it's counterproductive and you're running without trims! - always make small changes at first, to get a good feeling for what those values do. If nothing happens with a small change, try changing it a little further.
- Always change only one value at a time. Don't touch the injector constant while idling, and dont touch the dead time while cruising. (except if you want to experiment a little of course).
1. Let the car idle for a while to let it stabilize (this will take a minute or two and is very important! allways do with each iteration).
2. Wait till the fan turns off if its on, and observe your AFR (while still idling)
3. If it's too lean, or too rich, change the dead time until it runs 14.7.
- Fill in the same dead time in the cells at 13.00, 13.50, 14.00, and 14.50 volts for this.
- Make sure to be patient and give the engine time to stabilize after each change!!
4. Go and drive at a steady speed on a flat road (we used 60mph in 5th gear).
5. Observe the AFR, at a time the car isn't accelerating or decelerating. (the load should be constant)
6. If it's too lean or too rich, change the injector constant until running 14.7.
7. Repeat steps 1 to 6, and notice the changes you're making are converging to a balance.
When the AFR is at 14.7 (or close enough for your liking) both while idling and while cruising 60mph, you're done! Enable fuel trims again, by entering original values into the lambda control threshold table. (I do recommend changing all values higher than 4ms, to 4ms, for reasons stated above.) Be a little careful at first to see how the car responds to your new values.
Credit to venderbroeck for this excellent write up