Как стать автором
Обновить

TinyFL — драйвер фонарика на микроконтроллере

Время на прочтение18 мин
Количество просмотров67K
Всего голосов 90: ↑86 и ↓4+82
Комментарии110

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

Не страшно вам кататься с литиевым аккумулятором на затылке? А то даже у разных самсунгов с теслами случаются крайне неприятные внезапности.
А Вам не страшно ходить с литиевым аккумулятором в кармане (если Вы конечно пользуетесь мобильным телефоном)?
На самом деле, 18650 очень сложно заставить взорваться, только если разве что нагреть градусов до 200. И то, если я не ошибаюсь, то взрыва не будет, так как у них есть защитный клапан.
У креосана посмотрите как они всячески издевались над 18650 банкой с целью именно пиротехнических эффектов. А потом подумайте а не будет-ли уже без разницы на аккумулятор если такие внешние воздействия придутся на голову на которой закреплен этот аккумулятор.
креосан скопрометирован уже. так что он мог и динамит заложить вместо родного содержимого
Но в конкретно этом случае легко находятся видушки и от других авторов. И по ним видно, что взорвать 18650 прикрепленный к голове легким подзатыльником совсем не выйдет.
Опять разочарование…
Я уж было надеялся что уж на хабре-то всякую банальщину выкладывать не будут… ыыыхх…
По пунктам
1) КПД вашей защиты от переполюсовки 60%!
2) при разряде батареи до 3.2 вольт фонарик на максимуме будет светить как мунлайт
3) сверхперегруженный алгоритм на одну кнопку
4) нет возможности контролировать/стабилизировать ток светодиода
5) естественно нет никакой возможности повышать напряжение батареи до нужного светику.

Я давно пытаюсь сам свой драйвер собрать но делать нечто подобное не хочется абсолютно — нужно две кнопки вкл-выкл и режимы(как в фотоаппарате полунажатие и полное) или как вариант — несколько программируемых режимов(2-3 не более) и возможность входа в меню программирования для изменения этих режимов. Естественно запоминание настроек в еепроме.
По схемотехнике — ну вопервых защита переполюсовки — давным давно люди используют схему идеальный диод из полевика и резистора. Сразу кпд+. Во вторых без индуктивности и низкоомного шунта невозможно поддерживать стабильную яркость свечения. Проблема в том чтоб уместить в компактных размерах синхронный флайбек или инвертирующий преобразователь с полевиками вместо диодов т.к. падение 0.4 вольта из 3-х полезных на диоде — непозволительная роскошь.
Дальше микроконтроллер… ну тини 13 конечно неплох но 85-тая имеет pll и 64 мегагерца на такт таймеру — так задрало что на средних и низких мощностях все фонарики стробят и вращающиеся детали могут останавливаться с разными последствиями для рук…
В общем очередная моргалка… а жаль… таки прийдется самому доделывать толковый драйвер для светодиодного фонарика.
У него диодом защищена цифровая часть, а она ест ерунду. Тем более падение на диоде всего 0.12 В при 10 мА.
Постараюсь аргументированно ответить по всем Вашим пунктам.
1. Влияние защиты от переполюсовки на КПД в районе погрешности — через защитный диод питается только МК (который потребляет 1-2 мА), основной ток через него не идет. Полевик я пробовал ставить, но с ним были проблемы — МК перезагружался при подключении нагрузки из-за просадок напряжения, поскольку ток через него идет в оба направления, когда он открыт. С диодом такой проблемы нет.
2. Это не совсем так. Светить конечно будет гораздо слабее, но все еще достаточно ярко для того, чтобы им можно было пользоваться. Эту проблему решил бы DC-DC преобразователь, но тогда нужно и индуктивность ставить, и частоту ШИМ повышать, и другой МК в общем-то ставить (например ту же 85-ю, тут я с вами соглашусь). Но тогда драйвер будет гораздо сложнее, а я ставил перед собой цель создать простое устройство.
3. Управление одной кнопкой не вызывает никаких проблем — короткое нажатие ВКЛ/ВЫКЛ, долгое нажатие — изменение яркости. Но тут дело предпочтений и привычек, скорее.
4. Это усложнение конструкции и прошивки, а толку будет мало.
5. См. пункт 2.

