С огромным увлечением исследую протоколы CAN шины и разрабатываю устройства взаимодействующие с автомобилем. У меня уже есть голосовое управление центральным замком, виртуальная панель приборов и даже мобильное приложение для моей Skoda Octavia A5.
Теперь я решил разработать диагностический бортовой компьютер для автомобилей группы VAG (VW, Audi, Skoda, Seat). Моими техническими требованиями было: OLED дисплей, лёгкая установка и подключение, множество диагностических параметров. В качестве компонентной базы выбрал:
- STM32F103C8T6 — дешёвый МК с поддержкой CAN шины на отладочной плате
- 2,8" OLED 256*64 — дисплей с достаточным количеством точек на драйвере SSD1322
- SN65HVD230DR — CAN приёмопередатчик с питанием 3.3 В
- Mini-360 — импульсный регулируемый понижающий DC-DC стабилизатор напряжения на чипе MP2307
Процесс разработки разбил на 3 этапа и каждый из этапов принёс мне кучу нового опыта и удовольствия:
▍ Разработка печатной платы в Proteus
Первая рабочая версия была собрана на макетке за один вечер и ещё день потребовался для выяснения, что приёмопередатчику для функционирования нужна перемычка (Rs — GND), которая включает режим HIGH SPEED MODE:
На всякий случай оставлю свои заметки здесь из даташита на SN65HVD230DR.
Убедившись, что на макетной плате всё работает, я перешёл к разработке печатной платы в Proteus 8. Можно было бы все компоненты дисплея и Blue Pill перенести на одну плату, но я поленился так много паять, для первой версии и так сойдёт!
Изготовление печатной платы заказывал в Seeedstudio, потому что дёшево и отличное качество. Помимо напайки компонентов приходится ещё дорабатывать напильником, таков путь.
Конечно в первой версии трудно всё продумать, но не предусмотреть кнопку ВЫКЛЮЧЕНИЯ, для этого нужен талант. Устройство подключается в OBD2 разъём, в котором всегда присутствует напряжение 12 В. Придётся теперь скальпелем дорабатывать печатную плату, чтобы установить тумблер включения. Хотя возможно имеет смысл сделать включение/выключение на программном уровне, определяя, что двигатель заведён по CAN шине или повышенному напряжению бортовой сети.
▍ Разработка прошивки для STM32
Это мой первый опыт работы с STM32, но каких-то сложностей я пока не испытал. Разработку веду в STM32CubeIDE, код решил писать на Си и так как я новичок в этом деле, то отказываться от HAL не стал, хотя в процессе разработки осознал его избыточность. После выпуска стабильной прошивки займусь оптимизацией и погружусь в изучение STM32 более серьёзно, чтобы исключить HAL и уменьшить размер прошивки.
В бортовом компьютере самое главное это отображаемые диагностические параметры. Для компьютерной диагностики моей Skoda Octavia я использую автомобильный сканер VCDS.
Если подслушать сниффером, как VCDS общается с машиной по CAN шине, то можно воспроизвести протокол в моём бортовом компьютере. Более подробно я рассказывал как исследую CAN шину в прошлой статье.
В машинах группы VAG выпущенных с 2004 по 2012 год для диагностики двигателя и коробки передач используется протокол либо TP2.0 (KWP2000), либо UDS, на машинах после 2012 только UDS.
UDS очень удобный для программиста протокол, длина CAN фрейма всегда 8 байт, запрос состоит из одного фрейма и ответ, чаще всего тоже из одного фрейма. А в TP2.0 применяется несколько проверок целостности пакета, но зато TP2.0 обращается к группе параметров и за один запрос можно получить до 4 различных параметров.
На экране бортового компьютера отображаются 4 параметра, это оптимальное количество по нескольким причинам: а) полная группа TP2.0; б) видны пропуски зажигания всех 4-х цилиндров сразу; в) элементы оптимального размера. Точный список параметров, которые будет показывать прибор, я ещё не сформировал, но есть параметры, которые очень важны:
- Уровень масла в двигателе
- Наддув турбины (реальный)
- Наддув турбины (ожидаемый)
- Пропуски зажигания в цилиндрах
- Углы откатов зажигания в цилиндрах
- Температура коробки передач DSG/AISIN
Таким образом в бортовом компьютере будет десяток экранов с различными параметрами, переключение между экранами осуществляется с помощью кнопок вперёд/назад.
▍ Разработка корпуса из акрила
Пообщавшись с сообществом автолюбителей на drive2.ru поступило предложение сделать бескорпусное устройство, тогда каждый желающий сможет вмонтировать его куда угодно, например в воздуховод. Но я всё-таки решил сделать корпус, мне кажется не все захотят модифицировать салон своей машины:
Первым делом я попытался найти готовую коробочку, но в нужных размерах и близко ничего не было. Напечатанный на 3D принтере корпус из ABS мне не понравился. Я решил попробовать нарезать лазером корпус из чёрного оргстекла, получилось красиво и производство штучных экземпляров недорогое, порядка 500р за корпус:
Корпус легко разборный, поэтому при желании можно извлечь плату с дисплеем и установить её в воздуховод.
В комплекте с бортовым компьютером идёт кабель подключения в OBD2 разъём. На Ali заказал компактный OBD2 штекер, но он оказался не очень удобным. Отверстие для кабеля у штекера сбоку, из-за этого его неудобно вытаскивать из разъёма, но я модифицировал корпус штекера надфилем, чтобы кабель выходил сзади и получилось то что нужно:
К прибору кабель подключается XH2.54 разъёмом. Сначала я припаивал пины к проводам, но после нескольких дней тестирования они благополучно отвалились. Тогда я открыл для себя кримпер с губками SN-2549 (SN28B + SN01BM). Использование этого инструмента принесло множество положительных эмоций, как легко и красиво им можно делать разъёмы! Теперь не понимаю, как я жил без него раньше, это супер удобная и супер необходимая вещь в хозяйстве электронщика:
Как говорит Джорж из «Свинка Пеппа»: Динозаврррррррррр!
▍ Заключение
Разработка ещё продолжается, но 80% работы уже сделано. Есть много идей по функциям устройства, например, пищать при превышении заданных значений, запоминать максимальные значения, активировать скрытые функции. Если вам интересен проект, есть замечания и предложения, то я с удовольствием выслушаю.
Прилагаю видео с демонстрацией работы VAG диагностического бортового компьютера:
ОБНОВЛЕНО 19.12.2021
В статье я задавался вопросом, как лучше организовать функцию включения/выключения. Я рассматривал 3 варианта: физический тумблер, уход в сон при отключении CAN шины, уход в сон при проседании напряжения ниже 12.5В. Но в комментариях мне подсказали, что на ВАГах в OBD2 разъем на контакт №1 заведена «клемма 15», которая дает питание только при заведённом автомобиле. В OBD2 разъёме первый контакт это OEM контакт и каждый производитель сам задаёт его функцию. Для питания бортового компьютера буду использовать «клемму 15».
Скриншот из Wikipedia
Комментарии (32)
EnterSandman
17.12.2021 12:49Пару лет назад игрался с приборками - ардуино, canbus шилд и вперед,
сейчас с ГУ ваговскими - приятно удивлен что там стоит QNX в качестве системы
вот так можно зажать педаль газа в пол с открытой дверью и ручником):
mmulesa
17.12.2021 13:08+1Начиная с MIB3 перешли с QNX на Automotive Grade Linux (AGL)
EnterSandman
17.12.2021 13:22спасибо, не знал, пощупаю на досуге
в любом случае я рад что взяли rtos, а не тот же андроид, как яндексовские головы, которые могут очнуться к завершению поездки
pin2t
18.12.2021 03:20Ну, современные мультимедия в том же VAG-е очухиваются если не к завершению поездки, но во всяком случае далеко не сразу
AB_AG
17.12.2021 15:01Переключение карт прошивки двигателя можно реализовать таким способом?
aivs Автор
17.12.2021 15:07У Revo есть свой приборчик для переключения. Я не знаю, как он работает. Но если данные передаются в незашифрованном виде, то можно воспроизвести команды. Нужно сниффером смотреть, что делает прибор.
eteh
17.12.2021 17:31А вот мне интересно - я в промке с CAN работал только у отечественных ПЛК - там была жёсткая адресациях устройств и сопротивления на оконечниках, так вот вопрос - если необходимо добавить в CAN шину машины, например эмулирующее устройство, там тот же принцип работает?
aivs Автор
17.12.2021 20:19У CAN шине везде один принцип, и в машине, и в умном доме, и в промышленных сетях. Любое устройство на шине может реагировать на любое другое устройство на шине, поэтому в CAN шине нет конкретного адресата и отправителя. Любое устройство в машине может отправить сообщение с ID управления центральным замком и замок закроется. Как раз этим я и пользуюсь для голосового управления https://habr.com/ru/post/399043/
desertkun
17.12.2021 22:39Интересовался этой темой, хотелось скорость проецировать на лобовое, а тут все готовенькое. В китайщине и цифры некрасивые и много мусора. Большое спасибо.
TinyQ
18.12.2021 00:29+1А что за проблема с выключателем питания? Разве на 1 контакт ОБД2 разъема не выведена 15 клемма(зажигание)?
im_stD
18.12.2021 13:13Здравствуйте. Спасибо за статью. Пдскажите пожалуйста, в чём вы рисовали приборную панель из поста https://habr.com/ru/post/442184/
yackmutus
18.12.2021 17:14Зачем тумблер? Можно запитаться от клеммы 15 - там есть напряжение как раз только при включенном зажигании.
Mike-M
19.12.2021 01:54ещё день потребовался для выяснения, что приёмопередатчику для функционирования нужен резистор (Rs — GND), который включает режим HIGH SPEED MODE:
При этом на скриншоте даташита сказано, что при подключении резистора на землю приемопередатчик работает в режиме slope control, а не high speed.
Кому верить?aivs Автор
19.12.2021 13:46+1Ага, понял, для High speed mode нужно подтянуть к земле перемычкой. У меня то стоит 10К резистор. Спасибо что обратили внимание.
Вот не зря я этот скриншот разместил )
zaco
20.12.2021 00:23я думаю вам будет интересно посмотерть на проект comma.ai и на их репо https://github.com/commaai/openpilot
aivs Автор
20.12.2021 00:27Классный проект, я его видел. Но к сожалению для моей машины нет адаптивного круиз контроля, который требуется для автопилота.
Никак руки не дойдут самому разработать эту функцию.
dlinyj
Потрясающе! Вообще, мне очень нравятся проекты доработки автомобиля. Снимаю шляпу!
Подскажите, что вообще можно почитать по данной теме?
У меня просто американец, и далеко не все диагностические программы с ним корректно работают (я бы сказал полторы программы). Иной раз проще посмотреть коды ошибок прямо в приборке.
dlinyj
Посмотрел ваши предыдущие публикации, оказывается там просто исчерпывающая информация. Спасибо!
aivs Автор
Вот много информации по исследованию безопасности автомобильной электронике и сетей, если коротко, то всё плохо.
http://illmatics.com/carhacking.html
dlinyj
Большое спасибо!