19/10/2025
Trochę o N43B20 z BMW i sterownikach MSD80/81.2, a dokładniej, o limicie mocy/momentu w ich logice. Trochę się doświadczałem przy okazji "pracy nad" EGR, modyfikacji czujnika NOX aby go nie rżnąć jak to robią inni i przez to, bez niego te samochody palą jak smok Wawelski ;)
W sterownikach MSD80/81.2 stosowanych w jednostkach N43 różnice między wersjami mocy nie wynikają z osobnych kalibracji ani innego firmware. 118i i 120i to w praktyce ta sama jednostka napędowa, ten sam hardware i ten sam sterownik – różnicę mocy determinuje wyłącznie konfiguracja logiczna DME.
W jednej wersji oprogramowania współistnieją równolegle różne modele momentu bazowego. Sterownik wybiera odpowiedni zestaw na podstawie wewnętrznego kodowania, które decyduje, który z wariantów momentu bazowego zostanie użyty.
W strukturze CLAC (Calculated Load and Air Charge) można wyróżnić m.in.:
- KF_MDIBAS_S
- KF_MDIBAS_HS
(screen w załączeniu - zaznaczam, że na screenie, nie są to mapy momentu maksymalnego ani korekty, tylko element modelu matematycznego tego sterownika)
Oba modele opisują zależność pomiędzy żądaniem momentu a rzeczywistym obciążeniem. Różnią się nieliniowością i wartościami odniesienia. To wybrany wariant decyduje o tym, jak DME przelicza moment żądany na moment dostępny, a także o limitach momentu, reakcji przepustnicy i charakterystyce przy obciążeniu.
Różnice liczbowe między mapami są niewielkie — kilka procent w rejonie średnich i wysokich obrotów. Wystarcza to jednak, by zmienić sposób, w jaki sterownik interpretuje żądanie momentu, a tym samym uzyskać różne krzywe mocy przy tym samym fizycznym silniku.
Jedna binarka, jeden firmware, a dwa zupełnie różne profile pracy. Bez zmiany oprogramowania – decyzja o tym, z którego modelu korzysta DME, zapada wcześniej, na etapie konfiguracji.
Oczywiście tych silnikach można dodatkowo korygować moment obrotowy przez:
- VANOS,
- kąt zapłonu
- korekty lambda.
Ale to już inna historia...
---
Potwierdzenia techniczne:
W plikach A2L/DAMOS występują modele:
KF_MDIBAS_S / KF_MDIBAS_MS / KF_MDIBAS_HS
To różne warianty „base torque model” wykorzystywane przez CLAC.
Logika wyboru wariantu istnieje wewnątrz firmware.
W kodzie widoczna jest struktura warunkowa (if-variant), która decyduje, z której tabeli bazowej korzysta DME.
---
Fragment z MSD81.2 (TriCore ASM):
0000dada ld.bu d6,[a10]0x8
0000dade jz d8,0x0000daf2
0000dae0 jeq d8, ,0x0000db12
0000dae4 jeq d8, ,0x0000daf2
0000dae8 jeq d8, ,0x0000db22
0000daec jeq d8, ,0x0000db22
0000daf0 j 0x0000db30
0000daf2 jne d8, ,0x0000db04
0000daf6 mul d15,d6,
0000dafa ld.a a15,[a12]
0000dafc ld.a a15,[a15]
0000dafe addsc.a a15,a15,d15, ..
0000db12 ld.a a15,[a12]
0000db14 ld.a a15,[a15]
0000db16 addsc.a a15,a15,d15,
0000db18 ld.w d15,[a15]
Fragment z dekompilatu (C):
Function: FUN_0000daa2 @ 0000daa2..
piVar6 = *(int **)(*_DAT_c03fc100 + iVar3 * 0xc);
FUN_0000de98(piVar6,auStack_10);
uVar1 = (uint)local_8;
if (param_1 == 0) {
LAB_0000daf2:
if (param_1 == 2) {
iVar5 = *(int *)(_DAT_c03fc100[0xb] + uVar1 * 0xc);
} else {
iVar5 = *(int *)(_DAT_c03fc100[0xb] + uVar1 * 0xc + 4);
}
if (iVar5 == *piVar6) { uVar2 |= uVar4; }
}
else {
if (param_1 == 1) {
iVar5 = *(int *)(*_DAT_c03fc100 + iVar3 * 0xc + 8);
/* ... */
}
/* dla param_1==3 lub 4 przejście do innej ścieżki (FUN_0000db4e) */
}
---
Różnice w mapach momentu bazowego to zaledwie kilka procent,
ale to wystarcza, by przy tym samym silniku i tym samym sterowniku uzyskać inne wartości momentu i mocy. 118i i 120i to ten sam silnik, różniący się jedynie wyborem wariantu w logice DME.
Kiedyś, różnica w zakupie między 118i a 120i to ~14kzł. 🤔
P.S. Dla dociekliwych, do dekompilację można zyskać za pomocą programu Ghidra (processor tricore:LE:32:default) lub oczywiście IDA Pro.