Apprentice: creating a stage 1 map

From B58 Wiki

The B58, what a great engine! Just look at the power curve...

B58 power and torque

Wait a minute! Why does it drop off like that at 5000 RPM?

What if we could produce a map that had a similar torque figure but that kept on increasing power to redline? This is the goal of our stage 1 tune.

It turns out the B58 with stock turbo can achieve this quite comfortably.

In defiance of BMW, we imagine extending the stock clutch torque of 500Nm out to 6800 RPM. The theoretical power output is then 477 BHP. In practice, the stock downpipe forces us to taper down the torque towards redline, leading to around 420 BHP. While we're there, we'll increase the mid-range torque to 550Nm.

The result is an excellent mountain road tune, with torque matched to the available grip and one of the few B58 tunes that revs out the engine.

It is worth pointing out here that stage 2 and stage 1 maps have only two essential differences:

  1. a higher flowing cat affects the turbo. Stage 2 maps change calibration to account for this but stage 1 maps do not need to.
  2. with more exhaust flow available, stage 2 maps raise load limits by about 15%.

Driver torque request[edit]

Torque request ceiling[edit]

Ref: Torque request ceiling

BMW name: BMWtqe_tqc_FlApplStgNorm_T

Base:

 800.0  900.0 1000.0 1250.0 1380.0 1500.0 1520.0 2000.0 2500.0 4500.0 4750.0 5000.0 5200.0 5500.0 6000.0 6500.0 6750.0 7000.0
 500.0  500.0  500.0  500.0  500.0  500.0  500.0  500.0  500.0  500.0  490.0  474.0  458.0  434.0  398.0  368.0  353.0  333.0

Modified:

1000.0 1280.0 1380.0 1500.0 2000.0 2500.0 3000.0 3500.0 4000.0 5000.0 5100.0 5400.0 5500.0 5600.0 6000.0 6500.0 6600.0 7000.0
 550.0  550.0  550.0  550.0  550.0  550.0  550.0  550.0  550.0  550.0  550.0  550.0  550.0  550.0  550.0  550.0  550.0  550.0

Notes:

Let's start by asking for a max clutch torque of 550Nm across the entire rev range. These targets won't be met at very low or very high RPM but the DME will figure this out for us.

Load limit factor by rich for component protection[edit]

Ref: Load limit factor by rich for component protection

BMW name: K_FRFMXBS_MN

Categories: Limits

Base:

     0.5

Modified:

     1.0

Notes:

Not strictly a load limit so much as affecting the behaviour of component [overheating] protection mode. On the stock tune, if the ECU enters component protection mode (i.e. it calculates the exhaust is too hot) then it will cut the load in half. This is a bit of a nanny because component protection mode will also make the mixture significantly richer which achieves the same cooling goal. For that reason we will drop this and set the value to 1.

Torque Reduction Factor (RPM)[edit]

Ref: Torque Reduction Factor

BMW name: KL_MDRED_NKW

Categories: Limits

Unit info: 1/min --> -

Base:

1400.0 2600.0 3600.0 5000.0 6000.0 6500.0
   1.0    1.0    1.0    1.0    0.9    0.9

Modified:

1400.0 2600.0 3600.0 5000.0 6000.0 6500.0
   1.0    1.0    1.0    1.0    1.0    1.0

Notes:

This is a factor for reducing the engine target torque depending on the engine speed. We do not want this obviously and will remove it.

Normierung für Mdk_ist_sot_mem_mx[edit]

Ref: Normierung für Mdk_ist_sot_mem_mx

BMW name: K_MDKIST_SOT_MX

Categories: Limits

Units: -

Base:

   500.0

Modified:

   750.0

Notes:

Mdk_ist is BMW speak for the current indicated torque, Mdk_ist_sot_mem relates to mdk_ist values stored in memory and mdk_ist_sot_mem_mx is the largest torque value stored.

One open question is why the stock map would set an indicated torque value to something that resembles a clutch torque.

In any case, the a2l tells us this value feeds into the driver's torque request calculation so we increase it.

Max Torque at clutch (monitoring)[edit]

Ref: Max Torque at clutch (monitoring)

BMW name: MoFTrqPtd_tqCluMax_C

Categories: Limits

Units: Nm

Base:

   500.0

Modified:

   550.0

Notes:

The BMW notes say this is the max combustion torque at the clutch (monitoring). That is a contradictory and confusing description. We will up the value 550Nm in line with our goal. Another valid option here is to push the value to 1000Nm completely out of the way.

Max power (monitoring)[edit]

Ref: Max power (monitoring)

BMW name: MoFTrqPtd_pwrMax_C

Categories: Limits

Units: kW

