Диммер dmx 512 своими руками

Диммер dmx 512 своими руками

20-ти канальный светодиодный диммер DMX-512

Автор: Aheir
Опубликовано 27.03.2012
Создано при помощи КотоРед.

Сегодня немножко коснемся одной из областей моих профессиональных интересов, а именно – световой шоу-техники. Я говорю о различных светильниках, использующихся для сценической, декоративной, интерьерной или архитектурной подсветки и т.п. Как правило, это многоцветные светильники с возможностью дистанционного управления (смена цвета, различные эффекты и т.д.) по протоколу DMX -512 (реально, этот протокол долгое время оставался практически единственным на рынке профессиональной световой техники, да и сейчас все еще очень и очень распространен: парк «железа» под него огромен). Кому интересно – найдет описание в интернете, здесь лишь скажу, что в рамках работы по данному протоколу от источника сигнала (пульта) исполнительным устройствам (светильникам) постоянно передается пакет информации, содержащий 8-ми битные значения (0..255) для 512 каналов. Как эти значения интерпретировать – это уже дело светильника. Для работы используются трансиверы RS -485, по сути, происходит простая потоковая передача данных с небольшими дополнениями в виде стартовых условий и т.п. Контроллеры светильников традиционно называют диммерами, ну а в современной действительности все чаще в самих светильниках используются светодиоды.
Вот такую штуку сегодня и сотворим – 20-ти канальный светодиодный диммер. Сразу оговорюсь, что делалось все для проверки работоспособности различных передатчиков DMX -сигнала (пультов и т.д.), которые периодически приходится изготавливать, делалось быстро и из имеющегося в наличии.
Схема на рисунке:

Схема совершенно традиционна для таких устройств. Микроконтроллер ATMega 8515 (слегка разогнан, стоит кварц на 20МГц, но это не принципиально, в данном случае хватило бы и 10МГц за глаза, просто других резонаторов не оказалось под рукой), интерфейс на трансивере RS 485 DS 75176 (в данном случае работает строго на прием), 20 светодиодов для отображения состояния соответствующих каналов, пара светодиодов для индикации состояния устройства и ДИП-переключатель для задания адреса.

Собранное устройство выглядит следующим образом:

ДИП-переключатель служит для установки адреса и режима работы устройства. DMX -адрес устройства, это, по сути, номер байта в DMX -кадре, начиная с которого исполнительное устройство считает полученные данные предназначенными именно для него. Т.е. применительно для нашего случая, если, например, адрес будет равен 10, то начиная с 10 полученного байта контроллер запомнит 20 байт информации, поскольку он знает, что является 20-ти канальным. На шине могут присутствовать устройства с одинаковыми адресами или перекрывающимися диапазонами данных – как это все будет работать – на совести разработчика системы. Очевидно, что значения адреса должны быть из диапазона 1..512 (отсюда и название протокола), адрес выставляется с помощью переключателей 1..9 в двоичном коде от 0 b 000000000 (все опущены, адрес 1) до 0 b 111111111 (все подняты, адрес 512). Десятый ДИП остался вроде как ненужным, при его включении реализован переход устройства в автономный режим.

Логика работы следующая.

После включения и начальной инициализации загорается зеленый светодиод D 3. Если устройство находится в режиме DMX и на шине присутствует корректный сигнал, загорается синий светодиод D 2 и устройство устанавливает яркость выходных светодиодов D 6.. D 27 в соответствии с полученными данными (пропорционально значению из диапазона 0..255). Управление яркостью светодиодов осуществляется с помощью программного 8-ми битного ШИМа с частотой около 200 Гц. Если сигнал в линии отсутствует – синий светодиод мигает. Если перевести устройство в автономный режим, выходные светодиоды будут работать в режиме бегущего огонька (вообще, конечно, можно любые эффекты написать: с плавной сменой яркости и т.д., и т.п.).

Читайте также:  Домик для выгула цыплят своими руками

Программа для МК написана в CVAVR , фьюзы следующие:

Работа устройства проверялась с помощью самопального USB — DMX передатчика под управлением самописного же софта:

Про передатчик – тема отдельная, про программу, в общем-то, тоже, скажу лишь, что она позволяет выставлять значение одновременно всех 512 каналов (ползунком или соответствующей кнопкой)

или же индивидуально настраивать любой канал:

С софтом еще нужно работать, но для простых вещей мне его уже хватает.

