Привет, Habr!


Хочу рассказать историю о том, как мне в руки попал китайский налобный фонарик на светодиоде Cree XM-L и что дальше с ним стало.



Предыстория


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


Светил он достаточно ярко, но у драйвера было только 3 режима — очень яркий, яркий и стробоскоп, переключение между которыми производилось нажатием кнопки. Для того, чтобы просто включить и выключить фонарь, требовалось каждый раз перебирать эти 3 режима. Вдобавок, этот фонарик, будучи включенным, разряжал батарею до последнего – так пара моих банок 18650 ушли в глубокий разряд.


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


Фонарик со старым драйвером

Вот такой фонарик, наверняка многие имели дело с подобными



Так выглядит оригинальный драйвер



Техническое задание


Как известно, для достижения хорошего результата любая разработка должна иметь хорошее ТЗ, поэтому постараюсь сформулировать его для себя. Итак, драйвер должен:


  • Уметь включаться/отключаться по короткому нажатию кнопки (кнопка без фиксации). Пожалуй, это основная причина, по которой все это затеялось.
  • Иметь плавную (бесступенчатую) регулировку яркости, от самого яркого — "турбо", до "мунлайта", когда диод еле светится. Яркость должна изменяться равномерно.
  • Запоминать установленную яркость на время выключения.
  • Контролировать заряд батареи, предупреждая когда она почти разряжена (примерно 3.3В) и отключаясь, когда разряжена полностью (примерно 2.9В). Для разных АКБ эти параметры могут быть иными. Соответственно, рабочее напряжение должно быть в диапазоне 2.7~4.5В.
  • Иметь 2 специальных режима — аварийный маячок и стробоскоп (ну а почему бы и нет?)
  • Уметь включать/выключать задний светодиод (это актуально при езде на велосипеде ночью, получается что-то вроде габаритного огня).
  • Иметь защиту от переполюсовки и статического электричества. Не обязательно, но будет приятным дополнением, поскольку в темноте можно по ошибке поставить АКБ неправильной стороной.
  • Быть меньше изначального драйвера по размерам, но при этом иметь те же посадочные места. Китайский драйвер просто огромен, сделать крупнее будет непросто.

Ну и если фонарик подвергается моддингу, почему бы не встроить в него зарядное устройство с micro-USB разъемом? У меня под рукой всегда есть такой кабель и USB зарядка, а родной блок питания приходится искать.


Железо


У меня есть кое-какой опыт работы с Arduino, поэтому было решено делать драйвер на МК семейства AVR. Они широко доступны, легко программируются и имеют режимы пониженного энергопотребления (сна).


В качестве "мозга" драйвера был выбран микроконтроллер Attiny13a — это один из самых дешевых МК фирмы Atmel (ныне поглощенной компанией Microchip), он имеет на борту все необходимое — GPIO для подключения кнопки и светодиода, таймер для генерации ШИМ-сигнала, АЦП для измерения напряжения и EEPROM для сохранения параметров. Доступно всего 1 КБ флеш-памяти (но много ли надо для фонарика), а так же 64 Б RAM и столько же EEPROM.
Attiny13 выпускается в нескольких вариантах корпуса, в частности в DIP-8, который можно воткнуть прямо в обычную макетную плату с шагом 2.54мм.


Поскольку от задней части к голове фонаря идет всего 3 провода, кнопка вынуждена замыкаться на землю (о невозможности замыкать на плюс — позже), придется коммутировать светодиод по плюсу — а значит, нужен P-канальный полевик. В качестве такого транзистора я взял AO3401, но можно взять SI2323, он дороже, но имеет меньшее сопротивление открытого канала (40 мОм, тогда как у AO3401 60 мОм, при 4.5 В), следовательно драйвер будет меньше греться.


Что ж, от слов к делу, собираю на макетке предварительную версию



Питается оно пока что напрямую от программатора, напряжением 5 В (на самом деле меньше из-за потерь в кабеле USB). Вместо светодиода XM-L пока воткнул обычный светодиод на ножках и поставил слабый транзистор с высоким пороговым напряжением.
Затем в программе Altium Designer была начерчена схема, которую я дополнил защитой от переполюсовки и ESD.



Подробное описание и предназначение всех компонентов

Обязательные компоненты:


U1 – микроконтроллер Attiny13a в корпусе 8S1 (индекс SSU)


С1 — развязывающий конденсатор по питанию микроконтроллера, должен быть в районе 0.1 мкф, корпус 1206 или 0805, температурный коэффициент X7R


R1-R2 — резисторный делитель для измерения напряжения батареи, номиналы можно ставить любые, тут главное соотношение (750К/220K, коэффициент деления 4.41) и ток утечки, который будет больше, если увеличить номиналы (при текущих он порядка 4 мкА). Поскольку используется внутренний ИОН (1.1 В, согласно даташиту он может быть в пределах 1.0 В — 1.2 В), максимальное напряжение на выходе делителя не должно быть более 1 В. При делителе 750/220 максимально допустимое напряжение на входе делителя будет 4.41 В, что более чем достаточно для всех типов литиевых аккумуляторов.
Делитель я рассчитывал при помощи вот этого калькулятора .


