В продаже некоторое время назад появились интересные RGB-светодиоды со встроенным ШИМ-контроллером в стандартном для них корпусе 5050. Управляются они по одному проводу, то есть требуют всего 3 провода — питание (5 В), земля и данные. Продаются так же и в виде лент, каждый пиксель на коих может светиться своим цветом!
ШИМ-контроллер всего лишь восьмибитный, потому кривую яркости встроить, к сожалению, не удастся. Либо удастся, но за счёт значительного снижения количества градаций яркости. Телевизор на таком сделать можно, но цветопередача будет та ещё.
читать дальшеУправление достаточно простое: уровень напряжения по умолчанию низкий, если он держится более 50 мкс, то это сброс линии. Ноль кодируется импульсом длиной 0.25 мкс, единица - импульсом длиной 0.6 мкс, при этом между нарастающими фронтами расстояние должно быть не менее 1.25 мкс (частота следования импульсов 800 кГц). Сначала светодиод примет 24 импульса себе (по 8 бит на канал), остальные до сброса линии будет пропускать дальше:
На контроллере STM32 их получить не так и сложно: настроить SPI так, чтоб частота следования символов была эти самые 800 кГц (битовая частота в 8 раз выше, 6.4 МГц), а полярность обратной (например, CPHA=1) и посылать символы: 0xF0 для единицы и 0xC0 для нуля:
Можно снизить частоту в два раза, передавая по два бита на символ SPI: 0x8 для нуля и 0xC для единицы. Из выводов нужен только вывод MOSI. Или можно передавать вообще какой-нибудь другой периферией.
Из сложностей - так как SPI имеет только кратный двум предделитель частоты, редкие частоты тактирования подходят для передачи. Я для примера в стм32ф4дискавери брал частоту 101 МГц (Хотя 102 была бы лучше, но там не принципиально. Для выбора частоты смотрим на отношение 102.4 / 16 = 6.4).
Конфигурационный файл под нужную частоту можно сделать с помощью экселевского файла специального. Не забываем смотреть (можно там же), какая у нас частота периферии (по умолчанию она в 4 раза меньше частоты тактирования, вроде как), потому в самом SPI надо выбирать делитель на 4. Хотя, можно сделать и иначе.
Биты передаются от старшего к младшему, порядок цветов у меня такой: G R B (так кристаллы следуют в светодиоде), возможно, в других сериях может быть иначе, не знаю. Но меня такой порядок не удивил.
Как-то так: G7 G6 G5 G4 G3 G2 G1 G0 R7 R6 R5 R4 R3 R2 R1 R0 B7 B6 B5 B4 B3 B2 B1 B0. Что сначала, то сначала и посылается. Пример:
Вот и всё. Данные в передатчик можно пихать процессором или с помощью DMA, разницы особой для светодиодов нет.
Даташит на микруху (режим 800 кГц уже выбран): WS2811;
Даташит на светодиод: WS2811 chip-built-in led datasheet;
Схема включения (см. пункт 1): ws2811 Application circuit;
Картинка с сайта магазина: GreeLed, WS2811 chip integrated with SMD5050 led.