Чип-тюнингкурс с нуля

Модуль 04. Карты: 1D, 2D, 3D, оси и формат данных#

Карта (map, таблица, характеристика, Kennfeld) — основная единица работы калибровщика. В этом модуле вы научитесь читать карту прямо из hex-дампа без всякого софта. Это ключевой навык: софт вы можете не найти, а понимание формата данных работает всегда.


04.1 Что такое карта#

Инженер завода написал программу с формулой вида:

zw = KFZW(nmot, rl);   // угол опережения = функция(обороты, наполнение)

KFZW — это не формула, а массив чисел в памяти, из которого функция интерполяции достаёт значение. Меняя эти числа, вы меняете поведение мотора, не трогая код.

Карта состоит из трёх частей:

┌────────────────────────────────────────────┐
│  ОСЬ X (breakpoints)  — входная величина 1  │  ← например, обороты
├────────────────────────────────────────────┤
│  ОСЬ Y (breakpoints)  — входная величина 2  │  ← например, наполнение
├────────────────────────────────────────────┤
│  ДАННЫЕ (X × Y значений)                    │  ← например, угол
└────────────────────────────────────────────┘

Оси могут лежать рядом с данными, а могут быть общими для десятков карт и лежать совсем в другом месте файла (так делает Bosch — экономия памяти).


04.2 Размерности#

1D — константа (скаляр)#

Одно число. Входа нет.

Отсечка по оборотам = 6800
Максимальная скорость = 250
Порог включения вентилятора = 101 °C

В WinOLS/TunerPro они выглядят как «Value». Самые лёгкие для правки и самые опасные — ошиблись в множителе, и вместо 6800 получили 68000.

2D — кривая (одномерная характеристика)#

Один вход → один выход. Записывается как две строки: ось и значения.

Коррекция УОЗ по температуре воздуха:

Ось X (IAT, °C):   -20    0    20    40    60    80
Значения (°, +/-): +1.5  +1.0  0.0  -1.5  -4.0  -8.0

Между узлами — линейная интерполяция. При IAT = 30 °C:

(0.0 + (-1.5)) / 2 = -0.75°

За пределами крайних узлов — значение не экстраполируется, а удерживается (clamp). Это важно: если вы правите карту, а ось заканчивается на 80 °C, то при 110 °C ЭБУ применит значение для 80.

Типовые 2D-карты: - Характеристика ДМРВ: напряжение → г/с - Мёртвое время форсунки: напряжение бортсети → мс - Коррекция УОЗ по температуре ОЖ - Целевые обороты ХХ по температуре - Атмосферная коррекция наддува по высоте - Кривая давления в рампе по IQ

3D — таблица (двумерная характеристика, Kennfeld)#

Два входа → один выход. Классическая «карта».

УОЗ, градусы                     ОСЬ X: обороты
              800  1200  1600  2000  2400  3200  4000  5000  6000
       0.15 │ 12    18    24    30    34    38    40    41    40
       0.25 │ 10    16    22    27    31    35    37    38    37
О      0.35 │  8    14    19    24    28    32    34    35    34
С      0.45 │  6    12    17    21    25    29    31    32    31
Ь      0.55 │  5    10    14    18    22    26    28    29    28
       0.70 │  4     8    12    15    18    22    24    25    24
Y      0.85 │  3     6    10    13    16    19    21    22    21
(нагр) 1.00 │  2     5     8    11    14    17    19    20    19
       1.30 │  0     2     5     8    10    13    15    16    15  ← наддув
       1.70 │ -2     0     2     5     7    10    12    13    12

Читается: при 4000 об/мин и нагрузке 0.85 угол = 21°.

Заметьте закономерности — они универсальны и по ним вы будете опознавать карты в незнакомой прошивке: - УОЗ растёт с оборотами (нужно больше времени на сгорание) - УОЗ падает с нагрузкой (больше смеси — быстрее фронт + риск детонации) - На высоких оборотах угол выполаживается или чуть падает - Значения гладкие, без ступенек

Интерполяция в 3D — билинейная#

Точка (3600 об, 0.80 нагрузки) попадает между 4 узлами:

        3200      4000
0.70 │   22   ──   24
     │    │         │
0.85 │   19   ──   21

Сначала по X:

при 3600: (22+24)/2 = 23.0 (для Y=0.70)
при 3600: (19+21)/2 = 20.0 (для Y=0.85)

Потом по Y (0.80 — это 2/3 пути от 0.70 к 0.85):

23.0 + (20.0 - 23.0) × (0.80-0.70)/(0.85-0.70) = 23.0 - 2.0 = 21.0°

Практическое следствие №1: правя одну ячейку, вы влияете на область вокруг неё, а не на точку. Одиночная «выдающаяся» ячейка создаёт бугор.

Практическое следствие №2: карту нужно держать гладкой. Резкие переходы между соседними ячейками = рывки при езде, потому что мотор проходит эту границу при малейшем изменении педали. Правило: разница между соседними ячейками не должна быть больше, чем на 2–3 шага типичного градиента карты.

«4D» и слои#

