3-х канальный драйвер для управления rgb-светодиодом

WS2811: микросхема для управления трехцветным RGB-светодиодом

Источник: http://microsin.net/adminstuff/hardware/ws2811-led-driver.html

Управление цветовой гаммой мощных RGB светодиодов

» Схемы » Светотехника · Силовая электроника

18-03-2015

CAT4101

Журнал РАДИОЛОЦМАН, март 2014

Shawn Rhen

Digi-Key

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

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

Первый критерий проекта, который необходимо выполнить для того, чтобы воспроизвести однородные и повторяющиеся цвета – это обеспечение постоянного тока через каждый кристалл RGB светодиода. Как показано на Рисунке 1, это можно сделать с помощью мощных драйверов CAT4101, способных отдавать регулируемый подстроечными резисторами ток до 1 А, при питании светодиодов постоянным напряжением 5 В.

Микросхема WS2811 компании Worldsemi [1] является трехканальным драйвером для управления светодиодами стабилизированным током, при этом обеспечивается 256 градаций яркости по каждому каналу (обычно это R красный, G зеленый, B синий, RGB). В этой статье представлен перевод даташита “WS2811 Signal line 256 Gray level 3 channel Constant current LED drive IC”.

Яркость светодиодов, подключенных к WS2811, управляется последовательным цифровым кодом, который формируется микроконтроллером. Данные при этом передаются всего лишь по 1 проводу.

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

[Особенности микросхемы WS2811]

• Рабочее напряжение выходного порта до 12V. • Имеется встроенный регулятор напряжения питания VDD, так что можно питать микросхему даже от 24V, если последовательно подключить гасящий напряжение резистор• Может быть установлено до 256 уровней яркости, и при этом частота сканирования составляет не менее чем 400 Гц.

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

• Любые две точки между приемником и передатчиком сигнала могут находиться друг от друга на расстоянии более 10 м без необходимости дополнительных усилителей.

• При скорости обновления 30 fps (30 кадров/сек) модель каскадирования на низкой скорости позволяет соединить в цепочку не менее 512 точек, на высокой скорости можно соединить не менее 1024 точек.

• Данные передаются на скоростях до 400 и 800 Kbps (килобит/сек).

WS2811 могут применяться для создания декоративного освещения с помощью светодиодов (LED), а также для видеоэкранов либо информационных табло как внутри помещения, так и снаружи.

[Общее описание WS2811]

WS2811 имеет 3 выходных канала специально для управления LED. В микросхеме имеется встроенный продвинутый цифровой порт данных с возможностью усиления сигнала и восстановления его формы.

Также в микросхему встроен точный внутренний генератор и программируемый источник постоянного выходного тока, рассчитанный на рабочее напряжение до 12V.

Для снижения пульсаций напряжения питания 3 выходных канала разработаны с функцией задержки включения (delay turn-on function).

Микросхема использует режим обмена данными NZR (Non-return-to-zero, код без возврата к нулю [2]).

После сброса при подаче питания (power-on reset), порт DIN принимает данные от внешнего контроллера, при этом первая микросхема собирает первые 24 бита данных, и затем передает их во внутреннюю защелку данных, при этом у остальных данных восстанавливается форма с помощью узла восстановления и усиления, и эти остальные данные передаются следующей в цепочке микросхеме через порт DOUT. После прохождения каждой микросхемы количество бит в общем потоке уменьшается каждый раз на 24 бита. Технология автоматического восстановления передаваемого сигнала данных устроена таким образом, что количество каскадируемых микросхем ограничивается только скоростью передачи и требуемой частотой обновления яркости светодиодов.

Данные, защелкнутые в микросхему (24 бита), определяют скважность сигнала выходных портов OUTR, OUTG, OUTB, управляющих светодиодами – применяется PWM (ШИМ, широтно-импульсная модуляция), так что от скважности импульсов выходных портов зависит яркость каждого канала.

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

Микросхема передает имеющиеся данные PWM на порты OUTR, OUTG, OUTB после приема сигнала сброса низкого уровня, еще в течение 50 мкс.

Часто микросхема WS2811 встраивается прямо в корпус RGB-светодиода (это решение применяют в популярных светодиодных лентах), такой светодиод называется 5050 RGB LED.

Отдельно микросхема WS2811 поставляется в корпусах SOP8 и DIP8.

В таблице ниже показано назначение ножек WS2811.

Мнемоника Описание функции вывода
1 OUTR Выходной сигнал PWM для управления яркостью красного светодиода (Red).
2 OUTG Выходной сигнал PWM для управления яркостью зеленого светодиода (Green).
3 OUTB Выходной сигнал PWM для управления яркостью синего светодиода (Blue).
4 GND Земля, общий провод, минус питания.
5 DOUT Выход сигнала данных (для каскадирования микросхем).
6 DIN Вход сигнала данных.
7 SET Установка низкоскоростного режима работы микросхемы (при подключении SET к VDD) или высокоскоростного режима (когда ножка SET никуда не подключена).
8 VDD Плюс напряжения питания.

[Absolute Maximum Ratings (предельные эксплуатационные значения)]

Параметр Мнемоника Значение Ед. изм.
Напряжение питания VDD +6.0 .. +7.0 V
Выходное напряжение VOUT 12 V
Входное напряжение VI -0.5 .. VDD+0.5 V
Рабочая температура Topt -25 .. +85 oC
Температура хранения Tstg -55 .. +150 oC

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

[Электрические характеристики]

TA = -20 .. +70oC, VDD = 4.5 .. 5.5V, VSS = 0V, если не указано что-то другое.

Параметр Мнемоника Условия MIN NOM MAX Ед. изм.
Выходной ток при низком напряжении I0L ROUT 18.5 мА
Idout Vo=0.4V, DOUT 10 мА
Входной ток II VI=VDD/VSS ±1 мкА
Уровень входного напряжения VIH DIN, SET 0.7VDD V
VIL DIN, SET 0.3VDD V
Напряжение гистерезиса VH DIN, SET 0.35 V

[Динамические характеристики]