>нужно две кнопки вкл-выкл
Это нужно делать новую механику, а так да — две кнопки будут удобнее в управлении.

>несколько программируемых режимов(2-3 не более)
Мне больше нравится плавная регулировка. Режимы имеет смысл делать в фонарях с кнопкой по питанию.

Кстати, эффект стробоскопа не наблюдается совсем, поскольку частота ШИМ более 4 КГц.
вы видимо никогда не лазали с такими фонариками во всякие моторы с вентиляторами… Поверьте… один раз высадиться хватит чтоб навсегда закрыть для себя тему моргающих светиков — нет паралельно светику кондера — досвидос :)
ДА именно о DC-DC с индуктивностью я и мечтаю… только минимальная топология, мощный выход до 3 ампер и малый размер дросселя. И все это усугубляется работой не только на понижение но и на повышение.
По поводу плавности… ну моё имхо конечно но я пробовал — неудобно. два режима основных и третий — ночник — иногда — более чем достаточно — главное чтоб была возможность оперативно поменять этот средний режим. Впрочем с моими глазами и удивляться нечего — слепой как крот и потому яркость сильно люблю. Кстати по поводу зарядки — в паре моих фонариков есть зарядник — не использую т.к. мне проще зарядить 8 акумов в литокалу и просто жменей положить в карман и по мере разряда — просто перекладывать их в другой карман а как кончаться начинают — снова зарядить в литокалу. ненавижу эти пучки проводов с микроюсб — куда не плюнь везде надо втыкать эти хвосты. Я как-то вот всей душой прикипел к сменным запасным акб. Заряжаются когда не нужны и не привязан хвостом на 2 часа к розетке.
В вентиляторы лазать с фонарями не приходилось, увы. Сейчас специально посветил на все доступные вентиляторы — нигде не наблюдаю эффекта остановки или пропадания лопастей.

Мне кстати тоже хороший драйвер с DC-DC нужен, правда только понижающий. Быть может, потом займусь этим :)

>Кстати по поводу зарядки — в паре моих фонариков есть зарядник — не использую т.к. мне проще зарядить 8 акумов в литокалу
В походе будет проблема с розетками, а повербанки и солнечные батареи как правило имеют выход 5 вольт. Брать с собой большое количество аккумов для фонаря тоже не хочется, вес все-таки.
мощный выход до 3 ампер и малый размер дросселя
Одно другому противоречит, т.к. выходной ток напрямую зависит от размера дросселя.
Одно другому противоречит, т.к. выходной ток напрямую зависит от размера дросселя.
При фиксированной частоте — да. Но частоту можно поднять. В теории, как минимум)
Цвет фломастера мне понравился, описано подробно: мотив, процес и результат, пишите дальше в том же стиле.
Опять разочарование
Мне кажется вы несколько сгустили краски.

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


А вот вы написали хорошее тех.задание на дальнейшее развитие. Может, займетесь?

Дык уже год полтора пытаюсь… то дросель большой то мерцания то транзюки греются… все никак не придумаю компактной и кпдшной топологии… Нету такого удобного мне проца с нормальным поверстейджем. армы по питанию не проходят, есть какие-то со встроенными драйверами фетов но тоже питание… хз в общем… пока… так то под 85 тиню полуготовый проектик есть со стабилизацией тока режимами под двойную кнопку и прочим но выход просто шим вч… думал по топологии инвертирующего преобразователя а светик тупо впаралель катушке но тогда кпд не особо — дросель на большой пиковый ток нужен — греется изза частоты чтоб маленьким был
А какую схему ДЦ-ДЦ преобразователя используете?
Что-то вроде такого?
image

