====== 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мм.{{ :zheleznaja_chast:stm32-usbdmx-board.png?400|}}
Выбор класса 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.
===== Схематическая диаграмма =====
{{:zheleznaja_chast:diagram.jpg?nolink&700|Диаграмма USB DMX STM32}}
===== Сборка =====
{{:zheleznaja_chast:shema.jpg?nolink&600|Схема установки компонентов 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//) для подачи напряжения питания
на устройство.
----
{{:zheleznaja_chast:programmator.jpg?nolink&400|}}
Соберите короткий адаптер для программирования (см. рисунок выше, длина провода не более 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».
Драйвер с сайта [[https://www.st.com/content/st_com/en.html|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 ====
^ Команда ^ Описание ^^
| **[[#S |Sn]]** | выбор канала DMX для последующего действия (n=1 - 512) ||
| **[[#V <уровень канала>|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 (диапазон от 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, в которые
один и тот же уровень копируется
===== Компоненты для сборки контроллера =====
{{https://dmx-512.ru/_media/zheleznaja_chast/shema.jpg?nolink&300 |}}
IC1: [[https://alii.pub/6k6ymp|3.3 V regulator: LF33 CDT, source Reichelt, Conrad 1185435]]
IC2: [[https://alii.pub/6k6ymi|STM32F042F6P6, Mouser, RS Components, Farnell]]
IC3: [[https://alii.pub/6k6ylx|MAX487 CPA, source Reichelt, RS Components, Farnell]]
Connectors [[https://alii.pub/6k6ylj|CN2, CN3]]
LED: [[https://alii.pub/6k6yl5|3mm, low current (specified for 2mA), source Reichelt and others]]
E1: [[https://alii.pub/6k6ykr|Tantal 10uF, min 10V. A standard Electrolytic Capacitor may be used, too]]
----
===== Макет платы =====
Макет платы в формате TIF
[[https://dmx-512.ru/ardu/usbdmx-f042-pcb.tif|Скачать usbdmx-f042-pcb.tif]]
===== Готовая прошивка микропроцессора STM32 =====
[[https://dmx-512.ru/ardu/usbdmx-f042.hex|Скачать usbdmx-f042.hex]]
===== Исходный код =====
[[https://dmx-512.ru/ardu/usbdmx-f042v5.zip|Скачать usbdmx-f042v5.zip]]
Исходный код.