Особенности подключения и управления адресной светодиодной лентой

Как работает адресная светодиодная лента?

Дальше я расскажу о протоколе передачи данных, используемом в светодиодной ленте на базе WS2812B, и, более того, я почти создам свою «микросхему светодиодной ленты» в микросхеме ПЛИС.

Итак, в ленте используется последовательная передача через один единственный сигнал данных.

Бит ноль передается, как короткий положительный импульс и пауза, которая примерно в два раза шире импульса. Бит единица передается как широкий положительный импульс и короткая пауза:

При отсутствии передачи более 50 микросекунд лента переходит в исходное состояние, готова принимать пиксели начиная с первого.

Каждые 24 бита в последовательности — это 3 байта для трех цветов RGB. Причем на самом деле последовательность будет G-R-B. Старший бит G7 идет первым.

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

Заполнится первый, потом второй, потом третий и так все по очереди.

Таким образом, я считаю, что с протоколом передачи разобрались.

Можно ли попробовать самому спроектировать такой «умный светодиод»? Практического смысла в этом конечно мало, но для самообразования и расширения кругозора — задача интересная. Попробуем описать логику чипа на языке проектирования аппраратуры Verilog HDL. Конечно, это будет не настоящий дизайн микросхемы, будут ограничения. Одно из самых важных ограничений — мне для моей микросхемы будет нужен внешний тактовый генератор. В настоящем умном светодиоде такой генератор тоже есть, но он встроен уже в чип.

Модуль на Verilog начнем вот так:

Здесь думаю все понятно: тактовая частота clk, входной и выходной сигналы «умного светодиода» in и out, ну и, конечно, выходные сигналы r, g, b через которые я буду управлять реальными внешними светодиодами красным, зеленым и синим.

Входной сигнал я буду захватывать в двухбитный сдвиговый регистр и по текущему состоянию в этих захваченных битах смогу определить начало положительного фронта сигнала in:

Кроме этого, важно определить состояние сброса ленты, когда управляющий контроллер выдерживает паузу перед началом новой передачи:

Дальше, от положительного фронта in_pos_edge нужно выдержать некоторую паузу, чтобы получить момент фиксации нового бита:

Количество уже принятых бит в чипе считаем так:

Здесь вводится еще важный сигнал pass, который как раз и определяет перенаправление входного потока на выход. После принятия 24х бит пикселя сигнал pass устанавливается в единицу:

На выход out мультиплексируются входные данные, когда сигнал pass_final в единице.

Ну и, конечно, нужен сдвиговый регистр, где накапливаются принятые 24 бита пикселя:

По приему всех 24х бит они переписываются в итоговый так же 24х битный регистр.

Теперь остается дело за малым. Нужно реализовать ШИМ (Широтно Импульсную Модуляцию) сигнала для передачи яркости реальным внешним светодиодам согласно принятым байтам RGB:

Вот кажется и все.

Остается маленькая деталь — как это все испытать?

Я взял несколько простых плат с ПЛИС MAX II (это платы серии Марсоход) и прошил их все проектом с вот этим Verilog кодом. На платах уже было 8 светодиодов, но они были все желтые. На каждой из плат я заменил 3 светодиода на R, G, B. Платы соединил последовательно и более того подключил их к настоящей светодиодной ленте. Таким образом, я удлинил настоящую ленту своими самодельными светодиодами.

Получилось вот такое соединение:

В реальности это выглядит вот так:

Теперь, подавая на ленту некоторое изображение я вижу, что мои «умные светодиоды» ведут себе точно так же, как и настоящие из ленты:

Получается, что реализованная мною в ПЛИС логика вполне работоспособна! Я смог в первом приближении сделать нечто похожее на реальный чип «умного светодиода».

Вообще, мне нравятся светодиодные ленты. На их основе каждый может изобрести что-то свое: интеллектуальное освещение, экраны, амбилайт эффекты. Однажды я даже реализовал цветомузыку на светодионой ленте под управлением FPGA. Но это уже другая история.

Источник

Основы программного управления WS2812B

Уже упоминалось, что для управления микросхемами WS2812B надо сформировать импульсы с определенной длиной, выдерживая высокую точность. В языке Ардуино для формирования коротких импульсов есть команды delayMicroseconds и micros. Проблема в том, что разрешение этих команд составляет 4 микросекунды. То есть, сформировать временные задержки с заданной точностью не получится. Надо переходить к средствам С++ или Ассемблера. А можно организовать управление адресной светодиодной лентой через Arduino с помощью специально созданных для этого библиотек. Начать знакомство можно с программы Blink, заставляющей светоизлучающие элементы мигать.

