Как известно в BMW E39 есть функционал уведомления водителя о различных проблемах, к примеру(уровень омыйки, перегорела лампочка, открыта дверь/багажник и т.д.). Всем этим занимается блок LCM. Среди прочих функций также есть проверка температуры охлаждающей жидкости и в случае достижения критического значения водитель тут же будет уведомлён. Согласитесь, это намного информативнее чем просто наблюдать за стрелкой. Как стрелка заползёт в красную зону, можно не сразу и заметить, а если не заметить это черевато ремонтом и большими денежными затратами. Ситуацию ещё усугубляет две вещи:
— калибровка стрелки индикатора температуры: она остаётся в неподвижной в диапазоне температуры 75-115гр. К примеру зимой: если у вас заклинил термостат в открытом положении и мотор не прогревается — вы этого по стрелке не заметите. Летом, если вдруг по какой-либо причине мотор начнёт перегреваться — вы этого также не заметите пока не наступит критическая температура.
— уведомление на приборку выскочит только когда температура достигнет 125гр.
Согласитесь, не слишком хочется "кипятить" мотор до 115-125 гр, чтоб узнать что имеются проблемы по системе охлаждения. Не совсем понятно почему инженеры BMW сделали именно такие условия и диапазон отображения температуры. Тут есть два варианта: либо 115-125гр не такая уж и страшная температура для двигателя(в чём я сомневаюсь) или сделано это нарошно, чтоб двигатель с большей вероятностью умер и водитель поехал в сервис отдавать свои кровные за ремонт или покупку нового двигателя к той же компании BMW. Лично я склоняюсь ко второму варианту. В любом случае, намного лучше узнать о проблеме заранее а не "кипятить" движок до 120гр.
Вот сегодня мы и займёмся устранением этой особенности. Давным давно заметил опцию в BMW Scanner-е в блоке LCM — Max. Temp. Стояло там собственно 125гр. По сути за это отвечает параметр MOTOR_UEBERTEMP в кодировках блока LCM. Я тут же поправил её на 100 гр и начал ездить с уверенностью, что вдруг что, на 100 гр я узнаю о начале перегрева. Этой зимой решил проверить, а работает ли вообще этот функционал. Т. к. на зиму я снимал вискомуфту, решил проверить будет ли уведомление на ста градусах. Выключил печку и стоял на месте газовал, кое-как двигатель преодолел отметку 101 гр, а уведомления так и не последовало. Раз это не сработало, я предположил что за это уведомление отвечает сама приборка, тоесть блок IKE. В кодировках блока были обнаружены праметры:
— KUEHLMITTELTEMP_FEHLER_1 — COOLANT TEMPERATURE FAULT 1(LOWER LIMIT)
— KUEHLMITTELTEMP_FEHLER_2 — COOLANT TEMPERATURE FAULT 2(UPPER LIMIT).
Правда исходя из дампа в "Upper Limit" стояло 232 гр, что вызывало некие сомнения. Взяв адрес этого параметра из NCS Dummy и поправив число по этому адресу в EEPROM на 88гр, пошёл проверять. Мотор нагрелся — уведомления так и не было. Далее было предположение, что уведомление выскакивает при "заходе" стрелки в красную зону. Ну что ж, перекалибровываем показания стрелки. В кодировочных индексах находим параметр KUEHLMITTELTEMP_ADC_WERT — COOLANT TEMPERATURE ANALOG-TO-DIGITAL CONVERSION VALUE. Открываем EEPROM приборки в Hex редакторе и правим числа по полученному адресу(как оказалось позже, данные манипуляции надо произвести в двух местах по адресу 0x0F и 0x290).
Для простоты можно воспользоваться материалом с с форума e46fanatics и воспользоваться утилитой E46 Temp Gauge Hex Generator.
Вот так я откалибровал себе стрелку. Но ранее, в целях проверки, заведома занизил числа, чтоб стрелка вошла в красную зону. Стрелка ложилась даже в максимум, но уведомления и гонга так и не последовало :(
Значит предположение о том, что этим уведомлением занимается приборка, было неправильным. После всех этих проделаных манипуляций было решено вернуться к блоку LCM. После очередного мониторинга кодировачных индексов был обнаружен интересный параметр: KUEHLMITTELUEBERTEMP_CAN — CAN-BUS COOLANT OVERHEATING. Было выдвинуто предположение, что блок LCM получает уведомление о перегреве от блока DDE по CAN, и далее кидает предупреждение на приборку. Перелопатив мануал от Bosch-a по блоку EDC15C4(он же DDE4 по класификации BMW) почему-то мне не удалось найти карту, в которой хранится максимально допустимая температура.
Ну и последнее предположение, которое мне пришло в голову: если этот параметр деактивировать, возможно LCM будет сравнивать температуру с параметром MOTOR_UEBERTEMP(о котором мы говорили вначале), а не ждать команду от DDE по CAN.
Выезжаю на дорогу, и уже перед самой работой слышу гонг и надпись на приборке — "COOLANT TEMPERATURE". Ну наконец-то, после стольких манипуляций я таки разобрался как работает данный функционал. Надеюсь кому-то данное иследование будет полезным, а тому кто проделает подобный "трюк" — сохранит мотор.
P. S. В параметре MOTOR_UEBERTEMP можно выбрать только два значения: 125гр и 130гр. Поэтому есть два варианта:
— значение это надо прописывать через BMW Scanner, но при этом надо помнить что: т. к. такого значения в кодировочном индексе нету, при последующем любом кодировании блока LCM, этот параметр вернётся в значение по-умолчанию и нужно будет повторно его прописывать.
— модифицировать кодировочный индекс и добавить туда новый параметр со своим значением(сделать это проще всего через NCS Dummy и не забыть сделать Module Functions->Update Module).
Update 31.01.2019:
Благодаря комментариям, помогли найти параметры непосредственно в прошивке EDC15C4:
0x71FBC — cawUEB_T1 — untere Uebertemperaturschwelle
0x71FBE — cawUEB_T2 — obere Uebertemperaturschwelle