Как настроить смартфоны и ПК. Информационный портал

RGB светодиод и Arduino. Схема управления RGB светодиодами

В этой статье рассмотрены основы использования RGB (Red Green Blue (красный, зеленый, синий)) светодиода с Arduino.

Мы используем функцию analogWrite для управления цветом RGB светодиода.

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

То есть, мы будем регулировать яркость каждого светодиода и получать нужный цвет на выходе, как будто это палитра художника или словно вы настраиваете частоты на своем плеере. Для этого можно использовать переменные резисторы . Но в результате схема будет достаточно сложной. К счастью, Arduino предлагает нам функцию analogWrite. Если задействовать на плате контакты, отмеченные символом «~», мы можем регулировать напряжение, которое подается на соответствующий светодиод.

Необходимые узлы

Для того, чтобы реализовать наш небольшой проект, нам понадобятся:

1 RGB светодиод 10 мм

3 резистора на 270 Ω (красная, фиолетовая, коричневая полоски). Вы можете использовать резистор с сопротивлением до 1 кОм, но не забывайте, что с повышением сопротивления, светодиод начинает светить не так ярко.


Шесть цифр номера соответствуют трем парам номеров; первая пара – красная составляющая цвета, следующие две цифры – зеленая составляющая, а последняя пара – синяя составляющая. То есть, красному цвету соответствует выражение #FF0000, так как это будет максимальная яркость красного светодиода (FF - это 255 в шестнадцатеричной системе), а красная и синяя компоненты равны 0.

Попробуйте зажечь светодиод, используя, например, оттенок индиго: #4B0082.

Красная, зеленая и синяя компоненты цвета индиго – это 4B, 00 и 82 соответственно. Мы можем использовать их в пределах функции "setColor" с помощью следующей строки кода:

setColor(0x4B, 0x0, 0x82); // индиго

Для трех компонент мы используем запись, в которой перед каждой из них ставится символ "0x" в начале.

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

ШИМ и Arduino

Широтно импульсная модуляция (ШИМ (PWM на английском)) – это один из методов управления питанием. В нашем случае ШИМ используется для управления яркостью каждого отдельного светодиода.

На рисунке ниже схематично изображен сигнал с одного из ШИМ пинов Arduino.


Каждую 1/500 секунды ШИМ выход генерирует импульс. Длина этого импульса контролируется функцией "analogWrite". То есть, "analogWrite(0)" не будет генерировать никакого импульса, а "analogWrite(255)" сгенерирует сигнал, который будет длится до самого начала следующего. То есть, будет создаваться впечатление, что подается один непрерывный импульс.

Когда в пределах функции analogWrite мы указываем значение в диапазоне от 0 до 255, мы генерируем импульс определенной длительности. Если длина импульса составляет 5%, мы подадим на указанный выход Arduino 5% от максимально доступного питания и создается впечатление, что светодиод горит не на максимальную яркость.

Оставляйте Ваши комментарии, вопросы и делитесь личным опытом ниже. В дискуссии часто рождаются новые идеи и проекты!

Среди прочих деталек в посылке пришел вот такой пакетик с интересными трехцветными RGB светодиодами.


Название RGB Led происходит от аббревиатуры трех основных цветов - R (Red, красный), G (Green, зеленый) и B (Blue, синий). Таким образот, RGB Led это комбинированный трехцветный светодиод, в корпусе которого в действительности размещены три светодиода разных цветов. Яркостью каждого цвета можно управлять отдельно, изменяя ток через соответствующий диод. теориетически, изменяя соотношение яркостей мы можем получить любой цвет, в том числе и белый.

На рисунке показана распиновка RGB светодиода с общим катодом.


Обычно трёхцветный светодиод имеет четыре вывода. Один вывод - общий для всех трех цветовых компонент, и три отдельных вывода для раздельного управления цветами. В зависимости от того, какие из электродов светодиодов соединены вместе внутри общего корпуса, RGB светодиод может быть с общим катодом (ОК) или с общим анодом (ОА). Это нужно иметь в виду при подключении светодиода к источнику тока. Мне приехали светодиоды с общим катодом.

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

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


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