Формально больше 3 измерений в ЭБУ не бывает — вместо этого делают: - набор 3D-карт, переключаемых по условию (например, отдельная карта УОЗ для каждого положения VVT, интерполяция между ними); - умножающие 2D-коррекции поверх основной карты (по IAT, ОЖ, октану, EGR).

Итоговое значение почти всегда:

результат = основная_3D(X,Y) × коррекция_A(Z) + коррекция_B(W) − откат_детонации

Отсюда важнейшее для новичка: правка основной карты не даёт того, что вы ожидаете, если коррекция сверху её съедает. Всегда ищите весь тракт, а не одну карту.


04.3 Как карта лежит в бинарнике#

ЭБУ хранит числа в целочисленном виде. Физическая величина получается пересчётом:

физическая величина = raw × factor + offset

factor и offset — это то, что определяет калибровщик (или что записано в DAMOS/XDF). Раз их нет в самом файле, при самостоятельном реверсе вы их подбираете по здравому смыслу.

Типы данных#

Тип Байт Диапазон Где встречается
uint8 1 0…255 Старые ЭБУ, компактные карты. Самый частый
int8 1 −128…127 Коррекции со знаком
uint16 2 0…65535 Современные, точные величины
int16 2 −32768…32767 Коррекции, УОЗ, момент
uint32 / float 4 Редко в картах, чаще константы

Порядок байт (endianness)#

Для 16-битных величин важно, в каком порядке лежат байты:

Значение 0x1234 (=4660)
  Big-endian (Motorola):    12 34
  Little-endian (Intel):    34 12
Процессор Порядок
Renesas SH7055/SH7058 (Subaru, Denso) Big-endian
Infineon TriCore (Bosch EDC17/MED17) Little-endian
Infineon C167/ST10 (Bosch ME7, EDC15/16) Little-endian
Freescale/NXP MPC5xx / PowerPC (Ford, Siemens) Big-endian
Renesas RH850 / V850 Little-endian
Motorola 68HC11/12 (старые GM/Ford) Big-endian

Если карта в hex-редакторе выглядит как хаос, а при смене endianness — как гладкая поверхность, вы угадали формат. Это основной приём.


04.4 Разбор реального примера руками#

Допустим, в hex-редакторе по адресу 0x1A400 вы видите:

0001A400  0C 12 18 1E 22 26 28 29 28  0A 10 16 1B 1F 23 25 26 25
0001A412  08 0E 13 18 1C 20 22 23 22  06 0C 11 15 19 1D 1F 20 1F
0001A424  05 0A 0E 12 16 1A 1C 1D 1C  04 08 0C 0F 12 16 18 19 18
0001A436  03 06 0A 0D 10 13 15 16 15  02 05 08 0B 0E 11 13 14 13

Разбираем:

Шаг 1. Определить размерность. Строки повторяются с периодом 9 байт, всего 8 строк. Значит таблица 9 × 8, тип uint8.

Шаг 2. Посмотреть на характер. Внутри строки значения растут, потом чуть падают. От строки к строке — монотонно убывают. Это типичный профиль карты УОЗ.

Шаг 3. Подобрать множитель. Возьмём 0x29 = 41. Если factor = 1.0, получаем 41° — реалистично для пика УОЗ. Если factor = 0.75, будет 30.75° — тоже реалистично. Минимум 0x02 = 2 → 2° или 1.5°. Оба варианта правдоподобны. Уточняется сравнением с live-data из машины: смотрим в логе фактический УОЗ на конкретных оборотах/нагрузке и подгоняем.

Шаг 4. Найти оси. Ищем непосредственно перед или после данных последовательность из 9 возрастающих байт и из 8 возрастающих байт. Обороты обычно кодируются как об/мин ÷ 40 (при uint8, до 10 200 об/мин) или ÷ 32. Например:

14 1E 28 32 3C 50 64 78 8C   = 20,30,40,50,60,80,100,120,140

При множителе 40 → 800, 1200, 1600, 2000, 2400, 3200, 4000, 4800, 5600 об/мин. Осмысленно → это ось оборотов.

Шаг 5. Проверить на машине. Меняем одну заметную ячейку на явно другое значение, пишем, смотрим live-data УОЗ в этом режиме. Совпало — карта опознана и множитель верен. Это называется верификация правкой и это единственный надёжный способ. Подробно — в модуле 10.

Никогда не «определяйте» карту только по виду. Формы карт похожи (УОЗ, VE, момент, целевая λ на нагрузке — все гладкие поверхности). Пока не проверили на машине — это гипотеза.


04.5 Как карту править: методика, а не «прибавить 10 %»#

Правило 1: одна правка за проход#

Если вы одновременно подняли наддув, изменили УОЗ и обогатили смесь, и результат стал хуже — вы не знаете, что из трёх виновато.

Правило 2: направление от безопасного к предельному#

  • УОЗ добавляют от заведомо позднего к раннему, шаг 1–2°, до появления первых признаков детонации, затем минус 2–3° запаса.
  • Наддув поднимают от низкого, шаг 0.1 бар.
  • Топливо на ПН сначала обогащают заведомо (λ 0.80), потом осторожно обедняют к целевому.

