STM Урок 119. WS2812B. Лента на умных светодиодах RGB. Часть 1



На данном занятии мы попробуем поработать со светодиодами RGB, в которые встроен чип для управления их свечением.

Таким светодиодом является WS2712B от компании WORLDSEMI.

Чтобы понять, что из себя представляет данный светодиод, посмотрим его предшественника — WS2811. Это была просто микросхема, к которой подключался RGB-светодиод. Делалось это, например, вот таким образом

 

 

Это светодиодная гирлянда, в каждом фонарике которой находится RGB-светодиод, подключенный к микросхеме WS2811, расположенной на небольшой плате.

Давайте посмотрим назначение выводов микросхемы WS2811

 

 

Кроме ножки питания и общего провода мы видим здесь контакты для подключения ножек RGB-светодиода раздельно для каждого цвета, а также ножку цифрового входа DIN и ножку цифрового выхода DO. Также есть ещё одна ножка SET, которая требуется для включения режима пониженной скорости.

Поэтому к соответствующим ножкам мы подключаем питание, светодиод и передаём определённым образом цифровой сигнал на ножку DIN, чтобы наш светодиод засветился определённым цветом. Затем, если мы выдержим определённое время, светодиод засветится этим цветом. Но если мы не выдержим данного времени и начнём передавать следующий цифровой код, то данный код переместится через ножку цифрового выхода DO к следующей такой же микросхеме, если таковая имеется. Следующую микросхему мы подсоединяем к данной ножке нашей микросхеме ножкой DIN. И таким образом мы выстраиваем цепочку из таких микросхем с подключенными к ним светодиодами (нажмите на картинку для увеличения изображения)

 

 

Аналогичным образом устроен и наш светодиод, рассматриваемый в данном занятии, — WS2712B. Только в нём уже светящийся элемент сразу подсоединён к чипу. Наружу выведены ножки питания, общей шины, а также цифровой вход и выход

 

 

 

Вот назначение его ножек вместе с размерами

 

 

Ко мне в руки чудесным образом попала вот такая ленточка, выполненная на данных умных светодиодах (нажмите на картинку для увеличения изображения)

 

 

Подобных лент существует огромное множество. Они различаются по цвету, плотности светодиодов (количеству светодиодов на 1 метре ленты), а также по степени защиты. Данная лента чёрного цвета, плотность — 144 светодиода на метр, а защита — самая малая. Обычная бумажная лента с посаженными на неё и соединёнными светодиодами. Я брал именно такую в целях экспериментов и не планировал её использование в местах, не защищённых от атмосферных воздействий. К тому же за защиту надо платить и с более высокой степенью защиты ленты стоят дороже. Длина моей ленты всего 1 метр, поэтому, соответственно, и светодиодов на ней всего 144. Вот с этими 144 светодиодами мы и будем работать.

Также мы видим, что из обоих концов данной ленты выведены по 5 проводов

 

 

Назначение каждого провода.

Красный провод в колодке — питание, белый в колодке — общий, зелёный в колодке — сигнальный.

Красный отдельный — высокотоковое питание, чёрный — высокотоковый общий провод.

 

 

По обеим концам разницу имеют только провода сигнальные. С одной стороны это вход, с другой — выход. На рисунке показана именно входная колодка, этой стороной мы и будем пользоваться. Выходная сторона нужна для подключения следующей ленты.

Вот так вот выглядят вблизи светодиоды на моей ленте

 

 

Кроме светодиодных лент на светодиодах WS2812B существуют также матрицы. Они бывают разной размерности — 8х8, 32х32 и т.д. Также можно приобрести такие светодиоды по отдельности. Это требуется обычно либо для сборки каких-то своих схем, либо для того, чтобы заменить светодиод, вышедший из строя. Определить такой светодиод не сложно, так как все исправные светодиоды, расположенные по ленте либо матрице до него, будут исправно работать, а данный светодиод светиться не будет и также не будут светиться светодиоды, расположенные после него.

Теперь давайте поговорим о том, каким же образом передаётся сигнал, управляющий нашими умными светодиодами, как он устроен, какой у него, как говорится, протокол.

А протокол у данного управляющего сигнала, оказывается не такой уж и сложный.

Сначала мы передаём 24 бита цветов, предназначенных для самого первого светодиода. Биты передаются в следующей последовательности: сначала зелёный, потом красный, потом синий

 

 

Как-то непривычно (не R+G+B), но ничего страшного, справимся.

Теперь посмотрим, как передаётся каждый бит. Под каждый бит отводится определённое время — 1,25 микросекунды.