Работу устройства можно посмотреть на видео :

Исходно установлены произвольные значения по всем каналам, потом производится групповое изменение яркости 0..100% кнопками в программе, затем демонстрация работы в отсутствие сигнала DMX и в автономном режиме.

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

Это устройство разрабатывалась как вспомогательная часть большого проекта, здесь публикуется с ведома и разрешения заказчика, но, по понятным причинам, исходники в общий доступ я выложить не могу. Если кому-то потребуются тексты – пишите в личку, решим вопрос.

Источник

Тестер сигнала DMX-512 и двухканальный диммер

Стал глубже погружаться в мир театрального света и стало интересно, как же оно работает.

Световое оборудование сейчас управляется по DMX-512. Этот протокол работает на сетях RS-485. DMX-512 крайне простая штука. Представляет собой до 512 байт с данными о значении канала, передаваемых последовательно. И все. На самом деле вовсе не обязательно отправлять все 512 байт, но если нужно сказать, что изменилось значение на, допустим, 27 канале, то необходимо отправить значения не только измененного канала, но и все предыдущие. Остальные 485 каналов отправлять вовсе не нужно. Но в рамках данной статьи можно опустить эти подробности. Ведь мы собираемся читать, а не писать.

Для устройства я выбрал ATmega8, но, забегая вперед, скажу, что по объему памяти она бы поместилась и на Tiny13. Вот только Tiny13 не умеет тактироваться от кварца да и аппаратного UART в нем нет. Подошла бы Tiny2313, но разница в цене настолько мала, что можно и раскошелиться на более крутое железо.

Первым делом инициализируем USART на скорости 250 000.

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

Создаем глобальный массив под интересующие данные. Для этого нужно задать сколько каналов интересуют и начальный адрес. Глобальный массив позволяет задавать данные в прерывании и использовать эти данные в основном цикле программы.

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

Читайте также:  Как сделать фсо вспышки своими руками

Но в данном виде, как сейчас, прошивка работать не будет. Самой сложной задачей является разделение посылок между собой. Для этих целей предусмотрен интервал тишины. Линия RX опускается в 0, что означает старт-бит. Далее микроконтроллер ждет данные и 2 стоп-бита. Последних он так и не дожидается, что генерирует ошибку «Frame Error», позволяющую определить начало новой передачи.

В итоге получаем следующий код:

Добавилась только переменная — флаг. Что сигнал break был пойман. Дополнительное условие (DMX_Break == 1) нужно для того, чтобы избежать ситуации, когда устройство включили в сеть прямо во время активной передачи. Тогда на линии идут корректные пакеты, но в данный момент идет вовсе не значение первого канала, а, допустим, 123. И мы получим ошибочное значение. Реальное же будет только в новой посылке.

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

Второе же устройство куда полезнее. В нем я использовал два канала с ШИМ, данные для которых поступают по DMX-512. Его можно использовать для оцифровки старых аналоговых диммеров, управляемых сигналом 0-10 Вольт (добавив операционный усилитель), или же для сборки собственных приборов. Например LED прожектор или даже, при наличии пары сервоприводов, полноценная голова! Тут только стоит проявить фантазию!

Минимальная схема будет следующей:

Источник

DMX512 Контроллер на 40 каналов

Решил опубликовать интересное устройство, которое заинтересует довольно обширный круг людей. Речь пойдет о DMX-контроллере своими руками.

Данное устройство реализовано на микроконтроллере ATmega64A. Тактируется мк от кварцевого резонатора на 16 MHz , тактовая частота выбрана максимальной по документации , так как многоканальный программный ШИМ очень сильно загружает процессор , и реализовать высокочастотный ШИМ представляет трудность на низких тактовых частотах. В данной прошивке ШИМ работает на частоте 79Гц , потому как при более высокой частоте уже перестает работать usart интерфейс, и данные по dmx уже не принимаются .

Принцип работы программы очень прост :

Тут я не буду детально рассказывать о протоколе dmx512 и о физической шине rs485. Эту информацию можно найти в интернете.

В прерывании usart определяется ошибка приема данных , это сигнализирует мастер о начале пакета (команда BREAK 44us=>) . Следующий этап : в прерывании usart ловится MAB длительностью 4us и затем start bit с нулевым значением и только после этого программа принимает сами данные диммеров , и складывает в массив последовательно начиная с 0 ячейки. Затем в прерывании таймера этот массив сравнивается с программным таймером каждого канала и выполняется либо включение цифрового выхода , либо выключение. Также в этом прерывании выполняется адресация диммеров .

