Новые микроконтроллеры отличаются повышенными ресурсами и скоростью работы. Хорошим примером является STM32G030J6, который содержит внутри стабильный тактовый генератор, позволяющий интерфейсу UART работать без дополнительного кварцевого резонатора. Также отметим увеличенное в несколько раз количество флэш и оперативной памяти. Эти особенности позволили создать дешевый интерфейс для светодиодных лент, управляемых по протоколу DMX.
В устройстве используется интересное программное решение: генератор ШИМ работает с 12-битным разрешением, но была сделана настройка аналогичная настройке гаммы, которая ограничивает количество уровней света до 8-бит. Благодаря этому регулировка и интенсивность освещения подключенного светодиодного источника работают линейно.
Электрическая схема контроллера на STM32G030J6
Технические параметры:
- 8-битный контроль уровня интенсивности света,
- максимальный выходной ток около 4 А,
- Частота ШИМ: 3,9 кГц, разрешение ШИМ: 12 бит,
- питание от 12 В, потребление тока без нагрузки около 10 мА.
Принципиальная схема представлена на рисунке. Напряжение питания светодиодной ленты также используется для питания микроконтроллера. В связи с малой потребляемой мощностью микроконтроллера (ток около 10 мА) было решено использовать линейный стабилизатор U1. Диод D1 защищает стабилизатор от воздействия обратного подключения питания. Светодиод D2 указывает на наличие напряжения питания. Схема U2 преобразует дифференциальный сигнал DMX в уровни, необходимые микроконтроллеру. Светодиод D3 указывает на наличие DMX-сигнала. Выход PWM питает светодиод D4 и через вентиль T1. Максимальный ток транзистора Т1 составляет 10 А, но в силу условий эксплуатации значение не должно превышать 4 А. Кнопка S1 позволяет установить адрес интерфейса.
Схема печатной платы несложная. Сборка традиционная и не требует подробного описания. После подключения блока питания следует произвести программирование микроконтроллера. Для этого достаточно самого дешевого программатора.
Адрес интерфейса по умолчанию – 0. Обратите внимание, что нумерация каналов в программах консоли DMX может начинаться с нуля или единицы. Если он начинается с единицы, учтите это при настройке адреса интерфейса. Адрес можно изменить с помощью кнопки S1. Для этого установите желаемый адрес разделенный на 2, на канале 0 консоли DMX или на панели компьютерной программы, а затем нажмите кнопку. Адрес будет сохранен во флэш-памяти. Таким образом можно установить только четные адреса. Если необходимо установить нечетный адрес, воспользуйтесь программатором.
Далее смотрите содержимое памяти микроконтроллера с отмеченными важными ячейками:
Длинное слово с адресом 0x7800 содержит адрес DMX, на который отвечает интерфейс. На рисунке он обведен красным (адрес 0xA = 10). После выбора слова, его изменения и подтверждения нажатием ENTER, память будет сохранена. Значение слова по адресу 0x7808 (синий фон на рисунке) определяет поведение интерфейса в отсутствие сигнала DMX. По умолчанию (значение отличается от 0 и 1) светодиоды будут плавно мигать. Нулевое значение приведет к тому, что в отсутствие сигнала светодиоды будут выключены, значение единицы будет помнить последнее отправленное значение.
Также стоит развенчать миф о том, что STM32 сложно программировать. Например настройка ФАПЧ кварцевого генератора кажется сложной, но во многих устройствах, как в этом проекте, не нужно настраивать ФАПЧ, потому что схема работает с тактовой частотой по умолчанию 16 МГц. Но если нужно настроить PLL, CubeMX / CubeIDE сокращает это действие до нескольких щелчков мыши.
Вторая распространенная проблема – нехватка памяти EEPROM. Но тут FLASH-память может использоваться как энергонезависимая память данных. Время записи / стирания в десятки или сотни раз меньше, чем у EEPROM, а для полной эмуляции EEPROM предоставляются соответствующие библиотеки.