Hello all, in this article I’ll describe the fuel model in the
Modular ECUs. This is based on a talk that I gave at PRI in
2016, but in this talk I’ll talk specifically about where the
settings are for the Modular ECU. In this talk I’m only talking
about steady state tuning. However you need to understand this
to be able to learn about transient fueling, and injector
modelling. So if you like this is the first part of my PRI talk,
but with specific reference to the Modular ECU settings.
We’ve all seen the famous Greg Banish, Calibrated Success
T-shirt which you can buy from Summit Racing, and I’m wearing
mine now actually. I’m not sure I understand whether Mr Banish
was expressing frustrating saying that it’s simple, why don’t
people understand it – or if he’s making a joke and saying that
actually there are many different terms in this equation, and if
you don’t understand them all then you can get lost quickly. But
either way, if it looks intimidating to you now, you’ll
understand it in about twenty minutes so don’t worry.
Let’s talk firstly about the way that we and other ECU
manufacturers used to do things, and hopefully you’ll see why
we’ve changed to a proper fuel model now. Firstly, what is the
purpose of the injector control in the ECU? It’s to get the
right amount of fuel into the engine, to achieve a particular
lambda…. when the tuner isn’t there to correct it! That means
that we’re trying to control the injectors and deal with all the
different conditions that will occur that will affect the
lambda, if we don’t care about them.
The fuel requirement of an engine varies mostly with manifold
pressure, and to a lesser extent it varies with RPM. The obvious
way is therefore to have a table of millisecond values as a
function of both MAP and RPM, and we’d call this a fuel map. And
this works quite well, so long as all the other variables are
constant.
So which variables are not included in this calculation, and
we’re assuming are constant, but actually are not constant? When
I did this at PRI I let people call them out and I threw Tim
Tams to people who answered, but I can’t do this here so I’ll
just tell you the list I came up with:
Temperatures – coolant, air, fuel
Fuel pressure
Battery voltage
Fuel composition (ethanol vs petrol)
Injector type
Now, I realise that the Injector Type isn’t really a variable,
because it’s supposed to be something that’s installed on the
car before you do a tune. And there is some case to say that it
would be nice to be able to change injectors and not have to do
a complete return. But that’s not the main point. The main point
is that often tuners tend to specialise in particular engine
types, and end up developing a decent library of maps for these
engines in which they specialise. However often they don’t get
to choose the injectors on the engine when they have to tune it,
so they don’t get to use one of their maps from their library
because the milliseconds are all wrong.
So to deal with these variables, what ECU manufacturers
(including us) used to do is to add in “compensation tables” for
all of these variables. For example to deal with battery voltage
changes, old ECUs had a “battery voltage compensation table”
where you could enter a number of milliseconds to add to the
injector duration as a function of battery voltage.
Now, as a tuner, how do you know how to set this table? How many
tuners are going to run the EFI system off a variable power
supply and wind it up and down, adjusting the table so that the
AFR at idle is constant? I don’t know many tuners who would do
that.
Similarly for temperature changes, you have separate tables for
coolant temperature and air temperature, which makes life very
complicated. How do you know if it’s the air or the coolant
table which is wrong, for example? In general the more
correction tables that you have, the harder it is to know which
table needs to be adjusted, and the longer it takes. And to be
honest, if you have all these compensation tables to account for
incorrect assumptions you’ve made about other variables being
constant, maybe your model isn’t that good in the first place.
As in, maybe having a millisecond map against RPM and MAP isn’t
the right way to do it.
So let’s go back to chemistry and physics and work it out from
first principles instead of making these assumptions.
This is just the definition of an Air-Fuel ratio, and the
definition of Lambda.
The top one is called the Ideal Gas Equation or Boyle’s Law, and
it’s given by the pressure times the volume equals the number of
moles times the ideal gas constant times the temperature. Note
that the pressure and temperature in this equation are absolute
temperature and pressure.
The second one is the conversion between number of moles into
mass, based on the molecular weight of the gas. A mole is
defined as approximately 6.022 x 10^23 molecules in this case.
We don’t count the molecules, we just work it out from the
weight and knowing what air is made of.
This is the definition of volumetric efficiency. It’s given by
that Greek letter Neta, which looks like n, which is the
thermodynamic symbol for efficiency, and it’s given by the ratio
of the effective volume of air that travels through the inlet
valve into the cylinder, if it was the same pressure as in the
manifold, divided by the swept volume of the cylinder. In
practice of course the volume expands or compresses to fit in
the cylinder anyway, so it’s the pressure that changes, not the
volume, but volumetric efficiency is a way to think of it.
You can see now that we’ve essentially arrived at Greg’s T-shirt
equation. There’s a scaling difference of 1000 in there, so I
assume that’s because he’s calculating fuel in grams instead of
the SI unit of kg or something like that.
Now, let’s go over all the variables again and see how we can
measure or know what they are.
Mfuel is what we’re trying to calculate
MAP is something that we can measure directly with a MAP sensor.
To learn more about how you can measure this accurately, see the
video on configuring inputs because there are some funky
requirements regarding filtering, because the MAP is not
constant throughout a cycle.
VE is something we can look up from the fuel map. This replaces
our millisecond fuel map. Please see my tuning modes video for a
more detailed discussion of VE, what affects it on different
types of induction systems.
Vcyl – cylinder volume, the ECU knows this at setup time because
of the engine capacity and number of cylinders.
T – the air temperature, is taken as a blend between air and
coolant temperature; I’ll do a separate article just on that
topic.
Lambda, is the lambda that we want, so that just comes from the
target lambda table
AFRstoich comes either from an ECU setting, or is calculated
from measurement from a flex fuel sensor.
There should be some implications of this formula. For example
if you double the manifold air pressure, then all other things
being equal, the amount of fuel you need to inject every intake
stroke will approximately double. Sometimes people ask questions
like “why does the VE map look so flat, why doesn’t it increase
a lot with boost”, but it should be obvious when you see this
formula.
Another question we get asked is, if I change the target lambda,
will the ECU change the amount of fuel injected. And again, you
can see from this formula that the answer is yes.
This formula also means that in theory, your temperature
correction maps should be zero, because they are supposed to be
handled by the formula. And in practice, I have always left them
at zero so far, and it works well because the model is accurate.
Let’s look now at how this is all set up in the ECU. There are
separate videos / articles on each of these topics so I’ll just
tell you where all the settings are here.
Engine capacity and number of cylinders (or rotors) are both set
up in Engine -> Details.
The stoich AFR is set up in the fuel map settings, for example
Tuning – Fuel -> Basic Setup –Fuel Map 1 Settings. This
location also allows you to set how the VE fuel map is
configured, and also where the VE mode setting is located.
There’s another article specifically about tuning modes, how to
set up the load axis for fuel maps based on the type of
induction system on the engine.
Target lambda can be found in Tuning-Fuel -> Target Lambda
The temperature is taken from the coolant and air temperature
sensors. By default, we use the manifold heat soak % mode which
uses a blend of the two. This is enabled in the Tuning-Fuel
-> Basic Setup -> Tuning Modes page, and the heat soak
percentages can then be found in the Tuning-Fuel ->
Temperature Correction -> Manifold Heat Soak %. This is the
amount of weight to give to the coolant temperature, eg 100%
means that there’s so much heat soak that by the time the air
gets into the engine, its at engine temperature and the original
air temperature doesn’t matter at all. 0% heat soaks means that
there’s no effect on the air temperature by the engine
temperature at all, which never happens in practice.
MAP and temperature inputs are configured in the Inputs menu,
and there’s other article that talks about those specifically.
This doesn’t get you all the way to the injector millisecond
value though, it gets you to the fuel mass. There’s a separate
article on this, which includes the injector model, minimum
pulsewidth or fuel delivery, the effects of fuel pressure and
fuel temperature and so on. This also does not discuss transient
conditions which is done in another article.
Finally, the ECU reports a lot of its intermediate calculated
values. So you can see things like the actual VE read from the
table, and the calculated stoichiometric AFR, the calculated
charge temperature and so on by going to the gauges window and
expanding the “intermediate calculated value” section.
You can also see this diagrammatically by going to the
Diagnostics -> Calculation Trace. The main fuel display
shows the whole fuel calculation which is quite large, but you
can click on individual sections in it to go into more details
of the calculation. This also works with the software simulator.