Содержание
USB DMX 512 Контролер управления на базе STM32 своими руками
Простой интерфейс USB-DMX512 на базе STM32F042
Представлен простой и компактный интерфейс USB-DMX512 на базе микроконтроллера STM32F042F6 (20-контактный TSSOP).
Команды и питание передается через USB. Контролер поддерживает USB 2.0.
Хост-компьютер видит его как MIDI-интерфейс или виртуальный COM-порт.
Соответственно, управление DMX возможно с помощью MIDI-сообщений, а также текстовых команд ASCII. В качестве частного случая реализован протокол MiniDMX, который поддерживается рядом управляющих программ DMX, например «DMXControl3».
Компактный размер платы 43х30мм.
Выбор класса USB на стороне хоста между MIDI и виртуальным COM-портом осуществляется с помощью перемычки на разъеме SWD (перемычку можете заменить на переключатель).
Напряжение питания 5 В (общий ток без нагрузки DMX около 20 мА, с подключенной шиной DMX до 50 мА) уменьшается линейным стабилизатором с малым падением напряжения до 3,3 В, которое питает микроконтроллер.
В режиме MIDI, а также в режиме ASCII команды разработаны таким образом, что ручное управление DMX возможно с помощью терминала ASCII или с помощью MIDI-секвенсора.
предусмотрены команды для установки любого из 512 каналов DMX на любой уровень 0..255 выполнение плавных переходов фейдов с временем фейда до 12,7 секунд, регулируется с шагом 1/10 секунды ограничение количества передаваемых каналов DMX от 24 до 512
фактические уровни определенных каналов DMX обратно в управляющее программное обеспечение.
Cохранять до 36 сцен освещения в энергонезависимой памяти микроконтроллера и перезагружать любую по команде.
(Сцена № 0 автоматически загружается после включения питания.) Протокол MiniDMX хорошо подходит для сложных операций освещения, управляемых специальным программным обеспечением для освещения.
Когда USB работает как виртуальный COM-порт, доступен специальный режим конфигурации для настройки основного MIDI-канала и пользовательского USB Vid/Pid.
Пользовательские настройки хранятся во флэш-памяти микроконтроллера в энергонезависимой памяти. <note important> Поскольку на плате не установлен интерфейс RS-232, плата программируется (и отлаживается) через интерфейс SWD («Serial-Wire Debug»), предпочтительно с помощью ST-LINK, который подключается к 3-контактному разъему рядом с USB.</note> Исходный код вполне подходит в качестве шаблона для дальнейшей собственной разработки, особенно в отношении DMX и USB.Он программируется непосредственно на уровне регистров, без использования внешних библиотек или драйверов.
Описание железной части
Микроконтроллер тактируется внутренним осциллятором (HSI48), частота которого синхронизируется с сигналом USB. Этот метод обеспечивает очень стабильный выходной сигнал DMX.
Потому что невозможно повторно запустить USART микроконтроллера STM32 сразу после сброса DMX, USART Tx продолжает работать в режиме ожидания во время сброса DMX. Он питается через резистор к DMX-драйверу MAX487, на который подается низкий уровень другим выходом с открытым стоком
микроконтроллер во время сброса DMX.
Общий ток питания без нагрузки DMX составляет около 25 мА, с подключенной шиной DMX до 50 мА.
Для простого воспроизведения с помощью простых инструментов аппаратное обеспечение построено на однослойной печатной плате с небольшим количеством перемычек.
провода. Толщина и расстояние между печатными проводами рассчитаны на любительские технологии. Сборка предназначена
и нескольких сквозных отверстий и деталей SMD.
Схематическая диаграмма
Сборка
Этот сборочный чертеж со стороны установки компонентов! IC1, IC2 и все детали SMD просматривается на печатной плате. Все резисторы и конденсаторы SMD имеют размер 0805. Размер платы 43х30мм. R3 нужен только для того, перепрошивки BOOT0 (PB8), обычно в этом нет необходимости. Сброс необходим только в редких случаях,и если есть проблемы с запуском программатора SWD.
Прошивка микропроцессора
Поскольку на этой плате нет порта RS-232, программирование возможно только с SWD программатор.
Вместо покупки специального модуля ST-LINK рекомендуется использовать модуль STM Nucleo-64, который дешевле, его можно настроить как программатор и дополнительно можно использовать для других экспериментов с микроконтроллерами STM32.
Как программировать внешние детали с Nucleo, прочитайте его руководство. Когда программатор отключен (т.е. используется автономный, см. рисунок выше), и программное обеспечение отправляет сообщение о проблеме типа ««no target voltage», подключите выход 3,3 В (контакт рядом с текстом U1) регулятора (5 контактов) на части ST-Link с R23 (4,7 кОм, контактная площадка направлена в сторону разъема SWD) для подачи напряжения питания на устройство.
Соберите короткий адаптер для программирования (см. рисунок выше, длина провода не более 25 см):
— подключите 2-й контакт разъема Nucleo SWD (считая сбоку в сторону Mini разъем USB) с выводом PA14 нашей платы (красный на фото выше). — соедините 3-й контакт с землей нашей платы (коричневый на фото выше). — соедините 4-й пин с пином PA13 нашей платы (черный на фото выше). — запустите программное обеспечение ST-LINK. Соедините контакт сброса с землей. Нажмите пункт «Connect» меню «Target», через 1 секунду отпустите Reset. Через несколько секунд появится экран и отчет о подключении. При подключении выберите «Program&Verify» в меню «Target» и загрузить шестнадцатеричный код. После программирования нажмите пункта «Disconect» меню «Target» и отсоедините адаптер ST-Link.
Установка
По умолчанию интерфейс USB работает с STM Vid/Pid, но это разрешено только для тестирования. Для любого публичного использования ваш индивидуальный Vid/Pid должен быть активирован! (как это сделать смотрите ниже в разделе «Настройка»)
По умолчанию плата подключена к виртуальному COM-порту ПК. Это можно проверить с помощью диспетчера устройств Windows. По умолчанию наша плата использует тот же драйвер что и программатор и будет указана в разделе «COM и LPT». порты» как «Виртуальный COM-порт STMicroelectronics». В противном случае загрузите «Виртуальный COM-порт STM32».
Драйвер с сайта STM и установите его. Вы можете изменить номер COM-порта в «Настройках порта» в диспетчере устройств. В противном случае сохраните настройки по умолчанию.
Скорость передачи не имеет значения в данном случае. Handshake в настройках порта не поддерживается. Когда соединение выполнено между контактом PA14 (контакт SWD-Clk) и землей (перемычка на CN3), плата видится ПК как стандартный интерфейс USB/MIDI.
Когда плата подключается к ПК, драйвер устанавливается автоматически (Windows XP или более поздняя версия). В в диспетчере устройств Windows он отображается в разделе «Аудио-, видео- и игровой контроллер» как «STM32- UsbDmx» или просто «USB-Audio Device».
По умолчанию устройство чувствительно к MIDI-каналу 1 (младший полубайт байта состояния = 0!) Для функционального тестирования и других операций с MIDI DMX в ручном режиме используется простое консольное программное обеспечение.
В режиме ASCII, а также в режиме MIDI передатчик DMX запускается автоматически со всеми 512 DMX. каналов на нулевом уровне.
<note important>Внимание: при установке или удалении перемычки во время работы платы сброс и перебор USB в течении 1-2 секунд.</note> После этого устройство должно быть перезапущено. Программное обеспечение или COM порт должен быть закрыт перед изменением режима, иначе перезапуск этого программного обеспечения может быть заблокирован. В В этом случае для повторного включения программного обеспечения требуется еще один сброс USB-устройства.
Режимы работы
Набор команд ASCII активен, когда PA14 (контакт SWD-Clk)перемычка НЕ подключен к земле. В контексте версии микропрограммы 1.4 (июль 2020 г.) предыдущий режим настройки удален и интегрирован в набор команд ASCII. По этой причине имена некоторых команд изменены.
Краткий справочник всех команд ASCII
Команда | Описание | |
---|---|---|
Sn | выбор канала DMX для последующего действия (n=1 - 512) | |
Vn | установить уровень DMX на адресуемом канале DMX (n=0 - 255) | |
,n (запятая) | сначала прибавляется адрес канала DMX, и устанавливается уровень (n=0 - 255) | |
+ | увеличить адресный уровень буфера передачи канала DMX на единицу | |
- | уменьшить адресный уровень буфера передачи DMX-канала на единицу | |
=n | установить n каналов DMX, начиная с (адресованного канала +1), на уровень адресованного канала. | |
Tn | Плавное затухание n в 1/10 секунды | |
X | немедленно остановить (заморозить) все процессы затухания на их текущих уровнях | |
D | немедленно установить выход всех каналов DMX на 0 | |
Rn | прочитать n байтов из буфера передачи, начиная с адресованного канала DMX | |
Q | уровень отображения выбранного DMX-канала, Fade Time и DMX-цикл | |
Ln | ограничить длину цикла DMX до n каналов DMX (n = от 24 до 512) | |
~n | сохранить пресет в буфер передачи | |
@n | загрузить пресет | |
Cn | установить MIDI-канал, используемый MIDI-командами (1-16) | |
U | изменить USB Vid/Pid | |
? | отобразить список актуальных глобальных параметров |
<note>Каждой команде управления и каждому сообщению о состоянии назначается одна буква. Если команда ожидает параметр, то он указан после буквы команды в острых угловых скобках <..:>. Числовое значения всегда в десятичном формате и отправляется через USB как текст ASCII. </note>
S <DMX канал>
Параметр: адрес DMX (диапазон от 1 до 512) — это номер канала DMX, управляется последующими командами. Например: S25 - Выбран 25 канал DMX, и далее мы должны добавить ему параметры следующей командой
V <уровень канала>
Параметр: уровень (диапазон от 0 до 255) — это значение (например, интенсивность лампы или светодиода), которое будет немедленно передается по фактически выбранному через команду выше, каналу DMX.
, (запятая) <уровень>
Параметр: уровень (диапазон от 0 до 255) — это значение или интенсивность, которая будет немедленно передается по выбранному каналу DMX
+ (не принимает параметры)
Увеличить (добавить +1)к уровню канала. То есть увеличить яркость на +1 Комментарий: Байт нельзя сделать больше десятичного числа 255. Если он уже равен 255, + команда игнорируется. Если на этом канале DMX активен процесс затухания, увеличивается только конечное значение.
- (не принимает параметры)
Уменьшить (Уменьшить -1)уровень канала. То есть уменьшить яркость на -1 Комментарий: Байт нельзя сделать меньше десятичного числа 0.
= <длинна блока>
Время затухания определяется фактическое содержимое регистра FADETIME. Параметр: <длина блока> (от 1 до 512) — это количество каналов DMX, в которые один и тот же уровень копируется
Компоненты для сборки контроллера
IC1: 3.3 V regulator: LF33 CDT, source Reichelt, Conrad 1185435
IC2: STM32F042F6P6, Mouser, RS Components, Farnell
IC3: MAX487 CPA, source Reichelt, RS Components, Farnell
Connectors CN2, CN3
LED: 3mm, low current (specified for 2mA), source Reichelt and others
E1: Tantal 10uF, min 10V. A standard Electrolytic Capacitor may be used, too
Макет платы
Макет платы в формате TIF Скачать usbdmx-f042-pcb.tif
Готовая прошивка микропроцессора STM32
Исходный код
Скачать usbdmx-f042v5.zip Исходный код.