И ещё не совсем понял, что не так с подключением диода через mosfet — вроде бы так примерно и обеспечивают более-менее стабильный ток через полезную нагрузку (пока напряжения питания хватает, чтобы подтягивая затвор mosfet-а к нему, держать его открытым)?

Ещё вариант (прячу, чтоб не раздувать комменты)
Ещё попадались готовые решения от китайцев на микросборке AMC7135 (буквы м.б. другими: Q, L и т.п., цифры — те же) вместе с PIC-контроллерами. Сборка стабилизирует ток всего на 350 мА, зато в диапазоне входных напряжений от 4.2 (4.5?) до 3.3 В, можно ставить в параллель сколько нужно, хоть 10 штук (гуглить на али и bandgood по словосочетанию «convoy flashlight driver»)/

Это линейные стабилизаторы, считается, что у них ниже кпд.

От переразряда обычно спасают 18650 с защитой, но они на пару миллиметров длинней и в некоторые карманы не вставляются.
Есть еще вариант — можно поставить плату зарядки c защитой (те же модули TP4056 бывают в таком исполнении).
Если аккумулятор длиннее, чем положенные 65мм, то он всегда с защитой, или хитрые китайцы могут выпускать их в удлинённых корпусах и без защиты? А главное, как это определить?
А главное, как это определить?

Плюсовой контакт обычно выпирает и сбоку через оболочку можно нащупать металлическую ленту.
Заголовок спойлера
image
Какой ужас. Зайдите на forum.fonarevka.ru и посмотрите как делаются правильные драйвера. Поймете что у Вас не так.

Писать для аттини13 моветон.
Может быть, Вы более конкретно напишете, что Вам не понравилось и чем не угодила Attiny13?
Когда писал коммент, сбили с мысли, писать на си для аттини моветон)
Почему?
Какой ужастный сайт/форум с оформлением в стиле девяностых.
Вы бы здесь озвучили, что не так с этим драйвером относительно вашего гуру сайта, а не издевались над теми кто перейдет по вашей ссылке

Dc-dc преобразователя не хватает. Но если работает и так, и пульсации не видно — к черту условности ;)
ЗЫ: Не понимаю я аккумулятора в фонарике для похода. Мне всегда хватало запасного комплекта батарей. И манера китайцев управлять всеми режимами одной кнопкой выбешивает. А если эта кнопка способна самонажаться в кармане — совсем ъуъ.

Чем вам оформление не понравилось? Или нужны свистелки-перделки которые кладут среднестатистический компьютер? Ну да ладно.
1. Огромные габариты как для фонарного драйвера.
2. Ужасное управление яркостью. Через светодиод и остальные цепи при полностью заряженном аккумуляторе пульсирует ток больше 6А (а чем больше ток, тем ниже его КПД, в таком режиме эффективность XM-L2 около 60 Лм/Вт, в номинальном режиме больше 100). Можно было хотя бы линейный стабилизатор тока поставить, типа AMC7135, и его уже стробить с помощью МК.
3. П-канальный ключ, серьезно? Что мешало поставить в нижнее плечо Н-канальный?
4. Отсутствие стабилизации яркости, с понижением напряжения на батарее, яркость будет падать до мунлайта.
5. Какой смысл в подсветке кнопки при включенном фонаре?
6. Ну и писать на Си для аттини13 это все равно что сажать картошку роторным экскаватором.
5. Какой смысл в подсветке кнопки при включенном фонаре?

У этих налобников обычно светодиод на плате с драйвером подсвечивает красную полоску на затылке, который выполняется функцию дополнительного габарита для тех, кто сзади.
Чем вам оформление не понравилось? Или нужны свистелки-перделки которые кладут среднестатистический компьютер?
Например, тем, что открыв ссылку, я обнаружил на появившемся экране двадцать пять (!!!!) огромных анимированных баннеров и ноль полезной информации. Когда глаз чуть-чуть пришел в норму от баннеров, в левом верхнем углу нашлись мааааленькие кнопки, обещающие контент. Но проверять я уже не стал, я на такое количество рекламы не подписывался.