Base:

   250.0

Modified:

   350.0

Notes:

Equates to an upper limit of 470 HP at the crank.

Speed-dependent full load line of the engine (Nkw_opt)[edit]

Static and dynamic torque: if you are driving along at a fixed speed with the engine putting out 300Nm of torque, then because speed is not changing, that torque must be balanced by equal and opposite forces of friction. But if you imagine accidentally shifting into reverse then there would be a sudden change in the torque. We understand that such jerkiness, if it happened, would need to be stopped quickly before the forces overwhelmed the drivetrain but that also this situation is not likely to happen.

More subtly, if you were driving steadily along as above but then started going up a hill, there would also be a change in torque. One of the things that the DME does in this situation is determine that the engine speed is wrong and that it needs to change gear and that it needs to know what gear to change into.

Another example is a car that lurches in traffic because the pedal feels too senstive. You would wish the jerkiness was not there.

What the car does when and if the limits of jerkiness are exceeded and what it does when we make more controlled changes, like going uphill, kicking down the pedal or hitting the brakes are an essential part of the DME's programming. One of the calculations it performs here is to figure out, given the gear, what is the optimal engine speed (and, given some engine speed and torque, what gear should it be in). This is the so called Nkw_opt above.

Somewhat vaguely, the four torque limits here relate to this optimal engine speed calculation and the limits we understood as being there to prevent excessive jerkiness.

One of the things the DME will do if these limits are exceed is close the throttle. Thus, while we might consider some limits for around town driving, we want to avoid effects like unwanted throttle closures during shifting. ECUTek expose DME flags which disable these limits. This and the arguments above suggest a handful of tuning strategies.

  1. Set sensible upper values somewhat above the max clutch torque (e.g. 700Nm)
  2. Simulate their being disabled by lifting the values out of range (e.g. to 1200Nm).
  3. Provide lower limits at lower RPM to try to get better around town driving but then push the values up for higher RPM.

Here, we will adopt the first strategy and set values of 700Nm.

Ref: Speed-dependent full load line of the engine (Nkw_opt)

BMW name: KL_MD_K_MAX_VL

Categories: Limits, Torque limiting maps

Unit info: 1/min --> Nm

Base:

1000.0 1250.0 1300.0 2500.0 3500.0 4500.0 4750.0 5000.0 5500.0 6000.0 6500.0 7000.0
 500.0  500.0  500.0  500.0  500.0  500.0  500.0  500.0  500.0  500.0  500.0  500.0

Modified:

1000.0 1250.0 1300.0 2500.0 3500.0 4500.0 4750.0 5000.0 5500.0 6000.0 6500.0 7000.0
 700.0  700.0  700.0  700.0  700.0  700.0  700.0  700.0  700.0  700.0  700.0  700.0

Speed-dependent full load line of the engine (Nkw_opt) for manual shift[edit]

BMW name: KL_MD_K_MAX_VL_HS

Dimension: 1D, vector

Categories: Limits, Torque limiting maps

Unit info: 1/min --> Nm

Breakpoints: Speed-dependent full load line of the engine (Nkw_opt) for manual shift X (autogen)


Base:

1000.0 1250.0 1300.0 2500.0 3500.0 4500.0 4750.0 5000.0 5500.0 6000.0 6500.0 7000.0
 500.0  500.0  500.0  500.0  500.0  500.0  500.0  500.0  500.0  500.0  500.0  500.0

Modified:

1000.0 1250.0 1300.0 2500.0 3500.0 4500.0 4750.0 5000.0 5500.0 6000.0 6500.0 7000.0
 700.0  700.0  700.0  700.0  700.0  700.0  700.0  700.0  700.0  700.0  700.0  700.0


Speed-dependent boost characteristic curve (Nkw_opt)[edit]

BMW name: KL_MD_K_MAX_BST

Dimension: 1D, vector

Categories: Limits, Torque limiting maps

Unit info: 1/min --> Nm

Breakpoints: Speed-dependent boost characteristic of the engine (Nkw_opt) X (autogen)


Base:

1000.0 1250.0 1300.0 2500.0 3500.0 4500.0 4750.0 5000.0 5500.0 6000.0 6500.0 7000.0
 485.0  485.0  485.0  485.0  485.0  485.0  485.0  463.0  422.0  387.0  336.0  291.0

Modified:

1000.0 1250.0 1300.0 2500.0 3500.0 4500.0 4750.0 5000.0 5500.0 6000.0 6500.0 7000.0
 700.0  700.0  700.0  700.0  700.0  700.0  700.0  700.0  700.0  700.0  700.0  700.0


Speed-dependent boost characteristic curve (Nkw_opt) for manual shift[edit]