TA = -20 .. +70oC, VDD = 4.5 .. 5.5V, VSS = 0V, если не указано что-то другое.

Параметр Мнемоника Условие MIN NOM MAX Ед. изм.
Рабочая частота Fosc1 400 КГц
Fosc2 800 КГц
Задержка передачи (время распространения сигнала) tPLZ CL=15 пФ, DIN->DOUT, RL=10 кОм 300 нс
Время спада tTHZ CL=300 пФ, OUTR/OUTG/OUTB 120 мкс
Скорость передачи данных FMAX Скважность 50% 400 кбит/с
Входная емкость CI 15 пФ

[Интервалы времени для режима низкой скорости (Low Speed mode)]

В этой таблице показаны интервалы времени, которыми кодируются биты данных 0 и 1, и сигнал сброса.

T0H Кодирование 0, время высокого уровня 0.5 мкс ±150 нс
T1H Кодирование 1, время высокого уровня 1.2 мкс ±150 нс
T0L Кодирование 0, время низкого уровня 2.0 мкс ±150 нс
T1L Кодирование 1, время низкого уровня 1.3 мкс ±150 нс
RES Время низкого уровня кода сброса (Treset) > 50 мкс

Примечание: для режима высокой скорости все интервалы времени уменьшаются в 2 раза, но время сброса (reset time) остается неизменным.

Диаграммы поясняют принципы кодирования и передачи данных.

Микроконтроллер посылает данные для микросхем D1, D2, D3 и D4. Микросхемы соединены в цепочку, и данные, которые проходят через них (DIN -> DOUT), восстанавливаются и усиливаются.

При этом от последовательности данных каждый раз отрезается по 24 бита данных, которые предназначены именно этой микросхеме после прохождения массива данных для всех микросхем следует сигнал сброса RES (импульс лог. 0 с длительностью не менее 50 мкс).

После этого принятый уровень яркости (24 бита на микросхему) передается на выходы PWM OUTR, OUTG, OUTB. Вот так составлена последовательность 24 бит, которая кодирует уровни яркости каналов OUTR, OUTG, OUTB микросхемы (старший MSB бит идет первым):

R7 R6 R5 R4 R3 R2 R1 R0 G7 G6 G5 G4 G3 G2 G1 G0 B7 B6 B5 B4 B3 B2 B1 B0

[Стандартные схемы включения]

Пример 1 – напряжение питания 5V, 1 светодиод RGB на микросхему.

В этом примере каждый канал в светодиоде RGB управляется постоянным током 18.5 мА, яркость светодиода при этом определяется скважностью PWM (ШИМ). Благодаря стабилизации тока при снижении напряжения питания светодиоды сохраняют свою яркость и цветовую температуру.

Для того, чтобы пульсации напряжения питания не влияли на работу микросхемы, рекомендуется использовать фильтрующую цепочку, состоящую из последовательного резистора номиналом на более 100 Ом и блокирующего конденсатора емкостью порядка 0.1 мкФ.

Для предотвращения отражений сигнала и для обеспечения возможности горячего соединения в цепь сигнала должен быть включен последовательный резистор номиналом в 33 Ом.

Пример 2 – напряжение питания 12V, 3 светодиода RGB на микросхему.

Как и в предыдущем примере, светодиоды управляются стабилизированным током 18.5 мА. R1 используется для нормальной работы внутреннего стабилизатора напряжения микросхемы, его номинал должен быть 2.7 кОм.

Обычно на красном светодиоде всегда падает меньше напряжение при том же самом токе, чем на светодиодах других цветов, и красный светодиод светится ярче.

Поэтому канал OUTR должен иметь дополнительный резистор RR, сопротивление которого можно рассчитать по формуле:

         12 – (3 * VLEDR)
RR = ————- кОм
          18.5

В этой формуле VLEDR равно падению напряжения на одном светодиоде красной группы (обычно равно 1.8V .. 2V).

[Как устроена светодиодная RGB-лента]

На фото показана обычная влагозащищенная светодиодная RGB лента, построенная на основе технологии микросхем WS2811 (WS2811 waterproof LED Strip) длиной 5 метров, модель GE60RGB2811C. Обычно такая лента поставляется намотанной на бобину, вместе с крепежом для монтажа на стену.

Для питания ленты нужен источник стабилизированного напряжения 5V 18A (потребление мощности 18 Вт на 1 метр).

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

Лента собрана на ленте из тонкого текстолита (гибкая двухсторонняя печатная плата) и устроена так, что ленту можно обрезать в любом месте для получения нужного размера.

Для управления RGB светодиодной лентой используют специальные контроллеры, которые программируются от компьютера через USB или с помощью карты SD. Контроллер может задавать сложный автоматический алгоритм управления лентой, некоторые могут даже работать как цветомузыка – с помощью встроенного микрофона анализируют звук и в такт мелодии управляют цветом ленты.

[UPD140530]

Появились в продаже китайские RGB-ленты с еще более плотным размещением светодиодов: 144 шт. на 1 м., называется WS2812B.

[Ссылки]

1. WS2811 site:www.world-semi.com.
2. Non-return-to-zero site:wikipedia.org.
3. AVR-USB-MEGA16: цветомузыка на светодиодной RGB-ленте WS2811.

Рисунок 1. Схема драйвера со стабилизацией тока.

Схема позволяет индивидуально устанавливать ток через каждый элемент RGB светодиода в диапазоне примерно от 100 мА до 1 А, при условии, что напряжение питания хотя бы на 500 мВ превышает прямое напряжение кристаллов.

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

Ток, проходящий через резисторы-датчики тока, усиливается внутренним усилителем драйвера CAT4101, имеющим коэффициент усиления около 400. Поскольку этот ток сравнительно невелик, мощность резисторов должна быть совсем небольшой, и, при желании, их даже можно заменить цифровыми потенциометрами.

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

Однако ручная регулировка потенциометров кажется слишком архаичной. Для большего удобства схему можно дополнить микроконтроллером, который будет формировать ШИМ сигналы на выводах управления каждого драйвера (Рисунок 2).