1. Огромные габариты как для фонарного драйвера.
Автор написал же, что мог сделать меньше, но решил сделать такие же габариты, как были у оригинала.

3. П-канальный ключ, серьезно? Что мешало поставить в нижнее плечо Н-канальный?
А в чем принципиальная проблема с p-канальным ключом? Вы что, мосфеторасист?
Если войти в аккаунт, то вся эта порнография прячется.
Заголовок спойлера
Да и сидеть в интернетах в 2к19 без адблока как-то странно.

Автор написал же, что мог сделать меньше, но решил сделать такие же габариты, как были у оригинала.
В тех же габаритах можно было применить человеческую схемотехнику.

А в чем принципиальная проблема с p-канальным ключом
Зачастую п-канальные ключи имеют большее сопротивление канала при той же емкости затвора.
Зачастую п-канальные ключи имеют большее сопротивление канала при той же емкости затвора.
Во-первых, не «зачастую», а «всегда», потому что подвижность дырок в кремнии всегда ниже подвижности электронов. Во-вторых, это не важно. Важно, то, удовлетворяет ли решение условию задачи.

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

Да и сидеть в интернетах в 2к19 без адблока как-то странно
Это если вам IT-отдел и служба безопасности разрешают такое ставить на рабочий компьютер.

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

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

А служба безопасности разрешает сидеть в интернетах?
А служба безопасности разрешает сидеть в интернетах?
На хабре — разрешает.

Ага, и костыль в виде ограничения тока через фет тоже условие задачи.
А максимальный ток типом транзистора ограничен? У меня есть подозрение, что все же не им. В огромном количестве задач p-канальные силовые ключи используются, и все довольны. Даже специализированные микросхемы силовых ключей с драйверами и защитой существуют на p-канальных ключах (например TPS2291xx).
Это если вам IT-отдел и служба безопасности разрешают такое ставить на рабочий компьютер.

Аддон для браузера нельзя поставить?
Можно название конторы в студию чтобы туда случайно не устроится?
У меня ни одного баннера вообще, только ползущий внизу каталог ссылок который я тут же прибил… не представляю как вообще жить без адблока.
А по теме — много кто наверное хотел делать свой такой проект и я не исключение. Стабилизацию яркости надо делать обязательно! И учитывать просадку батарейки и температуру диода.

Спасибо за конструктивную критику (наконец). Отвечу по пунктам.


  1. Габариты этого драйвера в 5 раз меньше оригинального. Сделать меньше реально, но тогда во-первых, драйвер не получится закрепить на родные посадочные места, а во-вторых, будет гораздо сложнее сделать плату ЛУТом и без металлизации отверстий.
  2. Максимальный ток, который идет через светодиод — 1.5 А, и это при полностью открытом транзисторе. Откуда Вы взяли цифру в 6 ампер? Вы предлагаете поставить линейный стабилизатор в импульсный драйвер? Про КПД тогда можно будет забыть.
  3. N-канальный полевик конечно имеет меньшее сопротивление, но его нельзя было применить в этой схеме, поскольку к светодиоду идет всего три провода. Тут можно либо управлять светодиодом по минусу (n-канальный) и иметь общий плюс, на который будет замыкаться кнопка, либо управлять светодиодом по плюсу (p-канальный) с общим с кнопкой минусом. Первый вариант невозможен из-за особенностей МК, из режима power-down его может вывести только прерывание по низкому уровню, следовательно кнопка должна замыкаться на землю.
  4. Отсутствие стабилизации яркости по мере разряда батареи мне никак не мешает. Яркость всегда можно подстроить достаточно точно.
  5. Подсвечивается не кнопка, а сам корпус драйвера, который расположен сзади. Я писал в статье, зачем мне это нужно.
  6. Тут я с Вами соглашусь, для контроллера с одним килобайтом памяти ассемблер больше подходит. Но я его не знаю, к сожалению.
Про КПД тогда можно будет забыть.