BMW name: KL_MD_K_MAX_BST_HS

Dimension: 1D, vector

Categories: Limits, Torque limiting maps

Unit info: 1/min --> Nm

Breakpoints: Speed-dependent boost characteristic of the engine (Nkw_opt) for manual shift X (autogen)


Base:

1000.0 1250.0 1550.0 2300.0 3800.0 4600.0 5400.0 5500.0 5800.0 6000.0 6500.0 7000.0
 300.0  300.0  300.0  310.0  320.0  310.0  300.0  295.0  280.0  270.0  230.0  150.0

Difference:

1000.0 1250.0 1300.0 2500.0 3800.0 4600.0 5400.0 5500.0 5800.0 6000.0 6500.0 7000.0
 150.0  150.0  150.0  270.0  330.0  340.0  350.0  355.0  370.0  380.0  420.0  500.0

Modified:

1000.0 1250.0 1300.0 2500.0 3800.0 4600.0 5400.0 5500.0 5800.0 6000.0 6500.0 7000.0
 700.0  700.0  700.0  700.0  700.0  700.0  700.0  700.0  700.0  700.0  700.0  700.0

Load target and limits[edit]

Load to torque[edit]

Ref: Load to torque

BMW name: KF_MDIOP_1_TQE

Dimension: 2D, table

Categories: Load

Unit info: %, 1/min --> Nm

Notes: The table reference (linked above) discusses how the DME uses the table to derive a load target. The stock table has a large enough range of load to cover the needs of a stage 1 map.

Max load (main)[edit]

Ref: Max load (main)

BMW name: KL_RF_MAX

Dimension: 1D, vector

Categories: Load

Unit info: 1/min --> %

Breakpoints: Max load (main) X (autogen)

Base:

1500.0 2000.0 2500.0 3500.0 4500.0 5000.0 5500.0 5750.0 6000.0 6500.0 6750.0 7000.0
 185.0  185.0  185.0  185.0  185.0  185.0  173.0  168.0  166.0  160.0  160.0  160.0


Modified:

1500.0 2000.0 2500.0 3500.0 4500.0 5000.0 5500.0 5750.0 6000.0 6500.0 6750.0 7000.0
 165.0  165.0  165.5  160.5  160.0  155.5  155.0  155.0  155.0  155.0  155.0  155.0

Notes:

We have set a clutch torque limit of 550Nm and now want to figure out a load which will provide that torque and set that as the load limit.

We use our inverted Load to torque table to read off indicated torque to load.

We then need to add some load to take account of friction load to torque does not account for it while the driver's wish is clutch torque (torque after friction from the engine internals).

Below is the torque to load curve at 600Nm indicated torque. We read values off of this curve, round them up and add them to map.

We make a mental note to check in the logs to see if the car is actually hitting these limits. This might be a good thing in order to vector the power delivery or it might be that we are losing performance.

Max load (spool)[edit]

BMW name: KL_RF_MAX_UESP

Dimension: 1D, vector

Unit info: 1/min --> %

Base:

1500.0 1750.0 2222.0 2333.0 2444.0 5000.0 5500.0 5750.0 6000.0 6500.0 6750.0 7000.0
 185.0  185.0  185.0  185.0  185.0  185.0  172.0  168.0  166.0  160.0  160.0  160.0


Modified:

1500.0 2000.0 2500.0 3500.0 4500.0 5000.0 5500.0 5750.0 6000.0 6500.0 6750.0 7000.0
 165.0  165.0  165.5  160.5  160.0  155.5  155.0  155.0  155.0  155.0  155.0  155.0

Notes:

Same as above.

Airflow and boost[edit]

From the load target, the DME calculates a target pressure ratio from the turbo. This pressure ratio target is called the boost setpoint.

Pressure ratio is the factor by which the turbo compresses air going into it. The air pressure before the turbo is not necessarily at atmospheric so the situation with boost is more complex that just the altitude and the weather. When airflow through the engine is low, the air going into the turbo is at atmospheric pressure but as MAF increases, the air filter and intake impede this flow. This causes a pressure drop before the turbo. Plus, if we are high in the mountains on a cloudy day, the pressure will be low to start with. What we see therefore is that the boost required to maintain a certain load varies.

When thinking about MAF, there is a correspondence between airflow and power and between load and torque. The load increases with boost there is also a correspondence between boost and torque. Assuming all the air into the engine is combusted, each g/sec of air becomes a number Joules/sec of energy (and 1 J/s = 1 Watt). Approximately 1 g/s of airflow corresponds to 1kW of power at the clutch. Likewise, with boost, the manifold pressure is proportional to the engine load (and hence the air/fuel burnt per combustion event) and hence the torque.