R3 — защита вывода порта микроконтроллера от замыкания (если вдруг PB1 окажется притянуто к VCC, через пин потечет большой ток и МК может сгореть)


R4 — подтяжка RESET МК к питанию, без него возможны перезагрузки от наводок.


Q1 — P-канальный полевой транзистор в корпусе SOT-23, я поставил AO3401, но можно и любой другой с подходящей распиновкой (например SI2323)


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


R6 — резистор подтяжки затвора к питанию. На случай, если PB0 перейдет в высокоимпедансное состояние, через этот резистор на затворе Q1 установится логическая 1 и транзистор будет закрыт. Такое может произойти из-за ошибки в коде или в режиме программирования.


D2 — "запирающий" диод — позволяет при "проседании" напряжения (когда светодиод включается на короткий период на полную яркость) питаться МК от конденсатора какое-то время, так же защищает от переполюсовки.
Можно ставить любой диод шоттки в корпусе SOD323 с минимальным падением напряжения, я поставил BAT60.


Изначально, защита от неправильной полярности питания была сделана на полевом транзисторе (это можно увидеть на платах, изготовленных лутом). После распайки вылезла неприятная особенность — при включении нагрузки возникала просадка напряжения и МК перезагружался, поскольку полевик не ограничивает ток в обратном направлении. Сначала я припаял между VCC и GND электролитический конденсатор на 200 мкФ, но мне не понравилось такое решение из-за его размеров. Пришлось отпаивать транзистор и на его место ставить диод, благо SOT-23 и SOD-323 имеют похожие размеры.


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


Необязательные компоненты:


R5 и D1 отвечают за заднюю подсветку (LED2). Минимальный номинал R5 — 100 Ом. Чем больше номинал, тем слабее светится задний светодиод (он включается в постоянном режиме, без ШИМ). D1 — любой светодиод в корпусе 1206, я поставил зеленый, т.к. визуально они ярче при тех же токах, чем прочие.


D3 и D4 — защитные диоды (TVS), я использовал PESD5V0 (5.0В) в корпусе SOD323. D3 защищает от перенапряжения по питанию, D4 — по кнопке. Если кнопка закрыта мембраной, то в нем нету особого смысла. Защитные диоды наверное имеет смысл использовать двунаправленные, иначе при переполюсовке через них пойдет ток и они выгорят (см. ВАХ двунаправленного защитного диода).


C2 — танталовый конденсатор в корпусе А (похож на 1206), имеет смысл ставить при нестабильной работе драйвера (напряжение питания мк может просаживаться при больших токах коммутации светодиода)


Все резисторы типоразмера 0603 (для меня это адекватный предел для пайки вручную)


С компонентами все ясно, можно делать печатную плату по вышеприведенной схеме.
Первым делом для этого нужно построить 3D модель будущей платы, вместе с отверстиями — имхо, в Altium Designer это самый удобный способ определить геометрию ПП.
Измерил размеры старого драйвера и его посадочных отверстий — плата должна крепиться к ним же, но иметь меньшие габариты (для универсальности, вдруг куда-то еще придется встроить).
Разумный минимум здесь получился где-то 25х12.5мм (соотношение сторон 2:1) с двумя отверстиями диаметром 2мм для крепления к корпусу фонаря родными винтами.


3D-модель я сделал в SolidWorks, затем экспортировал в Altium Designer как STEP.
Затем я разместил компоненты по плате, контакты сделал по углам (так паять удобнее и проще разводить землю), Attiny13 поставил по центру, транзистор поближе к контактам LED.
Развел силовые дорожки, разместил остальные компоненты как получится и развел сигнальные дорожки. Для удобства подключения ЗУ я вывел под него отдельные контакты, которые дублируют контакты батареи.
Всю разводку (за исключением одной перемычки) я сделал на верхнем слое — для того, чтобы была возможность изготовить плату в домашних условиях ЛУТом.
Минимальная ширина сигнальных дорожек — 0.254 мм / 10 mil, силовые имеют максимальную ширину там, где это возможно.


Так выглядит разведенная плата в Altium Designer:



В Altium Designer есть возможность посмотреть, как будет выглядеть плата в 3D (для этого необходимо наличие моделей для всех компонентов, некоторые пришлось строить самому).
Возможно, кто-то тут скажет, что 3D режим для трассировщика не нужен, но лично для меня это удобная функция, которая облегчает размещение компонентов для удобства пайки.



На момент написания статьи было сделано 3 версии платы — первая под ЛУТ, вторая для промышленного изготовления и 3-я, финальная с некоторыми исправлениями.


Изготовление плат


Самодельный способ


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


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



Поскольку плата маленькая, есть смысл брать кусок текстолита с габаритами в несколько раз больше и делать то, что в промышленности называют панелизацией.
Для этих целей весьма удобен CorelDraw, но можно пользоваться и любым другим векторным редактором.
Размещаю копии шаблонов на документе, между платами делаю промежутки в 0.5-1мм (зависит от способа разделения, об этом позже), платы должны быть расположены симметрично — иначе будет сложно их разделить.


