Контроллер RGB светодиода

Управление светодиодной линейкой

Лампа настроения

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

RGB контроллер и 10Вт светодиод

RGB контроллер и 10Вт светодиод

В этой статье расскажу вам о том, как подключить трёхцветный светодиод или светодиодную линейку к микроконтроллеру и плавно изменять яркость её свечения c помощью ШИМа.

Всё это сделано на моём любимом PIC16F628A, но для этой задачи потребовалась почти все его ресурсы. Задействованы все 3 таймера. В одном крутится ШИМ для светодиодов, ещё один отвечать за спец эффекты, а последний отдан под псевдослучайные числа. В качестве элементов управления выступают 3-х и 2-х позиционные переключатели. К получившемуся контролеру можно подключать светодиоды и светодиодные линейки с общим анодом, током до 10А и напряжением до 35В.

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

Перейдём к схеме.

Схема

Схема

Схема

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

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

В качестве ключей применены MOSFET’ы IRL2203N (замена IRL3103, IRL3705N) с управлением логическим уровнем, что позволяет их затворы напрямую подключить к выходам микроконтроллера. Эти ключи позволят управлять диодами с токами до 10А на канал.

Плата

Плата

Схему удалось разместить на куске одностороннего стеклотекстолита размером 50х32 мм всего с одной перемычкой. Использованные детали: микроконтроллер PIC16F628A в DIP корпусе с панелькой, кварц на 20МГц с двумя конденсаторами 0805 по 22пкФ, 2 микропереключателя на 3 (предусмотрел место на вырост – на 4) и на 2 переключателя. 3 ключа IRL2203N (замена IRL3103, IRL3705N) в корпусе TO-220, 3 двойных клеммника 340-021-12 или два тройных 340-031-12. Линейный стабилизатор на 5В — L78L05ABUTR в корпусе SOT-87, чип тантал конденсатор типоразмера A или B на 10мкФ 16В. Два конденсатора 0805 по 0,1мкФ, 7 резисторов 0805 4,7кОм, 3 резистора 0805 10кОм и 3 0805 680Ом. Дорожки возле ключей и клеммников следует усилить, что бы они не грелись во время прохождения по ним больших токов.

Плата контроллера

Плата контроллера

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

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

Исходный код

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

void interrupt isr(void)

Главную часть составляет ШИМ светодиодов, его разместил в третьем таймере (TMR2):

if(TMR2IF) 	//	Прерывание по таймеру TRM2
{
	I++;	//	Увеличиваем счётчик на 1
	if(I==0) 	//	Сброс всех диодов, включение
	{
		SetBit(PORTB,5);
		SetBit(PORTB,6);
		SetBit(PORTB,7);
		LED_R_=LED_R;
		LED_B_=LED_B;
		LED_G_=LED_G;
	}
	if(I==LED_R_&& LED_R_!=255) 	//	Гашение красного
	{
		ClrBit(PORTB,5);
	}
	if(I==LED_G_ && LED_G_!=255) 	//	Гашение зелёного
	{
		ClrBit(PORTB,6);
	}
	if(I==LED_B_ && LED_B_!=255) 	//	Гашение синего
	{
		ClrBit(PORTB,7);
	}
	TMR2=240; 	//	Установка таймера на 240 позицию из 255
	TMR2IF=0; 	//	Сброс флага прерывания таймера
}

Переменные LED_R, LED_G, LED_B отвечают за насыщенность каждого из цветов, т.е. для изменения цвета и яркости диода достаточно изменить значения этих переменных. Частота ШИМ задаётся как настройками таймера TRM2

T2CON =0b00000100;	//	коэффициент предделителя и выходного делителя 1 

и значением, с которого он будет начинать тикать.

TRM2=240;

Счётчик I постоянно увеличивается на 1, когда он равен 0 – то происходит «сброс», все светодиоды зажигаются и с переменных LED_R, LED_G, LED_B списываются установленные значения в переменные LED_R_, LED_G_, LED_B_, с которыми уже и работает ШИМ. Работа не напрямую с переменными задающими насыщенность цветов позволяет изменять цвет трёхцветного светодиода разом, а не постепенно скачками во время работы. При каждом тике счётчика I происходит сравнение его значения с переменными LED_*_, если значения совпали – то соответствующий канал гаснет. Счётчик тикает, но не бесконечно, в примере ему выделено 256 шагов (1 байт), что соответствует количеству градаций каждого из цветов, при переполнение он автоматически обнуляется и начинается всё сначала.

Градацию можно изменить: уменьшить или увеличить, что повлияет на частоту ШИМ и максимальное количество цветов. Увеличивать количество цветов, смысла особого нет, и так их уже 16777216, а вот уменьшить, и тем самым поднять частоту ШИМ, можно. Но не стоит увлекаться, при очень малом разнообразии плавные переливания потеряют свою плавность, если, конечно, они вам нужны.

Специальные эффекты прописались в первом таймере (TRM0), вот один из них:

if(LED_i==0)
{
	t_R=TMR1L;
	t_G=TMR1H;
	t_B=TMR1L+TMR1H;
}
if(LED_i < 128)
{
	LED_R=t_R/128*LED_i;
	LED_G=t_G/128*LED_i;
	LED_B=t_B/128*LED_i;
}
else
{
	LED_R=t_R/128*(255-LED_i);
	LED_G=t_G/128*(255-LED_i);
	LED_B=t_B/128*(255-LED_i);
}

У эффектов есть свой 1 байтный счётчик LED_i, который, так же как и I, ходит по кругу. В самом начале происходит начальная установка, а именно псевдослучайный выбор цвета. Далее пока счётчик меньше 128, диод разгорается, а далее затухает.

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

Как вы заметили из приведённого куска кода, самый большой таймер, TRM1 (2 байта), был отдан под random. Он шпарит на максимуме и из его двух регистров, и их комбинации, получаются псевдослучайные числа для всёх трёх каналов. Что бы цвета каждый раз были разные первый и третий таймер начинают работать не с нуля, а со смещением. Так же отклонения, в данном случае благоприятные, вносят температурные искажения и то, что мы живём не в идеальном мире.

Управление

Переключатель, подключенный к порту A, отвечает за скорость эффектов (4 режима). Второй переключатель (PORTB) позволяет выбрать один из 6 режимов работы:

Эффект
Переключатель
S3 S4 S5
0. Нет off off off
1. Плавное переливание одного цвета on off off
2. Плавное переливание off on off
3. Плавное разгорание и затухание on on off
4. Стробоскоп off off on
5. Переключение цветов on off on

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

И на последок несколько фото и видео работы контроллера.

10Вт RGB светодиод (0,4% мощности)

10Вт RGB светодиод (0,4% мощности)

Кусок светодиодной линейки

Кусок светодиодной линейки

10Вт RGB светодиод

10Вт RGB светодиод

Лампа настроения (10Вт RGB светодиод)

Лампа настроения (10Вт RGB светодиод)

Лампа настроения сделана из 10Вт светодиода, представленного в статье, и небольшой белой матовой вазы из икеи.

RGB контроллер с 10Вт светодиодом

Лампа настроения на базе RGB контроллера

Скачать печатку, прошивку и исходник

Исходник добавлен 11.02.2012

Статья обновлена 3.03.2013.

81 комментарий »

Alex_EXE | 09.08.2011 | Светотехника | 28 966 просмотров

81 комментарий на « Контроллер RGB светодиода»

  1. Eler пишет 11.04.2016 в 20:36 #

    Большое человеческое спасибо, автору, за созданный проект и исходник!!!

Комментарии RSS

Оставьте отзыв