Насколько сложно запустить приборную панель от автобуса, грузовика или ещё какой-то спецтехники и вывести на неё какие-нибудь данные? Возможно ли вообще это сделать? Самое время выяснить это, попробовав провернуть всё самому.
Итак, сегодня мы попробуем запустить дисплейный блок от приборной панели старого автобуса. Разберёмся, по какому протоколу он работает и что с ним ещё можно сделать. Как водится, будет много интересного.
Написано специально для облачного провайдера ▶️Timeweb Cloud и читателей Pikabu.
❯ Суть такова
Началось всё это довольно просто: ко мне в руки попал дисплейный модуль Kongsberg Automotive KAntrak 2710, снятый с какого‑то теперь уже неведомого автобуса на авторазборке.
Я давно интересовался, как работает электроника на подобном транспорте и какие у неё отличия в протоколе обмена или чём‑то ещё от того железа, что можно встретить на легковых автомобилях. Поэтому, заполучив девайс, было решено его запустить и попытаться что‑то отобразить на нём. Пригодиться это может много где, например, можно будет попробовать подключить железку к какому‑нибудь автосимулятору или использовать как блок индикации в каком‑нибудь следующем проекте.
❯ Что это вообще за KAntrak?
Для начала разберёмся с тем, что это вообще за штука.
Как легко понятно из документации, это специальный прибор для отображения параметров и диагностики на коммерческом транспорте.
У нас такие штуки ставилась на некоторые автобусы ЛиАЗ с двигателем MAN. Живьём мне довелось его увидеть на инструкторском пульте учебного автобуса ЛиАЗ 5292.22.
А вот этот же аппарат на приборной панели ЛиАЗ 5292.21 (справа от спидометра).
❯ Протоколы
Теперь разберёмся с тем, что вообще хочет на вход эта железка.
На легковом транспорте какого‑то стандарта коммуникации нет. Разные автопроизводители используют свои проприетарные протоколы. Существует, конечно, стандарты диагностики (например, знакомый многим OBD‑II), но к данным, которые отправляются на приборную панель, они не имеют отношения. Таким образом, чтобы заставить работать цифровой щиток приборов от какой‑то машины, надо либо подобрать адреса CAN, либо найти информацию о них (на тематических сайтах или путём записи обмена на шине).
Иначе обстоят дела на коммерческом транспорте — грузовиках, автобусах и спецтехнике. Там существует единый отраслевой стандарт — J1939. Для некоторого транспорта существуют другие протоколы, базирующиеся на нём же, но это редкая экзотика, в данный момент нас не интересующая. Более подробно о структуре данных рассказано тут.
Как следует из документации, KAntrak как раз поддерживает этот протокол. Помимо него упоминается ещё J1708/J1587 — ещё один стандартизированный протокол, использующий в качестве линии связи RS-485.
В J1939 сообщения передаются одним или несколькими пакетами CAN. Все пакеты имеют расширенный (29-битный) ID. Он представляет собой группу из трёх параметров: приоритет, PGN (Parameter Group Number) - код типа пакета или группы параметров (к примеру, PGN 65262 - температурные параметры), SA (Souce Address) — адрес блока, который послал это сообщение (к примеру, 0 — ЭБУ двигателя, 3 — блок управления КПП, 11 — ABS, 255 — зарезервированный код для широковещательной отправки).
Конкретный параметр определяет SPN (Suspect Parameter Number). Он не передаётся явно, спецификация J1939 (Digital Annex) для каждого PGN определяет в каких битах какого байта блока данных лежит этот параметр, в каком диапазоне он может лежать и какое разрешение имеет. Также имеется возможность передачи значений длиннее восьми байт путём использования специального транспортного протокола, но, скорее всего, нам всё это сейчас не понадобится.
❯ Обзор оборудования
Рассмотрим наш девайс поподробнее.
Сходу его вообще можно принять за часы или метеостанцию, но масса, качество пластика и разъём сзади вызывают интерес.
По центру разъём подключения (явно какой-то специфический, предназначенный специально для автомобильной промышленности). Крышка держится на четырёх саморезах. Один из них заклеен пломбой, которую мы, конечно же, отковыряем.
Это DEUTSCH DT06-12S от TE Connectivity, применяемый на коммерческом автотранспорте.
Конструкция довольно интересная, напоминает соединители СНЦ или Amphenol, где тоже в резиновый уплотнитель вставляются обжимные контакты.
Провода промаркированы печатью на них.
❯ Внутренности
Что мы делаем, когда к нам в руки попадает какая-то интересная железка? Правильно: мы её разбираем.
Открутив четыре самореза, снимаем переднюю часть.
К рамке дисплея приклеен термистор.
Всё самое интересное расположилось на обратной стороне платы.
Девайс построен на чипе Infineon SAK-C164CI-LM.
Это специализированный микроконтроллер на архитектуре C166, предназначенный для использования в промышленности и на автотранспорте.
Импульсный преобразователь питания на чипе LM2574HVM-ADJ.
CAN-трансивер PCA82C251T/YM.
❯ Первый запуск
Зачищаем провода и подаём питание.
Девайс крякнул и показал заставку.
Через пару секунд железка загружается и показывает прочерки. Хорошее начало.
Из всех приборов работает только указатель напряжения зарядки батареи — по сути просто вольтметр напряжения питания этой коробочки.
Нажатием кнопок можно переключать «раскладку» приборов. При нажатии кратковременно включается тусклая зелёная подсветка.
Можно отображать разные показания в виде графиков, чтобы смотреть на них в динамике.
Список ошибок, явно подгружаемый откуда-то извне.
При отсутствии данных на экране отображается вот такой значок.
❯ Подключаем CAN
Теперь попробуем подать какие-то данные.
Если у вас нет ответной части от разъёма, нумерация контактов здесь такая.
Подключать будем по CAN, так как именно эти провода имелись у меня. Конечно, можно разобрать разъём и переставить пины, но делать этого я пока не буду.
Конвертер USB-CAN, куда лучше подходящий для подобных опытов, я пока не раздобыл, поэтому экспериментировать будем с платой CAN на чипе MCP2515 и платой Arduino Nano. Связка из двух этих модулей у меня уже давно используется в качестве CAN-адаптера.
Нашёл первый попавшийся скетч для имитации данных J1939.
Девайс явно увидел обмен, ранее упомянутый транспарант пропал. Правда, стрелки всё так же безмолвствовали. Странно.
Скорость CAN оказалась угадана верно: 250 кбит/с. С другой поведение блока ничем не отличалось от такового с отключенной шиной.
Немного подкрутил тайминги, и вот первый результат.
Конечно, что-то тут явно не так и 119 передачи точно не бывает, но начало очень хорошее: девайс действительно хочет на вход J1939 со скоростью 250 кбит/с. С форматом данных разберёмся чуть позже.
Но почему же другие индикаторы не оживают? Дело в том, что KAntrak 2710 — не просто цифровой показометр, а по сути целый микрокомпьютер. Для него существуют какие-то утилиты конфигурации и даже SDK, позволяющий писать для этого дисплейного модуля приложения на Си. Всё это звучит достаточно грустно, так как никакого софта ожидаемо не ищется, а сама возможность что-то где-то настраивать намекает на то, что адреса, возможно, были изменены на какие-то свои.
Поскольку возможности записать обмен на рабочей машине у меня нет, выходов тут несколько: подобрать адреса вручную, отреверсить прошивку девайса или формат конфигурации в его EEPROM, либо попытаться найти ещё какую-то информацию, дающую понять, что ему вообще надо.
❯ Системные меню
Оказалось, что у девайса есть несколько меню с настройками.
Нажатие крайней правой кнопки позволяет изменить яркость и контрастность.
Удержание же отображает кое-что более интересное.
В настройках ничего интересного: пределы, язык, единицы измерения.
Сразу переключил подсветку в постоянный режим. Пункт «КОР. СИГН.» выключает писк кнопок. TIER4 POPOUT — какая‑то штука для AdBlue.
Также тут можно настроить уведомление о техобслуживании.
Следующий кадр интереснее.
Что за «Показ» со значениями 0 и 1 — понятия не имею. А вот далее идут уже напрямую относящиеся к нашей цели пункты.
Во-первых, это просмотр того, что происходит на шине.
Можно в реальном времени посмотреть, что приходит на вход прибора, и убедиться, что данные верные.
А вот этот пункт меню — самый важный. Здесь нас интересуют некие «АДР. ИС. ДАНН.».
Что это такое? Это адреса источников данных. Эти два параметра задают то, данные от каких устройств (проще говоря, пакеты с какими SA) вообще следует мониторить. Как мы помним, значение 3 в стандартном варианте J1939 соответствует адресу трансмиссии, именно поэтому номер передачи отображается верно. А вот в качестве первого источника указан какой-то адрес 17, тогда как двигатель обычно располагается на нулевом. Похоже, в этом и кроется причина того, почему другие данные не отображаются.
❯ Запускаем
С причиной глюков разобрались. Поэтому меняем в скетче SA двигателя с 0 на 17, загружаем в плату...
Можно зайти в третий пункт меню — Database Viewer. Здесь в реальном времени отображаются вообще все поддерживаемые значения.
Ещё один монитор CAN, судя по всему, какой-то низкоуровневый. Выйти из него можно только перезагрузкой блока.
Из интересного — если отправить ему напряжение по CAN, он будет показывать его вместо того, что измерил сам.
Для взаимодействия использовал эту библиотеку.
❯ Что же в итоге?
Итак, с помощью довольно простых манипуляций этот прибор удалось оживить.
За исключением нестандартного адреса особых проблем не возникло. Теперь девайс можно использовать в каком-то из своих проектов.
Один из виртуальных приборов я так и не смог запустить. Судя по иконке, это какая-то температура, но пакет, который её передаёт, я не нашёл. Также интересно, что разрешение некоторых величин несколько отличается от принятого в J1939, поэтому некоторые приборы изначально показывали чрезмерные или околонулевые значения. Но, само собой, исправить всё это не составляет труда.
Реклама. ООО «ТАЙМВЭБ.КЛАУД», ИНН: 7810945525