Вообще, в текущей реализации про КПД можно забыть. Где я взял 6А? Посмотрите на ВАХ светодиода, в каком месте она пересечется с нагрузочной характеристикой источника питания. Если у вас ток в импульсе (а как вы измеряли?) не поднимается выше 1.5 А, значит все напряжение проседает на проводах, ведущих к драйверу. И в этом случае КПД будет хуже чем у линейного драйвера.

Да, так и есть — ток ограничивает сопротивление проводов до диода (там около 25 см), контактов держателя батареи, ну и сама батарея имеет внутренее сопротивление. Если поставить туда линейный драйвер, КПД будет намного хуже.
Как измерял? При полностью открытом ключе, амперметром.

Вы действительно не понимаете значение термина КПД? Какая разница где будет рассеиваться энергия, на стабилизатора или проводах, ведущих к нему?

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

Понижаем сопротивление линий питания и профит!
Честно говоря, я даже представить не могу из чего сделаны провода если на них так сильно падает напряжение. У нормальных фонарей сопротивление цепей питания считанные миллиомы.
А устранив потери и поставив стабилизатор тока, будет получена стабилизация в диапазоне питания от 4.2 В до 3.5 В ( 3.3 В падение на светодиоде и 180 мВ падение на стабилизаторе). так же, улучшится режим работы светодиода, что благоприятно повлияет на его КПД.

Там этот провод от драйвера к фонарю достаточно длинный (25-30 см, скручен в спираль), и при этом достаточно тонкий. Можно было бы вместо него поставить что-нибудь потолще, но это будет очень колхозно.
Если решить эту проблему, тогда конечно уже придется ограничивать ток на драйвере. Но я бы все равно не стал ставить линейный стабилизатор, а сделал бы повышающий/понижающий импульсный преобразователь, что для КПД будет лучше. Но это уже другая история :)

Импульсный стабилизатор это весьма непростая тема. Рекомендую почитать эту тему forum.fonarevka.ru/showthread.php?t=15554
только нужно или включить адблок или войти :)
3. Можно поставить инвертор.

Как вариант, но это усложнит схему.

фонарёвка вообще-то — как бы самое тру-место по теме
НЛО прилетело и опубликовало эту надпись здесь
Спасибо, попробую.
А что, перекись — обычная аптечная 5%? Не знал, что ее хватает! Гидроперит в таблетках сильнее будет, конечно.
А еще добавить ЭДТА (Трилон-Б). Он тоже хорошо способствует реакции, подхватывая все, что пытается выпасть в осадок.
Снимать его механически это зло
Напротив, если на плате есть отверстия, одновременно со снятием тонера наждачкой обработаются и их края, достаточно удобно.
Это позволит получить более концентрированный раствор и сильно уменьшить время травления.

… который становится склонен к саморазгону реакции при повышении температуры. Десять раз нормально, на 11 температура в комнате чуть больше, и вот ваш стол уже заливает горячей пеной.
www.instagram.com/p/eFSzapMUz4
Ага. Я даже его комментировал
Подскажите пожалуйста непрофессионалу, сделал небольшой прототип из модулей для ардуино и самой ардуинки (nano), теперь решил развести плату и заказать ее изготовление для пробы.
Идея была купить эти же самые модули, например Arduino Pro Mini (Atmega 328P) + модуль для Micro SD карты, и распаять эти компоненты на новую плату.
Так вот как определить номенклатуру компонентов, например кварц на вот этой схеме Arduino, или холдер для MicroSD карты?
Заголовок спойлера


Вам нужно определить номенклатуру для футпринтов?
Я бы на Вашем месте заказал бы эти компоненты по отдельности, желательно в тех магазинах, где предоставляется спецификация на продукт — тогда с поиском футпринтов проблем не будет. К тому же отпаять Атмегу не так просто — нужна паяльная станция с феном.


Если уж очень хочется распаять ардуинку на запчасти:


  • Футпринт кварца похож на 3225 — например.
  • Холдер microSD похож на вот этот. Где-то у меня вроде даже футпринт под него был самодельный.