With the following boost limits, we can either take the view that the load limits already in place will lead to boost levels that are achievable by the turbo. In that case, we can remove these limits (by setting a maximum setpoint value of 4 across various tables as set out below).

For practical purposes, this assumes we will not be running near the limits of the turbo and we won't then be hammering the car over the Alps on a hot day. Where that is the case, we should consider realistic limits on boost setpoint, around 2.8 for example.

We should mention that MHD+ provides an alternative set of boost limit tables based on RPM and gear. This provides a straightforward way to both vector the torque and prevent the turbo from blowing up. The key feature of load-based tuning is that we set the torque and, regardless of temperature, altitude, etc, the DME adjusts the output of the turbo to meet this. In the MHD+ boost-based approach, if you set 20psi as the max boost, that is the max boost and that will produce different levels of performance as the driving conditions differ. Nonetheless, a common assumption with tuning for performance is that we do want to max out out the turbo, eeking out whatever performance the driving conditions will allow, so the MHD+ approach is a simpler way of achieving this. We will go ahead without MHD+ here because we are recalibrating the OEM tune but readers should also consider the MHD+ approach.

Boost Limit multiplier[edit]

BMW name: KF_FPLDMAX

Dimension: 2D, table

Categories: Boost

Unit info: g/s, °C --> pressure ratio

Base:

      291.7 313.9 333.3 361.1 375.0 388.9 402.8 423.6
 25.0   3.0   3.0   3.0   2.9   2.7   2.3   2.2   2.2
 30.0   3.0   3.0   3.0   2.9   2.7   2.3   2.2   2.2
 35.0   3.0   3.0   3.0   2.9   2.7   2.3   2.2   2.2
 40.0   3.0   3.0   3.0   2.9   2.7   2.3   2.2   2.2
 60.0   3.0   3.0   3.0   2.9   2.7   2.2   2.0   2.0
 80.0   3.0   3.0   3.0   2.9   2.7   2.2   2.0   2.0

Modified:

      291.7 313.9 333.3 361.1 375.0 388.9 402.8 423.6
 25.0   2.8   2.8   2.8   2.8   2.8   2.8   2.8   2.8
 30.0   2.8   2.8   2.8   2.8   2.8   2.8   2.8   2.8
 35.0   2.8   2.8   2.8   2.8   2.8   2.8   2.8   2.8
 40.0   2.8   2.8   2.8   2.8   2.8   2.8   2.8   2.8
 60.0   2.8   2.8   2.8   2.8   2.8   2.8   2.8   2.8
 80.0   2.8   2.8   2.8   2.8   2.8   2.8   2.8   2.8

Notes:

This is a turbo pressure ratio limit vs temperature.

Boost set point limit[edit]

BMW name: KL_FPLDPUMP

Unit info: g/s --> pressure ratio

Base:

138.9 148.6 166.7 180.6 201.4 222.2 236.1 291.9
  2.6   2.6   2.7   2.7   2.8   2.9   3.0   3.0

Modified:

138.9 148.6 166.7 180.6 201.4 222.2 236.1 291.9
  2.8   2.8   2.8   2.8   2.8   2.8   2.8   2.8

Notes:

This table provides a boost setpoint limit vs airflow.

PID correction floor[edit]

Ref: PID correction floor

BMW name: BMWtchdiag_pct_WgPHi_M

Dimension: 2D, table

Categories: Boost, WGDC

Unit info: hPa, - --> %

Base:

       -300.0 -200.0 -100.0    0.0
   0.4   -4.0   -5.0   -6.0   -8.0
   0.6   -5.0   -6.5   -9.0  -12.0
   0.7   -6.0   -8.0  -11.0  -14.0
   1.0   -7.0  -11.0  -13.0  -15.0

Modified:

       -300.0 -200.0 -100.0    0.0
   0.4 -100.0 -100.0 -100.0 -100.0
   0.6 -100.0 -100.0 -100.0 -100.0
   0.7 -100.0 -100.0 -100.0 -100.0
   1.0 -100.0 -100.0 -100.0 -100.0

Notes:

We max out the values and rely on the PID loop working correctly without such limits.

PID correction ceiling[edit]

BMW name: BMWtchdiag_pct_WgPLo_M

Dimension: 2D, table

Categories: Boost, WGDC

Unit info: hPa, - --> %

Breakpoints: PID correction ceiling X (autogen) vs PID correction ceiling Y (autogen)

Base:

        0.0 100.0 200.0 300.0
  1.0  12.1  11.6  10.4   0.0
  1.4  11.6  10.4   3.3   0.0
  1.6  10.4   3.3   1.1   0.0
  1.8   0.0   0.0   0.0   0.0