Рисунок 2. Микроконтроллер формирует сигналы ШИМ для драйверов светодиодов.

Подключение микроконтроллера позволит добавить различные функции управления за счет использования встроенного USART. Появится возможность с помощью практически любого устройства с коммуникационным интерфейсом RS-232 индивидуально управлять интенсивностью красного, зеленого и синего кристаллов путем изменения коэффициентов заполнения сигналов ШИМ.

Для эффективного управления по интерфейсу RS-232 необходимо, прежде всего, установить такой ток для каждого RGB кристалла, чтобы получить результирующий белый цвет свечения. С этой целью входы Enable драйверов следует подключить к высокому уровню, чем будет задан коэффициент заполнения 100%, и вручную подстроить токи через кристаллы с помощью потенциометров.

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

После того, как токи выставлены, управление коэффициентами заполнения на выходах ШИМ микроконтроллера будет вызывать относительное изменение светового потока каждого кристалла, результатом чего станет формирование необходимого цвета.

Команды управления коэффициентом заполнения ШИМ принимаются модулем UART микроконтроллера от устройства с интерфейсом RS-232. Такими устройствами могут быть последовательный порт персонального компьютера, конвертер USB-RS-232 (виртуальный COM-порт) или беспроводной модуль, использующий протоколы ZigBee или Bluetooth.

Рисунок 3. Пример беспроводной коммуникации.

В то время как последовательные и USB порты хорошо подходят для проводных приложений, беспроводные модули могут обеспечить удаленное управление. В примере приложения, изображенном на Рисунке 3, для беспроводной коммуникации со схемой управления цветом RGB светодиода используются шлюз ZigBee-Ethernet и модуль ZigBee.

Управление установленным на плате RGB светодиодом посредством ZigBee модуля Управление внешней RGB светодиодной лампой посредством ZigBee модуля
Управление установленным на плате RGB светодиодом посредством Bluetooth модуля Графический интерфейс управления RGB светодиодом по протоколу Bluetooth

Интернет-соединение позволяет удаленно управлять цветовой гаммой RGB светодиода через такие устройства доступа к сети Интернет, как компьютеры или сотовые телефоны.

Поскольку схема управления основана на интерфейсе RS-232, модуль ZigBee может быть заменен на Bluetooth модуль, если последний поддерживает профиль последовательного порта (SSP).

Это даст возможность организовать связь и управление на коротких и средних расстояниях с любого устройства, поддерживающего протокол Bluetooth.

Источник: https://www.rlocman.ru/shem/schematics.html?di=158836

Ограничения в использовании умных светодиодов WS2812, WS2801 и подобных в современных проектах декоративной светотехники

Уже несколько лет на рынке светотехники можно встретить такие названия, как: «smart led strip», «smart led pixel» и подобные.

Как правило, «умный пиксель» — это сборка из миниатюрного 3-х канального светодиодного драйвера (с интегрированным стабилизатором тока, PWM модулятором и сдвиговым регистром), подключенная к RGB светодиоду.

На базе таких пикселей многие производители выпускают «умные» гибкие светодиодные ленты, LED «гвозди» и LED кластера. Также можно встретить такие модели чипов, как WS2812, WS2813, с интегрированным LED драйвером непосредственно в корпус 5050 RGB светодиода.

Малые габариты, большое количество последовательно включенных пикселей (более 1000 шт.), простота управления по 1(2) проводу и сравнительно низкая стоимость решения — более чем оправдывают их применение.

Эта моя первая публикация на Хабре, в которой я хочу донести мой опыт использования и обозначить недостатки таких пикселей. За несколько последних лет я успел поработать со следующими LED драйверами: LPD6803, WS2801, WS2811, WS2812(B), TM1903, UCS1903, TM1804, TM1803, SM16716 и другими менее ходовыми. В интернете часто можно встретить такой термин как «светодиодная лента с пиксельной адресацией» — я с этим совершенно не согласен, и это является первым ограничением.

Информация в такие ленты/пиксели загружается по последовательному каналу, а именно через сдвиговые регистры с 24-х битной разрядностью (как правило), т.е. 3 канала по 8 бит для RGB. Никаких адресов такие LED пиксели не помнят и работают исключительно по последовательному принципу.

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

Многие неопытные LED «рекламисты» наступили на эти грабли, применяя такие пиксели для уличных экранов. Рисунок ниже демонстрирует «битые» полоски.

Второе ограничение связанно с температурой использования. В большинстве случаев у пикселей, что управляются только по одному проводу «DATA», к примеру, WS2812B — нижняя температура использования -25 градусов.

На практике, часто от -15 градусов. Это связанно с отсутствием хорошего кварцевого блока регенерации сигнала внутри чипа. Таким образом, при низких температурах пиксель перестает корректно работать, наблюдаются «сверчки» и т.п. до полного отсутствия картинки. Другое дело — чипы с синхронизацией: WS2801, LPD6803, к примеру.

Здесь имеется хорошая регенерация сигналов по уровням, по времени — регенерация не нужна, поскольку имеется линия синхронизации. Рабочая температура в этом случае от -40 градусов. Но и стоят эти чипы вдвое дороже.

Третье ограничение — глубина цвета.

Рисунок ниже демонстрирует экраны собранный на чипах WS2801.Не вооруженным глазом заметно, что экран с фоном засвечен. Низкие уровни градиента «умные пиксели» (WS2812, WS2801 и т.п. практически все) не способны воспроизводить так, как это делают современные экраны.

Это связанно с низкой разрядностью интегрированного в чип PWM генератора (всего 8 бит на канал) и как следствие – отсутствие полноценной гамма коррекции. Проще говоря, светодиод светит слишком ярко, когда хочется совсем чуть-чуть и ничего с этим нельзя поделать.

Ощутимым минусом, во всяком случае для меня, было отсутствие хорошего софта подготовки и конвертирования анимации, непосредственно для вывода на «железки». Это явилось четвертым ограничением.

Источник: https://habr.com/post/305876/

Alex_EXE

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

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

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