Подбираю кусок одностороннего текстолита размерами чуть больше, чем скомпонованная панель, зачищаю и обезжириваю (предпочитаю тереть ластиком и потом спиртом). Печатаю на термобумаге шаблон для травления (тут важно не забыть отзеркалить шаблон).
При помощи утюга и терпения, аккуратно поглаживая по бумаге, перевожу на текстолит. Жду пока остынет и осторожно отдираю бумагу.
Свободные участки меди (не покрытые тонером) можно покрыть лаком или заклеить скотчем (чем меньше площадь меди, тем быстрее идет реакция травления).


Такая вот домашняя панелизация. Большое количество плат позволяет компенсировать брак производства — например, на фото видно место, где тонер отслоился.



Я травлю платы лимонной кислотой в растворе перекиси водорода, это самый доступный способ, хотя и довольно медленный.
Пропорции такие: на 100мл перекиси 3% идет 30г лимонной кислоты и примерно 5г соли, это все перемешивается и выливается в емкость с текстолитом.
Подогревание раствора ускорит реакцию, но может привести к отслаиванию тонера.


Начинается неведомая химическая магия: медь покрывается пузырями, а раствор приобретает синий оттенок



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


Теперь остается залудить плату — это поможет при пайке и защитит медь от окисления и облегчит пайку. Лудить я предпочитаю сплавом Розе — этот сплав плавится при температуре около 95 градусов, что позволяет лудить им в кипящей воде (да, возможно не самый надежный состав для лужения, но для самодельных плат годится).



После лужения я сверлю плату (для контактов использую твердосплавные сверла ф1.0, для перемычек — ф0.7), сверлю дремелем за неимением другого инструмента. Пилить текстолит я не люблю из-за пыли, поэтому после сверления разрезаю платы канцелярским ножом — с двух сторон делаю несколько надрезов по одной линии, затем разламываю по надрезу. Это напоминает метод V-cut, используемый в промышленности, только там надрез делается фрезой.


Так выглядит плата, готовая к пайке



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


Драйверы, готовые к загрузке прошивки



Промышленный способ


ЛУТ — это быстро и доступно, но технология имеет свои недостатки (как и почти все "домашние" методы изготовления ПП). Проблематично сделать двухсторонную плату, дорожки могут быть перетравлены, а о металлизации отверстий остается только мечтать.


Благо, предприимчивые китайцы давно предлагают услуги изготовления печатных плат промышленным способом.
Как ни странно, однослойная плата у китайцев будет стоить дороже, чем двухслойная, поэтому я решил добавить второй (нижний) слой к печатной плате. На этом слое продублированы силовые дорожки и земля. Так же, появилась возможность сделать теплоотвод от транзистора (медные полигоны на нижнем слое), что позволит драйверу работать на более высоких токах.


Нижний слой платы в Altium Designer



Для этого проекта я решил заказать печатную плату на сайте PcbWay. На сайте есть удобный калькулятор расчета стоимости плат в зависимости от их параметров, размеров и количества. После расчета стоимости я загрузил gerber-файл, созданный ранее в Altium Designer, китайцы его проверили и плата отправилась на производство.


Изготовление комплект из 10 плат TinyFL обошлось мне в $5. При регистрации нового пользователя дается скидка $5 на первый заказ, поэтому я оплачивал только доставку, которая тоже стоит где-то в районе $5.
На этом сайте есть возможность выложить проект в общий доступ, поэтому если кто-то захочет заказать эти платы, можно просто добавить в корзину этот проект.


Спустя пару-тройку недель мне пришли те же самые платы, только красивенькие изготовленные промышленным способом. Их остается только распаять и залить в них прошивку.



Программа (прошивка)


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


Алгоритм управления драйвером


Драйвер включается по короткому нажатию на кнопку, выключается по нему же.
Выбранный режим яркости сохраняется на время выключения.


Если во время работы сделать двойное короткое нажатие кнопки (двойной клик), будет включен/выключен дополнительный светодиод.
При длинном нажатии во время работы начнет плавно изменяться яркость фонаря. Повторное длинное нажатие изменяет направление (сильнее/слабее).


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


Более подробное описание алгоритма работы драйвера
  1. При подаче питания на МК производится настройка периферии и МК погружается в сон (если STARTSLEEP определено). При подаче питания на драйвер оба светодиода мигают некоторое количество раз, если STARTBLINKS определено.
  2. Сон. Attiny13 засыпает в режиме power-down (это самый экономичный режим, по даташиту потребление МК составит ~ 1 мкА), выйти из которого оно может только по какому-либо прерыванию. В данном случае это прерывание INT0 — нажатие кнопки (установка PC1 в логическое 0).
    На PC1 при этом должна быть включена внутренняя слабая подтяжка к питанию. АЦП и компаратор являются основным потребителями тока из всей периферии, поэтому их тоже нужно отключить. На время сна содержимое регистров и оперативной памяти сохраняется, поэтому EEPROM не нужен для запоминания яркости.
  3. После сна периферия и ШИМ включается и драйвер входит в бесконечный цикл, в котором отслеживается нажатие кнопки и периодически проверяется напряжение батареи.
  4. Если кнопка нажата — засекается время нажатия.
    4.1. Если нажатие короткое — ожидается двойной клик (если BTN_DBCLICK определено).
    Если он был, переключается дополнительный светодиод LED2
    Если нет, то переход к п.2 (сон)
    4.2. Если нажатие долгое (дольше, чем BTN_ONOFF_DELAY) — включается режим управления яркостью. В этом режиме:
    • Инвертируется направление изменения (больше/меньше) и изменяется % заполнения ШИМ, пока нажата кнопка.
    • Если достигнуто максимальное/минимальное значение (RATE_MAX / RATE_MIN), светодиод начинает мигать;
    • Если прошло n-миганий (AUXMODES_DELAY) и кнопка все еще нажата, включается дополнительный режим. Таких режимов два — стробоскоп ( включается на 25 мс, частота 8 Гц) и аварийный маячок (включается на полную яркость на 50мс, частота 1 Гц). В этих режимах не происходит проверки заряда батареи, а для выхода нужно какое-то время держать нажатой кнопку.
  5. Если пришло время проверять напряжение батареи — считываются показания с ADC2, результат сравнивается с предустановленными значениями.
    • Если значение АЦП больше значения BAT_WARNING – все нормально
    • Если меньше BAT_WARNING – пользователь предупреждается о разряде, драйвер мигает основным светодиодом. Кол-во вспышек будет пропорционально степени разряда. Например, с дефолтными значениями при полном разряде фонарь мигнет 5 раз.
    • Если меньше BAT_SHUTDOWN — МК переходит в п.2 (сон).