Спасибо, вроде похожи, буду рисовать футпринты сам.
Фен есть, попробую перепаять.
К тому же отпаять Атмегу не так просто — нужна паяльная станция с феном.
Можно рискнуть с лезвием бритвы если место позволяет. Оно делается из нержавейки и не смачивается припоем, так что можно прогреть одну сторону, проталкивая лезвие между ножками и платой. Хотя, конечно, есть риск погнуть или даже отломать ножки. Я так пытался выпаять STM32L151 в 64-ногом корпусе, по результатам даже статью сюда написал. Если вкратце — вот там ножки слишком дохлые для таких экспериментов. А на Мегах риск намного меньше. Хотя феном, конечно, лучше.
сейчас простой фен на али стоит от 1300руб.
Есть риск поплавить соседнюю пластмассу или сдуть мелочевку.
Я ж не говорю что фен — зло, не пользуйтесь им. Я предложил альтернативный вариант, вдруг кому пригодится.
Если не ставить слишком тонкую насадку и не выкручивать сильный поток воздуха — ничего не сдувается.
не всё так плохо :)
в эту цену входит регулировка температуы (с возможностью калибровки), регулировка силы потока и разные насадки.
Можно рискнуть с лезвием бритвы если место позволяет.

Наконец-то представилась возможность проверить — работает на ура! Спасибо за этот лайфхак.

Делитель я рассчитывал при помощи вот этого калькулятора .

Как Вы там, что-то рассчитывали, методом научного тыка? :)

Пользуясь случаем, зацените калькулятор, который сделал для одного известного обзорщика. Он в принципе затачивался для различных DC-DC преобразователей. Но можно спокойно и тут посчитать, просто в Uout вводится максимальное напряжение на батарее, в Ufb максимальное напряжение на АЦП. Т.е. к примеру возьмем батарею 4,25В, а на АЦП 1В. Можно в расширенных выбрать желаемые ряды резисторов и диапазон номиналов. В итоге получается такая табличка.

Как Вы там, что-то рассчитывали, методом научного тыка? :)

Ну почти — я вбил напряжение источника (4.5 В — с гарантированным запасом), открыл таблицу доступных в магазине поблизости номиналов и по ним подбирал такие, при которых бы выходное напряжение было бы максимально близко к 1 В, а сопротивление было бы как можно большим.
За калькулятор спасибо, с ним это делать конечно же намного удобнее — буду теперь им пользоваться :)
Кстати, в статью попала не та ссылка, я пользовался этим калькулятором.


Выглядит это примерно так
На максимальном режиме, «турбо» — потребляет около 1.5 А, в таком режиме проработает около полутора часов. Светодиод на таких токах начинает сильно нагреваться, поэтому данный режим не предназначен для длительной работы.

Рекомендую сделать функцию автоматического плавного снижения яркости по времени. Без этого сжёг один светодиод, случайно оставив его в «турбо» режиме.

Хорошая мысль, попробую это реализовать.

смотрю одна нога свободна — можно 1варе термометр воткнуть)

Реализация 1-wire не влезет в прошивку, а вот терморезистор можно поставить.

Дроссель поставьте в цепь светодиода для ограничения скорости нарастания тока, иначе светодиод достаточно быстро деградирует от больших токов.
Не боитесь пробить транзистор индуктивным выбросом?
Интересная штука, может и пригодится, только надо будет поискать помощнее, у меня 10 Вт диод, ему 2А маловато.
Но как ее применить в описанном в статье фонарике, где автор хочет регулировать яркость?
Поискать аналогичную штуку, но с регулировкой яркости?
Тема мощных светодиодов востребована, должны существовать готовые драйвера.

Это регулируемый преобразователь — можно поидее с микроконтроллера им управлять через Vfeedback (ШИМ + rc фильтр), тогда будет регулировка яркости.

Именно у PAM2803 опорное напряжение встроенное и не выведено наружу. То есть можно, конечно, поставить цифровой потенциометр, но лучше действительно поискать готовое решение с человеческим управлением.

