Я купил мощный светодиод (5 ватт, 330 люмен), возник вопрос — как его включить? Конечно, к нему прилагался какой-то китайский драйвер, но захотелось пощупать процесс самому и понять, как это работает.

Делаем новый проект в IAR. Будем разрабатывать с применением библиотеки Itacone, но в конце поста я продублирую весь код в терминах StdPeriph.

Для начала, сформулируем цель: нужно питать светодиод неким током. Причём гораздо важнее именно стабильность тока, чем стабильность падения напряжения на светодиоде. Однако для начала попробуем просто подавать некую мощность (меньше максимальной) в светодиод, а чтобы не спалить его — ограничим эту мощность значением 60% от номинальной. Такой подход, конечно неправомерен для готового изделия, однако хорош для опытов — особенно если увеличивать подаваемую мощность плавно и с контролем тока.

Напряжение на светодиоде — около 7 вольт. Это меньше, чем имеющиеся у меня 12 вольт от мощного аккумулятора — поэтому сделаем понижающий преобразователь.

По сути, всё просто: затвор полевого транзистора управляется ножкой PB12, транзистор коммутирует цепь «земли», заряжая конденсатор, а чтобы ограничить ток заряда — последовательно стоит дроссель. Параллельно конденсатору установлен светодиод.

#include <itacone.h>

PB12.mode(OUT).low();
while(1) PB12.high().delay(10).low().delay(3000);

Разработка с применением itacone — это просто сказка :)

Значения задержек взяты просто с потолка — на самом деле, я точно знаю что при скважности 1/300 в светодиод не пройдёт хоть сколько-нибудь значительная мощность. Теперь можно медленно повышать скважность, каждый раз следя за током светодиода. В моём случае для светодиода 7В*700мА оказалось достаточно задержек 200/3000 при частоте работы МК 24МГц.