This is the middle part of my fuel model talk from PRI in 2016, but I’ll also be discussing settings in the Modular ECU specifically in this article.
Firstly let’s discuss what happens in a transient throttle condition – specifically when you open the throttle. We have all driven cars with aftermarket ECUs with no consideration for what happens in a throttle transient condition and we know they feel awful, but to properly understand what needs to be done, we need to understand the physics of what’s actually happening in the engine and why we need to consider transient conditions in the first place.
The other consideration, once we know what happens in the engine, is what do we do about it. I’ve seen some other ECUs with up to 8 different tables to make different changes to the amount of fuel injected under transient throttle conditions, and often it’s not clear which one needs to be adjusted. They all interact and as I said in the talk about the steady state fuel model, if you need 8 separate tables with values that don’t relate to what the engine is doing, or that aren’t replicated across engines, then perhaps the model isn’t reflecting the engine very well.
There are 3 reasons that we need to deal with transient conditions on a port injected engine.
The first reason is that measuring MAP is hard. The manifold pressure changes throughout the engine cycle due to each cylinder or rotor doing its induction stroke. Here’s a picture taken from an inline 6 cylinder engine.
To get this signal smooth enough to be useful, this must either be filtered in the time domain or the angle domain, otherwise even at idle the MAP signal will jump around and so will your fuel delivery. One way you can do this is with a simple time based filter, which introduces a delay. Another way is with an average over an angle interval, in this case 120 degrees. A third way, which we don’t do but I’ve heard other people suggest, is to just take the MAP signal at a single angle so it’s at the same point in the wave each time. Both the angle-based methods introduce their own delays, in that the signal you are looking at could be up to 120 degrees old. At low engine speeds, for example idle, this could correspond to enough time for a throttle to open and air to rush into a cylinder that’s currently doing an induction stroke. So we need some way to estimate what the ACTUAL manifold pressure is, at least well enough to handle the transient condition.
A second problem is the fuel film or wall-wetting situation. Unfortunately on a port injected engine, when the injector delivers a certain amount of fuel, not all of it goes directly into the cylinder or rotor. A certain percentage ends up on the runner walls on a film (or “pool” or “puddle” if you like). This fuel isn’t wasted; it evaporates over time and gets drawn into the engine as fuel vapour. However it doesn’t go into the cylinder immediately; it has to form a film first which then evaporates over time. As the delivered fuel quantity changes with different loads, the steady state size of the fuel film also changes. Therefore if the ECU just starts to deliver the correct new fuel quantity, then a large portion of this fuel delivered will be taken up by “filling up” the film to its new steady state value. This is the key reason for needing what is often called “acceleration enrichment”. It’s not actually enrichment the engine needs; but the ECU needs to inject more fuel, just to get to the same air-fuel ratio, because of this fuel film effect.
The final problem is what I’m going to call the “gulp of air” problem. In many situations, the fuel is injected before the inlet valve is opened because of how the injection timing is set. On a 4 cylinder engine, one cylinder will always be doing an induction stroke whenever you open the throttle, which means that one cylinder is always going to have inadequate fuel delivered if it was delivered before the throttle was opened – the ECU would need a crystal ball to be able to predict when you were going to open the throttle, at least on a mechanical throttle system. So the ECU needs a way of delivering an additional squirt of fuel to chase down the air, and this is called an asynchronous injection pulse. It’s asynchronous because it happens out of the sequence of the regular fuel injection pulses, which are timed with the engine rotation.
Let’s first talk about the first problem, which is the filtering required on the MAP signal slowing it to the point where it becomes a problem for transient throttle conditions. I don’t know how other ECU manufacturers get around this problem, other than the method I described before of having 8 different tables for the amount of fuel enrichment to provide based on certain throttle opening percentages and rates. The reason we don’t want to do that is firstly we used to do that, and it was fiddly to set up and didn’t give very good results. Secondly, it’s not a very good model of the system. If you imagine an engine at idle, the MAP might be about 30 kPa. If you suddenly open the throttle all the way, the MAP will jump up to 100 kPa as quickly as you can move the pedal. However if the MAP sensor has not responded appreciably due to the filtering, then you would need a 200% enrichment to deal with this situation. If you’re needing 200% enrichment to reach the correct value, it means you’re starting with the wrong value in the first place. And lastly, if someone had to change their MAP filtering because of some unstable reading on boost or whatever, it would change what you’d need to enter in the acceleration enrichment settings, when nothing on the engine has changed.
The way we do it instead is we have a model of the engine’s MAP at different RPM and TPS combinations. The Predicted MAP table is visible under the fuel tuning, transient corrections section, and this is a table of the actual MAP value that you would get under each RPM / TPS combination. On a dyno it’s very easy to fill out manually, and there’s an adaptive MAP prediction setting where the ECU will learn the predicted MAP value as you reach each condition. When the ECU detects a rapid throttle opening, it looks at the greater of either the predicted MAP, or the measured MAP from the sensor, for a fixed amount of time called the “transition time for MAP prediction” under the basic setup. You can also disable MAP prediction entirely on this page if you want to.
The other setting relevant to the MAP prediction is the throttle sensitivity, which is how fast the throttle has to be opened, to trigger MAP prediction. If you click on the button for the throttle sensitivity table, you can see the threshold rates (in %/second) required to trigger the MAP prediction at each TPS opening point, and the live view at the bottom tells you the current TPS rate. So you can play with the pedal yourself and visualise what numbers you get with different rates of pumping the throttle, if the numbers themselves aren’t clear.
Once you’ve entered the MAP values at each RPM / TPS combination, you can check that it’s working correctly under different conditions by either logging or using a live log view of the IMAP or intake manifold absolute pressure. When you do a throttle transition, you should see a step change in the IMAP because of the MAP prediction and it should transition pretty smoothly to the steady state value from the MAP sensor. If it’s very slow to rise then either the predicted MAP value is too low, or the throttle sensitivity is too high so it’s not triggering the MAP prediction. If it jumps high and then comes back down with a step when the MAP prediction time is over, then that means your predicted MAP value is too high for that RPM / TPS combination.
Now let’s talk about the fuel film phenomenon. This is the way we prefer to handle transients, and the way to enable it is in the transient throttle basic setup, to select the transient mode as “use fuel film model”. The theory of this was explained in a youtube video by an ex-Ford engineer Dr Jim Cowart (https://www.youtube.com/watch?v=0ItkpVofKLw), and he describe the “X-Tau” model, where X is the percentage of fuel that ends up on the runner walls in a flim, and Tau is the time constant for it to evaporate. He describes that X is mostly dependent on coolant temperature and to a lesser extent manifold pressure, whereas Tau is mostly dependent on RPM and to a lesser extent, manifold pressure. In our software we call it “fuel pooling” and “evaporation time” to make it a bit more easy to understand and remember.
Dr Cowart mentioned in his video that the Ford Duratec engines he was calibrating had X of about 30%, and Tau of about 400ms at idle. I’ve found with most Japanese engines that X is only about 15% with standard injectors – although if you have a narrow spray pattern injector like an Injector Dynamics one, and a dual inlet valve head, then often the injector stream points right at the divider wall between the two runners, and a lot of fuel ends up on the divider. This has the effect of increasing X; so an engine that might be 15% on factory injectors might increase to 40% or so with upgraded injectors.
If we take Dr Cowart’s example, let’s further assume the engine requires 10mg of fuel per induction stroke at idle, and 40mg at WOT.
If X = 30%, that means that out of the 10mg injected, 3mg goes into filling up the film, and 3mg worth of film evaporates and gets sucked into the engine, in the steady state. The fuel film remains the same size, and 10mg still gets injected into the engine.
We open the throttle to wide open from idle. We know that we need 40mg to go into the engine, but if the ECU delivers 40mg, then only 70% of that, or 28mg goes straight into the engine. The other 30% or 12mg goes into the fuel film, and 3mg evaporates from how big the fuel film was before. So the engine gets 31 mg of fuel instead of 40.
So instead the ECU calculates that the engine needs 40 mg of fuel. It knows, based on the model of the fuel film, that it has enough fuel film to deliver 3mg of fuel. Therefore it needs to inject enough fuel the 70% that will go into the cylinder will equate to 37mg. This means the ECU needs to inject 37 / 0.7 = 53mg – and the other 16mg will go into building up the fuel film on the runner wall.
Another way to think of this is an “enrichment” of 32%.
This technique, according to Dr Cowart and also our own testing, works really well for hot engines, cold engines, different throttle opening rates, vacuum boost, engine size, injector type and all the other things that are built into the model.
In terms of the values for X and Tau settings, I watched the video and waited for the punchline which was how to determine what X and Tau should be… and unfortunately they need to be determined empirically. Ie, they need to be tuned. Sorry!
For this to work, firstly disable the asynchronous injection because that will complicate things. Secondly try to set the injection timing so that the throttle response is best (even though it won’t be great).
X is the amount of fuel that ends up on the runner walls. So if you increase this, it will increase the additional amount of fuel the ECU will inject. So if it’s lean when you first open the throttle (eg for 200ms or so), then increase X.
If it goes rich and then lean, then that probably means that X is too high but the time is too short. If it goes correct, but then lean, then X is probably about right but the time is too short. If it’s correct and then it goes overly rich, then try reducing the time.
In general Tau or the evaporation time reduces with RPM. Times are normally in the region of 0.15 – 0.4 seconds at idle. I haven’t found it changes appreciably with manifold pressure.
X, or the percentage fuel pooling, varies with coolant temperature because it affects the temperature of the runner wall and therefore how much fuel condenses. As I mentioned before, a well set up engine like an OEM one in my experience requires X about 15% when hot and slightly more when cold (eg 25%), but with people putting on aftermarket injectors with spray patterns not matched to the engine, this can go up to 40% or so on even a warm engine.
The last topic we will discuss is the asynchronous injection, to deal with the “gulp of air” issue. Firstly, sometimes people say things like “well, how fast can the air really move anyway, it’s got to get all the way from the throttle body, fill up the plenum and into the cylinder”. If you have a pressure drop with a ratio of more than 2:1, which you would on most engines at idle, the air actually goes sonic through the restriction, ie at the speed of sound. The speed of sound at atmospheric pressure is about 300m/s, so to travel the distance between the throttle body and the cylinder, which unless you have a supercharged Lotus will be less than a metre, we are talking about a few milliseconds.
I explained the theory behind it before in the introduction, so let’s look at an example. Let’s choose the example before where we have an engine at idle which needs 10mg at idle, and then 53mg to be injected immediately after we open the throttle. If we’ve done a closed-valve injection, then we’ve already done the injection pulse before we knew how big it needed to be. So instead we will do an asynchronous injection pulse to make up the difference. In this case, the difference that we need to make up is 43 mg.
Whether we actually need to do this 43mg, or a slightly higher or lower amount, depends on injector timing, injector placement and other factors.
The normal way we do this is by selecting the Async mode as being “automatic async”. Then, we have an async gain map where we can adjust the amount of asynchronous injection burst, relative to coolant temperature and RPM. Often at lower temperatures, more async is required, up to 200% with E85 for example – and at higher engine speeds, less async is required.
The map is called the asynchronous gain. In the above example, the ECU worked out that there was a shortfall of fuel delivered of 43mg. If you set the async gain to 100% at the current RPM and temperature, then that would cause the ECU to deliver a new pulse from the injectors that corresponds to 43mg worth of fuel. If you had set the async gain to 200%, then the ECU would inject 86mg of fuel with the async pulse. You can see that this is working on the async value in the gauges.
The best results are obtained by setting the async gain to zero, and adjusting the injection timing to optimise the response without async, optimising X and Tau and then using the async function to get the last little bit of response.
The above description should be sufficient and so far this has worked well. However if you do prefer to handle the transient conditions manually, instead of with a model, then you can also do this.
Firstly, you can set the fuel film model to “manual enrichments”, and this disables the fuel film modelling and adjustments to the fuel requirements of the engine based on transients. If you want to make corrections for transients, which you will, they will need to be done using the manual enrichment table.
To activate the manual enrichment table, you must select the checkbox in the basic setup. This gives you three more maps; enrichment time, enrichment amount and enrichment multiplier.
The enrichment amount is the basic table, which gives your percentage enrichment as a function of throttle position and RPM. The ECU calculates a delta of this, for example if you have 0% at TPS=0, and 40% and TPS =50%, and 50% at TPS =100%, then when you go from closed throttle to 50% throttle, you will have 40% enrichment, and then if you go from 50% to 100%, after the first enrichment has finished, you will have an additional 10%.
The enrichment multiplier table is based on engine speed and coolant temperature and allows for the fact that engines generally may need more enrichment, even as a percentage, at lower coolant temperatures. This is a multiplier, so most of the time this table should be at 100%, but if you want to add another 20% of enrichment at a certain coolant temperature, you would enter 120%.
The final setting is the enrichment time, which is another map you can adjust if you want to do it manually.
Note that you can also use this in conjunction with the fuel film model if you wish to; it just shouldn’t be necessary in theory.
Another transient setting you can enable is the RPM rate correction table. This table is based off RPM and load, and the value is the percentage enrichment at an RPM rate of 1000 RPM/second. For example, if you wanted the ECU to always enrich by 6% for a rate of 1000 RPM/second, across all RPM and load conditions, you would fill the table with 6%. This also means that at 500 RPM/second RPM rate, you would get a 3% enrichment, and 2000 RPM/second would give you a 12% enrichment. Again this condition should in theory be handled by the fuel film model but it’s here if you want to set it manually.
There is also a manual asynchronous mode which can be enabled, but when done so it is itself in milliseconds, not percentage or milligrams or microlitres. When this setting is enabled, you have 2 new tables; Async (RPM/ TPS) and Async (RPM / ECT). These two are multiplied together. So for example the RPM/ECT map would normally be set to 100% everywhere, except slightly higher as required at the lower coolant temperatures, and the RPM/TPS map would be your main millisecond based asynchronous pulse map.
In general we don’t recommend these manual modes, because the results are often too specific to one engine or installation, and they aren’t replicable to other engines. On the one hand it prevents us from making a good starting point because of this, and secondly it means that when people do contact our support people for help, we have no way of seeing if the table is right because it’s so specific to each engine.
Please see my other videos on steady state fuel calculation and also the injector model to gain a complete understanding of how the fuel calculations work inside the ECU.