Далее последовательно соединённые такие диоды разместили на светодиодной ленте – и в итоге мы получили адресуемую светодиодную ленту.

Адресуемая светодиодная RGB лента

Как не трудно догадаться, в статье речь пойдёт о светодиодном RGB драйвере – WS2811, которые соединяются последовательно и управляются по однопроводной линии данных. И адресуемой светодиодной ленте на совмещенных RGB диодов с такими драйверами.

RGB светодиоды со встроенными WS2811

Как видно на фотографии – такая светодиодная лента состоит из множества последовательно соединённых RGB светодиодов со встроенными драйверами WS2811 (маленькая чёрная точка по середине). Из обвязки такая микросхема, при питании от 5В, требует всего один конденсатор в 0.1мкФ по входу питания, ещё рекомендуется 33Омный резистор на линии данных, который, видимо, производитель упустил.

Схема подключения светодиодов к ws2811 (из datasheet)

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

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

Посылка завершается специальной командой RES, которая выделяется длительным низким уровнем сигнала, получив её – все диоды применят свои новые состояния.

Каждый пакет состоит из 24 бит – по 8 бит на каждый канал, в итоге имеем по 255 градаций каждого цвета или 16 миллионов цветов. Каждый бит содержит положительный и отрицательный полупериод, кодирование ноля или единицы осуществляется длительностью полупериодов.

Для работы с адресуемой светодиодной лентой был собран контроллер на базе микроконтроллера PIC16F688 и преобразователя USB интерфейса cp2102 на специально ранее заготовленной универсальной заготовке платы (заказанной на itead studio), поэтому печатку приводить не буду.

Схема

Такая светодиодная лента очень прожорлива, её метр с 60 светодиодами на максимуме кушает более 2-х ампер, так что понадобиться хороший и мощный источник питания. Можно ей дать и меньший ток, но тогда она будет гореть с преобладанием красных оттенков.

Управляющий контроллер

Прошивка писалась на скорую руку. Был реализован следующий алгоритм работы: сначала в микроконтроллер с компьютера скидывается вся посылка и только после этого она её отображает. Из-за малого количества RAM памяти слабого микроконтроллера получилось реализовать буфер только на 60 адресуемых светодиодов с драйверами WS2811.

Из-за средней скорости UART в 38400 скорость обновления всей ленты составляет примерно 50 мс, т.е. максимальная допустимая частота обновления вышла в 20 кадров/секунду. Чего для демонстрации возможности ленты мне хватило. Генерацией всех эффектов занимается специальная программа на ПК, которая то же писалась на скорую руку.

Управляющий контроллер

Формат отправляемых команд контроллеру:
Отправка производиться по UART на скорости 38400 8N1.

  • Первый байт – пробел (32 ASCII int код)
  • Второй байт – длина передаваемой посылки (количество светодиодов), от 0 до 60 (передаётся байтом)
  • Далее по 3 байта, в порядке GRB (зеленый, красный, синий), передаются величины ШИМ для каждого светодиода начиная с противоположного конца ленты.

Контроллер отвечает на начала обмена по UART ASCII символом !, по успешному завершению отправки пакета ASCII символом b .

На основе подобных светодиодных лент можно реализовать небольшие видео экраны и различные инсталляции.

Видео работы ленты

Скачать файлы проекта

Скачать программу управления

Дополнение от 1.09.2015

Для удобства проверки конструкции добавляю в статью прошивку с автономным плавным последовательным псевдо-случайным переливанием (до 60 светодиодов). Если одного данного эффекта достаточно, то можно упростить схему убрав из неё cp2102.

Скачать автономную прошивку (последовательное переливание)

Скачать исходник автономной прошивки (последовательное переливание)

Источник: https://alex-exe.ru/radio/light/rgb-addressable-strip-ws2811/

Управление RGB светодиодом с помощью аппаратной ШИМ ATmega8

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

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

Проще всего, это сделать с помощью микроконтроллера, а точнее его аппаратной ШИМ, которой нам потребуется 3 канала.

Микроконтроллер ATmega8 как раз имеет требуемых 3 аппаратных ШИМ канала, так что будем проводить эксперименты с его участием. В качестве подопытного будем использовать RGB светодиод Сree MC-E.

У этого светодиода 4 кристалла: красного, зеленого, синего и как бонус, белого цвета. Белый кристалл задействовать не будем.

Схема включения ничем принципиальным не отличается от той, которую использовали при опытах с аппаратной ШИМ:

Транзисторы Q1-Q3 – ZXTN19020, резисторы R4,R5,R7 – 10 ом (я не проводил балансировку цветов, так как для этого нужен спектрограф, которого у меня нет, все ограничивающие резисторы поставил одного номинала). Резисторы R3,R6,R8 по 1 килоому.

Все остальное – обвес микроконтроллера, с которым должно быть все понятно. X1 – кварцевый резонатор на 4Мгц, конденсаторы С1,С2 – по 18-20 пФ. R1,C7 соответственно по 10 килоом и 0,1 мкФ.

D1– светодиод, показывает, что на схему подается питание, R2 – ограничивающий резистор на 200 ом.

Конденсаторы
C3 – 100мкФ, С5 – 50мкф, С4,С6 – блокировочные, по 0,1мкФ. L7805 – стабилизатор напряжения 5В, подойдет любой аналог: LM7805, КРЕН5А.

D2-D3-D4 – наш RGB светодиод, соответственно синий, зеленый и красный его кристаллы. Гореть одним цветом нашему светодиоду будет скучно. Эффектней будет плавное переливание цветов.