FastLed

Эта библиотека универсальна. Помимо адресной ленты она поддерживает множество устройств, включая ленты с управлением по интерфейсу SPI. Обладает широкими возможностями.

Сначала библиотеку надо подключить. Это делается до блока setup, а строка выглядит так:

#include <FastLED.h>

Следующим шагом надо создать массив для хранения цветов каждого светоизлучающего диода. Он будет иметь наименование strip и размерность 15 – по числу элементов (этому параметру лучше назначить константу).

CRGB strip

В блоке setup надо указать, с какой лентой будет работать скетч:

void setup() {

FastLED.addLeds< WS2812B, 7, RGB>(strip, 15);

int g;

}

Параметр RGB устанавливает порядок чередования цветов, 15 означает количество светодиодов, 7 – номер вывода, назначенного для управления (последнему параметру тоже лучше назначить константу).

Блок loop начинается с цикла, который последовательно записывает в каждый раздел массива Red (красное свечение):

for (g=0; g< 15;g++)

{strip=CRGB::Red;}

Далее сформированный массив отправляется в светильник:

FastLED.show();

Задержка 1000 миллисекунд (секунда):

delay(1000);

Затем можно таким же способом выключить все элементы, записав в них черный цвет.

for (int g=0; g< 15;g++)

{strip=CRGB::Black;}

FastLED.show();

delay(1000);

Скетч для мигающей ленты на основе FastLed.

После компиляции и загрузки скетча лента будет мигать с периодом в 2 секунды. Если надо управлять каждой цветовой составляющей раздельно, то вместо строки {strip=CRGB::Red;} используется несколько строк:

{

strip.r=100;// устанавливается уровень свечения красного элемента

strip.g=11;// то же для зеленого

strip.b=250;// то же для синего

}

NeoPixel

Эта библиотека работает только с LED-кольцами NeoPixel Ring, но она менее ресурсоемка и содержит только самое необходимое. На языке Ардуино программа выглядит так:

#include <Adafruit_NeoPixel.h>

Как и в предыдущем случае подключается библиотека, и декларируется объект lenta:

Adafruit_NeoPixel lenta=Adafruit_NeoPixel(15, 6);// где 15 – количество элементов, а 6 – назначенный вывод

В блоке setup инициализируется лента:

void setup() {

lenta.begin ()

}

В блоке loop все элементы засвечиваются красным, переменная передается в ленту и создается задержка в 1 секунду:

for (int y=0; у<15;y++)// 15 – количество элементов в светильнике

{lenta.setPixelColor(y, lenta.Color(255,0,0))};

lenta.show();

delay(1000);

Прекращается свечение записью черного цвета:

for (int y=0; y< 15;y++)

{ lenta.setPixelColor(y, lenta.Color(0,0,0))};

lenta.show();

delay(1000);

Скетч для программы Blink на основе NeoPixel.

Видео-урок: Образцы визуальных эффектов с использованием адресных лент.

Научившись мигать светодиодами, можно продолжить занятия и научиться создавать цветовые эффекты, включая популярные «Радуга» и «Северное сияние» с плавными переходами. Адресные светодиоды WS2812B и Ардуино дают для этого практически безграничные возможности.

Теперь тайминги

Изначально на ножке стоит лог. единица. Для перевода светодиода в режим получения сигнала необходимо подать логический ноль в течение 5 мс. После этого идут биты данных: для передачи “нулевого” символа необходимо подать логическую единицу, и сразу подать логический ноль. Для передачи “единичного” символа необходимо подать логическую единицу, подождать 3 мкс и подать логический ноль. Интервал между сигналами от 6 до 20 мкс. Временные интервалы можете увидеть на осциллограммах в разных временных развертках.(рис3, рис2, рис1).

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

И последний нюанс – на моей ленте при таком управлении светодиодами, если долго не отправлялись данные, и при попытке начала передачи нового пакета данных первый светодиод принимает 24 бита, дальнейшие биты начинает передавать на следующие светодиоды, но свой цвет не меняет.

