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.

Пользовательские настройки хранятся во флэш-памяти микроконтроллера в энергонезависимой памяти.

Поскольку на плате не установлен интерфейс RS-232, плата программируется (и отлаживается) через интерфейс SWD («Serial-Wire Debug»), предпочтительно с помощью ST-LINK, который подключается к 3-контактному разъему рядом с USB.

Исходный код вполне подходит в качестве шаблона для дальнейшей собственной разработки, особенно в отношении DMX и USB.Он программируется непосредственно на уровне регистров, без использования внешних библиотек или драйверов.

Микроконтроллер тактируется внутренним осциллятором (HSI48), частота которого синхронизируется с сигналом USB. Этот метод обеспечивает очень стабильный выходной сигнал DMX.

Потому что невозможно повторно запустить USART микроконтроллера STM32 сразу после сброса DMX, USART Tx продолжает работать в режиме ожидания во время сброса DMX. Он питается через резистор к DMX-драйверу MAX487, на который подается низкий уровень другим выходом с открытым стоком

микроконтроллер во время сброса DMX.

Общий ток питания без нагрузки DMX составляет около 25 мА, с подключенной шиной DMX до 50 мА.

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

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

и нескольких сквозных отверстий и деталей SMD.

Диаграмма USB DMX STM32

Схема установки компонентов 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. каналов на нулевом уровне.

Внимание: при установке или удалении перемычки во время работы платы сброс и перебор USB в течении 1-2 секунд.

После этого устройство должно быть перезапущено. Программное обеспечение или 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
? отобразить список актуальных глобальных параметров
Каждой команде управления и каждому сообщению о состоянии назначается одна буква. Если команда ожидает параметр, то он указан после буквы команды в острых угловых скобках <..:>. Числовое значения всегда в десятичном формате и отправляется через USB как текст ASCII.

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, в которые один и тот же уровень копируется

Макет платы в формате TIF Скачать usbdmx-f042-pcb.tif

Скачать usbdmx-f042v5.zip Исходный код.

Ваш комментарий. Вики-синтаксис разрешён: