С большим энтузиазмом я исследую протоколы CAN-шины и разрабатываю устройства, взаимодействующие с автомобилем.
у меня уже есть голосовое управление центральным замком , виртуальная панель управления и даже мобильное приложение для моей Шкоды Октавии А5. Теперь я решил разработать диагностический бортовой компьютер для автомобилей группы VAG (VW, Audi, Skoda, Seat).
Мои технические требования были: OLED-дисплей, простота установки и подключения, множество диагностических параметров.
В качестве компонентной базы я выбрал:
- STM32F103C8T6 — дешевый MCU с поддержкой CAN шины на макетной плате
- 2,8" OLED 256*64 — дисплей с достаточным количеством точек на драйвере SSD1322
- SN65HVD230DR - CAN-трансивер с питанием 3,3 В
- Мини-360 - импульсный регулируемый понижающий стабилизатор напряжения постоянного тока на микросхеме МП2307
Процесс разработки был разделен на 3 этапа и каждый этап приносил мне массу нового опыта и удовольствия:
▍ Проектирование печатной платы в Протеусе
Первый рабочий вариант был собран на макетной плате за один вечер, а еще сутки понадобилось, чтобы выяснить, что для работы трансивера необходима перемычка (Rs - GND), которая включает ВЫСОКОСКОРОСТНОЙ РЕЖИМ:На всякий случай оставлю здесь свои заметки от техническая спецификация на SN65HVD230DR. Убедившись, что на макетке все работает, я перешел к разработке печатной платы в Протеусе 8. Можно было бы перенести все компоненты дисплея и Blue Pill на одну плату, но паять было лень да, для первой версии сойдет!
Изготовление печатной платы я заказал в компании Seeedstudio, потому что она была дешевой и отличного качества.
Помимо пайки компонентов, вам придется еще и доработать их напильником, вот так и надо.
Конечно, в первом варианте сложно все продумать, но не предусмотреть кнопку ВЫКЛ, для этого нужен талант. Устройство подключается к разъему OBD2, на котором всегда присутствует напряжение 12 В.
Теперь придется доработать печатную плату скальпелем, чтобы установить выключатель питания.
Хотя возможно имеет смысл включать/выключать его на программном уровне, определяя запуск двигателя по CAN-шине или повышенному напряжению бортовой сети.
▍ Разработка прошивки для STM32
Это мой первый опыт работы с STM32, но никаких сложностей я пока не испытывал.Разрабатываю в STM32CubeIDE, решил писать код на C и так как я новичок в этом деле, то не отказался от HAL, хотя в процессе разработки понял его избыточность.
После выхода стабильной прошивки я займусь оптимизацией и более серьезно углублюсь в изучение STM32, чтобы исключить HAL и уменьшить размер прошивки.
Самое главное в бортовом компьютере – отображаемые диагностические параметры.
Для компьютерной диагностики своей Шкоды Октавии я использую автомобильный сканер VCDS.
Если послушать сниффером, как VCDS общается с автомобилем по CAN-шине, то можно воспроизвести протокол в моем бортовом компьютере.
Я рассказал подробнее, как я изучаю CAN шину в предыдущей статье .
В автомобилях группы VAG, выпущенных с 2004 по 2012 годы, для диагностики двигателя и коробки передач используется либо протокол TP2.0 (KWP2000), либо UDS; на машинах после 2012 года только УДС.
UDS — очень удобный для программиста протокол, длина кадра CAN всегда 8 байт, запрос состоит из одного кадра и ответа, чаще всего тоже из одного кадра.
А в TP2.0 используется несколько проверок целостности пакетов, но TP2.0 относится к группе параметров и за один запрос можно получить до 4-х разных параметров.
На экране бортового компьютера отображается 4 параметра, это оптимальное количество по нескольким причинам: а) полная группа TP2.0; б) видны пропуски зажигания сразу всех 4-х цилиндров; в) элементы оптимального размера.
Я еще не создал точный список параметров, которые будет показывать устройство, но есть параметры, которые очень важны:
- Уровень моторного масла
- Наддув турбины (реальный)
- Наддув турбины (ожидается)
- Пропуски зажигания в цилиндрах
- Углы отката зажигания в цилиндрах
- Температура коробки передач DSG/AISIN
▍ Разработка акрилового кузова
После общения с сообществом автолюбителей на сайте Drive2.ru было предложено сделать простое устройство, тогда любой желающий мог бы установить его где угодно, например, в воздуховод. Но я все же решил сделать корпус; мне кажется, не каждый захочет видоизменить салон своей машины:Первое, что я сделал, это попытался найти готовую коробку, но не было ничего даже близкого к нужному мне размеру.
Мне не понравился корпус из ABS, напечатанный на 3D-принтере.
Решил попробовать лазерную резку корпуса из черного оргстекла, получилось красиво и изготовление штучных экземпляров недорогое, около 500 рублей за корпус:
Корпус легко разбирается, поэтому при желании можно снять плату с дисплеем и установить ее в воздуховод.
В комплекте с бортовым компьютером идет кабель для подключения к разъему OBD2. Заказал на Али компактную заглушку OBD2, но она оказалась не очень удобной.
Отверстие для кабеля находится сбоку вилки, из-за чего ее неудобно вытаскивать из разъема, но я доработал корпус вилки напильником, чтобы кабель выходил сзади и получил то, что нужно :
Кабель подключается к устройству с помощью разъема XH2.54. Сначала я припаял контакты к проводам, но после нескольких дней тестирования они отвалились.
Потом я обнаружил кримпер с губками SN-2549 (SN28B+SN01BM).
Использование этого инструмента принесло массу положительных эмоций, как легко и красиво можно сделать разъемы! Теперь не понимаю, как я раньше без него жил, это супер удобная и супер нужная вещь для электронщика:
Как говорит Джордж из Свинки Пеппы: Динозавррррррр!
▍ Заключение
Разработка еще продолжается, но 80% работы уже сделано.Есть множество идей по функциям устройства, например, подача звукового сигнала при превышении установленных значений, запоминание максимальных значений, активация скрытых функций.
Если вас заинтересовал проект, есть замечания и предложения, то буду рад выслушать.
Прилагаю видео, демонстрирующее работу бортового компьютера диагностики VAG: ОБНОВЛЕНО 19.12.2021 В статье я задавался вопросом, как лучше организовать функцию включения/выключения.
Рассматривал 3 варианта: физический тумблер, переход в сон при отключении CAN шины, переход в сон при падении напряжения ниже 12,5В.
Но в комментариях мне подсказали, что на ВАГах в OBD2 разъем на контакт №1 подключен к «клемме 15», которая обеспечивает питание только при работающем автомобиле.
В разъеме OBD2 первый контакт является OEM-контактом и каждый производитель устанавливает свою функцию.
Для питания бортового компьютера я буду использовать клемму 15.
Скриншот из Википедия
ОБНОВЛЕНО 13.01.2022
Настал момент, когда прошивка уже не умещалась в 64Кб.
И я решил узнать, есть ли у моего чипа дополнительная недокументированная FLASH память.
В интернете пишут, что изначально чип идет со 128Кб, а в результате отбраковки получается 64Кб.
Для проверки запускаем STM32CubeProgrammer и пробуем сначала записать, а потом прочитать последний байт размером 128Кб по адресу 0x801FFF0. Как вы можете видеть на скриншоте, мне это удалось и я могу попробовать использовать дополнительную FLASH-память.
Нет никакой гарантии, что все блоки памяти работают, поэтому после заливки прошивки ее необходимо прочитать еще раз и сравнить с оригиналом.
STM32CubeIDE не знает, что можно использовать FLASH-память объемом 128Кб и при попытке заливки жалуется на чрезмерный размер прошивки.
При сборке проекта в журнале заметил файл конфигурации STM32F103C8TX_FLASH.ld .
В нем заменил 64К на 128К и о чудо! Прошивка залилась и даже работает.
Теги: #Программирование микроконтроллеров #stm32 #Сделай сам или Сделай сам #Гаджеты #Автомобильные гаджеты #ruvds_articles #ruvds_articles #oled display #can bus #stm32f103c8t6 #stm32f103 #vag #skoda #volkswagen #audi #oled #seat #smart car
-
Seo-Оптимизация Сайта Для Нового Блога
19 Oct, 24 -
Android N: Как Google Закручивает Гайки
19 Oct, 24 -
Настоящий Цвет Gif
19 Oct, 24 -
Acer Iconia Tab A701 — Возвращение Джедая
19 Oct, 24 -
Seadragon И Всемирная Цифровая Библиотека
19 Oct, 24 -
Шаблоны Литеральных Операторов Для Строк
19 Oct, 24 -
4К Тв 2018: Рекомендации По Лучшему Выбору
19 Oct, 24