Управление яркостью светодиода


Как известно, самый простой способ управлять яркостью — изменять скважность ШИМ, при этом светодиод на какое-то время включается на полную яркость, затем выключается. Из-за особенностей человеческого глаза кажется, что светодиод светит менее ярко, чем если бы он был включен постоянно. Поскольку светодиод подключен через P-канальный полевой транзистор, для его открытия необходимо притянуть затвор к земле, а для закрытия — наоборот, к питанию. Время открытия транзистора по отношению ко времени его закрытого состояния будет коррелировать с заполнением ШИМ.
За скважность шим отвечает переменная rate, 255 rate = 100% ШИМ.
При частоте тактирования 1.2 МГц и предделителе таймера в 1, частота ШИМ будет равна 1200000/256 = 4.7 КГц. Поскольку это частота звуковая (воспринимаемая человеческим ухом), на некоторой скважности ШИМ драйвер может начать пищать (точнее, пищит не драйвер, а провода, либо элементы питания). Если мешает, можно увеличить рабочую частоту до 9.6 (CKSEL[1:0]=10, CKDIV8=1) или 4.8 МГц (CKSEL[1:0]=01, CKDIV8=1), тогда частота ШИМ будет в 8 или в 4 раза больше, но энергопотребление МК так же вырастет пропорционально.


Кто-то считает, что диод нужно питать путем стабилизации тока через него, а в таком режиме он быстро выйдет из строя. Тут я соглашусь и скажу, что у меня в фонаре светодиод не подключается напрямую к драйверу, а до него идут достаточно длинные и тонкие провода, сопротивление которых, а так же внутреннее сопротивление батареи и сопротивление драйвера ограничивают максимальный ток в районе 1.5 А, что в 2 раза меньше максимального тока для данного светодиода (максимальный ток для Cree XM-L согласно документации — 3 А).


Если вы будете собирать драйвер, советую замерять потребление тока в режиме максимальной яркости (rate = 255). В случае, когда ток превышает максимальный ток вашего диода, рекомендую уменьшить параметр RATE_MAX до получения приемлемых значений. Хотя, по спецификации транзистора SI2323DS его максимальный ток превышает 4А, лучше не превышать порог в 2А, иначе драйверу потребуется охлаждение.


Гамма-коррекция


Человеческий глаз воспринимает яркость объектов нелинейно. В случае с этим драйвером, разница между 5-10% ШИМ будет восприниматься как многократное увеличение яркости, тогда как разница между 75-100% будет практически не будет заметна глазу. Если увеличивать яркость светодиода равномерно, со скоростью n процентов в секунду, будет казаться, что в начале яркость очень быстро растет от нуля до среднего значения, затем очень медленно увеличивается от середины до максимума.


Это весьма неудобно, и для компенсации этого эффекта пришлось сделать упрощенный алгоритм гамма-коррекции. Его суть в том, что шаг изменения яркости увеличивается от 1 при минимальных значениях ШИМ до 12 при максимальных значениях. В графическом представлении это выглядит как кривая, точки которой сохранены в массиве rate_step_array. Таким образом, кажется, что яркость изменяется равномерно на всем диапазоне.


Контроль напряжения батареи


Каждые n-секунд (за интервал в миллисекундах отвечает параметр BAT_PERIOD) происходит замер напряжения батареи. Положительный контакт батареи, который подключается к VIN и попадает на резисторный делитель R1-R2, к средней точке которого подключен пин PB4 (он же ADC2 у мультиплексора АЦП).


Поскольку напряжение питания изменяется вместе с измеряемым напряжением, не получится измерить его, использовав в качестве опорного напряжения Vref, поэтому в качестве ИОН я применил внутренний источник на 1.1 В. Как раз для этого и нужен делитель — МК не может измерить напряжение, большее чем напряжение опорного источника (так, напряжению 1.1 В будет соответствовать значение АЦП в 1023 или 255, если использовать 8-битное разрешение). Проходя через делитель, напряжение в средней его точке будет в 6 раз меньше входного, значению 255 будет соответствовать уже не 1.1 В, а целых 4.33 В (делитель на 4.03), что с запасом покрывает диапазон измерений.