Правило 3: сохраняйте гладкость#

После правки посмотрите на карту в 3D-виде (WinOLS/TunerPro умеют). Ямы и пики — это места, где машина будет дёргаться. Многие редакторы имеют функции Smooth / Interpolate — пользуйтесь ими.

Плохо:              Хорошо:
20 21 35 22 23      20 21 22 23 24
                    (не «выкололи» одну ячейку)

Правило 4: правьте зону, а не всю карту#

Умножение всей карты на 1.1 — это то, что делают файлы из каталогов. Настоящая калибровка меняет только те области, которые действительно посещаются и где действительно есть запас. Плотность посещения ячеек берётся из лога (модуль 10).

Правило 5: проверяйте ограничители#

Изменив основную карту, найдите все карты, которые могут её ограничить: clamp'ы, лимиты по моменту, по температуре, по высоте, аварийные.

Типовые операции в редакторах#

Операция Когда
Add / Subtract (add value) Сдвиг УОЗ на −2° по всей карте
Multiply (%) Масштабирование VE, топлива, наддува
Interpolate (по горизонтали/вертикали/2D) Сгладить после точечных правок
Smooth Убрать шум после автоматической коррекции по логу
Copy/Paste из другой прошивки Перенос карт из более мощной заводской версии — очень мощный приём
Rescale axis Изменить оси под другой диапазон (например, MAP до 3 бар)
Fill Плоское значение для отладки

04.6 Приём «донор от завода»#

Один из самых надёжных методов калибровки для начинающего:

Найдите заводскую прошивку более мощной версии того же мотора (или того же мотора для другого рынка / без ограничения / с более высоким октаном). Возьмите карты оттуда.

Почему это работает: - Карты сделаны заводом, а не вами → они прошли валидацию и испытания. - Они гарантированно согласованы между собой (момент, УОЗ, топливо, наддув, защиты — из одного комплекта). - Ограничители тоже оттуда → не будете ловить арбитраж момента.

Ограничения: - Различия в железе (форсунки, турбина, ГБЦ, степень сжатия) делают прямой перенос опасным. Проверяйте по каталогу деталей. - Разные версии ЭБУ = разные адреса. Переносить надо по смыслу (через DAMOS/XDF), а не по адресам. - Датчики могут отличаться по масштабу (MAP 2.5 бар против 3 бар) — это ломает всё, если не заметить.


04.7 Мини-справочник: как выглядят типовые карты#

Учитесь опознавать по форме и диапазону.

Карта Оси Тип. диапазон Форма
УОЗ (бензин) об × нагрузка −10…+45° Растёт вправо, падает вниз
VE / наполнение об × MAP 30…120 % Горб в зоне макс. момента
Целевая λ об × нагрузка 0.75…1.05 Плато 1.00, ныряет вниз в правом-нижнем углу
Целевой наддув об × запрос 0…2.5 бар абс. Растёт вправо и вверх, плато
WGT duty (упреждение) об × цель 0…100 % Растёт с целью, падает с оборотами
Мёртвое время форсунки напряжение (2D) 0.4…2.0 мс Убывающая кривая
Характеристика MAF напряжение (2D) 0…600 г/с Экспоненциальный рост
IQ дизеля об × запрос момента 0…80 мг/такт Растёт вправо-вверх
Дымовой ограничитель об × масса воздуха 0…100 мг/такт Почти линейный по воздуху
Давление рампы об × IQ 250…2200 бар Растёт вправо-вверх
SOI дизеля об × IQ −5…+20° до ВМТ Растёт с оборотами
Момент (KFMIOP) об × наполнение 0…600 Н·м Плавная монотонная поверхность
Целевые обороты ХХ T ОЖ (2D) 600…1400 Убывающая кривая

Практическое задание#

  1. Скачайте любую открытую прошивку с определением карт: - Subaru: ROM + XDF/def из RomRaider (romraider.com, ECU definitions) — самый удобный учебный полигон, всё бесплатно и легально. - или ВАЗ Январь/Bosch M7.9.7 + описания из ChipTuner.
  2. Откройте ROM в hex-редакторе (HxD, ImHex) и в TunerPro (с XDF). Найдите в TunerPro карту УОЗ, посмотрите её адрес, перейдите на этот адрес в hex-редакторе. Убедитесь, что видите те же числа. Это упражнение делает всё остальное осмысленным.
  3. Найдите оси этой карты в hex. Проверьте формулу пересчёта.
  4. Измените одно значение в hex-редакторе, откройте в TunerPro — увидели ли изменение? Теперь наоборот: измените в TunerPro, посмотрите в hex.
  5. Постройте 3D-вид карты. Найдите зону максимального УОЗ. Объясните, почему она там.

Следующий модуль: 05. Железо

КПЦ — Комплекс Промышленной Цифровизации · kpc-control.ru

Материал носит образовательный характер. Работы, влияющие на состав отработавших газов и экологический класс ТС, а также корректировка показаний одометра курсом не рассматриваются как допустимая практика — см. модуль 00.