Пока с проблемой справился таким образом: в исходном состоянии стоит лог. единица, даю сигнал инициализации (5 мс), 24 бита – пакет данных для первого светодиода, жду 30 мкс, снова даю сигнал инициализации (5 мс), и отправляю информационные биты для всех светодиодов.

Разновидности

Для изготовления светодиодные ленточных полотен используются 2 технологии: SMD и DIP. По расположению источников света они делятся на фронтальные (угол рассеивания света 120 градусов) и торцевые (угол рассеивания света 90 градусов). Доступны модели с другими углами рассеивания, предназначенные для фокусирования луча на отдельные предметы.

Некоторые производители выпускают полосы различных цветов и оттенков, в том числе нестандартных, совмещающие белые и RGB диоды, изделия типа бегущая волна (огонь), инфракрасные и ультрафиолетовые комплекты. Самая высокая популярность у изделий из SMD 3528 и 5050 SMD, отличающихся по цвету, яркости и количеству источников света на 1 метр.

Маркировка

Маркировка светодиодных лент достаточно сложная, важно уметь ее расшифровать

Например, в маркировке RT3-5000 12V White (3528, 300 LED, W) указывается:

  • серия (первые буквы);
  • длина (4 цифры);
  • напряжение питания;
  • вид и количество диодов;
  • цвет основания.

Плотность размещения светодиодов на ленте

У стандартных лент из светодиодов на одном метре может быть 30, 60, 90, 120, 240 чипов. Чтобы увеличить поток света, производятся ленточные изделия, на которых диоды расположены в 2 и 3 ряда (редко – в 4 ряда).

Величина светоотдачи

Светоотдачей называется отношение значения потока света к мощности. Этот параметр измеряется в люменах на ватт, поэтому зависит от того, из каких диодов изготовлена полоса и сколько их на одном метре. Например, один светодиод SMD 3014 потребляет 0,1 Вт. Если на метре их 120, световой поток будет 1200 лм, светоотдача – 1200/12 = 100 лм/Вт. Отдача света прямо пропорционально мощности, которая требуется для работы изделия определенной длины.

Степень защиты

Степень защиты в маркировке обозначается буквами IP и двумя цифрами.

Ленточные светодиодные изделия бывают:

  • без защиты (IP20);
  • защищенные от влаги нанесенным сверху эпоксидным покрытием (IP54 или IP65);
  • в трубке из силикона (IP67);
  • в трубке из силикона с заливкой эпоксидным составом (IP68).

Причины выхода из строя подсветки

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

Почему нет подсветки? Существует несколько причин появления неисправности, проанализируем каждую из них:

  1. Перегорела определенная линейка диодов. Светодиоды характеризуются последовательным типом подключения, это означает, что если перестает работать один элемент, то вся комплектующая выходит из строя. Однако напряжение (примерно в 200 вольт) продолжает поступать на лампочки.

  1. Проблемы с LED-драйвером. Изображение пропадает на телевизоре LG из-за того, что напряжение наоборот не подается на светодиоды, соответственно они не загораются.

  1. Заводской брак. Порой не работает только один светодиод, но при этом экран ТВ-устройства не загорается.

  1. Пользователь выставляет максимальную яркость изображения, что ведет к увеличению напряжения, как следствие диоды не выдерживают и перегорают.

  1. Иногда некорректные настройки подаваемого на светодиоды напряжения – вина магазина, в котором вы приобретаете телевизор. Они пытаются привлекать покупателей яркой картинкой.

Теперь вы знаете, почему выходит из строя LED подсветка телевизора. Эта поломка встречается достаточно часто, но если соблюдать рекомендации производителя, можно существенно продлить эксплуатационный срок устройства.

Профессиональные ремонтники с помощью специального оборудования определят, какой именно модуль вышел из строя. Как обычному пользователю понять, что не работает подсветка экрана телевизора LG? Сейчас разберем азы диагностики.

Популярные схемы подключения

Проанализировав множество вариантов подключения rgb-лент, мы выделили ряд наиболее популярных схем. Для реализации любой из схемы подключения на практике, вам потребуются знания о том, как правильно резать светодиодную ленту.

Стандартная схема подключения

Порядок монтажа схемы заключается в следующих последовательных действиях:

  • К низковольтным разъемам блока питания подключается контроллер.
  • Как правило, разъемы «+» соединяются красным проводом, а «–» – черным.
  • К контроллеру подключается светодиодная лента, имеющая 4 выхода: три из них – для управления красным, зеленым и синим цветами, а четвертый провод предназначен для общего питания устройства.