Работает это следующим образом: Если например задан адрес 10 для диммера , то буфер сравнивается с таймерами начиная с 10 адреса . Таймер 1 с буфером 10 , таймер 2 с буфером 11 и т.д. Можно конечно было чуток оптимизировать расход озу микроконтроллера, но это не имеет смысла , ресурсов в МК предостаточно.

Программируется контроллер не переключателями как в стандартных приборах , а прямо через тот же кабель и dmx передатчик. Для этого в основном цикле программы проверяется флаг занятости шины dmx. Определяется программно . Если команды BREAK не было (флаг = 0) то значит dmx не занят пока что, и АТ команды можно принимать .
Сделано так по нескольким причинам : 1 устройство будет закрыто в щитке и доступа к нему не будет, а адрес возможно нужно будет периодически менять, без вскрытия щитка. Вторая причина , это наличие уже готовых заводских плат идеально подходящих для данного проекта .

Читайте также:  Декоративная штукатурка шпаклевкой своими руками покраска

Тестировалось данное устройство в программе Freestyler и на приемопередатчике USB <>rs485 с чипом FT232 . Для программирования данного устройства нужно использовать как раз такой преобразователь (с двухсторонней передачей данных) у обычных dmx «свистков» выпилено физически прием данных. Хотя , можно и стандартным dmx шнурком запрограммировать плату . Только пользователь не узнает ответ от платы с подтверждением.

Самая нижняя схема (на МК ATmega8A) представляет собой «конфигуратор» , который может задавать предустановленные значения уровней яркости . Всего их 10шт.
В следующей версии будет создана прошивка для конфигуратора.
Плату можно с легкостью прошить программатором со стандартным ISP 6pin коннектором , или 10 пиновым коннектором , но подключенным через переходник к плате.
Фьюзы следующие :

Аппаратная часть поддерживает установку приемопередатчика на 433МГц HC-12 или WiFi ESP-01 (ESP8266), программно не реализовано в текущей версии. При необходимости индивидуально можно этот функционал добавить. К примеру управление контроллером через WiFi с веб интерфейсом , или по MQTT протоколу.

Демонстрационная прошивка работы устройства имеет полноценный функционал и на ее основе можно собирать и развертывать последовательно огромное количество каналов «диммеров» , к примеру , можно свободно собрать 10шт. таких плат и получится 320 каналов диммеров и 80 1 битных каналов , для строба или вкл./выкл. нагрузки.
Есть также прошивка на 40 чистых каналов диммеров (тут не публикую) у нее чуть ниже частота ШИМ (около 59Гц ) и она тоже прекрасно работает.

Фото собранного устройства:

Для перепрограммирования DMX контроллера , необходимо закрыть программу управления (Freestyler к примеру если ее используете) а запустить предварительно установленную программу Терминал (например бесплатную Terminal 1.9b)

открыть ком порт который использует DMX переходник , например СОМ2 и настроить скорость обмена 250000 бод.

АТ команды для перепрограммирования адреса и прочих опций DMX контроллера следующие:

AT+REV? — версия программного обеспечения.
ответ платы такой:
REV 1.0
DEC 2018
autor: Artem Ugrimov

AT+TEST> — тестовая команда , включение всех выходов на 1 секунду. Для проверки исправности силовой части контроллера и т.д.
ответ платы такой: TEST_OK! если команда успешно принята и выполнена.

AT+PWM_SET> — тестовая команда , проверка регулятора ШИМ . После стрелки нужно дописать число от 0 до 255. Например: AT+PWM_SET>25 . Отправив эту команду на всех каналах установится значение ШИМ 25. На 8 1 битных каналах установится максимальное свечение так как лог.0 считается если значение регистра меньше 10 , а лог.1 если больше 10.
ответ такой: PWM_OK=25, или PWM_ERR если ошибка.

AT+CONFIG> — Команда для смены адреса контроллера. По умолчанию адрес = 0. Для смены адреса нужно отправить значение (от 1 до 511) адреса в таком формате: AT+CONFIG>48 .
ответ такой: AT+CONFIG>OK! — если успешно , и ADDR_SET_OK=Х если ошибка . Х возвращенное значение , которое было принято.

Список компонентов, схемы, герберы и прошивку можно скачать ниже

Источник

Оцените статью