Продолжая тематику сети коммуникаций блоков управления 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»
Поделиться с друзьями
-->

Комментарии (24)


  1. sim-dev
    27.08.2016 12:39

    В статье многократно повторяется, что установкой битика световой прибор включается на 30 секунд. На видео огни мигают явно резвее. Может быть, дополнить статью тем, как выключаются приборы? Подозреваю, что пакет с нулем в соответствующем бите приводит к досрочному гашению ранее включенного прибора — это так?


    1. kvova
      27.08.2016 12:43
      +2

      Верно, и в статье об этом сказано

      Единичное значение в этой маске заставляет подавать ток на соответствующий прибор в течение 30 секунд, нулевое — немедленно обесточить.


      1. sim-dev
        28.08.2016 17:40

        Виноват, невнимателен.


  1. AntiForeZz
    27.08.2016 14:22

    Полагаю, что в данном случае лампы фар прослужат очень не долго в таком режиме. А вообще, смотрится эффектно.


    1. kvova
      27.08.2016 14:24
      +2

      Возможно эти действия сократят срок службы лампочек. Однако лампочкам в поворотниках к такому точно не привыкать


  1. Maklaud
    27.08.2016 16:46
    +5

    Просто шикарно!


    1. kvova
      27.08.2016 17:05
      +3

      Спасибо


  1. OtshelnikFm
    27.08.2016 19:20
    +9

    Ну теперь точно — «Первый парень на районе!»


  1. Sekira
    27.08.2016 19:37
    -1

    Хоть и нельзя использовать световые приборы не по назначению, но было бы интересно увидеть реакцию окружающих, например на светофоре или в пробке, включать сзади перелив из стороны в сторону и регистратор на заднее стекло, чтобы это всё заснять =)


    1. Alexsmt
      27.08.2016 22:48

      Кстати, тут можно добавить PWM модуляцию и сделать переливы реально медленными и плавными, не гася, например, на светофоре стоп сигнал полностью, а только пригашая между волнами переливов к включению поворотника. Аналогично слегка подсвечивая фары перед включением поворотника спереди.


      1. kvova
        28.08.2016 17:02

        Здорово! У народа уже идеи появились. Только полагаю, что реализация ШИМ через коммутацию по i-bus будет перегружать шину.


        1. Alexsmt
          30.08.2016 02:23

          Фары достаточно инерционные, там можно, наверно, и 50 Гц :) ШИМ сделать, а вот по остальным лампам накаливания надо думать.


  1. iNickname
    27.08.2016 21:26

    А Вы мажор однако )

    Тема для меня актуальная, давно планировал поинтересоваться вопросом света для музыкальных шоу, а тут как раз такое. Спасибо, теперь уже не выйдет откладывать. Будем углубляться.


    1. kvova
      28.08.2016 17:04

      Рад, что работа не остается без пользы


  1. audiserg
    27.08.2016 22:48

    жаль все придумано до нас, в сети лет 5 ходит ролик со светомузыкой на 53 кузове, там тоже i-bus. Но рулятттам через шину или доп.контроллер, не знаю.


    1. kvova
      28.08.2016 17:29

      elight существует давно. Именно эта идея меня и вдохновила на создание того что получилось. Первая реализация была в 2012 году, только там музыку накладывал отдельно в редакторе. Позже этот ролик заблокировали на youtube из-за жалобы о нарушении авторских прав, я не указал в описании название песни. Про ролик с 53 кузовом не видел, честно.


  1. aulandsdalen
    27.08.2016 23:37
    -2

    А теперь вопрос — зачем было городить аж отдельный блок управления светом? Чтобы сгорал не предохранитель, а блок за бешеные тыщи евро?
    Уродство какое-то в плане конструкции, честно говоря. Хотя в более новых ХХХ они превзошли сами себя и распространили уродские конструктивные решения на весь автомобиль.


    1. vyacheslav_ka
      28.08.2016 13:44
      +1

      Потому что без отдельного блока и общей шины на порядок возрастает сложность электропроводки. Например, в современном авто светом управляет: несколько панелей управления от водителя, датчик освещенности, сигнализация, всякие комфорт штуки, наподобие подсветки дороги. Тянуть все это проводами вместо одной шины будет намного сложнее и менее надежно.
      Еще бы это было бы в виде открытых стандартов, что бы можно было подключить свою приблуду к авто и программировать некоторые штуки — цены бы не было.


      1. kvova
        31.08.2016 11:14

        Мне даже добавить нечего. Все верно.


    1. EviGL
      28.08.2016 17:05

      Неужели этот блок подоткнут к лампочкам не через предохранители?


      1. kvova
        28.08.2016 17:11

        Согласно документу BMW WDS так и есть. Более того процитирую высказывание от туда

        Лампы включаются через транзисторы. Так как они защищены от короткого замыкания, то необходимость в предохранителях для ламп отпала.


    1. Xandrmoro
      28.08.2016 18:07

      Почему уродство? К инженерии SOLID тоже с большего применим.


  1. sa090550
    30.08.2016 11:37

    А это все так происходит если световая индикация выключена? А что будет если включить ее в штатном режиме?


    1. kvova
      31.08.2016 11:02

      Начиная с первого положения ключа зажигания становится активна i-bus, и коммутация световых приборов по шине тоже. Если активировать световые приборы через выключатели, то по шине их отключить не получится. Так по крайней мере в моем случае.