05.02.2022 14:33
Вот тут
БК для Рио своими руками. Из Ардуины. начало. Я не помню была там ссылка или нет, но вот выложу
ссылка. И вот библиотека, которую использовал (я её немного изменил для себя)
ссылка.
А вот продолжение:
Как я писал в теме БК для Rio, в моей машине по CAN постоянно передаются 12 видов пакетов. Чтобы попытаться определить, что они означают, решил записать их на флешку одновременно с известными параметрами диагностики OBD, перенести на комп и попытаться сравнить их.
Вот на такой девайс:
В раздумьях, как мне его покрасивше соединить с Ардуиной, на Ali наткнулся на Arduino prototype shield:
Из чего и собрал вот такое устройство:
Позже обнаружил, что продаются уже готовые такие устройства и называются "регистраторы". Но было поздно — запчасти уже были закуплены. Ну да ладно, это мелочи.
Казалось бы, всё хорошо. Установил модуль в БК. Добавил в скетч процедуру записи принятых пакетов и записывай. Но не тут-то было. Отдельно принимает, отдельно записывает, работает на столе. А как подключаешь в машине – то пишет, то не пишет, то пишет не то, что надо. До конца я не стал разбираться, но моё предположение в критической нехватке оперативной памяти, т.к. библиотека FAT сожрала половину ОП, которой и так-то у Ардуины всего 2К. Потратив несколько дней на модификации и отладку скетча, мне так и не удалось добиться стабильной совместной работы CANshield и CardAdapter. В конце концов, мне это надоело, и решил я более не тратить время на отладку скетча для слабенького микроконтроллера, а использовать его на изучение STM32. О котором знал только то, что он круче Ардуины.
К этому моменту у меня уже лежала и ждала своего часа плата STM32F407VET6.
Выбор этой платы обусловлен тем, что:
1) В отличие от популярной F103 может работать одновременно CAN и USB
2) На борту есть слот microSD
3) Есть гнездо для батарейки RTC
И умеренная цена среди аналогов.
Заказывал я её без четкого представления, зачем она мне, собственно, нужна. Просто потому, что круто! Теперь, когда стало понятно, что из неё делать, обнаружилось, что для подключения к CAN-шине автомобиля необходим драйвер шины.
Заказал. А пока ждал, для того, чтобы хоть с чего-то начать, начал учиться подключать OLED дисплей, т.к. вычитал, что ОЛЕД не боится морозов, а во-вторых – углы обзора такие, что TFT отдыхает в сторонке. Потому что как-бы для автомобиля. Тут выявился ещё один ништяк этой платы – возможность прошивки без программатора, просто по USB программой DfuSeDemo.
Подключил, поигрался со шрифтами. Параметры подобрал такие, что добился 300 FPS при полной прорисовке экрана.
Но, пока учился подключить ОЛЕД по SPI, узнал, что у F407 есть порт FSMC специально для подключения дисплеев по 16-ти разрядной шине. Чтобы бездействовал такой крутой порт за который, в том числе, плочены деньги – такого я допустить не мог! И тут, как говорится, Остапа понесло – нашел и заказал дисплей 3.97” LCD Display IPS Touch Screen Module Full View HD 800X480.
Ну, и в силу своей некомпетентности, этой покупкой наступил на грабли, причем 2 раза. Во-первых, как позже выяснил, такое разрешение для такого устройства совершенно не нужно, только расход памяти и процессора. Во-вторых, контроллер дисплея OTM8009A оказался очень непопулярным. Убил море времени, чтобы найти инфу для этого дисплея и адаптировать под себя. Наиболее подходящую библиотеку нашел у Jean-Marc Zingg здесь
ссылка. Эта библиотека под Arduino. Пришлось ещё её переделать (нужные куски) под SW4STM32. Фотку, когда платы были соеденины dupont-шлейфами, не делал.
Следующая проблема вылезла в виде того (аукнулось дикое разрешение экрана), что стандартные Адафрутовские шрифты, которые используются в библиотеке, можно разглядеть только в микроскоп. Даже очки не помогают. А русских вообще не нашел. Пришлось ещё и этим заниматься. Зато теперь приспособился: могу любой Виндовый шрифт для себя конвертировать любого размера за пару часов.
Это если с буквами Ё Й. Если без них, то и вовсе минут за 30. Наделал себе несколько от 20 точек до 120-ти (120 только цифры и знаки).
Моя первая программа – вывод текста. Здесь шрифты 60 и 120:
Далее решил, как собрать в одно целое с STM32. Нужно было, чтобы и шлейф был покороче, и разъемы платы не перекрывались. Долго крутил-вертел, в конце концов решил сделать так:
Обе платы крепятся к соединительной пластине из стеклотекстолита 120х84.
Шлейф сделал из шлейфа floppy дисковода. Питание сделал не от разъема дисплея, где 3,3 в, а отдельным проводом от +5 вольт. Что надо тАк делать, уже не помню где, в Инете прочитал.
К тому времени пришел драйвер CAN. И осталось решить ещё один вопрос — о питании всего БК (дадим пока такое рабочее название). Ну, тут всё просто – от OBD через DC-DC с 16 до 5 вольт, коих валом. Ардуино питалась напрямую от бортсети — CANshield так сделана, как не сгорела – сам удивляюсь.
Чтобы собрать всё это без соплей, применил Ардуиновский подход – типа CAN-шилда для STM32. На нём же коммутация BOOT0, BOOT1 для регулярной прошивки. Пришлось заказывать разъемы с длинными пинами, опять ждать:
(Как оказалось, фотоап-т не умеет резкость наводить)
Зеленый провод – резерв для K-line драйвера.
Вот так это соединяется
И вот какое устройство получилось:
В один из моментов в голову пришла мысль, что делать из такого устройства какой-нибудь показометр для машины – будет слишком жирно. Так что теперь это не БК, а портативная многоцелевая лаборатория STM32. И первый проект –
SkyNET CANsniffer.
Развитие программы: чтение тачскрина, настройка CAN, прослушка CAN, запросы OBD, настройка FAT, проверка SD:
Кстати, тут обнаружился ещё один ништяк этой платы: слот microSD не просто на плате, а к нему на кристалле есть специализированный аппаратный контроллер SD. Его не видно, но он есть.
"Корпус"
Камера, мотор!
И вот, собственно, для чего всё затевалось, вот такие файлы получаются:
Проект, в котором куча недоделок и ошибок.
Теорию расписывать не буду, сам всё с Инета брал. А если будут вопросы — задавайте.
Пример 10-ти минутной поездки
Программу просмотра, в силу её убогости, пока выкладывать не буду.
Продолжение следует.
P.S. Да. И забыл написать самое главное. В добавление к находкам нашего коллеги удалось определить вот ещё что:
0x0a0 — elc x x x x x x x — 04 calculated engine load +
0x0a0 — x temp x x x x x x — 05 coliant temp
0x0a0 — x x x x x tp x x — 11 throttle position
0x0a0 — x x x x x x low high — 03 fuel system status +
0x0a1 — short x x x x x x x — 06 short term fuel bank1
0x0a1 — x long 0 0 x x x x — 07 long term fuel bank1
0x0a1 — x x 0 0 x 0 0 0
2A0 — x 0 x 0 0 0 0 0
2C0 — 1 0 0 0 0 0 0 0 — всегда, когда вкл зажигание
260[1]=316[4]
А есть ещё вариант влезть в КАН-шину - купить адаптер CANhaker и ловить пакеты, например, ноутбуком одноименной программой.