SIMK43 Fuel & Injector Control Model
This document describes the fuel-quantity and injector-control model used by the Siemens SIMK43 software in calibration ca663056.
The important architectural point is that SIMK43 does not fundamentally calculate fuel by selecting an AFR from a conventional RPM/load table. Its primary calculation is an air-mass-to-injection-time model.
The airflow/load model first produces the final cylinder air charge. The fuel model then converts this quantity into a basic injector duration, corrects that duration for steady-state engine behaviour, changes it according to operating mode, applies lambda/adaptation and transient wall-film corrections, limits the hydraulic pulse, adds injector electrical delay and finally passes the electrical pulse width to the injection-phase scheduler.
Index
General Fuel-System Architecture
The normal-running fuel calculation can be divided into the following major stages:
AIRFLOW / LOAD MODEL
|
v
CC30
cylinder air charge
|
v
C_TI_FAC
|
v
BASIC INJECTION TIME
|
v
BASIC TI CORRECTION MODEL
|
+--------+--------+
| |
v v
normal / idle alternate strategy
IP_TI_COR IP_TI_FL
IP_TI_COR_IS IP_TI_NOT_CAT
| |
+--------+--------+
|
v
CD78
corrected basic injection time
|
+----------+----------+
| |
v v
fuel control / wall-film
adaptation model
| |
| fast + slow film
| |
| C936 / C968
+----------+----------+
|
v
FINAL TI BUILDER
|
v
C_TI_MIN
|
v
HYDRAULIC INJECTION TIME
|
v
IP_TI_ADD_DLY__VB
|
v
ELECTRICAL INJECTION TIME
|
v
SOI / EOI SCHEDULER
|
v
PER-CYLINDER OUTPUT
Starting and cranking use a separate initial-fuel path. Once the engine is running normally, the cylinder-charge-based model becomes the main fuel source.
Internal Injection-Time Domain
The core SIMK43 fuel calculation uses a 16-bit injection-time representation with a resolution of:
1 count = 0.004 ms
This resolution appears consistently in:
- minimum injection time;
- additive fuel adaptation;
- start injection-time maps;
- wall-film injection-time corrections;
- final hydraulic injection time;
- final electrical pulse width.
Thus, for a normal unsigned injection-time word:
TI [ms] = raw * 0.004
and for a signed correction:
TI_COR [ms] = signed(raw) * 0.004
The injector electrical-delay table is stored at a coarser:
0.032 ms/count
but the executable converts its output into the normal 0.004 ms domain before adding it to the injector command.
This distinction between hydraulic duration and electrical duration remains present all the way to the final injector scheduler.
Input From the Airflow Model
The starting point of the normal-running fuel model is RAM variable:
CC30
The previous airflow/load reconstruction established `CC30` as the final cylinder-air-charge quantity selected by the airflow model.
The fuel routine at approximately:
ROM 0x847B54
immediately loads `CC30` and combines it with the calibration constant `C_TI_FAC`.
The basic relationship is:
TI_BASE = CC30 * C_TI_FAC
The fuel model therefore does not independently estimate air mass from throttle position.
Instead:
MAF sensor / modeled airflow
|
v
cylinder-charge model
|
v
CC30
|
v
fuel calculation
So any systematic error in the selected cylinder charge propagates directly into basic fuel delivery.
Primary Air-Mass-to-Fuel Conversion - C_TI_FAC
The primary conversion constant is:
C_TI_FAC BIN address: 0x1075E Units: ms/(mg*TDC)
The ca663056 executable accesses this constant directly when the normal fuel routine begins.
The stock calibration contains approximately:
C_TI_FAC ~= 0.1350 ms/(mg*TDC)
Thus:
air mass per cylinder event
|
v
C_TI_FAC
|
v
basic injector time
`C_TI_FAC` is therefore the principal global injector/fuel scaling constant.
It is important to separate its function from later fuel-correction maps.
`C_TI_FAC` establishes the basic relationship between calculated air charge and required injector flow time
The later maps do not replace this conversion. They modify the result.
The ca663056 XDF injector-scaling patches also treat `C_TI_FAC`, `C_TI_MIN`, dead time and start fuel as separate objects, which matches their separation in the executable.
Basic Injection-Time Correction
After producing `TI_BASE`, SIMK43 does not immediately continue to final injector output.
A steady-state correction factor is applied.
Two maps exist:
IP_TI_COR__N__MAF IP_TI_COR_IS__N__MAF
The choice depends on the operating state.
IP_TI_COR__N__MAF
The normal basic-TI correction map is:
IP_TI_COR[-] = f(N[rpm], MAF[mg/stk])
at:
BIN: 0x166B4
It is a 16 x 12 RPM × cylinder-charge table.
The executable constructs its interpolation coordinates from engine speed and `CC30`, performs the map lookup, and then uses the result in the fixed-point factor operation applied to `TI_BASE`.
Functionally:
TI_BASE = CC30 * C_TI_FAC K_BASIC = IP_TI_COR(N, CC30) TI_COR = factor_operation(TI_BASE, K_BASIC)
This table corrects systematic differences between an idealized linear injector model and the actual engine/fuel-delivery system.
It can compensate for effects such as:
- injector non-linearity;
- residual cylinder-filling error;
- fuel-distribution differences;
- systematic error remaining in the air-charge model.
It is not the primary injector-size calibration.
IP_TI_COR_IS__N__MAF
Idle operation has a separate correction surface:
IP_TI_COR_IS[-] = f(N[rpm], MAF[mg/stk])
at:
BIN: 0x16774
with dimensions:
8 x 8
When the corresponding idle-state bit is active, the executable changes both interpolation axes and lookup address and uses this map instead of the normal `IP_TI_COR`.
The architecture is:
TI_BASE
|
v
idle state?
/ \
no yes
| |
v v
IP_TI_COR IP_TI_COR_IS
| |
+--------+--------+
|
v
corrected basic TI
Idle therefore has an explicitly separate steady-state fuel correction model.
IVVT Fuel Correction
SIMK43 also modifies the basic fuel calculation to compensate for intake valve-timing changes.
The main Siemens calibration is:
IP_TI_OFS_IVVT__N__MAF
The ca663056 XDF locates it at:
BIN 0x19571
and describes it as:
Offset Injection time at TCO2 IP_TI_OFS_IVVT[-] = f(N[rpm], MAF[mg/stk])
The table is 16 x 12 and uses signed values around a neutral center.
The fuel model pairs this map with:
IP_TI_FAC_IVVT__VO_RATIO
defined as:
IP_TI_FAC_IVVT[-] = f(VO_RATIO[-])
`VO_RATIO` is the valve-overlap ratio.
Thus Siemens does not simply apply the full RPM/load IVVT offset whenever IVVT is enabled.
Instead:
RPM / air charge
|
v
IP_TI_OFS_IVVT__N__MAF
|
v
base IVVT fuel offset
|
x
|
IP_TI_FAC_IVVT__VO_RATIO
^
|
VO_RATIO
|
v
effective IVVT fuel correction
The corresponding ca663056 routine produces the correction carried into the basic-TI path through RAM byte `C1CB`.
The reason for this compensation is physical.
Changing intake-cam position changes valve overlap and therefore changes the relationship between:
- air passing the MAF,
- residual gas,
- reverse flow,
- trapped fresh air,
- fuel actually required by the cylinder.
Consequently, the same measured/corrected cylinder-charge quantity can require a slightly different injector-time correction depending on the valve-overlap state.
The IVVT fuel model corrects that difference.
The disassembly explicitly identifies `IP_TI_OFS_IVVT__N__MAF` and `IP_TI_FAC_IVVT__VO_RATIO` as consecutive IVVT fuel-model objects.
Corrected Basic Injection Time - CD78
After the air-charge conversion and the selected basic correction path have been processed, the result is stored in:
CD78
`CD78` is the principal corrected basic-injection-time quantity used by downstream fuel subsystems.
The normal branch can therefore be represented as:
CC30 | v C_TI_FAC | v TI_BASE | v IP_TI_COR or IP_TI_COR_IS | + IVVT TI correction | v CD78
`CD78` is important because it is subsequently consumed by:
- the final running-TI builder,
- the fast/slow wall-film model.
The latter point means that injector scaling and basic fuel correction influence not only steady-state fuel but also the transient fuel-film calculation.
Alternate Basic-Fuel Strategy
The basic-fuel routine contains two different calculation paths selected by runtime bit:
FD8A.0
The branch is:
if FD8A.0 == 1:
use IP_TI_COR / IP_TI_COR_IS strategy
if FD8A.0 == 0:
use IP_TI_FL / IP_TI_NOT_CAT strategy
`FD8A.0` is not an instantaneous full-load-state flag.
Instead, it is a configuration-derived runtime flag initialized by the variant/configuration decoding routine around:
ROM 0x852174
The routine reads the ca663056 calibration byte:
C_CONF_MIL_FMY BIN: 0x10151
`C_CONF_MIL_FMY` corresponds to:
CONSTANT_CONFIGURE_MALFUNCTION INDICATION LAMP_FAILURE MEMORY
and is an enumerated configuration value rather than a live engine-state variable.
The ca663056 executable decodes it as:
C_CONF_MIL_FMY = 0
-> FD8A.0 = 0
-> F9E0 = 0
C_CONF_MIL_FMY = 1
-> FD8A.0 = 1
-> F9E0 = 1
C_CONF_MIL_FMY = 2
-> FD8A.0 = 1
-> F9E0 = 1
other values
-> FD8A.0 = 0
-> F9E0 = 0
Thus `FD8A.0` represents a decoded configuration state associated with the selected MIL / failure-memory software configuration.
This means the fuel branch controlled by `FD8A.0` should not be interpreted as:
part load vs full load
Instead, it represents two different nominal-fuel calculation strategies selected by the ECU's configured emissions / failure-memory software variant.
Full-Load Enrichment - IP_TI_FL__N__AMP
The first major calibration in the alternate strategy is:
IP_TI_FL__N__AMP
In ca663056 the corresponding table data are at:
BIN 0x168CE
The definition is:
IP_TI_FL[-] = f(N[rpm], AMP[hPa])
and its description is:
Full load enrichment factor for nominal injection time
The two axes are:
engine speed ambient pressure
not cylinder load.
This is an important architectural clue.
Full-load enrichment quantity is calibrated mainly according to how much enrichment the engine needs at a given RPM and atmospheric pressure once the ECU has already decided that full-load enrichment is active.
The values are expressed as an enrichment amount rather than the unity-centered representation used by conventional factors such as `IP_TI_NOT_CAT`.
No-Catalyst Fuel Correction - IP_TI_NOT_CAT__N__MAF
Immediately after the full-load factor, the same executable branch evaluates:
IP_TI_NOT_CAT__N__MAF
The ca663056 table is:
BIN: 0x1692E
and is defined as:
IP_TI_NOT_CAT[-] =
f(N[rpm], MAF[mg/stk])
The map is unity-centered:
1.000 = neutral correction
with all values being at 1.000, which makes the map practically unused in the stock calibration.
Warm-Up No-Catalyst Correction
The Siemens fuel subsystem also contains:
IP_TI_FAC_NOT_CAT__TCO
described as:
TI correction without catalyst during Warm-up
This is a coolant-temperature-dependent companion to:
IP_TI_NOT_CAT__N__MAF
The no-catalyst model therefore consists of two concepts:
IP_TI_NOT_CAT__N__MAF
->
steady RPM/load-dependent correction
IP_TI_FAC_NOT_CAT__TCO
->
warm-up / coolant-dependent modification
Closed-Loop Lambda Control
The basic-TI calculation does not itself perform oxygen-sensor control.
SIMK43 contains a separate lambda-controller subsystem.
The calibration exposes distinct proportional and integral controller maps for positive and negative lambda error and separate calibrations for idle:
IP_LAM_POS_P__N__MAF IP_LAM_POS_I__N__MAF IP_LAM_NEG_P__N__MAF IP_LAM_NEG_I__N__MAF IP_LAM_POS_P_IS__MAF IP_LAM_POS_I_IS__MAF IP_LAM_NEG_P_IS__MAF IP_LAM_NEG_I_IS__MAF
Thus the controller has:
- different response when the mixture is rich versus lean;
- different behaviour in idle versus normal operation;
- proportional and accumulated correction components.
In the ca663056 RAM implementation, important internal correction terms include:
CC84 CCA2 CC82
`CC84` and `CCA2` are generated independently and then combined into:
CC82
The controller can also explicitly drive these values back toward zero when lambda regulation is not permitted.
The architecture is therefore:
measured lambda error
|
+---+---+
| |
v v
P path I path
| |
CC84 CCA2
| |
+---+---+
|
v
CC82
Learned Fuel Adaptation
SIMK43 keeps long-term learned fuel correction in at least two mathematically different forms.
The two important RAM states are:
F7E8 F7E6
Multiplicative Adaptation - F7E8
`F7E8` is the multiplicative learned correction.
Its purpose is to compensate errors whose magnitude scales with fuel quantity.
Examples include:
- MAF scaling error;
- injector-flow-rate scaling error;
- systematic cylinder-charge error.
If the ECU consistently requires a fixed percentage more fuel as air mass increases, multiplicative learning is the appropriate correction.
The adaptation code passes `F7E8` through an operating-point scaling stage and generates an intermediate:
F7EA
before combining it with the instantaneous controller state.
Additive Adaptation - F7E6
`F7E6` is an additive injection-time correction.
Its physical scaling is:
0.004 ms/count
This form is appropriate for errors which behave approximately like a fixed time offset.
The classic example is injector opening-delay error.
If the injector effectively needs an extra:
+0.10 ms
independent of the commanded hydraulic fuel duration, an additive correction describes the fault better than a percentage.
This explains the Siemens between:
multiplicative learned correction and: additive learned correction
rather than one generic OBD-style "LTFT" number.
Adaptation Combiner
The adaptation/controller path combines:
F7E8 -> operating-point scaling -> F7EA F7EA + CC82 -> controller/adaptation combination then + F7E6
and stores the resulting correction path through RAM including:
CC80
Thus lambda regulation and learning are distinct from the initial air-mass-to-basic-TI calculation but eventually influence final delivered fuel.
Why the Wall-Film Model Exists
Steady-state fuel calculation assumes that commanded injector fuel reaches the cylinder in the expected proportion.
During a transient this is not immediately true.
Fuel sprayed into the port can:
- remain suspended,
- strike the port wall,
- form a liquid film,
- evaporate later,
- be stripped by increasing airflow,
- remain stored over many engine cycles.
Therefore:
fuel injected this cycle
is not always equal to:
fuel entering cylinder this cycle
SIMK43 explicitly models this delayed fuel transport.
The wall-film model is one of the largest parts of the fuel subsystem because it tracks:
- two different film time scales,
- positive and negative transitions,
- idle and non-idle operation,
- RPM,
- coolant temperature,
- current basic injection time,
- transient duration,
- valve-overlap changes.
The central wall-film routine in ca663056 begins around:
ROM 0x83B22C
and explicitly calls the basic-TI routine so that the current corrected basic fuel quantity is available to the film calculation.
Fast and Slow Wall-Film Reservoirs
SIMK43 models intake-wall fuel using two separate reservoirs:
FAST film SLOW film
The equilibrium amount stored in each reservoir is determined by separate RPM × basic-injection-time maps.
IP_MASS_FAST_WF__N__TIB
The fast-film equilibrium calibration is:
IP_MASS_FAST_WF[ms] = f(N[rpm], TIB[ms])
ca663056:
BIN 0x130E8
The XDF description is:
Wall film mass stored in the intake (fast path)
The output is represented as equivalent injection time.
Thus the ECU is effectively asking:
At this speed and current basic fuel quantity, how much fuel equivalent (in injection time) should normally be stored in the fast wall film?
IP_MASS_SLOW_WF__N__TIB
The slow reservoir uses:
IP_MASS_SLOW_WF[ms] = f(N[rpm], TIB[ms])
The two maps describe the equilibrium size of two physically different fuel-storage components.
The fast reservoir responds quickly to operating-point changes.
The slow reservoir responds over a longer period.
The calibration places these two objects together as the core film-mass model.
Film Target Versus Stored Film
Once the ECU calculates the equilibrium fast and slow film masses, it compares them with the currently stored film states.
Conceptually:
DELTA_FAST = FAST_TARGET - FAST_STORED DELTA_SLOW = SLOW_TARGET - SLOW_STORED
If the requested operating point suddenly increases, the target stored film usually increases.
Some newly injected fuel will therefore be absorbed by the film before it reaches the cylinder.
The ECU must temporarily inject more fuel.
If the requested operating point suddenly decreases, the target film mass decreases.
Fuel already stored on the wall can continue entering the cylinder.
The ECU must temporarily reduce commanded injector fuel.
Thus:
positive film delta -> wall is taking fuel -> positive transient fuel correction negative film delta -> all is returning fuel -> negative transient fuel correction
The model is consequently symmetric in structure but not in calibration.
Wetting and fuel release use different parameter sets.
Fast and Slow Film Thresholds
SIMK43 does not react to every tiny calculated change.
The model contains separate thresholds for fast and slow film.
Two coolant-dependent threshold curves are:
IP_TI_DIF_FAST_WF_THD__TCO IP_TI_DIF_SLOW_WF_THD__TCO
The ca663056 XDF contains the corresponding wall-film threshold objects around:
0x14294 0x1429C
The meaning is:
if |film delta| is too small:
do not generate a significant transient correction
The threshold depends on coolant temperature because liquid-fuel behaviour changes strongly with port/engine temperature.
Cold surfaces retain considerably more fuel than hot surfaces.
SIMK43 also contains basic-TI-dependent thresholds:
IP_TI_FAST_WF_THD__TIB IP_TI_SLOW_WF_THD__TIB
These vary threshold sensitivity according to the current fuel quantity.
Thus the wall-film decision is based on both:
engine thermal state current injector quantity
rather than one fixed acceleration-enrichment threshold.
Positive and Negative Load-Transient Families
After a significant film change has been detected, SIMK43 selects a transient map family based on:
1. Whether the fuel change is positive or negative
2. Whether the engine is inside or outside idle
3. Whether the fast or slow film reservoir is being processed.
This creates eight main RPM × coolant-temperature calibration surfaces.
Positive Transition, Outside Idle
IP_TI_TCO_POS_FAST_WF__N__TCO IP_TI_TCO_POS_SLOW_WF__N__TCO
The ca663056 XDF includes:
IP_TI_TCO_POS_FAST_WF BIN 0x14574 IP_TI_TCO_POS_SLOW_WF BIN 0x14674
The fast table is described as:
Temperature corection for positive load transient (fast path) out of idle
and the slow map performs the equivalent role for the slow reservoir.
Positive Transition, Idle
The idle-specific equivalents are:
IP_TI_TCO_POS_FAST_WF_IS__N__TCO IP_TI_TCO_POS_SLOW_WF_IS__N__TCO
ca663056 contains:
IP_TI_TCO_POS_FAST_WF_IS BIN 0x145F4 IP_TI_TCO_POS_SLOW_WF_IS BIN 0x146F4
This allows throttle opening from idle to behave differently from the same nominal air/fuel change while the engine is already driving under load.
Negative Transition, Outside Idle
For decreasing load outside idle:
IP_TI_TCO_NEG_FAST_WF__N__TCO IP_TI_TCO_NEG_SLOW_WF__N__TCO
These maps control how aggressively the ECU removes fuel when the estimated stored-film requirement falls.
Negative Transition, Idle
The idle-specific negative maps are:
IP_TI_TCO_NEG_FAST_WF_IS__N__TCO IP_TI_TCO_NEG_SLOW_WF_IS__N__TCO
The ca663056 slow-idle negative table is visible at:
BIN 0x144F4
and belongs to the same 8×8 RPM × coolant-temperature wall-film family.
The overall selector is therefore:
FILM DELTA
|
delta sign?
/ \
positive negative
| |
idle state? idle state?
/ \ / \
idle run idle run
| | | |
fast/slow fast/slow fast/slow fast/slow
| | | |
+--------+--------+--------+
|
v
transient TI scaling
Wall-Film Correlation / Dynamic Constants
The RPM/temperature transient maps determine correction magnitude, but the film states must also evolve with time.
For this SIMK43 contains separate correlation/dynamic curves:
IP_TI_CRLC_POS_FAST_WF__TCO IP_TI_CRLC_POS_SLOW_WF__TCO IP_TI_CRLC_NEG_FAST_WF__TCO IP_TI_CRLC_NEG_SLOW_WF__TCO
These are coolant-temperature-dependent coefficients.
Their role can be understood as the dynamic response rate of the modeled film.
Conceptually:
FILM_NEW = FILM_OLD + K_DYNAMIC * (FILM_TARGET - FILM_OLD)
There is a different `K_DYNAMIC` for:
- fast film gaining fuel,
- slow film gaining fuel,
- fast film losing fuel,
- slow film losing fuel.
This is why the two reservoirs have different time behaviour.
First-Tip-In / Start-Temperature Effect
Another wall-film calibration is:
IP_TI_TCO_ST_FAC_WF__TCO_ST
defined as:
IP_TI_TCO_ST_FAC_WF[-] = f(TCO_ST[degC])
where:
TCO_ST = coolant temperature recorded at engine start
The description is effectively a start-temperature factor for the first tip-in / wall-film behaviour.
This distinction between current coolant temperature and coolant temperature at start is important.
Two engines can currently both be at, for example:
60 degC
but one may have started at:
55 degC
while the other started at:
0 degC
Their intake surfaces and accumulated liquid-fuel state can be very different.
SIMK43 preserves this information through `TCO_ST` and modifies initial transient behaviour accordingly.
Positive-TI Hysteresis
The wall-film subsystem also contains:
IP_TIB_DIF_POS_HYS__TIB
This is described as:
Hysteresis in TIB necessary for switching from positive to negative load transient
This prevents the transient-state machine from rapidly alternating between:
positive film change negative film change positive film change negative film change
when injection time fluctuates slightly around a boundary.
The hysteresis itself varies with basic injection time.
Thus, at different fuel-flow levels, the amount of change required to reverse the transient-state direction is also different.
Segment-Counter / Time Evolution
The calibration also contains:
IP_SEG_CTR_FAC_WF__SEG_CTR_WF
which modifies wall-film behaviour as a function of a wall-film segment counter.
This gives the transient correction an explicit time/cycle dimension.
The model can therefore behave approximately as:
transient starts
|
v
segment 0
|
segment 1
|
segment 2
|
...
|
steady condition reached
with the correction evolving as the transient ages.
This is another reason the model cannot be understood as one instantaneous tip-in enrichment table.
Wall Film and Lambda-Control Arbitration
The wall-film model interacts directly with the closed-loop lambda controller.
Two important Siemens calibrations are:
IP_TI_WF_MAX_LAM__TCO
and:
IP_T_LAM_STOP__TCO
`IP_TI_WF_MAX_LAM__TCO` is described as:
TI_ADD_WF threshold for lambda control deactivation
The closely related XDF object shows this wall-film threshold explicitly.
This means that if the transient wall-film correction becomes large enough, the ECU deliberately prevents lambda feedback from trying to cancel it.
The logic is approximately:
wall-film TI correction
|
v
greater than calibrated threshold?
|
yes
|
v
temporarily stop lambda correction
|
v
allow modeled transient fuel to act
|
v
wait calibrated blocking time
|
v
resume lambda regulation
This is necessary because the oxygen sensor observes combustion only after:
- injector delay,
- intake transport,
- combustion,
- exhaust transport,
- sensor response.
If the lambda controller were allowed to react immediately to every transient, it would fight the predictive wall-film model.
Valve-Overlap Influence on Wall Film
SIMK43 has a second wall-film correction subsystem dedicated specifically to changing valve overlap.
This is separate from ordinary load-transient wetting.
Changing intake-cam position changes:
- intake-port pressure,
- residual gas,
- backflow,
- valve-region fuel transport,
- film stripping around the intake valve.
Siemens therefore calibrates VO-induced wall-film disturbance separately.
The main objects include:
IP_TI_DIF_WF_POS_VO_CHG IP_TI_DIF_WF_NEG_VO_CHG IP_FAC_TCO_ST_COR_WF_POS_VO IP_FAC_TCO_ST_COR_WF_NEG_VO IP_FAC_WF_VO_TIB_INT_FDOUT IP_FAC_WF_VO_TCO_FDOUT IP_FAC_TIB_COR
VO-Induced Film Quantity
The principal positive-overlap-change map is:
IP_TI_DIF_WF_POS_VO_CHG
The ca663056 XDF describes:
Wall film amount to be compensated, positive VO change
and defines the map against:
VO_1 N_32
The XDF locates this ca663056 object at:
BIN 0x142EC
The corresponding negative-overlap map:
IP_TI_DIF_WF_NEG_VO_CHG
handles the opposite cam transition.
VO Wall-Film Temperature Correction
The ca663056 XDF contains:
IP_FAC_TCO_ST_COR_WF_POS_VO
at:
BIN 0x1275E
It corrects positive VO-induced wall-film behaviour according to start temperature.
The Siemens family also contains the negative equivalent:
IP_FAC_TCO_ST_COR_WF_NEG_VO
This means a valve-overlap change after a cold start can receive a different fuel-film compensation from the same cam movement on a hot engine.
Basic-TI Scaling of VO Wall Film
Another key calibration is:
IP_FAC_TIB_COR
ca663056:
BIN 0x1276E
defined as:
IP_FAC_TIB_COR[-] = f(TIB[ms])
and described as:
Correction factor of Basic Injection Time
Thus the VO-induced film disturbance is also scaled by the actual fuel-flow operating point.
A cam movement at:
1.5 ms basic TI
does not necessarily require the same transient fuel compensation as the same cam movement at:
10 ms basic TI
even if RPM and overlap change are identical.
Complete Wall-Film Architecture
The wall-film subsystem can now be represented more accurately as:
CD78 / TIB
|
+-----------+-----------+
| |
v v
IP_MASS_FAST_WF IP_MASS_SLOW_WF
| |
v v
fast equilibrium slow equilibrium
| |
compare with compare with
stored state stored state
| |
v v
FAST DELTA SLOW DELTA
| |
+-----------+-----------+-----------+-----------+
| | |
v v v
TCO thresholds TIB thresholds hysteresis
| | |
+-----------+-----------+-----------+-----------+
|
sign of transient
/ \
positive negative
| |
idle state? idle state?
/ \ / \
idle run idle run
| | | |
POS idle POS run NEG idle NEG run
maps maps maps maps
| | | |
+----------+--------+----------+
|
fast / slow CRLC
|
TCO_ST first-tip factor
|
segment-counter factor
|
+
|
VO wall-film model
|
+----------+----------+
| |
v v
C936 C968
| |
+----------+----------+
|
v
final TI builder
The wall-film system is therefore a dynamic fuel-storage model with:
- equilibrium targets,
- internal memory,
- different filling and emptying dynamics,
- temperature effects,
- operating-state selection,
- hysteresis,
- time evolution,
- cam-overlap disturbance compensation.
C936 and C968 - Final Transient TI Terms
The outputs that enter the late fuel path include:
C936 C968
These are signed corrections in the injection-time domain.
The final TI routine adds them after the main operating-condition fuel corrections.
Thus:
TI_STEADY | + C936 | + C968 | v TI_WITH_TRANSIENT
Since the quantities are in the 0.004 ms TI domain:
C936_ms =
signed(C936) * 0.004
C968_ms =
signed(C968) * 0.004
This is an important distinction from the airflow model.
The fuel model first calculates the normal required injector duration and then changes injector time directly to account for delayed liquid-fuel transport.
Minimum Injection Time - C_TI_MIN
After all normal and transient fuel corrections are processed, the ECU applies:
C_TI_MIN
ca663056:
BIN: 0x10768
The stock raw value is:
225
so:
C_TI_MIN = 225 * 0.004 = 0.900 ms
The relationship is:
TI_HYD = max(TI_CALCULATED, 0.900 ms)
This clamp is applied before injector electrical delay.
Thus `C_TI_MIN` defines the minimum hydraulic fuel-flow command rather than the minimum complete electrical pulse.
This becomes particularly important with large injectors.
If injector scaling reduces normal idle fuel time below `C_TI_MIN`, the ECU cannot command a shorter hydraulic pulse.
Hydraulic VS Electrical Injection Time
SIMK43 distinguishes two separate concepts:
hydraulic injection time
and:
electrical injector on-time
Hydraulic time represents how long the injector must actually flow fuel.
Electrical time must additionally include the delay between energizing the coil and meaningful fuel flow beginning.
The structure is:
requested fuel mass
|
v
hydraulic TI
|
+ injector opening delay
|
v
electrical pulse width
This is why injector dead time must be calibrated separately from `C_TI_FAC`.
Injector Dead Time - IP_TI_ADD_DLY__VB
The injector electrical delay model is:
IP_TI_ADD_DLY__VB
The XDF defines:
IP_TI_ADD_DLY[ms] = f(VB[V])
For ca663056 the injector-delay table is located at:
BIN 0x1661C
The table uses:
0.032 ms/count
The executable lookup routine then shifts the result by three bits:
raw_deadtime << 3
which converts the value from using a:
0.032 ms/count
to using a:
0.004 ms/count
The converted delay is stored in:
F96C
and later added to the hydraulic TI.
Thus:
TI_ELECTRICAL = TI_HYD + TI_DEAD
Final Electrical Injector Time
The final pulse-width quantity is carried through:
F966
while the hydraulic command is also retained separately in the output chain.
The final relationship is:
F966 = hydraulic injector duration + F96C
where:
F96C =
voltage-dependent injector opening delay
This means that changing injector dead-time calibration changes the electrical pulse without changing the basic requested fuel mass.
It also affects the scheduler because final pulse duration is subsequently an input to injection phasing.
Start and Cranking Fuel
Starting is not simply normal `CC30 * C_TI_FAC` operation at low RPM.
SIMK43 contains dedicated absolute injection-time maps.
ca663056 includes:
Basic Injection Time at Start - MT BIN 0x141F4 Basic Injection Time at Start - AT BIN 0x14244
and separate pre-injection calibrations including:
Basic Pre-Injection Time - MT BIN 0x14790 Basic Pre-Injection Time - AT BIN 0x147A0
The XDF injector-scaling patches modify these independently of `C_TI_FAC`, demonstrating their separate role in the executable.
Injection Phasing
Fuel quantity and injection phase are separate calculations.
After the final electrical pulse is known, SIMK43 uses engine speed and pulse duration as inputs to the injection scheduler.
The structure is:
final electrical TI
|
+ engine speed
|
v
SOI / EOI scheduling maps
|
v
cylinder-specific event angle
For a longer pulse width, the ECU may need to begin injection earlier if it wants to meet a desired end-of-injection boundary.
Thus pulse duration itself becomes an input to timing placement.
The final injector pulse is therefore determined in two dimensions:
QUANTITY:
how long to inject
PHASING:
where in the cycle that duration is placed
Per-Cylinder Output
The final scheduler derives separate quantities for all four cylinders.
RAM values around:
FA42 FA44 FA46 FA48
are generated from the common injection scheduling quantity together with individual cylinder correction values.
Thus the output path is:
common fuel command
|
common injection phase
|
v
cylinder corrections
|
+----+----+----+
| | | |
C1 C2 C3 C4
The SIMK43 injector-control layer therefore supports cylinder-specific differentiation after the common fuel model has been calculated.
Complete Normal-Running Fuel Model
The complete running model can now be written in functional order.
First:
TI_BASE = CC30 * C_TI_FAC
For the normal basic-TI strategy:
if idle:
K_BASIC = IP_TI_COR_IS(N, CC30)
else:
K_BASIC = IP_TI_COR(N, CC30)
IVVT compensation is derived from:
IP_TI_OFS_IVVT__N__MAF
weighted by:
IP_TI_FAC_IVVT__VO_RATIO
and incorporated into the basic-TI correction path.
The resulting corrected basic time becomes:
CD78
For the alternate strategy:
TI_BASE -> IP_TI_FL__N__AMP -> IP_TI_NOT_CAT__N__MAF -> CD78
The lambda/adaptation system separately maintains:
short-term controller correction multiplicative learned correction additive learned TI correction
The wall-film model then predicts transient fuel transport using:
FAST film target SLOW film target stored fast/slow states positive/negative transient selection idle/non-idle selection coolant-temperature correction start-temperature correction dynamic correlation constants segment/time evolution valve-overlap disturbance correction
and generates late injection-time corrections including:
C936 C968
The final TI builder processes:
CD78 -> C6F0 -> C6EC -> F968 -> C5FC -> CFBA -> +C936 -> +C968
before applying:
C_TI_MIN
The resulting hydraulic pulse then receives:
IP_TI_ADD_DLY__VB
and becomes the final electrical pulse supplied to the injection-phase scheduler.
Complete Model Diagram
AIRFLOW / LOAD MODEL
|
v
CC30
|
v
C_TI_FAC
|
v
TI_BASE
|
+------------------+------------------+
| |
v v
NORMAL BASIC-TI ALTERNATE STRATEGY
STRATEGY |
| v
idle-state selection IP_TI_FL__N__AMP
/ \ |
v v v
IP_TI_COR IP_TI_COR_IS IP_TI_NOT_CAT
| | |
+------+------+ |
| |
+------- IVVT correction ----------+
| IP_TI_OFS_IVVT
| IP_TI_FAC_IVVT
|
+----------------+----------------+
|
v
CD78
corrected basic injection time
|
+------------+------------+
| |
v v
LAMBDA / ADAPTATION WALL FILM MODEL
| |
controller terms |
CC84 / CCA2 |
| IP_MASS_FAST_WF
CC82 IP_MASS_SLOW_WF
| |
F7E8 / F7E6 target vs stored
| |
| fast / slow delta
| |
| threshold maps
| |
| positive / negative
| |
| idle / non-idle
| |
| CRLC dynamics
| |
| TCO_ST effects
| |
| segment/time factor
| |
| VO wall-film model
| |
| C936 / C968
| |
+------------+------------+
|
v
FINAL TI BUILDER
|
C6F0
|
C6EC
|
F968
|
C5FC
|
CFBA
|
+ C936
|
+ C968
|
v
C_TI_MIN
|
v
HYDRAULIC INJECTION TI
|
v
IP_TI_ADD_DLY__VB
|
v
ELECTRICAL INJECTION TI
|
v
SOI / EOI SCHEDULER
|
v
PER-CYLINDER INJECTORS
Main Fuel Calibration Objects
The principal Siemens fuel-model objects relevant to this reconstruction are:
C_TI_FAC
Primary cylinder-air-charge to injection-time conversion
C_TI_MIN
Minimum hydraulic injection duration
IP_TI_COR__N__MAF
Normal RPM / cylinder-charge basic-TI correction
IP_TI_COR_IS__N__MAF
Idle RPM / cylinder-charge basic-TI correction
IP_TI_OFS_IVVT__N__MAF
IVVT fuel offset versus RPM and cylinder charge
IP_TI_FAC_IVVT__VO_RATIO
Weighting of IVVT fuel offset according to valve overlap
IP_TI_FL__N__AMP
Full-load enrichment of nominal injection time
IP_TI_NOT_CAT__N__MAF
RPM / cylinder-charge no-catalyst TI correction
IP_TI_FAC_NOT_CAT__TCO
Coolant-dependent no-catalyst warm-up correction
IP_MASS_FAST_WF__N__TIB
Equilibrium fast wall-film mass
IP_MASS_SLOW_WF__N__TIB
Equilibrium slow wall-film mass
IP_TI_DIF_FAST_WF_THD__TCO
IP_TI_DIF_SLOW_WF_THD__TCO
Coolant-dependent wall-film delta thresholds
IP_TI_FAST_WF_THD__TIB
IP_TI_SLOW_WF_THD__TIB
Basic-TI-dependent wall-film thresholds
IP_TI_TCO_POS_FAST_WF__N__TCO
IP_TI_TCO_POS_SLOW_WF__N__TCO
Positive transient correction outside idle
IP_TI_TCO_POS_FAST_WF_IS__N__TCO
IP_TI_TCO_POS_SLOW_WF_IS__N__TCO
Positive transient correction in idle
IP_TI_TCO_NEG_FAST_WF__N__TCO
IP_TI_TCO_NEG_SLOW_WF__N__TCO
Negative transient correction outside idle
IP_TI_TCO_NEG_FAST_WF_IS__N__TCO
IP_TI_TCO_NEG_SLOW_WF_IS__N__TCO
Negative transient correction in idle
IP_TI_CRLC_POS_FAST_WF__TCO
IP_TI_CRLC_POS_SLOW_WF__TCO
Fast/slow positive film dynamics
IP_TI_CRLC_NEG_FAST_WF__TCO
IP_TI_CRLC_NEG_SLOW_WF__TCO
Fast/slow negative film dynamics
IP_TI_TCO_ST_FAC_WF__TCO_ST
Start-temperature / first-tip-in film factor
IP_TIB_DIF_POS_HYS__TIB
Hysteresis for switching positive/negative film state
IP_SEG_CTR_FAC_WF__SEG_CTR_WF
Time/segment evolution of transient film correction
IP_TI_DIF_WF_POS_VO_CHG
IP_TI_DIF_WF_NEG_VO_CHG
Wall-film disturbance due to positive/negative
valve-overlap changes
IP_FAC_TCO_ST_COR_WF_POS_VO
IP_FAC_TCO_ST_COR_WF_NEG_VO
Start-temperature scaling of VO wall-film correction
IP_FAC_WF_VO_TIB_INT_FDOUT
IP_FAC_WF_VO_TCO_FDOUT
Fuel-history and coolant-temperature scaling
of VO wall-film correction
IP_FAC_TIB_COR
Basic-injection-time scaling of VO film correction
IP_TI_WF_MAX_LAM__TCO
Wall-film TI threshold above which lambda control
is temporarily inhibited
IP_T_LAM_STOP__TCO
Lambda-controller blocking time after significant
wall-film compensation
IP_TI_ADD_DLY__VB
Injector electrical opening delay versus battery voltage