В итоге получается некоторое значение, которое дальше сравнивается с предустановленными значениями минимальных напряжений. При достижении значения BAT_WARNING светодиод начинает мигать некоторое количество раз (чем сильнее разряжено, тем больше мигает — за это отвечает BAT_INFO_STEP, подробнее в коде), а при достижении BAT_SHUTDOWN драйвер отключается.
Значение АЦП переводить в милливольты я не вижу смысла, т.к. это тратит лишную память, которой в тиньке и так мало.


Кстати, делитель является основным потребителем питания, когда МК находится в режиме сна. Так, делитель на 4.03 с R1 = 1M и R2 = 330К, будет иметь общее R = 1330K и ток утечки при 4 В = 3 мкА.
На время измерения напряжения нагрузка (светодиод) отключается примерно на 1 мс. Это почти не заметно для глаз, но помогает стабилизировать напряжение, иначе измерения будут некорректные (а делать какие-либо поправки на скважности шим и прочее — слишком сложно).


Внесение изменений в прошивку


Это нетрудно сделать, особенно если был опыт работы с Arduino или просто с C/C++.
Даже если такого опыта не было, можно настроить почти все рабочие параметры путем редактирования определений (defines) заголовочного файла flashlight.h.
Для редактирования исходного кода нужно будет поставить Atmel Studio – оно не сложнее, чем Arduino IDE, но гораздо удобнее.


После установки надо открыть проект (flashlight.atsln) и выбрать нужный файл. Таковых всего два — flashlight.h содержит определения (настройки), flashlight.cpp содержит собственно код.
Расписывать более подробно содержимое исходников не вижу смысла — в коде полно комментариев.
После внесения изменений надо нажать F7, исходники скомпилируются (или нет, тогда компилятор укажет, где ошибка). В папке debug появляется flashlight.hex, который можно загрузить в микроконтроллер по инструкции ниже.


Загрузка прошивки в микроконтроллер