В конкретном случае дроссель не актуален — даже когда транзистор полностью открыт, ток будет в районе полутора ампер.

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

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

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

Все эти программные счетчики в основном цикле перед измерением напряжения — тоже 100% цыганщина — если зажать кнопку надолго, то основной цикл будет проходить дольше, так как упрется в цикл while (BUTTON_PRESSED); Кроме того, кнопки дребезжат не только при нажатии, но и при отжатии — это тоже хорошо бы обрабатывать правильно

Вообще, внешний физический мир асинхронен по отношению к циклу while (1) — и события с него ловить надо тоже асинхронно, а не тогда, когда процессор готов будет это сделать, вывалившись из очередного _delay_ms :)

Ну я же не зря поставил тег "arduino" :)
На самом деле, реализация антидребезга с delay — самая простая. Можно конечно через прерывание переполнения считать время, пока кнопка нажата, но я не вижу смысла так усложнять код.


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

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


если зажать кнопку надолго, то основной цикл будет проходить дольше,

Это не является проблемой, с батареей ничего не случится, если проверку напряжения отложить на какое-то время.


Кроме того, кнопки дребезжат не только при нажатии, но и при отжатии — это тоже хорошо бы обрабатывать правильно

Ну так это отлично отрабатывается конструкцией следующего вида:


If (btn_pressed) {
while (btn_pressed); // антидребезг при нажатии
_delay_ms(x); // антидребезг при отпускании
}

Вообще, внешний физический мир асинхронен по отношению к циклу while (1) — и события с него ловить надо тоже асинхронно, а не тогда, когда процессор готов будет это сделать, вывалившись из очередного _delay_ms :)

Согласен, в теории все так и есть. Но на практике (в конкретном случае) кнопку нажимает человек — существо довольно медленное, и длительность нажатия составляет как минимум, несколько миллисекунд. За это время мк гарантированно успеет отловить это нажатие, так как в коде нет delay большой длительности. Исключение — дополнительный режим, но там это не мешает — кнопку можно держать, пока драйвер из него не выйдет.

хорошая статья. И технология по платам вкратце даже расписана.
Есть несколько вопросов технических.
1) реально нужен супрессор?
2) схема переполюсовки работает?
При переполюсовке через внутренний диод полевики потечёт ток через светодиод. И через резистор R6 и защитный диод внутри контроллер небольшой ток будет около 100мкА.
3) какой собственный ток устройства, когда светодиод выключен?

Спасибо. По пунктам:


  1. Считается хорошим тоном ставить супрессоры в носимые устройства. При замене батареи можно дотронуться рукой до контактов холдера батареи, и если в этот момент Ваше тело было заряжено статическим электричеством, заряд пойдет прямиком на драйвер. МК может этого не пережить, да и полевые транзисторы тоже боятся сильных статических разрядов, насколько я знаю.
  2. Через светодиод ток в обратном направлении не течет (до определенного порога — примерно в 5 В, что меньше максимального напряжения батареи, а если вдруг и будет превышено — отсечется супрессором). Так что да, схема работает.
    Да, через R6 пойдет ток около 80 мкА, но это не наносит вреда — видимо, рассеивается на внутреннем диоде.
  3. Собственный ток в выключенном режиме не более 5 мкА, обычно где-то 2-3 мкА.
ок, спасибо!
Если у вас по цепи питания уже стоит конденсатор 10 мкФ — то суппрессор не нужен — так как заряд на теле человека, приведенный к емкости этого конденсатора, поднимет на нем напряжение всего на доли вольта. А шунтировать цепи питания МК-систем связкой керамика+электролит — правило хорошего тона. Следовательно — почти никогда дополнительный суппрессор не нужен. Кроме того, что наверняка его ток утечки сравним или даже превосходит ток потребления всей конструкции в стендбае

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


его ток утечки сравним или даже превосходит ток потребления всей конструкции в стендбае