Стандартная схема подключения RGB контроллера

Вариант  подключения двух светодиодных лент

Особенности этого варианта подключения заключаются в следующих важных моментах:

  • Для подключения необходимо наличие двух блоков питания и rgb усилителя.
  • Схема простая, однако, при монтаже нужно внимательно следить, чтобы провода подключались согласно цветовой маркировке.
  • Вариант подключения также приемлем для led-ленты длиной 10 метров.

При подключении нескольких светодиодных лент не стоит допускать ошибки, изображенной на фото:

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

Иначе говоря, если в схеме предусмотрено соединение нескольких светодиодных лент, то они должны подключаться только параллельно.

Подключение rgb-ленты длиной в 20 метров

В этом подключении используются два блока питания. Однако, если хватает мощности одного блока, то соединить все элементы можно по следующей схеме: контроллер-усилитель-блок питания.

Как менять диоды

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

Но если в руках только набор б/у диодов или комплект с Алиэкспресс, придется повозиться.

Как снять линзу

Главное, не повредить ножки линзы. Так ее проще будет устанавливать на место. Операция проводится очень аккуратно. На фене устанавливается температура 100-120 градусов, выхлоп направляется на ленту подложки снизу. Расстояние подбирается эмпирически, обычно около 10 см. Под линзу помещают тонкую полоску пластика и легонько пытаются, как рычагом, ее поднять. Как только фен расправит клей, деталь отделится от подложки. В ходе работы рекомендуется записывать, откуда что снимается, чтобы затем сделать обратную правильную установку.

Как снять диод

Диоды также прогреваются феном. Температуру воздуха при этом устанавливают на уровне 320-350 градусов. Понять, что диод отделился, можно по расплавлению припоя по его краям. Деталь снимают пинцетом.

Как готовить посадочную площадку

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

Как установить новый диод

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

Возвращаем линзы на места

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

Для этого подсветку подключают к драйверу и кладут сверху пластину светорассеивающего фильтра. Если она равномерно освещена, ничего делать не нужно. А вот в случае обнаружения дефектов линзу в месте их находки можно немного сдвинуть в правильную позицию.

А это отремонтированный вид собранной и готовой к дальнейшей эксплуатации панели подсветки:

ОСОБЕННОСТИ ПОДКЛЮЧЕНИЯ

1) Команды на ленте передаются от диода к диоду за один проход. Лента имеет начало и конец, а направление команд указывается стрелками на некоторых моделях. Например, рассмотрим ws2812b, он имеет три контакта. Два предназначены для питания, но третий в начале ленты называется DI (цифровой вход), а в конце — D O (цифровой выход). Лента получает команды на терминале DI! Клемма DO необходима для подключения дополнительных кусков ленты или для соединения панелей.

2) Если в схеме возможно, что на ленту не подается питание 5В, но сигнал подается от микроконтроллера — лента начнет питаться от датапина. В этом случае может перегореть как первый светодиод ленты, так и клемма контроллера. Не переусердствуйте, используйте резистор с сопротивлением 200-500 Ом. Какова точность резистора? Любая точность. Какова номинальная мощность резистора? Любой. Да, даже 1/4.

2.1) Если у вас большое расстояние между лентой и контроллером (Arduino), т.е. длинные кабели (длиннее 50 см), то сигнальный кабель и заземление должны быть скручены в косичку для защиты от помех, так как протокол связи ленты довольно быстрый (800 кГц), на него будут сильно влиять внешние помехи, а экранирование его проводом заземления позволит избежать этого. В противном случае кассета может не работать, пока вы не коснетесь рукой сигнального кабеля.

2.2) При подключении планки к микроконтроллерам с логикой 3,3 В (esp8266, ESP32, STM32) возникает проблема: На ленту подается напряжение 5 В, но сигнал составляет 3,3 В. В спецификации указана максимальная разница между питанием и управляющим сигналом, при превышении которой лента не работает или работает нерегулярно и с артефактами. Вы можете сделать это, чтобы исправить ситуацию:

3) Самый важный момент, который почему-то все игнорируют: Цифровой сигнал проходит по двум проводам, поэтому одного провода от Arduino недостаточно для его передачи. Какой из них второй? GND земля. Как. Клемма GND ленты и клемма GND Arduino (одна из доступных клемм) должны быть всегда соединены. См. два примера.

