====== 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]] Исходный код.