Перейти к содержанию

Адресный светодиод

Светодиодная лента, где каждый светодиод светится своим цветом, управляется одним выводом микроконтроллера. Секрет — в микросхеме внутри каждого светодиода: она забирает свои 24 бита из потока, а остальное передаёт дальше. Разбираем протокол на примере WS2812B.

Обновлено Редакция GAW

Адресный светодиод (addressable LED) — RGB-светодиод со встроенной микросхемой управления, которая принимает цифровые данные и сама задаёт яркость каждого из трёх цветов. Светодиоды соединяют в цепочку: выход данных DO одного идёт на вход DIN следующего, и вся лента управляется одним выводом микроконтроллера. Самый распространённый пример — WS2812B.

Как передаются данные

По даташиту WS2812B-V5/W (с. 1–4):

  • каждый светодиод получает 24 бита — по 8 бит на зелёный, красный и синий, в порядке G, R, B, старшим битом вперёд, то есть 256 градаций на цвет;
  • первый светодиод забирает первые 24 бита в свою защёлку, остальной поток восстанавливает и передаёт дальше — по цепочке поток уменьшается на 24 бита на каждом светодиоде;
  • пауза сброса — низкий уровень дольше 280 мкс — завершает кадр, и все светодиоды разом переключаются на новые цвета.

Нули и единицы различаются длительностью высокого уровня внутри бита при скорости 800 кбит/с:

КодВысокий уровеньНизкий уровень
0T0H 220–380 нсT0L 580 нс – 1 мкс
1T1H 580 нс – 1 мксT1L 580 нс – 1 мкс
Сброс—RES больше 280 мкс

Чем формировать сигнал

Временные допуски — сотни наносекунд, поэтому программный вывод в цикле на быстром микроконтроллере легко сбивается прерываниями. Надёжнее аппаратные способы: у ESP32 — модуль RMT, для которого Espressif приводит пример led_strip с кодами 0,3 / 0,9 мкс и 0,9 / 0,3 мкс. Учтите, что T1L = 0,3 мкс в этом примере меньше минимума 580 нс по даташиту WS2812B-V5/W (с. 3): для этой версии низкий уровень единицы лучше удлинить, например до 0,6 мкс; на других микроконтроллерах — SPI или таймер с DMA. В примере Espressif для WS2812 пауза сброса по умолчанию 50 мкс, а WS2812B-V5/W по даташиту нужно больше 280 мкс — значение берут из даташита своей версии.

Подключение и питание

Высокий уровень на входе — не ниже 0,63 · VDD (с. 3): при питании 5 В выход микроконтроллера на 3,3 В работает на грани, и между ними ставят преобразователь уровня. У каждого светодиода или группы ставят развязывающий конденсатор, а на длинной ленте подводят питание в нескольких точках: при белом цвете на полной яркости ток всей ленты складывается из токов всех светодиодов, и на тонких дорожках ленты к её концу заметно падает напряжение.

Частые вопросы

Можно ли управлять WS2812B от микроконтроллера на 3,3 В?

Не всегда надёжно. По даташиту WS2812B-V5/W высокий уровень на входе — не ниже 0,63 · VDD, при питании 5 В это около 3,15 В (наш пересчёт), а выход на 3,3 В даёт чуть больше с малым запасом. Надёжнее поставить преобразователь уровня на 5 В или питать первый светодиод чуть ниже 5 В. Пороги у разных ревизий и аналогов отличаются, поэтому сверяйтесь с даташитом своей версии.

Сколько светодиодов можно поставить в одну цепочку?

Ограничение — время кадра. Один светодиод занимает 24 бита, при 800 кбит/с это 30 мкс (наш пересчёт), и Worldsemi гарантирует не меньше 1024 светодиодов при 30 кадрах в секунду (с. 1). Сигнал восстанавливается в каждом светодиоде, поэтому длина цепочки по качеству сигнала не ограничена — ограничены частота кадров и ток питания.

Почему пауза сброса у разных библиотек разная — 50 и 280 мкс?

Потому что разные версии светодиодов требуют разного. Пример Espressif для WS2812 по умолчанию даёт сброс 50 мкс, а даташит WS2812B-V5/W требует больше 280 мкс. Если светодиоды иногда не обновляются или подхватывают лишние данные, первым делом увеличьте паузу до значения из даташита вашей версии.

Источники

  1. Worldsemi. WS2812B-V5/W Intelligent control LED integrated light source, datasheet V6.1 (2022-09-08) — с. 1: контроллер и RGB-кристаллы в корпусе 5050, 256 градаций на цвет, 16 777 216 цветов, развёртка 2 кГц, передача по одной линии каскадом, при 30 кадрах/с не меньше 1024 светодиодов, 800 кбит/с; протокол NZR: после сброса первый светодиод забирает первые 24 бита в защёлку, остальное восстанавливает и передаёт на DO, поток уменьшается на 24 бита на каждом светодиоде; сброс — низкий уровень дольше 280 мкс; с. 3: VIH не ниже 0,63 · VDD; T0H 220–380 нс, T1H 580 нс – 1 мкс, T0L и T1L 580 нс – 1 мкс, RES больше 280 мкс; с. 4: порядок данных G7…G0 R7…R0 B7…B0, старший бит первым
  2. Espressif. ESP-IDF v6.1, пример peripherals/rmt/led_strip (led_strip_encoder.c) и документация RMT — документация RMT: пример led_strip показывает, как модулем RMT управлять лентой WS2812; led_strip_encoder.c: для WS2812 T0H = 0,3 мкс, T0L = 0,9 мкс, T1H = 0,9 мкс, T1L = 0,3 мкс (T1L меньше минимума 580 нс WS2812B-V5/W), порядок G7…G0 R7…R0 B7…B0 старшим битом вперёд, код сброса по умолчанию 50 мкс; комментарий: у разных лент могут быть свои требования к времени

Нашли ошибку?