Если мы передаём ноль, то сначала мы устанавливаем высокий уровень сигнала, держим его в таком состоянии 0,35 микросекунды (допускается отклонение 150 наносекунд или 0,15 микросекунды). По прошествии данного времени мы устанавливаем на ножке низкий уровень и держим его до передачи следующего бита 0,9 микросекунды (допускается такое же отклонение — 150 наносекунд)

 

 

Единица передаётся наоборот. Мы также устанавливаем высокий уровень, ждём 0,9 микросекунды (отклонение то же), затем опускаем уровень, ждём 0,35 микросекунды (отклонение такое же — 150 наносекунд)

 

 

Таким образом, если мы передали этим способом 24 бита и на этом не остановились и начали передавать ещё 24 бита, то первые 24 бита переместятся к следующему светодиоду, а новые 24 бита будут загружаться в буфер первого. И так будет до тех пор, пока мы после передачи последних 24 бит не подождём определённое время. А определённое время это — 50 микросекунд и более. Вот тогда уже принятые 24 бита первый светодиод никому не передаст и все светодиоды засветятся тем цветом, который они приняли последний. И если мы начнём что-то передавать дальше — то это будет уже порция для следующей фазы свечения светодиодов.

И, так как время передачи одного бита у нас постоянное, то несложно посчитать скорость передачи данных. Она получится равной 800 килобит в секунду. Также несложно подсчитать, что для передачи 24 бит, необходимых и достаточных для информации, требуемой для одного светодиода, потребуется 30 микросекунд. Соответственно, для всех 144 светодиодов потребуется 4,32 милисекунд. Вполне неплохая скорость.

Теперь немного об электрических параметрах данных светодиодов.

Питается светодиод от 3,5 до 5,3 вольт.

Потребление тока при полном свечении светодиода белым светом (все 24 бита в единицах) мы также можем посчитать. При данном цвете заявлена потребляющая мощность — 0,3 ватта. Поэтому, если мы будем питать ленту напряжением 5 вольт, то это будет 60 милиампер. А если мы зажжём все наши 144 светодиода полностью белым цветом на всю яркость (единицы во всех битах во всех светодиодах), то мы получим потребление тока всей нашей лентой целых 8,64 ампера. Чтобы нам не получить такой огромный ток, то мы не будем наши светодиоды никогда зажигать таким полным светом, а будем зажигать их определёнными цветами, и то не более половины их свечения, поэтому мы вполне обойдёмся 3-амперным DC-DC преобразователем который мы подключим к силовым проводам ленты

 

 

Силовые провода ленты со стороны выхода лучше заглушить термоусадкой во избежание замыкания вследствие неосторожного обращения.

То есть, мы будем стараться, чтобы при нашем тестировании светодиоды горели максимум в 1/6 часть максимального их свечения. Например, чтобы светодиод засветился зелёным цветом, то мы интенсивность RGB зададим как 0,128,0. А если нам надо включить оранжевый цвет, а это одновременно и красный и жёлтый, то мы уже включим 64,0,64. То есть суммарное число у нас не будет превышать 128, а это и будет 1/6 часть свечения, поэтому суммарный ток потребления ленты у нас не превысит 1,5 ампера. Поэтому можно ничего не бояться. И даже при таком свечении при такой плотности светодиодов на ленте она будет светиться очень ярко.

Микроконтроллер мы будем использовать народный — STM32F103C8T6, расположенный на очень дешёвой отладочной плате. Программатор мы будем использовать тоже дешёвый, поэтому материально мы насчёт контроллера ленты почти не пострадаем. Управляться будет лента от одной ножки при помощи PWM, включенном в настройках определённого таймера. Также будет использован DMA для ускорения процесса. Заодно и поучимся пользоваться DMA в PWM. Вот так выглядит наша плата, подключенная к ленте (нажмите на картинку для увеличения изображения)

 

 

Отладочная плата будет питаться от программатора ST-Link, поэтому к ленточке мы от неё ведём только общий и сигнальный провод. От какой именно ножки мы его ведём, мы увидим, когда будем настраивать таймер.

 

В следующей части нашего урока мы создадим проект, изучим работу таймера в режиме PWM с использованием DMA и попробуем зажечь определённые светодиоды различными цветами.

 

 

Предыдущий урок Программирование МК STM32 Следующая часть

 

 

Отладочную плату STM32F103C8T6 можно приобрести здесь STM32F103C8T6

Программатор недорогой можно купить здесь ST-Link V2

Ленты светодиодные WS2812B разные можно приобрести здесь WS2812B

Логический анализатор 16 каналов можно приобрести здесь

 

 

Смотреть ВИДЕОУРОК (нажмите на картинку)

 

STM Name

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*