SIMK43 Fuel & Injector Control Model

From OpenGK

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