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

Понадобилось мне управлять 3W белым светодиодом. Регулировать ток в пределах от 50мА до максимума — 800мА. Покупать специальный драйвер не хотелось, поэтому решил делать из говна и палок транзисторов и резисторов.

Управлять светодиодом будет МК, реагируя на нажатия кнопок. Питание силовой части 5-6 Вольт.

Из множества вариантов я решил выбрать линейный стабилизатор. И вот почему:
— Прост в реализации, не отнимает много ресурсов МК.

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

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

Схема нарисовалась следующая:


Алгоритм регулировки прост до безобразия:
— Настраиваем таймер на ШИМ режим. Он работает независимо от МК и через RC цепочку регулирует напряжение на затворе полевика. В регистр OCR пихаем 0.
— Запускаем АЦП в режиме непрерывного преобразования. Вход АЦП подключен к шунтирующему резистору.
— По таймеру (с небольшой частотой) корректируем ШИМ регистр таким образом, чтобы ток, протекающий через светодиод соответствовал нужному нам значению.

Программу накидал за пол-вечера:
program test;

var
 Light: byte;
 soft_timer: byte; 

const
 Light_min=1;
 Light_Max=40;

procedure TIMER; org 0x3;
begin
Dec(soft_timer);
if soft_Timer=0 then
begin
 if ADCH < Light then if OCR0A < 255 then Inc(OCR0A);
 if ADCH > Light then if OCR0A > 0 then Dec(OCR0A);
 soft_timer := 255;
end;
end;

begin

Delay_ms(1000);
//Таймер ноль должен быть настроен на PWM режим:
COM0A1_bit := 1;
WGM00_bit := 1;
WGM01_bit := 1;
TCCR0B := 1; //Поехали!
OCR0A := 0;
TOIE0_bit := 1;

Light := 10;
soft_timer := 100;

DDRB.0 := 1; //ШИМ
PORTB.3 := 1; //Кнопка "Больше"
PORTB.4 := 1; //Кнопка "Меньше"

//Простите за "волшебные числа" :)
ADMUX.ADLAR := 1;
ADMUX.MUX0 := 1;
ADCSRA := %11100111;

asm sei end;

while true do
begin

 if PinB.3 = 0 then //Кнопка "Больше"
  begin
   if Light < Light_max then Inc(Light);
   Delay_ms(50);
  end;
  
 if PinB.4 = 0 then //Кнопка "Меньше"
  begin
   if Light > Light_min then Dec(Light);
   Delay_ms(50);
  end;
end;


end.


В итоге получилось вот это:
  • 0
  • 16 мая 2011, 01:42
  • dcoder

Комментарии (23)

RSS свернуть / развернуть
Прост в реализации, не отнимает много ресурсов МК.
Ну импульсный занимает не больше. Точнее даже, достаточно поменять аналоговую часть — добавить катушку, диод и конденсатор. И выкинуть один лишний кондер. А, немного программного — поменять полярность ШИМ (если ставить P-канальный полевик).

А что за диод? Обычно вроде у трехваттников рабочий ток — 1А.
0
  • avatar
  • Vga
  • 16 мая 2011, 02:15
Импульсному надо либо быстрый ШИМ, либо большой дроссель — а мне мотать в падлу :) Или не так страшно все?

Светодиод Emitter ARPL-3W (вроде-бы, не помню точно :))
chip-nn.ru/doc/all/3029/3029.zip
0
Обычно для 30кГц используется дроссель в районе 220 мкГн. На 1А (точнее чуть больше) он вроде не сильно страшный. Минут на пять работы.
0
Хм… ну дамаю тут от него мало профита будет. А вот, если падение напруги на ключе получается большое, то делать линейный регулятор и впрямь глупость :)
0
Алсо, чем тебе не угодил вариант «iv IVT_ADDR_TIM0_OVF»?
0
  • avatar
  • Vga
  • 16 мая 2011, 02:21
У меня листок с распиновкой и табличкой прерываний для тини13 на стене висит.Адрес узнать — один раз взгляд на табличку кинуть.

Ну и писалось это только для теста, поэтому все правила написания кода шли лесом :)
0
Лучше к символьным именам привыкнуть. Даже в табличку смотреть не потребуется.
0
При движении обдуваться потоками воздуха. Значит, можно заиметь халявное воздушное охлаждение для силовых элементов.
поставь датчик температуры, не жадничай. остановишься в теплый вечер квасу попить, возвращаешься, а фонарик тю-тю
0
О, прикольно! Почти моя схема.
А я-то думал, только у мя выходной транзистор не в ключевом режиме работает))
0
Какие вы все ленивые)
Хотя, линейных драйверов СИДов хватает. AMC7135 например, многие MBI (от многоканальных 20-миллиамперных и до одноканальных на 1.4А).
P.S. Скомпилил исходник, почитал листинг, удивился. Код хотя и не содержит выносящих мозг финтов оптимизатора (за которые я их и уважаю, хехе), но вполне пряменький и не особо замусоренный. И без багов. У меня микропаскаль себя хуже вел)
0
Для велосипедного фонаря, с питанием от батарей, лучше применить SEPIC, или что-то похожее. Чтобы выходное напряжение, могло быть как больше, так и меньше напряжения питания. Это позволит использовать батареи по-максимуму.
0
У меня напряжение питания будет всегда на 1.5 — 2 Вольта больше падения на светодиоде (4В). SLA аккумулятор на 6 Вольт.

Что характерно, первая-же реализация SEPIC драйвера на AVR из тех, что я нашел, была построена на тини25. Идеальный МК для всяких драйверов, ибо:
Таймер работет на частоте 64МГц, что дает частоту ШИМ ~250кГц, что позволяет использовать не особо здоровые катушки.
0
Как таймер тиньки 25 может на 64 МГц работать?
0
А там (в тини25, 45, 85) стоит PLL, которая может подавать на таймер системную тактовую частоту, умножив, ЕМНИП, в 8 раз. Получается, что при частоте МК в 8 Мгц, таймер может работать на 64МГц.

Вообще, эта серия тинек идеально подходит для всякой силовой электроники, потому-что у них есть:
— Шустрый ШИМ
— Аппаратные инверсные выходы для ШИМ.
— Dead Timer генератор
— АЦП с предварительным усилением сигнала
— Встроенный градусник.
+2
В тини26-тини261/461/861 тоже такие плюшки есть (на счет градусника не помню).
0
Градусник там точно есть. Я помню :)
0
Dead Timer генератор
Там эта… Dead Time… А таймер живее всех живых :)
0
Вообще, эта серия тинек идеально подходит для всякой силовой электроники, потому-что у них есть:
Опа, спасибо, не знал!
А то у меня тоже умный фонарь в планах делать.
0
Милая штучка, ага. Только стоят, сцуко, негуманно. А ATtiny15L и вовсе нету там, где смотрел (промэлектроника и icdarom).
0
Да при таких ценах лучше сразу тини85 брать — там разница между ней и тини25 рублей в 20.
0
При таких ценах начинаешь с все возрастающим интересом посматривать на STM)
0
В итоге приходим к фонарю, управляемому линуксом…
0
А что. Дешево и опенсорсно. Разве что флеша пока маловато в них для линукса.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.