4) Мощность. Один цвет светодиода потребляет 12 миллиампер при максимальной яркости. Один светодиод имеет три цвета, таким образом, всего ~36 мА на диод. Если у вас есть рулетка с плотностью 60 диодов/метр, то это 60*36 = 2,1 ампера при максимальной яркости белого цвета, поэтому вам нужен источник питания, способный это выдержать. Вам также нужно подумать о том, в каком режиме будет работать лента. Если это радужные режимы, то мощность можно принять равной половине максимальной. Подробнее об источниках питания и связанных с ними неисправностях читайте здесь.

5) Что касается питания, я хотел бы отметить, насколько важно качество пайки точек питания (соединение кабеля с планкой, соединение того же кабеля с блоком питания), а также толщина кабелей. По моему опыту, для достижения полной яркости следует использовать не менее 1,5 квадратных метров провода

Пример: на проводе сечением 0,75 квадратного миллиметра и длиной 1,5 м при силе тока 2 ампера будет падать 0,8 вольта, что критично для источника питания напряжением 5 вольт. Первым признаком падения напряжения является то, что запрограммированный белый цвет не становится белым, а приобретает желто-красный оттенок. Чем он краснее, тем больше падение напряжения!

Что такое Ambilight

Подсветка Ambilight (технология окружающего освещения) – изобретенная и запатентованная компанией Philips технология, которая обеспечивает фоновую адаптивную подсветку на телевизионных панелях компании.

Система анализирует цветовую палитру картинки на экране и включает аналогичное свечение по периметру телевизора. Работает все в динамическом режиме и создает эффект рассеивания изображения за пределы матрицы.

Выглядит очень эффектно и позволяет еще больше погрузиться в атмосферу фильма или сериала. Таким способом получается визуально увеличить размеры экрана и залить большую часть обзора зрителя цветом.

К сожалению, другие производители электроники не пытаются представить свои аналоги или купить у правообладателя права на использование Ambilight. Однако, при помощи некоторых гаджетов с AliExpress можно “наколхозить” нечто подобное.

Раздельное управление светодиодами NeoPixel

В этом примере программы мы включаем светодиоды в ленте и управляем цветом и интенсивностью свечения каждого светодиода по отдельности использую плату Arduino UNO.

Arduino

#include <Adafruit_NeoPixel.h>

#define PIN 6 // контакт для управления светодиодами
#define NUMPIXELS 7 // столько светодиодов в сборке

Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

#define DELAYVAL 500 // Time (in milliseconds) to pause between pixels (время паузы в миллисекундах между пикселами)

void setup() {
pixels.begin();
}

void loop() {
pixels.clear();
pixels.setBrightness(10);
pixels.setPixelColor(0, pixels.Color(255, 255, 255));
pixels.setPixelColor(1, pixels.Color(255, 0, 0));
pixels.setPixelColor(2, pixels.Color(0, 255, 0));
pixels.setPixelColor(3, pixels.Color(0, 0, 255));
pixels.setPixelColor(4, pixels.Color(255, 0, 255));
pixels.setPixelColor(5, pixels.Color(255, 255, 0));
pixels.setPixelColor(6, pixels.Color(0, 255, 255));
pixels.show();
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

#include <Adafruit_NeoPixel.h>
 
#define PIN      6 // контакт для управления светодиодами
#define NUMPIXELS 7 // столько светодиодов в сборке
 
 

Adafruit_NeoPixelpixels(NUMPIXELS,PIN,NEO_GRB+NEO_KHZ800);

 
#define DELAYVAL 500 // Time (in milliseconds) to pause between pixels (время паузы в миллисекундах между пикселами)
 

voidsetup(){

pixels.begin();

}
 

voidloop(){

pixels.clear();

pixels.setBrightness(10);

pixels.setPixelColor(,pixels.Color(255,255,255));

pixels.setPixelColor(1,pixels.Color(255,,));

pixels.setPixelColor(2,pixels.Color(,255,));

pixels.setPixelColor(3,pixels.Color(,,255));

pixels.setPixelColor(4,pixels.Color(255,,255));

pixels.setPixelColor(5,pixels.Color(255,255,));

pixels.setPixelColor(6,pixels.Color(,255,255));

pixels.show();

}

Поделитесь в социальных сетях:FacebookX
Напишите комментарий