
Привет, Хабр! Пришло моё время начать писать статьи сюда. И первая моя статья будет посвящена новогодней игрушке. Прошу не судить строго.
В 2019-м году Я приобрел 50 микроконтроллеров CH32V003F4P6 по 11 рублей за штуку. В этом году решил пустить их в дело. И первое, что пришло в голову, это сделать игрушку к новому году. Кроме того, появилась возможность лично попробовать WS2812B.
Схема и печатная плата устройства были разработаны в свободной САПР KiCad 9.0. Прошивка написана в среде MounRiver Studio Ⅱ, от производителя микроконтроллера Nanjing Qinheng Microelectronics.
Схема устройства получилась достаточно простой, даже примитивной. В её основе RISC-V микроконтроллер CH32V003F4P6 и адресные светодиоды WS2812B. Так же в схеме есть разъём питания, разъём программирования и куча конденсаторов по питанию. Питание платы внешнее, номиналом 5 В.

Светодиоды WS2812B Я подключил на линию MOSI модуля SPI микроконтроллера. Такое решение мне показалось самым простым. Светодиоды WS2812B управляются по однопроводной линии с NRZ протоколом Длительность одного бита должна быть примерно равна 1.25 ± 0.6 мкс, а ширина импульса задаёт значение бита. При передачи 0, длительность высокого уровня должна быть равна 0.4 ± 0.15 мкс. При передачи 1, длительность высокого уровня должна быть равна 0.85 ± 0.15 мкс. Для сброса светодиода передаётся сигнал низкого уровня длительностью более 50 мкс.

Выглядит не очень удобно, но как оказалось этот протокол можно легко реализовать используя модуль SPI, работающий на частоте 6 МГц (или кратно выше). При частоте 6 МГц длительность байта равна 1.3(3) мкс. Длительность 3 бит равна 0.5 мкс, а длительность 5 бит равна 0,83(3) мкс. Эти значения идеально подходят для управления светодиодом. Для передачи 0 нужно отправить через SPI значение 0xE0, для передачи 1 значение 0xF8. Модуль SPI настроен так, что бы первым отправлять старший бит (SPI_FirstBit_MSB). Для сброса светодиодов нужно отправить пачку нулей, не менее 38, но лучше больше, так как у генератора микроконтроллера есть погрешность частоты.

Дальше в том же KiCad Я выполнил трассировку печатной платы. Плату сделал в форме треугольника. Плата имеет двухстороннюю металлизацию и один слой шелкографии.

Платы заказал в Китае с оплатой и доставкой через один популярный сайт. Но перед этим через Online Gerber View сформировал изображение платы. Делаю так в целях проверки правильности формирования Gerber файлов. Раньше случались ошибки.

Заказал платы 17 ноября, а уже 22 ноября менеджер прислал мне фотографию плат перед отправкой. 30-го ноября платы пришли в почтовое отделение и уже 1 декабря они были спаяны. Видно, что разъём питание припаян с обратной стороны платы, так оказалось удобнее.


Для питания плат изготовил простой переходник. Он состоит из готового кабеля с разъёмом XHP-2 и разъёма USB-A. На фотографии кабель короткий, часть из них Я удлинил на метр.

Следующим этапом было написание прошивки микроконтроллера в MounRiver Studio Ⅱ. Не сложно для тех у кого есть опыт программирования микроконтроллеров STM32. Очень похоже. Платы прошивал через программатор WCH-LinkE-R0-1v3. Сделал множество режимов индикации, но самым красивым считают бегущие RGB огни.

На этом всё. Всем спасибо. Поздравляю с наступающим Новым Годом!