Modified:

        0.0 100.0 200.0 300.0
  1.0  99.9  99.9  99.9  99.9
  1.4  99.9  99.9  99.9 99.9
  1.6  99.9  99.9  99.9 99.9
  1.8  99.9  99.9  99.9 99.9

Notes:

Again, values maxed out. We assume our gains will not get out of control.

Fuelling[edit]

Switch to run fuel maps and not 1.0 - set to FF[edit]

BMW name: S_AUSWAHL_FETTDELAY

Categories: Fuel

Base:

     0.0

Difference:

     1.0

Notes:

According to BMW's a2l file, the value is either 0 or 1 (not FF).

This stock DME setup wants to run stoich as much as possible. When the car is driven harder (e.g. above both 4000rpm and 100% load), the fuel tables might request a richer lambda but the DME will suppress this request if

  1. the request is sufficiently close to stoich anyway (the threshold for suppression of a richening request)
  2. the request hasn't been active for enough time (the very confusing named time before an enrichment interdiction is forbidden).

The other strand to this DME strategy is, when the exhaust does get too hot from running stoich at high load and rpm, to have an aggressive component protection mode that cuts the load and goes very rich.

Generally, we want a strategy that runs the fuel table assuming we ensure the fuel table requests enough fuel to prevent overheating. Component protection mode will still be there just in case.

Lambda threshold from which a richening request from fuel maps (KF_LABAS_XXX) is suppressed[edit]

BMW name: K_LA_FETTDELAY

Dimension: constant

Base:

     1.0

Modified:

     0.9

Notes:

Need to check the FR. Possibly, this value is ignored because of the switch to run fuel maps above (S_AUSWAHL_FETTDELAY). EcuTek's guide states Set this to the leanest value you want to run out of lambda 1, typically Lambda 0.9, do not set this to a rich value. Nonetheless, other tuners do set this value very rich (e.g. 0.6, 0.7) while logs of their tunes do not exhibit suppression of the fuel tables.


EGT Turbo Ceiling for switch to component protection[edit]

BMW name: KF_TA_ATLSOLL

Unit info: 1/min, % --> °C

Base:

       4000.0 5000.0 5500.0 5900.0
  70.0  980.0  980.0  980.0  980.0
 100.0  980.0  980.0  980.0  980.0
 130.0  980.0  980.0  980.0  980.0
 160.0  980.0  980.0  980.0  980.0

Modified:

       4000.0 5000.0 5500.0 5900.0
  70.0 1080.0 1080.0 1080.0 1080.0
 100.0 1080.0 1080.0 1080.0 1080.0
 130.0 1080.0 1080.0 1080.0 1080.0
 160.0 1080.0 1080.0 1080.0 1080.0

Notes:

Here we have three temperatures: turbo, pre-cat, and cat. They set the threshold temperature for component protection mode. Stock has 980, 900 and 950 degrees respectively. We bump up each by 100 degress.

It is worth noting that there is no exhaust temperature sensor. The DME calculates these values based on parameters like the mixture, the engine temp, the engine load, etc.


EGT Pre-cat Ceiling for switch to component protection[edit]

BMW name: KF_TA_VKSOLL

Unit info: 1/min, % --> °C

Base:

       2250.0 3000.0 4500.0 6500.0
  40.0  900.0  900.0  900.0  900.0
  80.0  900.0  900.0  900.0  900.0
 150.0  900.0  900.0  900.0  900.0
 180.0  900.0  900.0  900.0  900.0

Modified:

       2250.0 3000.0 4500.0 6500.0
  40.0 1000.0 1000.0 1000.0 1000.0
  80.0 1000.0 1000.0 1000.0 1000.0
 150.0 1000.0 1000.0 1000.0 1000.0
 180.0 1000.0 1000.0 1000.0 1000.0

EGT Cat Ceiling for switch to component protection[edit]

BMW name: KF_TA_IKSOLL

Unit info: 1/min, % --> °C

Base:

          0.0 2000.0 4000.0 7000.0
   0.0  950.0  950.0  950.0  950.0
  10.0  950.0  950.0  950.0  950.0
  60.0  950.0  950.0  950.0  950.0
 100.0  950.0  950.0  950.0  950.0

Modified:

          0.0 2000.0 4000.0 7000.0
   0.0 1050.0 1050.0 1050.0 1050.0
  10.0 1050.0 1050.0 1050.0 1050.0
  60.0 1050.0 1050.0 1050.0 1050.0
 100.0 1050.0 1050.0 1050.0 1050.0

Notes:

Another 100 degress bump.

Max load for L-stoich Adapt.[edit]

