Введение в светодиоды

Светодиод очень чуствителен к протекающему через него току. Так, если лампочку можно просто повесить на клемы батарейки, то светодиод от такого к себе отношения сначала помигает, а потом сдохнет, источая дикую вонь. Поэтому, у каждого светодиода, помимо падения напряжения, указывается его максимально-допустимый рабочий и пиковый токи. Так, для мелких светодиодов, токи как правило равны 10 - 20 миллиампер, а падения напряжений для красных равно 2.5 вольта, а для синих, зелёных и желтых около 4х вольт.

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

Итак, для подключения светодиода с падением напряжения 3 вольта и током 20 миллиампер к источнику питания, скажем 5 вольт, последовательно в цепь необходимо воткнуть резистор. Расчет резистора в этом случае следующий:

R = (Uпит - Uпад) / Iдиода, что для нашего светодиода составит

R = (5 - 3)/0.020 = 100Ом.

При этом необходимо учитывать, что лишние 2 вольта осядут на резисторе в виде тепла. Для мелких светодиодов это может быть не принципиально, но для светодиодов с потреблением порядка 100 - 700мА это уже серьёзно. Для расчета выделяемой резистором в воздух мощности(в виде тепла) существует формула:

P = I*U

т.е. мощность равна силе тока в цепи * напряжение падения, что в нашем случае составит 0.02 * 2 = 0.04 ватта. Ну тут любая SMD-шка справится)

Вторая формула мощности, которую можно вывести через закон Ома -

U = I*R  -> P = I*(I*R)

P = I*I*R

Мощность равна сила тока в квадрате, умноженная на сопротивление. Т.е. для нашего случая 0.02А*0.02А*100Ом = 0.04 ватта.

В случае, когда нам необходимо последовательно запитать несколько светодиодов в цепи - например, 2 светодиода с падением 2.4 вольта от 5 вольт, диоды подключают последовательно, а гасящий резистор в этом случае должен погасить только (5В-2*2.4В) = 0.2 вольта, соответственно он будет равен 0.2/0.020 = 10Ом. Мощность его при этом составит 10*0.02*0.02 = 0.004 ватта.

Другое дело, когда в бой идут светодиоды повышеной яркости, с большим потребляемым током - например, рассматриваемый далее RGB светодиод позволяет мучать себя током в 350мА, т.е. 0.35А. Для его красной составляющей с падением напряжения 2.6 вольта резистор будет уже солидным - (5 - 2.6)/0.35 = 6.85Ом. Но омы тут не главное - мощность, рассеиваемая данным резистором P = 0.35*0.35*6.85 = 0.839, что почти ватт. Резистор при этом будет греться как утюг (у меня термопара показывала 79 - 80 градусов), поэтому в моей схеме ниже я применяю двухватные резисторы. И всё бы ничего, но расстояние между выводами такого резистора почти 20 миллиметров, и сам он размером в две микросхемы ATTiny13 в дипе)))

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

 

Введение в ШИМ

Шим - широтно-импульсная модуляция. Описание ШИМа даже википедия рекомендует почитать у DI HALTa, на easyelectronics.ru, поэтому много распинаться по теории не буду, а на практике покажу, как это сделано у меня на ассемблере.

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

Для светодиода ШИМ является очень удобным способом управления его яркостью. Так, если для управления яркостью лампочки можно увеличивать или уменьшать напряжение в достаточно большом диапазоне, то для светодиода яркость регулируется его постоянным включением/выключением. Например, при включении/выключении светодиода много раз в секунду, он будет гореть в половину своей яркости. Следует также учесть, что длительность сигнала/длительность отсутствия сигнала, не являются постоянными величинами - например мы можем 2мс держать светодиод включенным, 1 мс - выключенным. В таком случае яркость его составит 2 / (2 + 1) от максимальной.

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

ATtiny13

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

Три ноги микросхемы объявлены как выходы; на них будет генерироваться сигнал.

Три переменных - brightR, brightG, brightB отвечают за яркость своего канала, R G и B соответственно. Их значение определяет, сколько тиков счетчика светодиод будет включен, а сколько - выключен.

/***********************************************************/
/*           Таймер. По таймеру лишь формируется ШИМ сигнал для RGB канала            */
/***********************************************************/
event_timer:
   
    /*ШИМ для каждого канала в соответсвии с регистрами яркости*/
    push    tmp1
    in        tmp1,    SREG
    push    tmp1
    push    tmp2
    in        tmp1,    PORTB       
    ori        tmp1,    0b00011100            ;Выставляем биты вывода

    /*Проверяем, попадает-ли текущее значение счетчика в интервал 0..Яркость канала
    Если нет - выключаем порт*/
    mov        tmp2,    current_pwm_value
    cp        brightR,    tmp2
    brpl    ev_t_skip_red
    andi    tmp1,    0b11111011
ev_t_skip_red:
    cp        brightG,    tmp2
    brpl    ev_t_skip_green
    andi    tmp1,    0b11110111
ev_t_skip_green:
    cp        brightB,    tmp2
    brpl    ev_t_skip_blue
    andi    tmp1,    0b11101111
ev_t_skip_blue:

    /*Генерируем сигнал*/
    out        PORTB,    tmp1

    /*Увеличиваем счетчик pwm*/
    inc        tmp2
    cpi        tmp2, c_max_gradations + 1
    brne    ev_t_exit
    clr        tmp2
ev_t_exit:
    mov        current_pwm_value, tmp2
    pop        tmp2
    pop        tmp1
    out        SREG,    tmp1
    pop        tmp1
    reti

 

Поясню ещё раз некоторые моменты алгоритма:

По переполнению таймера на единичку увеличивается счетчик current_pwm_value

  • Сравниваем яркость красного канала brightR с текущим значением счетчика current_pwm_value
  • Если счетчик больше яркости красного - гасим красный диод
  • Если счетчик меньше либо равен яркости красного - включаем красный диод

Для зеленого и синего канала повторяем соответствующую процедуру.

Счетчик current_pwm_value принимает значения от 0 до c_max_gradations; У меня в проекте c_max_gradations = 128, чего вполне достаточно для плавного изменения цветов. Максимальное значение данной константы - 254. Соответственно, яркости каналов также должны лежать в пределах от 0 до c_max_gradations.

Модуль индикации и управления

Модуль индикации и управления - собственно светодиод с обвесом в виде транзисторов и резисторов, а модуль управления - кнопка и резистор для переключения программы))

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

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

Транзисторы bc817-40 и резисторы R1 - R3(3кОм) взяты в корпусах для поверхностного монтажа, чтобы не занимали лишнего места. Большие резисторы и микросхема в дип-корпусе распологаются на стороне компонентов.

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

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

 

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

Файлы проекта

Печатная плата: Upravlenie_svetodiodom.lay

Проект для AVR Studio: TinyLed3.zip

Лампа стоит на столе и светится в ожидании корпуса:)

Внутри крепление выглядит следующим образом:

Бесплатный конструктор сайтов - uCoz