VAG-овской платформе MQB (седьмой гольф, восьмой пассат и их производные), как и многим другим свежим немцам сильно повезло с цифровой шиной MOST150.
Поскольку вытаскивать цифру из этой шины никто пока не научился, приходится идти обходными путями, доставая ее из внешнего усилителя.
При этом громкость потока фиксирована (DSP усилителя крутит ее позже), да и громкость внешних источников (в моем случае Sonos и Chromecat Audio) хотелось бы менять штатными средствами.
Немного поразмыслив, решил сваять новый контроллер, читающий громкость системы по CAN-шине и управляющий CarDSP по UART, прикидываясь RUX-ом.
Разводить и паять плату в этот раз, слава богу, не пришлось. Китайцы продают немало готовых универсальных CAN-контроллеров на ARM-процессорах STM32.
Исходные требования:
Поддержка минимум двух CAN-шин одновременно.
Штатная система Discover Pro моего гольфа работает с двумя независимыми шинами CAN. Основная Infotainment CAN соединяет все аудио/видео в машине. По ней гуляет вся полезная информация: громкость системы, нажатия рулевых кнопок, смена источников звука и т.п.
Дополнительная CAN-шина дисплея есть только в топовых системах Discover/Composition media и Discover Pro, в которых монитор и ГУ (MIB) разделены. MIB отдает картинку на монитор по LVDS-интерфейсу, а нажатия кнопок, крутилок и тача получает по отдельной независимой CAN-шине.
Оба CAN работают на недетской скорости 500 Kbit/s.
Поддержка минимум одного UART
Нужен для связи с CarDSP. UART, особенно медленный 9600 bit/s, нетрудно реализовать и программно, но к чему заморачиваться?
Несколько ног ввода/вывода на всякий случай
Этим нехитрым пожеланиям соответствуют почти все контроллеры на STM32. Даже самые младшие серии этих процессоров дружат с двумя CAN-шинами и толпой UART-ов, но для сопряжения нужны внешние микросхемы CAN-трансиверов, причем не все из них понимают 500 Kbit/sec.
Мне приглянулись два варианта с Aliexpress
https://ru.aliexpress.com/item/Dual-CAN-CAN-development-board-development-board-STM32F105Rb-development-board-STM32-development-board-two-USART/32423961193.html
Удобный вариант для начала: процессор STM32F105, два CAN-трансивера, несколько UART, есть даже RS-232 и конечно USB для прошивки/обмена данными
И недостатков: великоват, процессор не самый продвинутый,
F7 flight controller
Испоьзуется в авиамоделях, очень распространен, недорог и компактен. Построен на куда более мощном и продвинутом процессоре STM32V745 с кучей UART, ног ввода-вывода и даже поддержкой аудиоинтерфейсов SPDIF и I2S. Одно плохо: всего один CAN-трансивер, второй придется допаивать на коленке.
Ищется на Ali по запросу "F7 flight controller". Полная документация к плате лежит на GitHUB https://github.com/sambas/hw/tree/master/AnyFCF7
Для начала я поселил в машину более простой контроллер на STM32F105. В ближайших планах перенисти код на F7 flight controller -- более компактную и перспективную железку.
Основа прошивки создана через кодогенератор STM32CubeMX для экономии времени. Вся логика написана вручную через Keil uVision5.
Приличный курс молодого бойца по программированию CAN на STM32 и Cube выложен здесь: https://geektimes.ru/post/255534/
На сегодняшний день контроллер умеет:
1. Отслеживать по CAN уровень громкости и переключение источников звука (Радио, CD, SD, Bluetooth, AUX, Mirrorlink)
2. Отслеживать по CAN нажатия рулевых кнопок и кнопок/крутилок штатной головы Discover Pro
3. Управлять Android-телефоном, прикидываясь Bluetooth-клавиатурой, а иногда и мышью
4. Управлять CarDSP 4x10 Full 1795 по UART
Подробности -- в следующих постах
Социальные закладки