Для загрузки прошивки и настройки фьюзов я использую программатор USBASP в сочетании с программой AVRDUDEPROG. Программа представляет из себя подобие GUI для программы avrdude, есть удобный встроенный калькулятор фьюзов — достаточно поставить галочки возле нужных битов. В списке контроллеров нужно выбрать подходящий (в данном случае Attiny13(a), зайти на вкладку Fuses и нажать кнопку read. Только после того, как значения фьюзов считаны из МК, можно их изменять. После изменения нужно нажать programm, новые фьюзы будут записаны в МК. Подходящие значения фьюзов записаны в файле flashlight.h


Для заливки прошивки надо перейти на вкладку Program, в строке Flash выбрать скомпилированный файл прошивки в формате HEX (flashlight.hex) и нажать Program. Статус прошивки будет отображаться в окне снизу. Если загрузка неудачна, возможно дело в плохом контакте, так бывает — стоит попробовать еще раз. Кстати, именно для этого был сделан параметр STARTBLINKS — однократное мигание LED2 в момент подачи питания на драйвер служит индикацией контакта драйвера с программатором.
Вместо USBASP для загрузки прошивки можно использовать Arduino, подробнее тут и тут


Программатор USBASP, подключенный к драйверу через клипсу со шлейфом


Для подключения USBASP к тиньке я использую клипсу под 8-контактный SOIC. Не очень удобное приспособление, приходится помучаться минут 10, прежде чем поймаешь контакт (возможно, мне просто попалась бракованная клипса). Бывают так же адаптеры SOIC-DIP, куда вставляется микросхема до пайки и в нее заливается прошивка — этот вариант удобнее, но теряется возможность программировать драйвер внутрисхемно (то есть обновлять прошивку после пайки МК на плату).
Если всего этого нет, то можно просто припаять проводки к выводам МК, которые затем прикрепить к Arduino.


Калибровка


Токи, проходящие через драйвер и светодиод, не должны превышать максимальных значений. Для светодиода XM-L это 3 А, для драйвера оно зависит от используемого транзистора, например для SI2323 максимальный ток около 4 А, но лучше гонять на меньших токах из-за чрезмерного нагрева.
Если ток на максимальной яркости превышает эти значения, можно уменьшить параметр RATE_MAX (#define RATE_MAX xx).
Калибровка АЦП не является обязательной процедурой, но если хочется, чтобы драйвер точно отслеживал пороговое напряжение, то придется с этим повозиться.


Расчеты не дадут высокой точности измерений, т. к. во-первых, номиналы резисторов могут варьироваться в пределах допуска (обычно 1-5%), а во-вторых, внутренний ИОН может иметь разброс от 1.0 до 1.2 В.
Поэтому, единственный приемлемый способ — выставить значение в единицах АЦП (BAT_WARNING и BAT_SHUTDOWN), экспериментально подбирая его под нужное. Для этого понадобится терпение, программатор и регулируемый источник питания.
Я выставлял в прошивке значение BAT_PERIOD в 1000 (проверка напряжения раз в секунду) и постепенно снижал напряжение питания. Когда драйвер начинал предупреждать о разряде, я оставлял текущее значение BAT_WARNING как нужное.
Это не самый удобный способ, возможно в будущем надо сделать процедуру автоматической калибровки с сохранением значений в EEPROM.


Сборка фонарика


Когда плата была готова и прошивка была залита, можно было наконец ставить ее на место старого драйвера. Я выпаял старый драйвер и припаял на его место новый.


Новый драйвер подключается вместо старого по этой схеме


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


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



Тестирование и расчет стоимости изготовления


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


Энергопотребление старого драйвера (измерялось при 4.04 В):


  1. Во время сна — не измерялось
  2. Максимальный режим: 0.60 А
  3. Средний режим: 0.30 А
  4. Стробоскоп: 0.28 А

Энергопотребление нового драйвера (измерялось при 4.0 В):


  1. В режиме сна потребляет в районе 4 мкА, это намного меньше тока саморазряда литий-ионной батареи. Основной ток в этом режиме протекает через резисторный делитель.
  2. На минимальном режиме, "мунлайт" — около 5-7 мА, если считать, что емкость одной ячейки 18650 около 2500 мА*ч, то получается около 20 дней непрерывной работы. Сам МК потребляет где-то 1.2-1.5 мА (при рабочей частоте 1.2 МГц).
  3. На максимальном режиме, "турбо" — потребляет около 1.5 А, в таком режиме проработает около полутора часов. Светодиод на таких токах начинает сильно нагреваться, поэтому данный режим не предназначен для длительной работы.
  4. Аварийный маячок — потребляет в среднем около 80 мА, в таком режиме фонарь проработает до 30 часов.
  5. Стробоскоп — потребляет около 0.35 А, проработает до 6 часов.

Цена вопроса


Если покупать компоненты в Чип и Дипе, выйдет около 100р (60р Attiny13, ~40р остальная рассыпуха). С китая заказывать имеет смысл, если делается несколько штук — тогда в пересчете на штуку выйдет дешевле, китайцы продают как правило партиями от 10 штук.
Платы выйдут по цене в районе 300р за 10 штук (без доставки), если заказывать их в Китае.
Распайка и прошивка одного драйвера у меня занимает где-то час.


Заключение


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


Драйвер крупным планом (версия 2_t)


Исходники прошивки, схема, и разводка платы теперь лежит на гитхабе, скачать можно тут: https://github.com/madcatdev/tinyfl_t

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


  1. moonoviy
    22.08.2019 14:22
    -1

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


    1. madcatdev Автор
      22.08.2019 14:38
      +1

      А Вам не страшно ходить с литиевым аккумулятором в кармане (если Вы конечно пользуетесь мобильным телефоном)?
      На самом деле, 18650 очень сложно заставить взорваться, только если разве что нагреть градусов до 200. И то, если я не ошибаюсь, то взрыва не будет, так как у них есть защитный клапан.


    1. holomen
      23.08.2019 06:25

      У креосана посмотрите как они всячески издевались над 18650 банкой с целью именно пиротехнических эффектов. А потом подумайте а не будет-ли уже без разницы на аккумулятор если такие внешние воздействия придутся на голову на которой закреплен этот аккумулятор.


      1. nafikovr
        23.08.2019 17:14

        креосан скопрометирован уже. так что он мог и динамит заложить вместо родного содержимого


        1. holomen
          23.08.2019 20:30

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


  1. clawham
    22.08.2019 14:32
    +1

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

    Я давно пытаюсь сам свой драйвер собрать но делать нечто подобное не хочется абсолютно — нужно две кнопки вкл-выкл и режимы(как в фотоаппарате полунажатие и полное) или как вариант — несколько программируемых режимов(2-3 не более) и возможность входа в меню программирования для изменения этих режимов. Естественно запоминание настроек в еепроме.
    По схемотехнике — ну вопервых защита переполюсовки — давным давно люди используют схему идеальный диод из полевика и резистора. Сразу кпд+. Во вторых без индуктивности и низкоомного шунта невозможно поддерживать стабильную яркость свечения. Проблема в том чтоб уместить в компактных размерах синхронный флайбек или инвертирующий преобразователь с полевиками вместо диодов т.к. падение 0.4 вольта из 3-х полезных на диоде — непозволительная роскошь.
    Дальше микроконтроллер… ну тини 13 конечно неплох но 85-тая имеет pll и 64 мегагерца на такт таймеру — так задрало что на средних и низких мощностях все фонарики стробят и вращающиеся детали могут останавливаться с разными последствиями для рук…
    В общем очередная моргалка… а жаль… таки прийдется самому доделывать толковый драйвер для светодиодного фонарика.


    1. REPISOT
      22.08.2019 14:44

      У него диодом защищена цифровая часть, а она ест ерунду. Тем более падение на диоде всего 0.12 В при 10 мА.


    1. madcatdev Автор
      22.08.2019 14:52

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

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

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

      Кстати, эффект стробоскопа не наблюдается совсем, поскольку частота ШИМ более 4 КГц.


      1. clawham
        22.08.2019 16:09

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


        1. madcatdev Автор
          22.08.2019 16:38

          В вентиляторы лазать с фонарями не приходилось, увы. Сейчас специально посветил на все доступные вентиляторы — нигде не наблюдаю эффекта остановки или пропадания лопастей.

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

          >Кстати по поводу зарядки — в паре моих фонариков есть зарядник — не использую т.к. мне проще зарядить 8 акумов в литокалу
          В походе будет проблема с розетками, а повербанки и солнечные батареи как правило имеют выход 5 вольт. Брать с собой большое количество аккумов для фонаря тоже не хочется, вес все-таки.


        1. GennPen
          22.08.2019 16:50

          мощный выход до 3 ампер и малый размер дросселя
          Одно другому противоречит, т.к. выходной ток напрямую зависит от размера дросселя.


          1. amartology
            22.08.2019 17:30

            Одно другому противоречит, т.к. выходной ток напрямую зависит от размера дросселя.
            При фиксированной частоте — да. Но частоту можно поднять. В теории, как минимум)


      1. quqdron
        23.08.2019 07:58

        Цвет фломастера мне понравился, описано подробно: мотив, процес и результат, пишите дальше в том же стиле.


    1. vin2809
      23.08.2019 08:41

      Опять разочарование
      Мне кажется вы несколько сгустили краски.

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


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


      1. clawham
        23.08.2019 09:25

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


        1. Virtu-Ghazi
          23.08.2019 16:52

          А какую схему ДЦ-ДЦ преобразователя используете?
          Что-то вроде такого?
          image

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

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


  1. GennPen
    22.08.2019 14:49

    От переразряда обычно спасают 18650 с защитой, но они на пару миллиметров длинней и в некоторые карманы не вставляются.


    1. madcatdev Автор
      22.08.2019 14:55

      Есть еще вариант — можно поставить плату зарядки c защитой (те же модули TP4056 бывают в таком исполнении).


    1. Virtu-Ghazi
      23.08.2019 17:41

      Если аккумулятор длиннее, чем положенные 65мм, то он всегда с защитой, или хитрые китайцы могут выпускать их в удлинённых корпусах и без защиты? А главное, как это определить?


      1. GennPen
        23.08.2019 19:05

        А главное, как это определить?

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


  1. Buhram
    22.08.2019 20:18
    +1

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

    Писать для аттини13 моветон.


    1. madcatdev Автор
      22.08.2019 20:31
      +4

      Может быть, Вы более конкретно напишете, что Вам не понравилось и чем не угодила Attiny13?


      1. Buhram
        22.08.2019 21:12
        +1

        Когда писал коммент, сбили с мысли, писать на си для аттини моветон)


        1. vvzvlad
          23.08.2019 15:35

          Почему?


    1. znsoft
      23.08.2019 06:03

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


      1. iig
        23.08.2019 07:18

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


      1. Buhram
        23.08.2019 08:19

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


        1. DarkByte
          23.08.2019 08:38

          5. Какой смысл в подсветке кнопки при включенном фонаре?

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


        1. amartology
          23.08.2019 11:00

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


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

          3. П-канальный ключ, серьезно? Что мешало поставить в нижнее плечо Н-канальный?
          А в чем принципиальная проблема с p-канальным ключом? Вы что, мосфеторасист?


          1. Buhram
            23.08.2019 11:25

            Если войти в аккаунт, то вся эта порнография прячется.

            Заголовок спойлера
            Да и сидеть в интернетах в 2к19 без адблока как-то странно.


            1. amartology
              23.08.2019 12:38

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

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

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

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


              1. Buhram
                23.08.2019 13:39

                Важно, то, удовлетворяет ли решение условию задачи.

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

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


                1. amartology
                  23.08.2019 14:12

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

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


              1. esp8266
                24.08.2019 15:34

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

                Аддон для браузера нельзя поставить?
                Можно название конторы в студию чтобы туда случайно не устроится?


            1. sim2q
              23.08.2019 20:52
              +1

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


        1. madcatdev Автор
          23.08.2019 20:27

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


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


          1. Buhram
            23.08.2019 21:26

            Про КПД тогда можно будет забыть.

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


            1. madcatdev Автор
              24.08.2019 00:09

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


              1. Buhram
                24.08.2019 12:30

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


                1. madcatdev Автор
                  24.08.2019 14:05

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


                  1. Buhram
                    24.08.2019 19:18

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


                    1. madcatdev Автор
                      24.08.2019 20:18

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


                      1. Buhram
                        24.08.2019 21:42

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


          1. Karlson_rwa
            24.08.2019 16:15

            3. Можно поставить инвертор.


            1. madcatdev Автор
              24.08.2019 20:02

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


      1. sim2q
        23.08.2019 20:45

        фонарёвка вообще-то — как бы самое тру-место по теме


  1. NordicEnergy
    22.08.2019 22:02
    +1

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


    При травление замените перекись за пару таблеток гидроперита и воду. Это позволит получить более концентрированный раствор и сильно уменьшить время травления. Гидроперит продается отдельно или же идёт в комплекте с краской для волос.


    1. madcatdev Автор
      22.08.2019 22:06

      Спасибо, попробую.


      1. nightmare-1966
        23.08.2019 17:55

        А что, перекись — обычная аптечная 5%? Не знал, что ее хватает! Гидроперит в таблетках сильнее будет, конечно.


    1. Meklon
      23.08.2019 10:42

      А еще добавить ЭДТА (Трилон-Б). Он тоже хорошо способствует реакции, подхватывая все, что пытается выпасть в осадок.


    1. COKPOWEHEU
      23.08.2019 15:25

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


    1. vvzvlad
      23.08.2019 15:44

      Это позволит получить более концентрированный раствор и сильно уменьшить время травления.

      … который становится склонен к саморазгону реакции при повышении температуры. Десять раз нормально, на 11 температура в комнате чуть больше, и вот ваш стол уже заливает горячей пеной.
      www.instagram.com/p/eFSzapMUz4


      1. madcatdev Автор
        23.08.2019 19:09

        Посмотрел Ваше видео и сразу вспомнился этот пост https://dlinyj.livejournal.com/676121.html


        1. vvzvlad
          25.08.2019 12:23

          Ага. Я даже его комментировал


  1. wyfinger
    23.08.2019 01:53

    Подскажите пожалуйста непрофессионалу, сделал небольшой прототип из модулей для ардуино и самой ардуинки (nano), теперь решил развести плату и заказать ее изготовление для пробы.
    Идея была купить эти же самые модули, например Arduino Pro Mini (Atmega 328P) + модуль для Micro SD карты, и распаять эти компоненты на новую плату.
    Так вот как определить номенклатуру компонентов, например кварц на вот этой схеме Arduino, или холдер для MicroSD карты?

    Заголовок спойлера



    1. madcatdev Автор
      23.08.2019 03:37
      +1

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


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


      • Футпринт кварца похож на 3225 — например.
      • Холдер microSD похож на вот этот. Где-то у меня вроде даже футпринт под него был самодельный.


      1. wyfinger
        23.08.2019 05:31

        Спасибо, вроде похожи, буду рисовать футпринты сам.
        Фен есть, попробую перепаять.


      1. COKPOWEHEU
        23.08.2019 15:30

        К тому же отпаять Атмегу не так просто — нужна паяльная станция с феном.
        Можно рискнуть с лезвием бритвы если место позволяет. Оно делается из нержавейки и не смачивается припоем, так что можно прогреть одну сторону, проталкивая лезвие между ножками и платой. Хотя, конечно, есть риск погнуть или даже отломать ножки. Я так пытался выпаять STM32L151 в 64-ногом корпусе, по результатам даже статью сюда написал. Если вкратце — вот там ножки слишком дохлые для таких экспериментов. А на Мегах риск намного меньше. Хотя феном, конечно, лучше.


        1. safari2012
          23.08.2019 17:43

          сейчас простой фен на али стоит от 1300руб.


          1. COKPOWEHEU
            26.08.2019 10:19

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


            1. GennPen
              26.08.2019 13:04

              Если не ставить слишком тонкую насадку и не выкручивать сильный поток воздуха — ничего не сдувается.


            1. safari2012
              26.08.2019 14:54

              не всё так плохо :)
              в эту цену входит регулировка температуы (с возможностью калибровки), регулировка силы потока и разные насадки.


  1. zapimir
    23.08.2019 02:47

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

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

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


    1. madcatdev Автор
      23.08.2019 03:14

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

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


      Выглядит это примерно так


  1. DarkByte
    23.08.2019 08:35

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

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


    1. madcatdev Автор
      23.08.2019 18:56

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


  1. p0gank
    23.08.2019 10:50
    +1

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


    1. COKPOWEHEU
      23.08.2019 15:31

      Не боитесь пробить транзистор индуктивным выбросом?


      1. iig
        23.08.2019 16:30

        Существуют специализированные решения.
        html.alldatasheet.com/html-pdf/858433/DIODES/PAM2803AAF095/222/1/PAM2803AAF095.html к примеру.


        1. COKPOWEHEU
          23.08.2019 17:31

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


          1. iig
            23.08.2019 18:02

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


          1. madcatdev Автор
            23.08.2019 18:51

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


            1. COKPOWEHEU
              26.08.2019 10:21

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


    1. madcatdev Автор
      23.08.2019 18:54

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


      1. GennPen
        23.08.2019 19:21

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

        Заголовок спойлера
        image


        1. madcatdev Автор
          23.08.2019 20:55

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


  1. gleb_l
    23.08.2019 21:26

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

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

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


    1. madcatdev Автор
      24.08.2019 00:49

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


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

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


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

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


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

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


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

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

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


  1. RV3EFE
    24.08.2019 14:20

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


    1. madcatdev Автор
      24.08.2019 15:13

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


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


      1. RV3EFE
        24.08.2019 15:33

        ок, спасибо!


      1. gleb_l
        24.08.2019 16:12

        Если у вас по цепи питания уже стоит конденсатор 10 мкФ — то суппрессор не нужен — так как заряд на теле человека, приведенный к емкости этого конденсатора, поднимет на нем напряжение всего на доли вольта. А шунтировать цепи питания МК-систем связкой керамика+электролит — правило хорошего тона. Следовательно — почти никогда дополнительный суппрессор не нужен. Кроме того, что наверняка его ток утечки сравним или даже превосходит ток потребления всей конструкции в стендбае


        1. madcatdev Автор
          24.08.2019 17:37

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


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

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