Для иллюстрации работы RGB светодиода с управлением посредством ШИМ я собрал вот такую простую схему на основе маленького дешевого микроконтроллера Microchip PIC12F629.

LED1, LED2 и LED3 это соответственно красный, зеленый и синий компоненты нашего RGB светодиода. Вывод общего катода соединяется с минусом питания. Светодиоды подключены в выводам микроконтроллера через токоограничивающие резисторы R1..R3 сопротивлением 240 Ом. резистор R4 сопротивлением 1...10 килоом подтягивает вывод MCLR контроллера к плюсу питания. Это необходимо для правильной работы программы. Кнопкой S1 можно мерять последовательности световых эффектов. (См. далее)

Прошивку я залил в микроконтроллер с помощью моего самодельного программатора - клона фирменного PicKit2 . Эта простая конструкция была собрана на китайской макетной беспаечной плате типа Breadboard. вот так это выглядит:

Программная часть проекта была позаимствована на англоязычном британском сайте, посвященном радиоэлектронике. . Прошивка для PIC12F629 написана на ассемблере в среде MPLAB IDE v7.31. скачать прошивку и ее исходные коды можно по ссылке в конце статьи. Кроме того, я вложил в архив проект для симулятора Proteus 8.6

Управление светодиодом.

Управление осуществляется с помощью кнопки S1 (см. схему), подключенной к порту GP5 микроконтроллера (вывод 2 микросхемы).

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

Двойное нажатие - выбор следующей последовательности.
дважды нажмите кнопку с промежутком менее 0,5 секунды. так как вы делаете "двойной щелчок" компьютерной мышкой. такое действие позволяет переключать имеющиеся в прошивке последовательности. При этом все значения ШИМ сбрасываются в 0, то есть светодиод гаснет, и начинается следующая последовательность. Когда вы переберете все последовательности, вы вернетесь на самую первую. Достижение последней секвенции индицируется тремя короткими вспышками синего и зеленого светодиодов

Нажатие и удерживание более 1.2 сек. - переход в режим сна. Текущее состояние светодиода и программы записывается в энергонезависимую память EEPROM и схема переходит в состояние "сна". Последующее длительное нажатие снова включает схему и последовательность продолжается.

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

Как формируется цвет при помощи светодиодов.

Начнем с самого начала — определимся, как формируется цвет, вообще, в жизни (все знают, но на всякий случай …). Любой оттенок цвета формируется при помощи трех основных цветов. В нашем случае, когда цвет формируют источники света (аддитивный синтез) – это:
— R red красный
— G green зеленый
— B blue синий

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

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

Для управления RGB-светодиодом микроконтроллер должен отдельно управлять каждым из трех основных цветов и иметь три отдельных выхода для каждого цвета.

Управляя светодиодами при помощи цифрового сигнала (включен/отключен) можно получить всего 7 цветов:
— три основных цвета (когда засвечен только один основной цвет)
— три составных цвета (когда засвечено по два основных цвета)
— белый цвет (засвечены все три основных цвета)

Для того чтобы получить множество цветовых оттенков, нужно управлять интенсивностью свечения каждого из основных цветов. Для управления интенсивностью свечения применяется широтно-импульсная модуляции цифрового сигнала (ШИМ или PWM). Изменяя скважность сигнала, для глаза создается иллюзия изменения яркости свечения светодиода. Чтобы глаз не замечал переключений светодиода, частота ШИМ-сигнала должна быть не менее 50-60Гц.

Так как в светильнике три источника излучения, соответственно, светильником нужно управлять тремя ШИМ-сигналами R, G, B. Каждый уровень ШИМ (и яркость светильника) – это определенное значение скважности сигнала.

Чаще всего значение скважности задается числом размером в байт – 8 бит (и мы будет использовать байт). Это 256 градаций каждого из основных цветов и 256*256*256=16777213 оттенков цветов вообще. На самом деле — это не совсем так – ниже я расскажу почему.

Из вышесказанного приходим к тому, что МК должен для светодиодного светильника формировать три ШИМ-сигнала частотой выше 60 Гц и с разрешающей способностью 256 значений (8 бит).

