Простой интерфейс 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.
Пользовательские настройки хранятся во флэш-памяти микроконтроллера в энергонезависимой памяти.
Исходный код вполне подходит в качестве шаблона для дальнейшей собственной разработки, особенно в отношении 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. каналов на нулевом уровне.
После этого устройство должно быть перезапущено. Программное обеспечение или COM порт должен быть закрыт перед изменением режима, иначе перезапуск этого программного обеспечения может быть заблокирован. В В этом случае для повторного включения программного обеспечения требуется еще один сброс USB-устройства.
Набор команд ASCII активен, когда PA14 (контакт SWD-Clk)перемычка НЕ подключен к земле. В контексте версии микропрограммы 1.4 (июль 2020 г.) предыдущий режим настройки удален и интегрирован в набор команд 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 | |
? | отобразить список актуальных глобальных параметров |
Параметр: адрес DMX (диапазон от 1 до 512) — это номер канала DMX, управляется последующими командами. Например: S25 - Выбран 25 канал DMX, и далее мы должны добавить ему параметры следующей командой
Параметр: уровень (диапазон от 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
Скачать usbdmx-f042v5.zip Исходный код.