Например, красный цвет постепенно переходит в зеленый, зеленый в синий, а синий в красный, и так по кругу в вечном цикле. Для этого напишем программу:

  1. #include //Стандартная библиотека ввода/вывода

  2. #define R_channel OCR1AL //Определяем канал OCR1AL для Красного цвета

  3. #define G_channel OCR1BL //Определяем канал OCR1BL для Зеленого цвета

  4. #define B_channel OCR2 //Определяем канал OCR2 для Синего цвета

  5. #define RGB_pause 2000 //Пауза для задержки

  6. //Программа формирования задержки

  7. void pause (unsigned int a)

  8. {

  9. unsigned int i; //Переменная для задержки

  10. for (i=a;i>0;i–); //Цикл формирования задержки

  11. }

  12. //Программа инициализации ШИМ

  13. void init_pwm (void)

  14. {

  15. //Инициализация порта

  16. DDRB=0x0e; //OC1A,OC1B,OC2 – выхода

  17. TCCR1A=(1

Источник: https://avrlab.com/node/93

Схемы подключения RGB лент аналоговых и цифровых

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

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

Почему на обычной RGB ленте не меняется цвет от начала к концу?

Светодиодные ленты бывают двух типов: аналоговые и цифровые. В аналоговых лентах все светодиоды включены в параллель. Следовательно, вы можете задавать цвет всей светодиодной ленты, но не можете установить определенный цвет для конкретного LED. Эти ленты просты в подключении и не дорогие.

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

В связи с тем, что светодиодные ленты RGB бывают как аналоговые (один цвет свечения для всей ленты) так и цифровые (можно задать цвет для каждого светодиода ленты в отдельности), то и контроллеры будут соответственно разные. Это надо учитывать при выборе контроллера.

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

Можно выделить несколько основных схем подключения светодиодных лент RGB

1. Подключение аналоговой светодиодной ленты к RGB контроллеру, длина ленты до 5 метров

На контакты контроллера V+ и V-  подводится питание от внешнего блока питания подходящей мощности и напряжения. На светодиодную ленту выходит четыре провода со следующей маркировкой (на входе светодиодной ленты контакты имеют аналогичное обозначение):

  • R — красный цвет;
  • G — зеленый цвет;
  • B — синий цвет;
  • V+ или иное обозначение — общий провод.

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

Также, на каждом контроллере, указана максимальная допустимая нагрузка на каждый выход светодиодной ленты, которую нельзя превышать (нагрузку можно подсчитать путем умножения количества светодиодов в ленте на потребляемую мощность (или ток) одного светодиод, либо посмотреть суммарную мощность на упаковке светодиодной ленты).Рассмотрим наглядный пример подключения светодиодной ленты 5050 RGB. Светодиодная лента, при помощи коннектора с четырьмя проводами, подключается к контроллеру RGB, к которому в свою очередь подключается внешний блок питания. Управление цветом производится при помощи радиопульта. 

2. Подключение аналоговой светодиодной ленты RGB к контроллеру, длина ленты более 5 метров

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

Для таких случаев, в схему добавляются специальные усилители сигнала RGB и дополнительные источники питания.

Возможны несколько вариантов подключения длинных лент – последовательное, параллельное и смешанное (параллельно – последовательное или наоборот).

Схема подключения RGB ленты 15 метров:

На схеме выше представлено последовательное соединение светодиодных лент длиной по 5 метров каждая.

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

Схема подключения RGB ленты 20 метров:

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

Внимание! Если мощность контроллера позволяет, т.е. контроллер при подключении всей светодиодной ленты имеет запас мощности не менее 20%, то использование RGB усилителей и блоков питания к ним можно исключить.

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

НО! В мощных блоках питания (от 200-300W) для охлаждения уже используется вентилятор, который соответственно шумит, если подсветка будет работать в полной тишине, к примеру подсветка потолка в спальне, данный шум будет вызывать дискомфорт.

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

Существуют также RGB контроллеры, позволяющие с одного пульта (планшета, телефона) управлять подсветкой в разных комнатах. Количество отдельно управляемых зон может быть до 10шт, зависит от модели контроллера. Подключение светодиодной ленты осуществляется по схемам, указанным выше, добавляется только необходимость «привязки» каждого контроллера к пульту.

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

3. Подключение аналоговой светодиодной ленты RGBW к контроллеру

Подключение светодиодных лент RGBW, исполнение может быть:

  • встроен отдельный белый светодиод на ленте в дополнении к RGB светодиодам
  • применяется две светодиодные ленты, к примеру RGB и Белая c оттенком WarmWhite
  • в светодиодной ленте каждый светодиод имеет 4 кристалла, формирующих красный, зеленый, синий, белый цвета свечения.

Схема подключения производится аналогично приведенным выше схемам. Единственным отличием, является использование четырехканального контроллера RGBW, усилителей RGBW.

При подключении 5 метров соединять ленту рекомендуется с двух сторон, для сведения к минимуму фактора «потери тока» (при подключении длинных отрезков последовательно подключенных, светодиоды в начале ленты будут светить ярче светодиодов, расположенных в конце ленты)

Схема подключения светодиодной ленты RGBW, когда мощности контроллера недостаточно:

В данной схеме применяются RGBW усилители и дополнительные блоки питания к ним

4. Подключение адресных цифровых светодиодных лент RGB SPI (бегущий огонь)

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

Одной единой схемы подключения адресных цифровых светодиодных лент RGB не существует, так как они моделируются в зависимости от контроллеров управления, применяемых микросхем в ленте и требуемых конструкций.

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

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

  • GND – общий провод питания
  • DI – линия передачи данных
  • CI – линия тактового генератора (clock)
  • SI – линия синхронизации
  • +5V – питание

Ниже приведены две схемы, реализованные на программируемом контроллере Arduino.

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

Светодиодная лента оснащенная микросхемами управления WS 2811 используется для создания многоцветных световых эффектов различной сложности — от простейшего эффекта «бегущий огонь» до воспроизведения динамических изображений на мультимедийных кранах. Для управления данной светодиодной ленты может быть использован любой контроллер с интерфейсом SPI (Serial Peripheral interface), поддерживающий работу с микросхемами WS 2811.

Данная светодиодная лента имеет следующие контакты для подключения:

  • 12v — питание ленты (+12V источника питания)
  • DIN — вход сигнала DATA
  • DO — выход сигнала DATA
  • GND — общий провод питания и управления (-12V источника питания и GND контроллера)

Схема подключения светодиодной ленты SPI c микросхемами WS2811

Если необходимо синхронное управлением несколькими лентами применяется разветвитель SPI, сигнал с одного входа распределяется на 8 выходов.

При монтаже данной светодиодной ленты иногда нет возможности установить контроллер рядом с лентой.  В данном случае устанавливается усилитель-конвертор, он позволяет увеличить расстояние передачи цифрового сигнала до 200 метров.

Увеличение дальности выполняется за счет преобразования сигнала и передачи его по симметричному кабелю типа «витая пара».

Усилитель-конвертор преобразует несимметричный сигнал TTL уровня в симметричный сигнал интерфейса RS485 (режим ТХ — передачи) и наоборот, RS485 в TTL (режим RX — прием). Режим устанавливается перемычкой на плате.

(Вид со стороны деталей) Расположение, назначение клемм; перемычка выбора режима (Вид со стороны клемм)

Подключение 1-ого усилителя при наличии у контроллера симметричного выхода D+ и D-

Подключение 2-х усилителей при наличии у контроллера несимметричного выхода DATA

5. Подключение цифровых светодиодных лент RGB с интерфейсом DMX-512

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

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

Светодиодная лента с интерфейсом DMX управляется любым контроллером, формирующим стандартный DMX сигнал.  По умолчанию адреса на ленте распределены последовательно, начиная с первого адреса, по три адреса на светодиод (группу светодиодов, один пиксель).

 Для назначения адресов используется редактор DMX. Цифровые светодиодные ленты подключаются к одному выходу контроллера только последовательно и имеют направленность передачи данных, таким образом, к выходу первой ленты подключается вход второй и т.д.

 При соединении отрезков учитывайте направление передачи сигнала записи адресов.

Вход сигнала записи адресов имеет обозначение на ленте “ADi”, выход — “ADо” К каждой цифровой светодиодной ленте длиной 5 метров подводится отдельное питание на контакты V+ и GND (за исключением первой). Усилители RGB сигнала для них не применяются.

Цифровая светодиодная лента DMX имеет следующие контакты для подключения:

  • V+ – питание +5V
  • Di – вход линии данных
  • Do – выход линии данных
  • GND – питание –5V

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

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

схема подключения светодиодной ленты при записи DMX адресов

6. Подключение светодиодных лент RGB с помощь контроллеров DMX

Управление DMX используется для создания сложных световых эффектов и позволяет управлять до 170 RGB источников света и 128 RGB+W источников света.

Управление каждым источником света осуществляется с DMX контроллера. Контроллер передает цифровой сигнал DMX декодеру, который уже в свою очередь преобразовывает его в PWM (ШИМ).

Каждый DMX декодер занимает 3 (RGB) или 4 адреса адреса (RGB+W), в зависимости от типа RGB декодера.

Схема подключения светодиодной ленты к DMX декодеру

Если мощности декодера не хватает, возможно подключение RGB усилителя для увеличения количества подключаемой светодиодной ленты. Мощность белого цвета многих RGB+W лент в три раза больше, чем мощность каждого из цветов R,G, или B. При необходимости используйте дополнительный усилитель для белого канала.

Для передачи сигнала DMX к светодиодной RGB-ленте на длинные (200-300 метров) расстояния и при невозможности использовать кабель, применяется DMX Wireless усилитель и декодер.

Источник: https://lednews.ru/shemyi-podklyucheniya-rgb-lent-analogovyih-i-tsifrovyih/

Подключение адресной светодиодной ленты WS2812B к Arduino

Введение

Приветствую всех. Мы продолжаем знакомить Вас со светодиодными лентами. На этот раз мы рассмотрим адресную RGB светодиодную ленту WS2812B.

Лента основана на светодиодах WS2812B в корпусе LED 5050, куда в корпус производители поместили не только три встроенных светодиода (Красный, Зеленый, Синий), но и управляемый ШИМ драйвер, управляющий их яркостью.

Благодаря этому мы можем получить произвольный цвет, изменяя яркость встроенных светодиодов, а так же управлять отдельно взятым пикселем на ленте. Собственно, три встроенных разноцветных светодиода вместе с ШИМ драйвером и образуют светодиод WS2812B.

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

На фото справа вы можете увидеть этот самый светодиод WS2812B, где большой черный прямоугольник это ШИМ драйвер, а вот три встроенных в него светодиода настолько малы, что их с трудом видно, и можно отследить только по золотым нитям, идущим от драйвера к трем разноцветным светодиодам.

Технические характеристики

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

  • Светодиод WS2812B работает от напряжения 5В (±0.5).
  • Ток ~20мА на один встроенный светодиод, то есть ~60мА на пиксель в целом.
  • Рабочая температура от -20 до +80 ℃.

Остальное можете посмотреть самостоятельно в даташите.

Подключение

Подключается светодиодная лента довольно-таки просто, необходимо подать на +5V и GND, плюс (+) и минус (-) от 5В блока питания, а контакт DIN соединить с портом Arduino, как правило, по умолчанию используется 6-й порт Arduino, но вы вправе выбрать и любой другой свободный порт. Так же рекомендуется соединить земли Arduinoи блока питания, как нарисовано на рисунке ниже.

Будьте внимательны, лента на светодиодах WS2812B имеет направление, с одной стороны она имеет контакты DIN, +5V, GND, а с другой стороны DO, +5V, GND, подключать необходимо именно вход, то есть DIN, иначе лента не будет работать. Так же на ленте нарисованы стрелки, указывающие на направление.

Протокол

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

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

Команды светодиодам передаются пачками по 24 бита (3 байта, один байт на каждый цвет, первым передается байт для зеленого, потом для красного, и заканчивает байт для синего светодиода. Порядок бит – от старшего к младшему). Перед каждой пачкой идет пауза в 50 мкс.

Пауза больше 100 мкс воспринимается как окончание передачи. Все биты, будь то 0 или 1, имеют фиксированное время 1.25 мкс. Бит 1 кодируется импульсом в 0.8 мкс, после чего идет пауза в 0.45 мкс. Бит 0 кодируется импульсом в 0.4 мкс, после чего идет пауза в 0.85 мкс.

Собственно, наглядная диаграмма на фото ниже. Так же допускаются небольшие погрешности в 0-150 нс на каждый фронт. Ну и следует учесть, что подобное необходимо повторить для каждого светодиода на ленте, после чего сделать паузу минимум в 100 мкс.

Потом можно повторить передачу.

Глядя на все эти цифры, становится ясно, что сделать все это, используя стандартные функции digitalWrite, delay и тому подобные – попросту невозможно, ввиду их долгой работы и неточности. Реализовать подобный протокол можно только использовав специальные библиотеки вроде CyberLib или написав собственную на чистом Си или, того хуже для нынешнего программиста, на Ассемблере.

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

Библиотеки

Поискав в интернете, вы найдете, как минимум, две большие библиотеки для работы со светодиодами WS2812B.

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

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

  • Библиотека FastLED, разрабатывается Даниэлем Гарсиа и Марком Кригсманом. Имеет свой сайт, справочную систему и большое сообщество в ~5000 человек. Библиотека написана на чистом Си, без использования Wiring. FastLED поддерживает все виды Arduino (и не только), а так же умеет работать с кучей различных протоколов и интерфейсов. В том числе и протокол для управления лентами на светодиодах WS2812B.
  • Библиотека Adafruit NeoPixel (Полное описание на нашем сайте), разрабатывается компанией Adafruit Industries. Предназначена для работы со светодиодными лентами и неопиксельными кольцами, продаваемыми в их интернет магазине. Библиотека написана на Си и Ассемблере с небольшим использованием Wiring. Эдакая солянка. Поддерживает все виды Arduino. Содержит меньший функционал по сравнению с FastLED, немного медленней, но имеет более компактный вид, только основное для работы.

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

Пример Blink используя ленту WS2812B (с 30 светодиодами) и библиотеку FastLED

// Подключаем библиотеку FastLED. #include “FastLED.h” // Указываем, какое количество пикселей у нашей ленты. #define LED_COUNT 30 // Указываем, к какому порту подключен вход ленты DIN. #define LED_PIN 6 // Создаем переменную strip для управления нашей лентой. CRGB strip[LED_COUNT]; void setup() {   // Добавляем ленту.

  FastLED.addLeds(strip, LED_COUNT); } void loop() {   // Включаем все светодиоды.   for (int i = 0; i < LED_COUNT; i++)   {     strip[i] = CRGB::Red; // Красный цвет.   }   // Передаем цвета ленте.   FastLED.show();   // Ждем 500 мс.   delay(500);   // Выключаем все светодиоды.

  for (int i = 0; i < LED_COUNT; i++)   {     strip[i] = CRGB::Black; // Черный цвет, т.е. выключено.   }   // Передаем цвета ленте.   FastLED.show();   // Ждем 500 мс.   delay(500); }Скетч использует 3758 байт (11%) памяти устройства. Всего доступно 32256 байт.

Глобальные переменные используют 187 байт (9%) динамической памяти, оставляя 1861 байт для локальных переменных. Максимум: 2048 байт.

Пример Blink используя ленту WS2812B (с 30 светодиодами) и библиотеку Adafruit NeoPixel

// Подключаем библиотеку Adafruit NeoPixel. #include “Adafruit_NeoPixel.h” // Указываем, какое количество пикселей у нашей ленты. #define LED_COUNT 30 // Указываем, к какому порту подключен вход ленты DIN. #define LED_PIN 6 // Создаем переменную strip для управления нашей лентой.

Adafruit_NeoPixel strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800); void setup() {   // Инициализируем ленту.   strip.begin(); } void loop() {   // Включаем все светодиоды.   for (int i = 0; i < LED_COUNT; i++)   {     strip.setPixelColor(i, strip.Color(255, 0, 0)); // Красный цвет.   }   // Передаем цвета ленте.   strip.show();   // Ждем 500 мс.

  delay(500);   // Выключаем все светодиоды.   for (int i = 0; i < LED_COUNT; i++)   {     strip.setPixelColor(i, strip.Color(0, 0, 0)); // Черный цвет, т.е. выключено.   }   // Передаем цвета ленте.   strip.show();   // Ждем 500 мс.   delay(500); }Скетч использует 2592 байт (8%) памяти устройства. Всего доступно 32256 байт.

Глобальные переменные используют 40 байт (1%) динамической памяти, оставляя 2008 байт для локальных переменных. Максимум: 2048 байт.

Подытожим

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

Таким образом подключить к Arduino можно не более 600 пикселей при использовании минимальной логики. По этому, мне больше приглянулась библиотека Adafruit NeoPixel. В ней только нужное для работы со светодиодными лентами и более рациональное использование памяти. Какую из этих библиотек использовать, решать, конечно, вам.

Обе они работают и со своею задачей справляются на 5+.

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

Смотрите также

Источник: http://arduino.on.kg/podklyuchenie-adresnoy-svetodiodnoy-lenty-WS2812B-k-Arduino

Ссылка на основную публикацию
Adblock
detector
",css:{backgroundColor:"#000",opacity:.6}},container:{block:void 0,tpl:"
"},wrap:void 0,body:void 0,errors:{tpl:"
",autoclose_delay:2e3,ajax_unsuccessful_load:"Error"},openEffect:{type:"fade",speed:400},closeEffect:{type:"fade",speed:400},beforeOpen:n.noop,afterOpen:n.noop,beforeClose:n.noop,afterClose:n.noop,afterLoading:n.noop,afterLoadingOnShow:n.noop,errorLoading:n.noop},o=0,p=n([]),h={isEventOut:function(a,b){var c=!0;return n(a).each(function(){n(b.target).get(0)==n(this).get(0)&&(c=!1),0==n(b.target).closest("HTML",n(this).get(0)).length&&(c=!1)}),c}},q={getParentEl:function(a){var b=n(a);return b.data("arcticmodal")?b:(b=n(a).closest(".arcticmodal-container").data("arcticmodalParentEl"),!!b&&b)},transition:function(a,b,c,d){switch(d=null==d?n.noop:d,c.type){case"fade":"show"==b?a.fadeIn(c.speed,d):a.fadeOut(c.speed,d);break;case"none":"show"==b?a.show():a.hide(),d();}},prepare_body:function(a,b){n(".arcticmodal-close",a.body).unbind("click.arcticmodal").bind("click.arcticmodal",function(){return b.arcticmodal("close"),!1})},init_el:function(d,a){var b=d.data("arcticmodal");if(!b){if(b=a,o++,b.modalID=o,b.overlay.block=n(b.overlay.tpl),b.overlay.block.css(b.overlay.css),b.container.block=n(b.container.tpl),b.body=n(".arcticmodal-container_i2",b.container.block),a.clone?b.body.html(d.clone(!0)):(d.before("
"),b.body.html(d)),q.prepare_body(b,d),b.closeOnOverlayClick&&b.overlay.block.add(b.container.block).click(function(a){h.isEventOut(n(">*",b.body),a)&&d.arcticmodal("close")}),b.container.block.data("arcticmodalParentEl",d),d.data("arcticmodal",b),p=n.merge(p,d),n.proxy(e.show,d)(),"html"==b.type)return d;if(null!=b.ajax.beforeSend){var c=b.ajax.beforeSend;delete b.ajax.beforeSend}if(null!=b.ajax.success){var f=b.ajax.success;delete b.ajax.success}if(null!=b.ajax.error){var g=b.ajax.error;delete b.ajax.error}var j=n.extend(!0,{url:b.url,beforeSend:function(){null==c?b.body.html("
"):c(b,d)},success:function(c){d.trigger("afterLoading"),b.afterLoading(b,d,c),null==f?b.body.html(c):f(b,d,c),q.prepare_body(b,d),d.trigger("afterLoadingOnShow"),b.afterLoadingOnShow(b,d,c)},error:function(){d.trigger("errorLoading"),b.errorLoading(b,d),null==g?(b.body.html(b.errors.tpl),n(".arcticmodal-error",b.body).html(b.errors.ajax_unsuccessful_load),n(".arcticmodal-close",b.body).click(function(){return d.arcticmodal("close"),!1}),b.errors.autoclose_delay&&setTimeout(function(){d.arcticmodal("close")},b.errors.autoclose_delay)):g(b,d)}},b.ajax);b.ajax_request=n.ajax(j),d.data("arcticmodal",b)}},init:function(b){if(b=n.extend(!0,{},a,b),!n.isFunction(this))return this.each(function(){q.init_el(n(this),n.extend(!0,{},b))});if(null==b)return void n.error("jquery.arcticmodal: Uncorrect parameters");if(""==b.type)return void n.error("jquery.arcticmodal: Don't set parameter \"type\"");switch(b.type){case"html":if(""==b.content)return void n.error("jquery.arcticmodal: Don't set parameter \"content\"");var e=b.content;return b.content="",q.init_el(n(e),b);case"ajax":return""==b.url?void n.error("jquery.arcticmodal: Don't set parameter \"url\""):q.init_el(n("
"),b);}}},e={show:function(){var a=q.getParentEl(this);if(!1===a)return void n.error("jquery.arcticmodal: Uncorrect call");var b=a.data("arcticmodal");if(b.overlay.block.hide(),b.container.block.hide(),n("BODY").append(b.overlay.block),n("BODY").append(b.container.block),b.beforeOpen(b,a),a.trigger("beforeOpen"),"hidden"!=b.wrap.css("overflow")){b.wrap.data("arcticmodalOverflow",b.wrap.css("overflow"));var c=b.wrap.outerWidth(!0);b.wrap.css("overflow","hidden");var d=b.wrap.outerWidth(!0);d!=c&&b.wrap.css("marginRight",d-c+"px")}return p.not(a).each(function(){var a=n(this).data("arcticmodal");a.overlay.block.hide()}),q.transition(b.overlay.block,"show",1*")),b.overlay.block.remove(),b.container.block.remove(),a.data("arcticmodal",null),n(".arcticmodal-container").length||(b.wrap.data("arcticmodalOverflow")&&b.wrap.css("overflow",b.wrap.data("arcticmodalOverflow")),b.wrap.css("marginRight",0))}),"ajax"==b.type&&b.ajax_request.abort(),p=p.not(a))})},setDefault:function(b){n.extend(!0,a,b)}};n(function(){a.wrap=n(document.all&&!document.querySelector?"html":"body")}),n(document).bind("keyup.arcticmodal",function(d){var a=p.last();if(a.length){var b=a.data("arcticmodal");b.closeOnEsc&&27===d.keyCode&&a.arcticmodal("close")}}),n.arcticmodal=n.fn.arcticmodal=function(a){return e[a]?e[a].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof a&&a?void n.error("jquery.arcticmodal: Method "+a+" does not exist"):q.init.apply(this,arguments)}}(jQuery)}var debugMode="undefined"!=typeof debugFlatPM&&debugFlatPM,duplicateMode="undefined"!=typeof duplicateFlatPM&&duplicateFlatPM,countMode="undefined"!=typeof countFlatPM&&countFlatPM;document["wri"+"te"]=function(a){let b=document.createElement("div");jQuery(document.currentScript).after(b),flatPM_setHTML(b,a),jQuery(b).contents().unwrap()};function flatPM_sticky(c,d,e=0){function f(){if(null==a){let b=getComputedStyle(g,""),c="";for(let a=0;a=b.top-h?b.top-h{const d=c.split("=");return d[0]===a?decodeURIComponent(d[1]):b},""),c=""==b?void 0:b;return c}function flatPM_testCookie(){let a="test_56445";try{return localStorage.setItem(a,a),localStorage.removeItem(a),!0}catch(a){return!1}}function flatPM_grep(a,b,c){return jQuery.grep(a,(a,d)=>c?d==b:0==(d+1)%b)}function flatPM_random(a,b){return Math.floor(Math.random()*(b-a+1))+a}