Применяя микроконтроллеры AVR (как, впрочем, и любые другие) – это не является проблемой, так как в большинстве из них есть достаточное количество аппаратных 8-ми битных ШИМ формирователей (таймеров), которые минимально расходуя ресурсы МК могут обеспечить любую частоту формирования ШИМ, вплоть до десятков килогерц. В случае применения программных формирователей ШИМ – количество таких формирователей можно увеличить до количества свободных ножек у МК (частота формирования ШИМ, в этом случае, возможна до нескольких килогерц).

Параметры регулирования LED-светильника.

Определимся с параметрами цвета, которые нам-бы хотелось изменять. Раз мы имеем три значения скважности для основных цветов R, G, B, логично было-бы регулировать именно эти три параметра — то есть интенсивности красной, зеленой и синей составляющей цвета. На практике — это не очень правильный подход, так как не позволяет комфортно выбрать цвет нашего светильника. Например, для того чтобы сделать яркость светильника меньше оставив цвет свечения прежним. Нужно провернуть сразу три регулятора, еще и на разный угол. Фактически, каждое изменение (подстройка) нашего светильника будет выглядеть как настройка его с нуля. Гораздо естественней регулировать яркость (или какой либо другой параметр) одним регулятором.

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

Система RGB — это одна из них, с тремя регуляторами для каждого из основных цветов, как описано выше.

Системы XYZ , LAB и другие, нам не очень подходят.

Наиболее естественно изменяет (задает) параметры освещения — система HS B (и подобные ей HSL, HSV). В HSB палитра цветов формируется путем установки различных значений базовых параметров:

Hue (оттенок цвета). Задается в градусах от 0 до 360. 0 – красный цвет. 120 – зеленый, 240 – синий. Все что между ними – смешение основных цветов.
Мы будем использовать значение Hue размером в байт (от 0 до 255) .
0 – красный цвет. 85 – зеленый, 170 – синий.

Saturation (насыщенность). Задается в процентах от 0 до 100. 100 – это максимальная насыщенность цвета. При уменьшении к нулю – это потеря цвета вплоть до серого.
Мы будем использовать значение Saturation размером в байт (от 0 до 255).

Brightness (яркость). Задается в процентах от 0 до 100. 100 – это максимальная яркость цвета (но не белый цвет!). При уменьшении к нулю – это потеря яркости вплоть до черного.
Мы будем использовать значение Brightness размером в байт (от 0 до 255).

Если использовать эту систему при регулировке цвета, то получается все очень удобно. Крутим один регулятор – меняем цветовой тон (оставаясь в той-же яркости), крутим другой – меняем яркость (не меняя цвета) – здорово! Но есть у системы и недостатки. Первый — храня значения в переменных размером в байт, мы теряем часть информации о цвете (например, для хранения всех возможных вариантов для цветового тона нужно 768 значений, а мы все это пытаемся уложить в 256 значений). Второй – все равно, в итоге, конечное значение должно быть в системе RGB для вывода ШИМ-сигналов на светодиоды. И третий – в случае, когда нужно будет еще какое либо преобразование – это будет гораздо сложнее сделать с системой HSB, чем с RGB.

В устройстве AAL я решил реализовать различные преобразования следующим образом:
1 Информация о цвете хранится в трех байтах R_ base, G_ base, B_ base (система RGB). Я назвал это значение базовым. Оно хранит информацию о цвете без потерь.
2 Для преобразований используется значение величины преобразования (сдвига) Shift размером в байт.
3 Нужное преобразование осуществляется в соответствующих процедурах, исходными данными для которых служат базовое значение цвета R_base, R_base, R_base и величина соответствующего преобразования Shift. На выходе мы получаем три значения в системе RGB (R_ shift, G_ shift, B_ shift ), которые выдаются на светодиоды в виде ШИМ-сигналов.

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

Реализация преобразований цвета в микроконтроллере.

Проблема реализации управления цветом в микроконтроллере заключается в том, что для подавляющего большинства преобразований требуется умножение байта на дробный коэффициент преобразования (число от 0 до 1).
Например, уменьшение яркости вдвое:
R_shift = R_base * 0,5
G_shift = G_base * 0,5
B_shift = B_base * 0,5

С целочисленным умножением в AVR-микроконтроллерах все прекрасно (8-ми битное умножение осуществляется одним оператором всего за 2 такта — до 10 миллионов умножений в секунду!), а вот если мы перейдем в систему чисел с плавающей запятой – это будет на пару порядков медленнее и очень громоздко. В случаях, где нужны будут быстрые пересчеты большого количества значений, микроконтроллер просто не будет успевать.
Еще хуже дело с делением (это как вариант уйти от дробного умножения) — аппаратного его просто нет. Программная реализация деления тоже довольно громоздка.

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

Проблема умножения на дробный коэффициент решается очень просто! Если в качестве коэффициента использовать значение размером в байт (0 – 255), принимая максимальное значения байта (255) за единицу, то можно обойтись только целочисленным умножением.

0 ~ 0/255 = 0
10 ~ 10/255 = 0,04
128 ~ 128/255 = 0,5
255 ~ 255/255 = 1

Теперь, предыдущий пример будет выглядеть следующим образом:
R_shift = (R_base * 128) / 255
G_shift = (G_base * 128) / 255
B_shift = (B_base * 128) / 255

После умножения двух 8-ми битных значений (R_base*128) мы получаем 16-ти битный результат (два байта). Откидывая младший байт и используя только старший — мы осуществляем деление значения на 256.
Деля на 256 , вместо положенных 255 , мы вносим в результат небольшую погрешность. В нашем случае, когда результат используется для формирования яркости посредством ШИМ, погрешностью можно пренебречь, так как она не будет заметна для глаз.

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

Переходим к самим преобразованиям.

Напомню, в любом преобразовании участвуют:
— базовый цвет, заданный тремя переменными R_base, G_base, B_base (размер Byte)
— коэффициент преобразования Shift (размер Byte)

Результат:
— «сдвинутый» цвет, в виде трех значений R_shift, G_shift, B_shift (размер Byte)

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

Яркость (Brightness)

— самое простое преобразование.
При:
Shift=0 светодиод погашен
Shift=255 светодиод горит базовым цветом.
Все промежуточные значения Shift – это затемнение базового цвета.

R_shift = (R_base * Shift) / 256
G_shift = (G_base * Shift) / 256
B_shift = (B_base * Shift) / 256

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

Осветление (Tint)

— эта величина не входит в систему HSB, но ее удобно использовать в регулировках. Tint – это, своего рода продолжение регулировки яркости в белый цвет.
При:
Shift=0 – светодиод горит базовым цветом
Shift=255 – светодиод горит белым цветом
Все промежуточные значения Shift – это осветление базового цвета.

R_shift = (R_base*(255 — Shift)) / 256 + Shift
G_shift = (G_base*(255 — Shift)) / 256 + Shift
B_shift = (B_base *(255 — Shift)) / 256 + Shift

* коэффициент (255 — Shift) можно реализовать одним оператором – битовой инверсией (конечно, при условии, что Shift — это Byte|Char)

Светимость (Lightness)

— эта величина тоже не входит в систему HSB. Регулировка осуществляется от выключенного светодиода, через базовый цвет и к белому цвету.
При:
Shift=0 – светодиод погашен
Shift=128 – светодиод горит базовым цветом
Shift =255 – светодиод горит белым цветом.

Реализуется посредством двух предыдущих преобразований.
При Shift < 128 применяем Brightness c Shift(for Brightness) = Shift*2
При Shift >=128 применяем Tint c Shift(for Tint) = (Shift-128)*2

Насыщенность (Saturation)

— цветность — переход от серого к цветному
При:
Shift=0 – светодиод горит белым цветом с яркостью, равной среднему значению базового цвета
Shift=255 – светодиод горит базовым цветом
Все промежуточные значения Shift – это «потеря» цвета.

RGB_average= ((R_base + B_base)/2 + G_base) / 2

* правильней, конечно, так (R_base + G_base + B_base)/3, но придется делить на 3, а это сдвигом не сделаешь

R_shift = (R_base * Shift) / 256 + (RGB_average * (255 — Shift)) / 256
G_shift = (G_base * Shift) / 256 + (RGB_average * (255 — Shift)) / 256
B_shift = (B_base * Shift) / 256 + (RGB_average * (255 — Shift)) / 256

Изменение тона (Hue)

Круговое изменение оттенка цвета.
Сложное преобразование, которое отличается в каждой из трех зон значений Shift
К примеру, если базовый цвет красный, то при:
Shift=0 – светодиод светится красным
Shift=85 – светодиод светится зеленым
Shift=170 – светодиод светится синим
Shift=255 – светодиод снова светится красным

При Shift < 86:
Shift_a= Shift * 3
R_shift = (G_base * Shift_a) / 256 + (R_base * (255 — Shift_a)) / 256
G_shift = (B_base * Shift_a) / 256 + (G_base * (255 — Shift_a)) / 256
B_shift = (R_base * Shift_a) / 256 + (B_base * (255 — Shift_a)) / 256

При Shift > 85 and Shift < 171:
Shift_a= (Shift-85) * 3
R_shift = (B_base * Shift_a) / 256 + (G_base * (255 — Shift_a)) / 256
G_shift = (R_base * Shift_a) / 256 + (B_base * (255 — Shift_a)) / 256
B_shift = (G_base * Shift_a) / 256 + (R_base * (255 — Shift_a)) / 256

При Shift > 170:
Shift_a= (Shift-170) * 3
R_shift = (R_base * Shift_a) / 256 + (B_base * (255 — Shift_a)) / 256
G_shift = (G_base * Shift_a) / 256 + (R_base * (255 — Shift_a)) / 256
B_shift = (B_base * Shift_a) / 256 + (G_base * (255 — Shift_a)) / 256

Инверсия (Inversion)

— представляет собой переход от одного цвета к его инверсному варианту. Например, инверсный цвет для красного – это голубой.
Shift=0 – светодиод светится базовым цветом
Shift=128 – светодиод горит белым (серым) цветом – средняя точка инверсии
Shift=255 – светодиод светится цветом инверсным базовому
Все промежуточные значения Shift – это плавные переходы между цветами.

R_shift = ((255 — R_base) * Shift) / 256 + (R_base * (255 — Shift)) / 256
G_shift = ((255 — G_base) * Shift) / 256 + (G_base * (255 — Shift)) / 256
B_shift = ((255 — B_base) * Shift) / 256 + (B_base * (255 — Shift)) / 256

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

Осталась еще одна проблема, которую хотелось бы затронуть в разрезе этой статьи –

Нелинейность восприятия ШИМ человеческим глазом

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

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

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

Именно из-за эффекта нелинейности я выше писал о том, что, по факту, 3х-байтный (24битный) цвет совсем не дает те 16 миллионов оттенков, как любят писать многие производители. Полноценных оттенков, в лучшем случае, будет на порядок меньше.

Как решить проблему нелинейность восприятия ШИМ человеческим глазом?
В идеале, нужно использовать одну из экспериментально выведенных формул, но, часто, они слишком сложные для вычисления в микроконтроллере.
Еще, можно создать таблицу значений для пересчета ШИМ (уменьшив время вычислений, но пожертвовав частью памяти МК).
В нашем случае, когда нет необходимости в большой точности передачи нюансов яркости, можно применить упрощенную формулу, так называемой, мощности излучения:

R_PWM = (R_shift * R_shift) / 256
G_PWM = (G_shift * G_shift) / 256
B_PWM = (B_shift * B_shift) / 256

* умножаем значение само на себя и откидываем младший байт результата.

Вот это, наверное, и все, о чем я Вам хотел рассказать по LED цвету. Все преобразования, описанные в статье, реализованы мною в устройстве AAL. Кроме того, я сделаю отдельный модуль Color в Демонстрацию алгоритмов на RGB-светодиоде и WS2812-пикселе можно посмотреть .

(Visited 10 683 times, 1 visits today)

Rgb светодиоды, которые иногда называют 3-хцветными, являются ничем иным, как красным, зеленым и синим диодом, совмещенными в едином корпусе. Зная об этом, несложно представить себе, как устроены rgb светодиоды. Для каждого из 3-х цветов существует своя ножка-катод, и ещё одна – общий анод. Вывод под анод является самым длинным, а катоды обычно располагаются в следующем порядке:

  • синий;
  • зеленый;
  • красный.

Чтобы заставить устройство светиться одним из указанных цветов, на соответствующий катод требуется подать сигнал. Если же нужен какой-то другой оттенок, его можно получить при использовании широтно-импульсной модуляции (ШИМ, PWM-сигнал). Количество получаемых в итоге цветов зависит от того, как реализовано управление и разрядности ШИМ. Белый цвет тоже довольно просто получить – для этого нужно лишь зажечь все светодиоды одновременно.

Rgb светодиоды могут иметь и другое строение, которое и определяет их основные характеристики (насколько они мощные и т.д.). В случае реализации устройства с общим катодом для каждого из цветов установлен собственный порог зажигания, отделенный от следующего парой вольт. Устройства с общим «+» включают нужный светодиод при значении «0» на выходе микроконтроллера, а с общим «-» - при «1».

Управление rgb светодиодами может быть реализована на 8-битных микроконтроллерах семейства Pic, AVR (ATtiny, ATmega) и более мощных моделях, программа для которых составляется на ассемблере.

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

Управление rgb светодиодами

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

При недостаточной частоте импульсов светодиоды будут мигать. Чтобы они светили постоянно, нижний порог частоты должен быть около 60-70 Гц (мониторы старых моделей), а в идеале – не меньше 100 Гц (более мощные и современные).

При простейшей реализации управление RGB-светодиодом потребует 3 ШИМ. Сама схема не так сложна в реализации, даже если устройства довольно мощные. Задача скорее в правильной реализации программной части.

Контроллеры младших серий, как правило, не имеют не только 3 ШИМ, но даже 3-х таймеров с прерываниями (на базе которых легко реализовать ШИМ). То, как будет реализована схема управления, следует рассматривать на конкретных примерах, в зависимости от архитектуры конкретного устройства.

Теоретическая база для реализации схемы управления rgb светодиодами

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

Для реализации канала ШИМ нужно знать:

  • алгоритм определения коэффициента заполнения (устанавливается пользователем);
  • отсчет времени для сигнала верхнего уровня;
  • время всего импульса.

При практической реализации для этого потребуются 2 счетчика, которые будут работать по следующему алгоритму:

  1. Запуск счетчиков, выход выставлен в «1».
  2. Прерывание счетчика №1 (время верхнего уровня), выход переключается на «0».
  3. Счетчик №1 выключается.
  4. Прерывание счетчика №2 – повтор всех операций с начала.

Получается, что схема управления rgb светодиодом, вне зависимости от того, насколько устройства мощные, должна включать в себя по 2 счетчика для канала ШИМ, то есть 6 в сумме.

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

Здесь нужно подобрать квант времени, которому будут кратны длительности импульсов на каждом канале.

T=1/(f*(2 n -1)),

n – значение разрядности ШИМ;

f – частота.

Схема может включать в себя 1 счетчик для отсчета интервала Т. Чтобы он выполнял требуемую функцию, следует задать 4 установки:

  1. Количество отсчетов верхнего уровня для 1 канала ШИМ.
  2. Количество отсчетов верхнего уровня для 2 канала ШИМ.
  3. Количество отсчетов верхнего уровня для 3 канала ШИМ.
  4. Общая длительность импульса.

Прочие операции для программного счетчика (переключение, обнуление и т.д.) совершаются по прерываниям аппаратного.

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

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

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

Во время тестирования контроллер подключался к 50 Вт на 12 В галогенным лампочкам, по одной на каждый канал. Температура МОСФЕТ транзисторов после 5 мин прогона составила чуть больше 50C. Теоретически общая нагрузка для всех трех каналов RGB не должна превышать 15 ампер.

Указанный транзистор STP36NF06L работает при низком напряжении на затворе. Вы можете использовать такие другие стандартные N-канальные полевые транзисторы, которые будут нормально работать при токах нагрузки до 5 ампер и не требовать слишком большого сигнала на входе для полного отпирания.

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

Вот один из вариантов реализации, который использует 20 светодиодов RGB типа Пиранья. Собрана лампа в коробе 25 х 50 х 1000 мм из алюминия. Позже она была приспособлена под настенную полку, чтобы осветить стол. Свет очень яркий и дает хорошее ровное освещение без какого-либо дополнительного рассеивателя.

Лучшие статьи по теме