BMW name: BMWinjafs_fac_RatAirMax_T

Dimension: 1D, vector

Unit info: 1/min --> load %

Base:

1900.0 2000.0 2500.0 3000.0 3200.0 3300.0
 176.0  176.0  176.0  176.0  176.0  176.0

Notes:

This curve is currently above our max load curve, however, we note that, if lifting the load limit, we would want to raise this too.


Max rail diff[edit]

BMW name: BMWlpsd_p_RailDifMax_T

Dimension: 1D, vector

Unit info: MPa --> MPa

Base:

10.0 20.0 30.0 35.0
 3.5  3.5  3.5  3.5

Modified:

10.0 20.0 30.0 35.0
5.0   5.0  5.0  5.0

Notes:

This is the maxiumum allowed divergence from required rail pressure, before the ECU cuts load. The units are MPa (1 MPa = 10 bar = 145 psi). The maxiumum value is 39.99MPa. Given that the gen 1 fuel system operates at 200 bar, our value of 50 bar (i.e. 25%) should prevent any load cuts. We do not expect any fuel system problems at stage 1 but anyhow it is good to check the rail pressure deviation during logging.

Ignition[edit]

A (very) brief introduction[edit]

The DME uses ranges of ignition angles, with a safe value at one end and a normal value at the other end. (In the tunerpro XDFs, the word 'cold' is used in place of 'safe'. BMW engineers use sicher). It then uses a timing factor of between 0% and 100% to interpolate between the safe and normal end of the range.

The timing factor, which is loggable in MHD, indicates how agressive the DME wants to be with timing. It incorporates data from driving mode, engine temperature, knock history, etc.

In practice, a warmed up car, in DSC Off mode with decent fuel should see a timing factor of 100%. Also in practice, the difference between the safe and normal maps is generally zero for all loads above 100%.

The DME also includes two timing paths, path 1 and path 2. According to EcuTek, path 1 is the common path used when the DME controls airflow with Vanos and valvetronic. The DME only switches to path 2 in throttled operation.

There are an additional set of spool mode timing maps, with substantially retarded timing. The idea is that by reducing the combustion energy put into the crank, there is an increase in energy into the exhaust.

The DME applies knock corrections after timing interpolation. This means the values in the timing maps are maximum timing advances. The DME will never use more timing. In other words, you are setting the advance for the highest octane fuel and best driving conditions for the tune.

The last thing to mention is

  • timing advance increases with RPM
  • timing advance decreases with load
  • Near TDC, quite large changes in crank angle only produce small changes in piston height. On the other hand, the piston becomes more sensitive to changes in crank angle. This means, as timing advance increases, timing changes require smaller increments.

The background above should hopefully provide enough for you to understand the DME timing tables (at least those listed in the XDF) and our stage 1 strategy for timing changes. What is this strategy? We will leave the stock timing for normal/cold, path 1/path2 but retard the spool mode timing to provide more aggressive spool up of the turbo.

We note that the stock timing maps are defined up to 180% load and a stage 1 car should not fall off the end of this map, but it is worth logging to check.

Timing (spool, path 1)[edit]

Brief description: KF_ZW_UESP_PF1

Unit info: 1/min, % --> °

Base:

     1000 1250 1500 1750 2000 2250 2500 2750 3000 3250
  30 10.5 10.5 12.5 15.0 16.5 19.5 20.5 23.5 25.0 25.5
  40  6.5  9.0 11.5 14.0 17.0 18.5 19.5 21.5 23.0 25.0
  50  5.5  9.5 11.5 14.0 17.0 18.5 19.0 22.0 22.5 23.0
  60  4.5  9.5 11.5 14.0 17.0 18.5 19.0 20.0 20.0 20.5
  70  3.5  8.0 10.5 13.0 14.5 14.5 16.0 17.0 17.5 19.5
  80  1.0  4.5  7.5 10.5 13.5 13.5 14.0 15.0 16.0 19.5
  90  1.0  4.5  7.5 10.0 12.5 13.5 14.5 16.0 16.5 17.0
 100 -2.0  2.5  6.5  9.0 11.0 12.5 13.0 13.0 13.5 16.0
 110 -2.0  0.5  4.0  7.5  9.5 11.0 12.5 12.5 13.0 13.5
 120 -3.5 -2.0  2.5  5.5  7.5  9.0 11.0 11.0 12.0 12.5
 130 -3.5 -2.5  1.0  4.0  6.0  8.0  9.0 10.0 10.5 11.0
 140 -3.5 -3.5  1.0  2.0  5.0  6.5  7.5  8.5  9.0  9.0
 160 -3.5 -4.0  0.0  0.5  3.0  4.5  5.0  6.5  6.5  6.5
 180 -3.5 -6.5 -1.5 -1.0 -0.5  1.0  5.0  6.5  6.5  6.5