В даташите пишут, что ток утечки всего 5 наноампер.

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

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

Реально хорошая работа. Сам нечто разрабатываю только для настольного светильника.
Было б хорошо если автор поделился файлом *.ini для ардуино иде.

Спасибо.
Скетча для Arduino не будет по причине неэкономного расходования ресурсов МК прошивкой, скомпилированной в ней. Откройте для себя Atmel Studio, данная среда разработки Вас приятно удивит по сравнению с Arduino IDE.
Для сравнения: пустой скетч (вида void setup() {} void loop(){}) весит 172 байта, тогда как в Atmel Studio всего 40 байт. Когда доступно только 1024 байта памяти программ, 130 байт — очень хорошая экономия.

Проверил, действительно меньше весит если компилировать через Atmel Studio.
Пробовал скомпилировать для Attiny85 — ошибка, под рукой Attiny13 нет, чтобы попробовать в железе. Я так понял там в настройках ШИМа, частоты и настройкам сна нужно менять параметры.

Скорее всего отличаются названия регистров — надо сравнивать даташиты.

Тут нашелся интересный способ скомпилировать прошивку в Arduino IDE без излишней траты памяти. Это не совсем скетч в привычном его понимании, а просто .ino файл с одной единственной строчкой :)
Обновил статью и репозиторий на гитхабе, смотрите.

При смене батареек, сбивается настройка яркости. Можно сохранять последние настройки в энергонезависимую еепром хотя бы при выключении кнопкой?
Спасибо автору, сам дописал программу через Atmel Studio6.
Добавил сохранение значения ШИМ в энергонезависимую память, причем память перезаписывается только если было изменение значения ШИМ (EEPROM.h та что используется для Arduino.ide).

И как, сколько теперь весит программа?


Я решил не делать такую функцию, так как это имеет мало смысла без стабилизации яркости. При замене разряженной батареи яркость все равно изменится.

664 bytes, правда я некоторые функции убрал проверка напряжения, маячок, стробоскоп.
Оставил только ШИМ и управление яркостью, с сохранением в еепром. Как ранее писал, делаю светильник от стабилизированного БП на 24 вольта (1А на максимальной яркости)

Какое напряжение подается на драйвер?

Планирую 5вольт

Через понижающий преобразователь?
Я бы сделал так — МК запитал бы через LDO, а светодиод через понижающий DC-DC, задавая ему Vfb через ШИМ с МК.

МК так и будет через LDO, а вместо светодиода будет две светодиодные ленты, соединённые последовательно, каждая из которых рассчитана на питание 12 вольт и того получится питание для лент 24вольта. Как соберу — отпишусь. Пока что на макетке управляю одним светодиодом через резистор, питание всей схемы 5 вольт
В процессе тестирования при нагрузке 0.7 А, с установленной частотой что у автора, слышен писк при приближении к максимальной яркости. Как увеличить частоту ШИМ? Желательно за пределы звукового диапазона

Фьюз CKDIV8 = 1, это увеличит частоту ШИМ в 8 раз (будет 37.6 КГц), должно перестать пищать.

У Вас есть свободный порт PB3, на него можно подать минус делителя напряжение, и таким образом включать(низким логическим уровнем), или же отключение делителя соcтоянием HIGH Z.

image

Да, можно, но особого смысла нет, утечка через делитель около 4 мкА, что сравнимо с потреблением тиньки в спящем режиме (1 мкА).
Вообще, я хотел на него терморезистор повесить, для контроля нагрева светодиода.

Но если вдруг Вы попробуете перевести проект на ATtiny45/85 то там есть интегрированный в ядро термодатчик, и возможность мерять напряжение питания без использования делителей напряжения и ещё целая куча фишечек + много памяти под код.

Думал об этом. Но это будет скорее отдельный проект, поскольку на ней можно построить полноценный импульсный стабилизатор тока.

Синхронный, к стати

Да, именно так — два полевых транзистора ставятся, можно даже задержку переключения настроить (deadtime).

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации