Pull to refresh

Светомузыка из BMW

Reading time 8 min
Views 26K
Продолжая тематику сети коммуникаций блоков управления BMW, в этой статье будет под прицелом внимания блок контроля световых приборов (LCM), и те забавные штуки которые мне удалось на нем реализовать. Но обо всем по порядку и начнём с пояснительной части.


LCM (англ. Light Control Module) устройство, которое выполняет следующий функционал:

  • коммутация внешних и внутренних осветительных приборов;
  • контроль исправности ламп накаливания;
  • отслеживает положение выключателей световых приборов;
  • взаимодействие с другими блоками управления.

Таким образом LCM является исполнителем при включении требуемого осветительного прибора. Управляющую информацию он получает от включателей в зоне управления водителя или по шине I-bus. В качестве обратной связи предоставляется в шину информация о включенных приборах и их неисправности. Поэтому водитель будет оперативно проинформирован сообщением на приборной панели, если например сгорела левая лампа ближнего света. Информация о неисправности определяется вне зависимости от того, включен прибор или нет.

Коммутация осветительных приборов выполняется посредством усилителей постоянного тока на полупроводниковых устройствах. Этим самых исключаются проблемы подгорания контактов на реле и необходимость использования предохранителей. Однако усложняет схему и повышает цену ремонта. Не редки случаи, когда выходят из строя выходные каскады усилителей постоянного тока. В этом случае приходится ремонтировать LCM или менять на исправный с последующим кодированием.

При установке нештатной сигнализации мастеру необходимо получить контакт к проводам поворотников или габаритных огней. Они как правило на скрутки подсоединяются к жгуту проводов в районе блока LCM. Я такое видел. Хотя задачу можно было бы решить более гуманно, подключившись к I-bus через микроконтроллер. В таком случае нештатная сигнализация сможет получить доступ ко всем осветительным приборам, не только поворотникам. К тому же доступным станет центральный замок, доводчик стекол, люка и складные зеркала. Но применение микроконтроллера и соответствующий софт задача непростая, и мастер такой вариант лучше проигнорирует.

С помощью дилерских средств диагностики и кодирования можно взаимодействовать с LCM. Считывать, очищать коды неисправностей, запрашивать диагностические команды, кодировать режим работы и параметры. Диагностическое оборудование подключается к шине D-bus, на которой нет физического подключения к LCM. LCM является абонентом шины I-bus и взаимодействие с диагностическим оборудованием происходит через шлюз в приборной панели. Шлюз пересылает сообщения из D-bus в I-bus и обратно. Таким образом если подавать диагностические запросы на включение того или иного светового прибора и «снифить» I-bus, то можно вычислить логику воздействия на регистры LCM для включения нужного прибора. Я так и сделал. На BMW DIS, запущенной на виртуальной машине, задавал команды: включить левый передний поворотник, ближний свет правый, левый стоп сигнал и т. д. При этом фиксировал фреймы на I-bus. Диагностический запрос на индивидуальное включение светового прибора выглядит следующим образом:


Отправителем сообщения является диагностика (идентификатор 3F), получатель LCM (D0), тип сообщения . В байтах DAT0 — DAT3 размещается маска, где определено соответствие бита внешнему световому прибору. Единичное значение в этой маске заставляет подавать ток на соответствующий прибор в течение 30 секунд, нулевое — немедленно обесточить. В случае успешного принятия сообщения от диагностики, LCM подтверждает положительным квитированием: D0 03 3F A0 4C.Таким образом с помощью диагностического оборудования включается индивидуально по запросу осветительный прибор, чтобы можно было оценить его работоспособность. В таблице ниже представлено положение бита из набота DAT0-DAT3, которое включит световой прибор на 30 секунд.

Показать таблицу
| Световой прибор                            | DAT0, bin | DAT1, bin | DAT2, bin | DAT3, bin |
|--------------------------------------------------------------------------------------------|
| Неизвестно                                 |  00000000 |  00000000 |  00000000 |  00000001 |
| Указатель поворота задний правый           |  00000000 |  00000000 |  00000000 |  00000010 |
| Задний противотуманный фонарь левый        |  00000000 |  00000000 |  00000000 |  00000100 |
| Стояночный огонь задний внутренний правый  |  00000000 |  00000000 |  00000000 |  00001000 |
| Стояночный огонь задний правый             |  00000000 |  00000000 |  00000000 |  00010000 |
| Неизвестно                                 |  00000000 |  00000000 |  00000000 |  00100000 |
| Указатель поворота передний левый          |  00000000 |  00000000 |  00000000 |  01000000 |
| Неизвестно                                 |  00000000 |  00000000 |  00000000 |  10000000 |
| Неизвестно                                 |  00000000 |  00000000 |  00000001 |  00000000 |
| Неизвестно                                 |  00000000 |  00000000 |  00000010 |  00000000 |
| Фонарь подсветки номерного знака правый    |  00000000 |  00000000 |  00000100 |  00000000 |
| Стояночный огонь задний левый              |  00000000 |  00000000 |  00001000 |  00000000 |
| Стоп-сигнал средний                        |  00000000 |  00000000 |  00010000 |  00000000 |
| Стояночный огонь передний правый           |  00000000 |  00000000 |  00100000 |  00000000 |
| Указатель поворота передний правый         |  00000000 |  00000000 |  01000000 |  00000000 |
| Указатель поворота задний левый            |  00000000 |  00000000 |  10000000 |  00000000 |
| Стояночный огонь передний левый            |  00000000 |  00000001 |  00000000 |  00000000 |
| Стояночный огонь задний внутренний левый   |  00000000 |  00000010 |  00000000 |  00000000 |
| Противотуманная фара левая                 |  00000000 |  00000100 |  00000000 |  00000000 |
| Неизвестно                                 |  00000000 |  00001000 |  00000000 |  00000000 |
| Фара дальнего света левая                  |  00000000 |  00010000 |  00000000 |  00000000 |
| Фара дальнего света правая                 |  00000000 |  00100000 |  00000000 |  00000000 |
| Противотуманная фара правая                |  00000000 |  01000000 |  00000000 |  00000000 |
| Задний противотуманный фонарь правый       |  00000000 |  10000000 |  00000000 |  00000000 |
| Неизвестно                                 |  00000001 |  00000000 |  00000000 |  00000000 |
| Неизвестно                                 |  00000010 |  00000000 |  00000000 |  00000000 |
| Фонарь подсветки номерного знака левый     |  00000100 |  00000000 |  00000000 |  00000000 |
| Стоп-сигнал левый                          |  00001000 |  00000000 |  00000000 |  00000000 |
| Стоп-сигнал правый                         |  00010000 |  00000000 |  00000000 |  00000000 |
| Фара ближнего света правая                 |  00100000 |  00000000 |  00000000 |  00000000 |
| Фара ближнего света левая                  |  01000000 |  00000000 |  00000000 |  00000000 |
| Неизвестно                                 |  10000000 |  00000000 |  00000000 |  00000000 |



Если необходимо включить не один а несколько световых приборов, то достаточно объединить значение в области DAT0-DAT3 логическим сложением. Таким образом можно заставить светиться любую доступную комбинацию фонарей перечисленных в таблице. Например передав сообщение 3F 0F D0 0C 00 00 00 00 40 00 00 40 00 00 00 00 EC в I-bus, будут включены левая фара ближнего света и передний левый указатель поворота. Затем сообщением 3F 0F D0 0C 00 00 00 00 00 00 00 00 00 00 00 00 EC погасить все.

Благодаря описанным возможностям LCM, можно создать приложение, которое сможет включать любое сочетание световых приборов в различной последовательности, ограничивающейся только инертностью ламп накаливания. Очевидно таким образом работает eLight модуль. Коллеги из германии приняли во внимание возможности LCM и создали свой проект, который включает в себя как аппаратную, так и программную часть. Сам модуль подключается к авто просто, достаточно 3 контактов: корпус, питание бортовой сети, I-bus. Затем с помощью приложения на ПК, программируется режим работы модуля. Например закрывая автомобиль, фары включатся в такой последовательности, что создадут эффект бегущих огней. Забавная штука получается. А что если сделать из внешних осветительных приборов светомузыку, которая будет сопровождаться звучанием из акустической системы автомобиля. Будет ещё забавнее! Тем более все технические возможности для этого есть.

В предыдущей статье я уже описал возможность подключения к штатной акустической системе в качестве CD-чейнджера. Т. е. с выводом звука все уже ясно. Но как можно синхронизировать световое сопровождения с музыкой? Очевидным решением для меня стало использование MIDI протокола. Тем более есть готовое программное обеспечение, которое позволит создать световой ряд синхронно с музыкальным сопровождением. Я имею в виду секвенсор.

MIDI — это протокол взаимодействия музыкальных инструментов. Протокол основан на последовательной передаче данных от мастер-устройства к подчинённому. В качестве мастера может быть MIDI клавиатура или секвенсор, а в качестве подчинённых различные синтезаторы. Сообщения MIDI протокола делятся на 2 типа: сообщения канала и системные сообщения. Нас интересуют сообщения канала, так как по ним передаётся команды управления звучанием. А именно те, в которых содержится информация о событии с нотой: нота включена, нота выключена. В этом сообщении также передаётся информация о силе воздействия на ноту, но она не представляет интереса.

Если интерпретировать систему внешних световых приборов автомобиля как подчинённое MIDI устройство, где каждому фонарю соответствует своя нота, то получится «световой синтезатор». К нему хоть секвенсор подключай, хоть клавиатуру, и играй лампочками как душе угодно. Но для такой реализации необходим процесс, который будет преобразовывать входной MIDI поток в I-bus сообщения для LCM. На рисунке ниже этот процесс обозначен midi4lcm.


midi4lcm это сервер, который принимает данные в своём сегменте сети из группового вещания. Из всего потока принятых данных, midi4lcm фильтрует голосовые MIDI сообщения 1-го канала. В зависимости от того на какую ноту было воздействие, формирует сообщение для LCM. MIDI сообщения интегрируются с учётом небольшой задержки, так как каждой UDP датаграмме, несущей в себе информацию о событии ноты, формировать отдельное I-bus сообщение, будет слишком накладно. Для этого сервер объединяет пришедшие MIDI сообщения в одно сообщение I-bus, если интервал приёма не превышает 1 мс.

Чтобы в удобное для нас время выполнить световой ряд на автомобиле, необходимо иметь сохранённую последовательность MIDI сообщений, т. е. MIDI файл. Создать его можно с помощью секвенсоров. Сегодня в распоряжении имеется большой выбор приложений для создания музыки и сохранения её в различные форматы. От простейшего секвенсора до навороченных музыкальных станций. В данном варианте главная польза от таких приложений, это возможность проигрывания MIDI дорожки и экспортирование её в файл. Особенно если имеется возможность параллельной работы аудио дорожки, то появляется возможность создавать световой ряд в синхронном звуковом сопровождении. Для примера как это выглядит на деле

.
Таким образом итог творчества для автомобильной светомузыки сводится к двум файлам: MIDI и аудио.

Итак, допустим у нас в распоряжении уже есть необходимые файлы светового ряда MIDI и музыкального сопровождения, например в WAV формате. Синхронно воспроизвести их можно с помощью Gstreamer-а при наличии необходимых плагинов. А именно выполнив в командной строке:

gst-launch-1.0 -v filesrc location=lighting.mid ! midiparse ! udpsink host=127.0.0.1 port=21928 sync=true filesrc location=music.wav ! wavparse ! pulsesink

В данной команде Gstreamer транслирует MIDI сообщения из файла lighting.mid синхронно в соответствии с временными метками. Сообщения передаются на ip адрес 127.0.0.1 и UDP порт 21928. Именно на этот порт настроен midi4lcm сервер для приёма группового вещания. Так обычно настраиваются MIDI устройства, работающие по локальной сети. Помимо MIDI вещания, конвейер gst-launch выполняет передачу звукового потока из music.wav файла на звуковой срвер PulseAudio. Если линейный выход компьютера, на котором выполняется эта команда, подключён к акустической системе автомобиля, то будет достигнут желаемый эффект — светомузыка осветительных приборов под звуковое сопровождение. Правда чтобы снаружи этот эффект был «эффектнее», надо оставить дверь открытой, иначе слишком тихо будет.


Этот рисунок демонстрирует рабочую схему более детально. В качестве дополнительного оборудования автомобиля выступает мини компьютер Raspberry Pi, который интегрирован в штатную шину взаимодействия блоков управления I-bus и акустическую систему. С другой стороны у Raspberry имеется интерфейсы для подключения к локальной сети, чтобы можно было взаимодействовать с другими компьютерами и принимать аудио и MIDI потоки. В этом случае появляется возможность подключить секвенсор к автомобилю и проверять работу MIDI дорожки так сказать «в живую».

На последок покажу как это получилось на практике:

.

Дополнительная информация по теме:

» MIDI Wavy: делаем управляемую цветомузыку с помощью Arduino и MIDI
» Цикл статей о MIDI из журнала «Музыкальное оборудование»
» Дилерская документация по электрике автомобилей марки BMW «BMW WDS»
Tags:
Hubs:
+51
Comments 24
Comments Comments 24

Articles