Difference:

Here we have chosen a difference at low load and a difference at high load and interpolated between the two. e.g. at 1000 RPM, we are interpolating between 0 and -3.5. at 3250 RPM we are interpolating between -5 and -8.

        1000  1250  1500  1750  2000  2250  2500  2750  3000  3250
   30      0     0    -2    -3    -4    -5    -5    -5    -5    -5
   40   -0.3  -0.3  -2.2  -3.2  -4.2  -5.2  -5.2  -5.2  -5.2  -5.2
   50   -0.5  -0.6  -2.5  -3.5  -4.5  -5.5  -5.5  -5.5  -5.5  -5.5
   60   -0.8  -0.9  -2.7  -3.7  -4.7  -5.7  -5.7  -5.7  -5.7  -5.7
   70   -1.1  -1.2  -2.9  -3.9  -4.9  -5.9  -5.9  -5.9  -5.9  -5.9
   80   -1.3  -1.5  -3.2  -4.2  -5.2  -6.2  -6.2  -6.2  -6.2  -6.2
   90   -1.6  -1.8  -3.4  -4.4  -5.4  -6.4  -6.4  -6.4  -6.4  -6.4
   100  -1.9  -2.2  -3.6  -4.6  -5.6  -6.6  -6.6  -6.6  -6.6  -6.6
   110  -2.2  -2.5  -3.8  -4.8  -5.8  -6.8  -6.8  -6.8  -6.8  -6.8
   120  -2.4  -2.8  -4.1  -5.1  -6.1  -7.1  -7.1  -7.1  -7.1  -7.1
   130  -2.7  -3.1  -4.3  -5.3  -6.3  -7.3  -7.3  -7.3  -7.3  -7.3
   140  -3.0  -3.4  -4.5  -5.5  -6.5  -7.5  -7.5  -7.5  -7.5  -7.5
   160  -3.2  -3.7  -4.8  -5.8  -6.8  -7.8  -7.8  -7.8  -7.8  -7.8
   180  -3.5    -4    -5    -6    -7    -8    -8    -8    -8    -8


Modified:

The effect is a timing map that is generally retarded with respect to the stock map.

        1000   1250  1500  1750  2000  2250  2500  2750  3000  3250
   30   10.5  10.5   10.5  12.0  12.5  14.5  15.5  18.5  20.0  20.5
   40    6.2   8.7    9.3  10.8  12.8  13.3  14.3  16.3  17.8  19.8
   50    5.0   8.9    9.0  10.5  12.5  13.0  13.5  16.5  17.0  17.5
   60    3.7   8.6    8.8  10.3  12.3  12.8  13.3  14.3  14.3  14.8
   70    2.4   6.8    7.6   9.1   9.6   8.6  10.1  11.1  11.6  13.6
   80   -0.3   3.0    4.3   6.3   8.3   7.3   7.8   8.8   9.8  13.3
   90   -0.6   2.7    4.1   5.6   7.1   7.1   8.1   9.6  10.1  10.6
   100  -3.9   0.3    2.9   4.4   5.4   5.9   6.4   6.4   6.9   9.4
   110  -4.2  -2.0    0.2   2.7   3.7   4.2   5.7   5.7   6.2   6.7
   120  -5.9  -4.8   -1.6   0.4   1.4   1.9   3.9   3.9   4.9   5.4
   130  -6.2  -5.6   -3.3  -1.3  -0.3   0.7   1.7   2.7   3.2   3.7
   140  -6.5  -6.9   -3.5  -3.5  -1.5  -1.0   0.0   1.0   1.5   1.5
   160  -6.7  -7.7   -4.8  -5.3  -3.8  -3.3  -2.8  -1.3  -1.3  -1.3
   180  -7.0 -10.5   -6.5  -7.0  -7.5  -7.0  -3.0  -1.5  -1.5  -1.5

VANOS and Valvetronic[edit]

In this section, we can adopt the VANOS changes used in MPPSK tune, or we can leave it stock. Read the vanos and valvetronic section first. We will also describe a couple of valvetronic tweaks that are used by other tuners but that (I think) are also optional (read the notes below for more information).

Max valve lift (10ms)[edit]

Brief description: KF_HUB_GRDMX

Unit info: 1/min, mm --> mm

Base:

        500  1000  1500  2000  2500  3000
 2.00 10.00 10.00 10.00 10.00 10.00 10.00
 3.00 10.00 10.00 10.00 10.00 10.00 10.00
 4.00 10.00 10.00 10.00 10.00 10.00 10.00
 5.00 10.00 10.00 10.00 10.00 10.00 10.00
 6.00 10.00 10.00 10.00 10.00 10.00 10.00
 7.00 10.00 10.00 10.00 10.00 10.00 10.00

