Адресный светодиод
Светодиодная лента, где каждый светодиод светится своим цветом, управляется одним выводом микроконтроллера. Секрет — в микросхеме внутри каждого светодиода: она забирает свои 24 бита из потока, а остальное передаёт дальше. Разбираем протокол на примере WS2812B.
Обновлено Редакция GAW
Адресный светодиод (addressable LED) — RGB-светодиод со встроенной микросхемой управления, которая принимает цифровые данные и сама задаёт яркость каждого из трёх цветов. Светодиоды соединяют в цепочку: выход данных DO одного идёт на вход DIN следующего, и вся лента управляется одним выводом микроконтроллера. Самый распространённый пример — WS2812B.
Как передаются данные
По даташиту WS2812B-V5/W (с. 1–4):
- каждый светодиод получает 24 бита — по 8 бит на зелёный, красный и синий, в порядке G, R, B, старшим битом вперёд, то есть 256 градаций на цвет;
- первый светодиод забирает первые 24 бита в свою защёлку, остальной поток восстанавливает и передаёт дальше — по цепочке поток уменьшается на 24 бита на каждом светодиоде;
- пауза сброса — низкий уровень дольше 280 мкс — завершает кадр, и все светодиоды разом переключаются на новые цвета.
Нули и единицы различаются длительностью высокого уровня внутри бита при скорости 800 кбит/с:
| Код | Высокий уровень | Низкий уровень |
|---|---|---|
| 0 | T0H 220–380 нс | T0L 580 нс – 1 мкс |
| 1 | T1H 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 мкс. Если светодиоды иногда не обновляются или подхватывают лишние данные, первым делом увеличьте паузу до значения из даташита вашей версии.
Источники
- 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, старший бит первым
- 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 мкс; комментарий: у разных лент могут быть свои требования к времени
Нашли ошибку?
Смотрите также
- WS2812BАдресный RGB-светодиод: выводы, ревизии V5 и V6, питание, уровни, монтаж
- RMT (импульсные последовательности ESP32)Периферия ESP32 для передачи и приёма последовательностей импульсов
- Преобразователь уровнейМикросхема, согласующая логические сигналы разных напряжений
- КаскадированиеЦепочка микросхем: выход одной — на вход следующей, общие такты
- Блокировочный конденсаторМестный запас заряда у выводов питания: ёмкость, тип, разводка