Подключение кнопок управления магнитолой по CAN
Не редкость, что на автомобилях выходят из строя штатные мультимедийные системы,
особенно если в них используются многодисковые CD-чейнджеры. Стоимость ремонта или замены такого неисправного устройства может составлять большую сумму.
Иногда целесообразнее приобрести переходную рамку и установить современную мультимедийную систему(далее МС), недорогую и гораздо более функциональную.
Останется только задействовать кнопки управления на руле для управления ею.
Как правило, многие МС (made in CHINA) могут легко адаптироваться к штатным резистивным кнопкам руля.
Но вот по штатной автомобильной системе CAN их мало.
Имеем автомобиль Volvo S60 2006 года (аналогично и у XC70, XC90).
Родная МС пережевала и накрошила CD — диски, при включении впадала в конвульсии,
и в конце концов была выкинута на мороз.
В данном автомобиле, блоки кнопок на руле (каждый на микроконтроллере),
передают информацию по LIN – шине о их состоянии в центральный электронный блок автомобиля — CEM.
А дальше по низко скоростной CAN шине, в МС и другие заинтересованные в звуке блоки.
В качестве новой МС владелец выбрал магнитолу Pioneer, имеющий специальный вход для
подключения дистанционного управления:
В интернете полно схем и решений использования данного входа, приведу для примера такой рисунок:
Подключение проводов питания, зажигания, громкоговорителей думаю читателей мало интересна,
все на уровне школьных знаний, есть даже переходные разъемы…
С помощью планшета, программы CANHACKER, своего переходника CAN-USB, подключенного к CAN шине на разъеме МС,
был определен пакет данных, содержащий информацию о состоянии кнопок управления МС.
Нужные провода CAN — белый и зеленый:
Ищем и записываем:
Я для своей работы разработал и использую универсальные платы-конструкторы, на базе STM32,
с помощью которых можно быстро реализовывать разнообразные устройства
(если CAN модуль Starline не подходит для этого 🙂 ).
Вот схема одной из плат:
Теперь осталось только запрограммировать следующий алгоритм:
Настраиваем плату только слушать CAN шину по указанному адресу. Из принятых данных анализируем выбранный байт. И в зависимости от его содержимого, активируем определенные транзисторы для выдачи правильного сопротивления резисторной матрицы на плате в шину дистанционного управления МС Pioneer. Я знаю что есть электронные сопротивления и прочее прочее. Мне так было дешевле и удобней.
Весь проект выкладывать не буду, там много еще другого реализовано. А кусочки кода для Volvo приложу.
Настройка CAN фильтра:
Процедура, вызываемая при приеме пакета:
И далее разбор принятого сообщения:
Некоторые данные для работы программы хранятся в оперативно изменяемой области флеш памяти, что бы к примеру подключив плату к компьютеру, оперативно что либо изменить, не внося изменений в код:
Написав все это, думаю что чуть упростил жизнь другим интересующимся людям, хотя разбираться в чужом коде сомнительное удовольствие. Главное не боятся. И «лучше день потерять, затем за час долететь». В итоге все заработало как надо.
Если есть вопросы, пишите, буду исправлять и дополнять по возможности.
Источник
Доработка магнитолы Android при помощи модуля CAN-BUS
Многие владельцы Lada Vesta и Lada XRAY отказались от штатного головного устройства в пользу магнитолы на Android. Если Ваша магнитола имеет процессор RockChip (PX3/5/6) или SC9853 ( Teyes ) , тогда не упустите возможность установить модуль CanBus3. Это устройство позволит расширить функциональность вашей мультимедийной системы. Аналогичное устройство выпустили и для Lada Granta.
Описание. Адаптер CANBUS2 подключается к CAN шине автомобиля и связывает её с магнитолой на Android (используя приложение VestaXR). Это позволяет выводить на ее экран множество полезной информации.
- Отображение параметров: скорости, оборотов, температуры двигателя, температуры снаружи, среднего расхода, общего пробега, напряжения в сети, количество израсходованного топлива, остаток пути на топливе, данных климатической системы (для авто с климатом), включенного ручника, низкого заряда, низкого давления масла, непристегнутого ремня пассажира и водителя, неисправности AirBag;
- Траектория парковки (Динамические парковочные линии);
- Отображение ошибок в ЭБУ, с расшифровкой, возможность удаления ошибки;
- Эмуляция местоположения на основе данных блока ГЛОНАСС, при отсутствии антенны GPS;
- Предупреждение при превышении температуры двигателя (больше 105 градусов);
- Автоматическое затемнение экрана при включении ближнего света;
- Список запчастей для Весты. Более 400 позиций;
- Перечень реле и предохранителей в автомобиле с картинками;
- Просмотр сигналов в CAN шине;
- Сохранение сигналов CAN шины в формате CanHacker для дальнейшего анализа;
- Отправка запросов в CAN шину;
- Функция Trip;
- Функция дневной Trip (индикация суточного пробега);
- Индикация дверей, капота и багажника;
- Цветовая индикация изменения сигнала на вкладке Тест при анализе сигналов;
- Отображение работы вентилятора двигателя;
- Отображение работы кондиционера для машин без климат-контроля;
- Система TPMS, предупреждение о спущенном колесе;
- Отображение температуры двигателя в статусбаре;
- Отображение числа ошибок ЭБУ в статусбаре;
- Отображение остатка топлива в статусбаре;
- Иконка датчика омывайки (если он установлен);
- Отображение мгновенного расхода топлива;
- Индикация работы поворотников;
- Включение вентилятора по заданной температуре двигателя;
- Включение сигнальной лампы на панели приборов при обнаружении любой ошибки;
- Отображение даты продажи автомобиля от дилера;
- Отображение VIN автомобиля;
- Ручная проверка ошибок;
- Сброс ЭБУ с инициализацией;
- Устранение ошибок;
- и многое другое.
Есть возможность менять параменты в ЭБУ:
- отключение и включение системы помощи при подъёме в горку HSA
- отключение и включение звукового сигнала при штатной сигнализации
- отключение и включение помощи ПТФ при повороте
- отключение и включение заднего дворника при движении задним ходом
- настройка климатических зон
Подробней в презентации: Чтобы скачать файлы нужно авторизироваться на сайте
Разработкой и продажей модуля CANBUS занимается питерская компания CMGAISD, которая отправляет адаптер в регионы и предоставляет гарантию на товар.
Источник
Canbus для магнитолы своими руками
Обсуждение CANBUS декодер
Другое
Обсуждение»
- Для сравнения устройства с конкурентами и по вопросам выбора устройств обращайтесь в раздел:Выбор и сравнение
- Перед размещением фотографии ознакомьтесь с темойРабота с изображениями на форуме
- Сообщения, не относящиеся к теме обсуждения (оффтоп), удаляются без предупреждения.
Машина: Lada Vesta
Приветствую форумчане. Давно у меня появилась идея создать CANBUS decoder для Lada Vesta под ГУ на базе PX5. Суть в том, что таких устройств для этой машины нет (точнее недавно появилась под ГУ от какого-то производителя и есть еще один, который применяется только для динамических парковочных линий и по достаточно кусачей цене).
Прошу Вас помочь мне в этом деле. На данный момент хочу попробовать только для динамических линий, а далее как пойдет.
Как идет ход моих мыслей:
— на драйве нашел статью по снифферу для CAN.
Как я понял LS CAN мне в этой схеме пока что не нужен. А MS CAN я буду подключать к пинам 6 и 14 раъема OBD (в Весте одна CAN-шина, по факту у меня есть CAN-H и CAN-L, штатно выведенные к ГУ).
BT модуля по идее у меня не будет, вместо этого UART я подключу к ГУ?
Питание можно сделать, а можно по идее запитаться от USB ГУ?
И еще вопрос — возможно ли сделать прошивку микроконтроллера через ГУ, чтобы не выводить лишних проводов и каждый раз не разбирать? Апк написать возможно смогу, если это возможно.
Один форумчанин согласился предоставить мне несколько команд. Пока что я ограничусь углом поворота руля:
Открытый на данный момент вопрос — в каком виде нужно передать информацию по UART в ГУ или где можно запросить эту информацию.
Исходный код MTCCanbus по ссылке
Добавляю код из поста на драйве. Буду пытаться переписать под считывание только нужной информации (пока только угол поворота угла. Кто поможет переписать, буду благодарен. Код буду обновлять по мере правки.
#include
/* ASTRA-H sniffer
* Uses STM32duino with Phono patch. Must add 33 and 95 CAN speeds
*/
// Instanciation of CAN interface
HardwareCAN canBus(CAN1_BASE);
CanMsg msg ;
CanMsg *r_msg;
CAN_STATUS Stat ;
void CANSetup(CAN_GPIO_MAP remap, CAN_SPEED speed)
<
// Initialize CAN module
canBus.map(remap); // This setting is already wired in the Olimexino-STM32 board
Stat = canBus.begin(speed, CAN_MODE_NORMAL);
canBus.filter(0, 0, 0);
canBus.set_irq_mode(); // Use irq mode (recommended), so the handling of incoming messages
// will be performed at ease in a task or in the loop. The software fifo is 16 cells long,
// allowing at least 15 ms before processing the fifo is needed at 125 kbps
Stat = canBus.status();
if (Stat != CAN_OK)
*> Serial1.print(«Initialization failed»);
>
CAN_TX_MBX CANsend(CanMsg *pmsg) // Should be moved to the library?!
<
CAN_TX_MBX mbx;
do
<
mbx = canBus.send(pmsg) ;
#ifdef USE_MULTITASK
vTaskDelay( 1 ) ; // Infinite loops are not multitasking-friendly
#endif
>
while(mbx == CAN_TX_NO_MBX) ; // Waiting outbound frames will eventually be sent, unless there is a CAN bus failure.
return mbx ;
>
// Send message
// Prepare and send a frame containing some value
void SendCANmessage(long byte dlength=8, byte d0=0x00, byte d1=0x00, byte d2=0x00, byte d3=0x00, byte d4=0x00, byte d5=0x00, byte d6=0x00, byte d7=0x00)
<
// Initialize the message structure
// A CAN structure includes the following fields:
msg.IDE = CAN_ID_STD; // Indicates a standard identifier ; CAN_ID_EXT would mean this frame uses an extended identifier
msg.RTR = CAN_RTR_DATA; // Indicated this is a data frame, as opposed to a remote frame (would then be CAN_RTR_REMOTE)
msg.ID = id ; // Identifier of the frame : 0-2047 (0-0x3ff) for standard idenfiers; 0-0x1fffffff for extended identifiers
msg.DLC = dlength; // Number of data bytes to follow
// Prepare frame : send something
msg.Data[0] = d0 ;
msg.Data[1] = d1 ;
msg.Data[2] = d2 ;
msg.Data[3] = d3 ;
msg.Data[4] = d4 ;
msg.Data[5] = d5 ;
msg.Data[6] = d6 ;
msg.Data[7] = d7 ;
CANsend(&msg) ; // Send this frame
>
#define PC13ON 0
#define PC13OFF 1
#define DELAY 250
/* global variables */
void setup()
<
pinMode(PC13, OUTPUT); // LED
digitalWrite(PC13, PC13ON);
Serial1.begin(115200);
Serial1.println(«Hello World!»);
Serial1.println(«Starting Astra-H sniffer v01 program»);
for (bool flag=0;flag==0;)
<
Serial1.print(«trying MS CAN. «);
CANSetup(CAN_GPIO_PB8_PB9,CAN_SPEED_95);
canBus.free();canBus.free();canBus.free();canBus.free();canBus.free();canBus.free();canBus.free(); // make sure receive buffer is empty
delay(200); // wait for receiving something
if ( ( r_msg = canBus.recv() ) != NULL )
<
Serial1.println(» OK!»);
flag=1;
>
else
<
Serial1.println(» FAILED!»);
delay(500);
Serial1.print(«trying LS(SW) CAN. «);
CANSetup(CAN_GPIO_PB8_PB9,CAN_SPEED_33);
canBus.free();canBus.free();canBus.free();canBus.free();canBus.free();canBus.free();canBus.free(); // make sure receive buffer is empty
delay(200); // wait for receiving something
if ( ( r_msg = canBus.recv() ) != NULL )
<
Serial1.println(» OK!»);
flag=1;
>
else
<
Serial1.println(» FAILED!»);
delay(500);
>
>
>
Serial1.println(«Time (ms) ; ID ; Length ; B0 ; B1 ; B2 ; B3 ; B4 ; B5 ; B6 ; B7 «);
digitalWrite(PC13, PC13OFF);
>
void loop()
<
while ( ( r_msg = canBus.recv() ) != NULL )
<
digitalWrite(PC13, PC13ON); // LED shows that recieved data is being printed out
Serial1.print(millis());
Serial1.print(«; «);
Serial1.print(r_msg->ID, HEX);
Serial1.print(«; «);
Serial1.print(r_msg->DLC);
Serial1.print(«; «);
Serial1.print(r_msg->Data[0], HEX);
Serial1.print(«; «);
Serial1.print(r_msg->Data[1], HEX);
Serial1.print(«; «);
Serial1.print(r_msg->Data[2], HEX);
Serial1.print(«; «);
Serial1.print(r_msg->Data[3], HEX);
Serial1.print(«; «);
Serial1.print(r_msg->Data[4], HEX);
Serial1.print(«; «);
Serial1.print(r_msg->Data[5], HEX);
Serial1.print(«; «);
Serial1.print(r_msg->Data[6], HEX);
Serial1.print(«; «);
Serial1.println(r_msg->Data[7], HEX);
digitalWrite(PC13, PC13OFF);
canBus.free();
> // close while
> // close void loop
Сообщение отредактировал Demacr — 15.08.19, 01:03
Источник