Modified:

        500  1000  1500  2000  2500  3000
 2.00 10.70 10.70 10.70 10.70 10.70 10.70
 3.00 10.70 10.70 10.70 10.70 10.70 10.70
 4.00 10.70 10.70 10.70 10.70 10.70 10.70
 5.00 10.70 10.70 10.70 10.70 10.70 10.70
 6.00 10.70 10.70 10.70 10.70 10.70 10.70
 7.00 10.70 10.70 10.70 10.70 10.70 10.70

Notes:

This table is the maxiumum change in valvetronic setpoint in each 10ms DME cycle. We lift this up to 10.7.

Maximum intake valve lift (Kennfeld maximaler Einlassventilhub)[edit]

Then we also extend the total valve lift to 10.7mm.

Brief description: KF_EHUB_MX

Unit info: 1/min, % --> mm

Base:

          660   1000   2000   2500   4500   7000
 80.33   9.97   9.97   9.97   9.97   9.97   9.97
 89.78   9.97   9.97   9.97   9.97   9.97   9.97
 99.23   9.97   9.97   9.97   9.97   9.97   9.97
151.20   9.97   9.97   9.97   9.97   9.97   9.97
170.10   9.97   9.97   9.97   9.97   9.97   9.97
189.00   9.97   9.97   9.97   9.97   9.97   9.97

Modified:

          660   1000   2000   2500   4500   7000
 80.33  10.70  10.70  10.70  10.70  10.70  10.70
 89.78  10.70  10.70  10.70  10.70  10.70  10.70
 99.23  10.70  10.70  10.70  10.70  10.70  10.70
151.20  10.70  10.70  10.70  10.70  10.70  10.70
170.10  10.70  10.70  10.70  10.70  10.70  10.70
189.00  10.70  10.70  10.70  10.70  10.70  10.70

Valve lift (main)[edit]

Brief description: GKF_EHUB_NORM_WARM_LAST

Unit info: 1/min, % --> -

Base:

        500  600  800 1000 1100 1250 1500 1750 2000 2250 2500 2750 3000 3250 3500 4000 4500 5000 6000 7000
   ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...
  80.1  5.2  5.7  8.1  8.7  8.8  8.9  9.2  9.5  9.6  9.8  9.8  9.8  9.8  9.8  9.8  9.8  9.8  9.8  9.8  9.8
 100.0  9.8  9.8  9.8  9.8  9.8  9.8  9.8  9.8  9.8  9.8  9.8  9.8  9.8  9.8  9.8  9.8  9.8  9.8  9.8  9.8


Modified:

         500  600  800 1000 1100 1250 1500 1750 2000 2250 2500 2750 3000 3250 3500 4000 4500 5000 6000 7000
    ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...
   80.1  5.2  5.8  8.5  8.7  8.8  8.9  9.5  10.0 10.5 10.5 10.5 10.5 10.5 10.5 10.5 10.5 10.5 10.5 10.5 10.5
  100.0  10.5 10.5 10.5 10.5 10.5 10.5 10.5 10.5 10.5 10.5 10.5 10.5 10.5 10.5 10.5 10.5 10.5 10.5 10.5 10.5

Notes:

Here we are maxing out the valve lift at boosted loads.

Note, however, logging shows that the valve lift with these settings does not exceed 9.72mm. There is also a cold valvetronic setpoint, GKF_EHUB_NORM_KALT_LAST, plus a miller cycle setpoint, GKF_EHUB_NORM_WARM_MILLER, plus belnding factors. These three tables share the same axes though only one is in the XDF file. It might require a bit of a deeper dive. It is possible that this change is doing nothing and can be ditched or that other valvetronic setpoints need adjusting (there are at least a dozen tables, which all feed into the valve lift calculation, BMW_MOD_BlsHub_HubevsollKF_10ms).

Loose ends[edit]

Coolant targets[edit]

You can use MHD's stock or sport presets for coolant temperature. Alternatively, the temperature target table in the XDF has the following scheme:

You can log the DME's coolant target using measurement Tkwsoll.

Performance gauge scaling (power)[edit]

Ref: Perf display scaling - power

BMW name: K_EDA_P_ANZ_SPORT_BS_SCAL_CODE3...K_EDA_P_ANZ_SPORT_BS_SCAL_CODE0

Categories: Boost

Base:

40 50 40 40

Modified:

44 55 44 44

Notes:

Not really necessary, but we could up the power guage to 440HP.