Ramping driver фонарь что
Поговорим про… фонарики?
Приветствую, %username%!
Это небольшой ликбез на тему сегодняшнего состояния отрасли портативного освещения.
Disclaimer
К показанным фонарям и остальному железу я отношения не имею. Их рекламой данный пост не является.
Поехали, начнем с современных светодиодов
Светодиоды
На сегодняшний день самой большой популярностью пользуются светодиоды фирмы Cree.
У них на сегодняшний день самое лучшее соотношение Лм/вт и при этом есть отличные нейтральные и теплые варианты, в том числе с высоким Cri. Правда, что касается именно «теплого лампового света» и высоких Cri, тут не так давно на рынке появились диоды от японской фирмы Nichia, которые, по отзывам видевших как они светят людей, выдают просто чудесный свет(нейтральный/теплый, Cri >90), пригодный даже для постоянного использования дома.
Конечно, пока что чем «теплее», тем ниже эффективность диода. Поэтому в основном в фонарях используются более холодные или нейтральные версии.
При этом даже холодный Cree в дешевом фонаре будет гораздо приятней на вид и гораздо, гораздо ярче чем ваша старая светодиодная лейка.
И так. Из всего многообразия в современных фонарях в 99% случаях стоят диоды Cree либо XP-G/XP-G2
либо XM-L/XM-l2.
Те, что с приставкой 2 построены на новой технологии SC³ и выдают в среднем на 10-20% больше света, чем те, что без нее.
В частности, один XP-G2 может выдавать
5 ваттах. Это эквивалент 50ваттной лампы накаливания
А один XM-L2 примерно тысячу при десяти. Это уже 75-80ваттная лампочка.
При этом размер XP-G2/Nichia всего 3.45×3.45 мм. а XM-L2 5×5мм. Честно, я когда первый раз увидел XP-G, жарящий на всю катушку, не поверил своим глазам.
Драйверы
Всю эту мощь надо как то питать. Этим занимаются специальные LED драйверы, которые бывают линейные, импульсные, программируемые и еще куча других слов. Другими словами — DC-DC преобразователи с управлением по МК.
Например, на картинке выше — штучный экземпляр ручной работы, импульсный драйвер диаметром всего 17 мм, обеспечивающий постоянную яркость во время работы и с КПД около 95-97%. Разработка и сборка, кстати, Российско-Украинская )
В большинстве китайских, да и российских фонарей стоят обычные линейники, которые плавно гасят диод в зависимости от остаточного напряжения на батарейке. В фонарях посерьёзней драйвер «высасывает» из аккумулятора столько мощности сколько возможно для обеспечения постоянной яркости. Особо хитрые потом еще переходят в пониженные режимы, чтобы выключение не было сюрпризом.
и многое, многое другое.
На этом кадре из фильма Oblivion на винтовке видна оптика модуля с тремя светодиодами, в народе «трипла». Разработка конкретно этого светомодуля, между прочим, дело рук московской конторы Lux-RC (+ их партнеров из Oveready(отвечают за корпуса фонарей)).
Фонарик в начале темы тоже спроектирован Lux-RC. Выдает 6000 люмен с 4х аккумуляторов, имеет активное охлаждение.
Оптика
Тут всё и сложнее и проще. Типичный угол свечения для светодиодов — 120 градусов. К тому же, источник свечения — квадрат со стороной 3.45 или 5 мм.
Собрать их в узкий пучок можно, например линзой. Но, линзованные фонари негерметичны, не дают практически никакой засветки и в линзах теряется очень большая часть света. Флешаголики не одобряют )
Поэтому, если хочется качества и дальнобойности, то вам прямая дорога к фонарям с глубоким рефлектором, например тот же Thrunite catapult V3, с которым Тёма поедет в свою следующую экспедицию.
Если надо что то для повседневных нужд, то это уже больше дело вкуса. Есть и мятые рефлекторы и TIR оптика, можно получить практически любой угол хотспота/засветки.
Питание
Все серьезные фонари питаются литиевыми аккумуляторами формата 18650 (18мм диаметр, 65 мм длина). Они на сегодняшний день являются самыми технологически передовыми из всех. А так же не слишком сильно оттягивают карман
Например, Panasonic NCR18650B имеет на борту 3400mAh, Sanyo ZTA около 3000. Так же, начали появляться (те же Sanyo, Samsung, LG) аккумуляторы с максимальным напряжением заряда 4.35V вместо 4.2. Им нужны, соответственно, другие зарядники.
От одного 18650 хороший фонарь может выдавать 1000 нейтральных стабилизированных люмен в течение часа.
Add:
Забыл сказать, что есть 18650 как с встроенной защитой от переразряда (маленькая платка на плюсовом контакте) так и без нее. Если в фонаре такая защита встроена, то нет необходимости переплачивать за protected версии. Ну и иногда защищенные 18650 не влезают в фонарь, так что лучше заранее этот момент прояснить.
bonus
Аккумуляторы формата 18650 используются в повербанках, от которых можно питать телефон\планшет по USB. Например, вот такой на 4 аккумулятора
Умеет выдавать 2A и в случае использования 4х панасоников на 3400 его общая емкость будет около 13500 mAh
Если вам роднее формат AA/AAA, то из Ni-MH аккумуляторов лучшими считаются Sanyo Eneloop. У них очень низкий саморазряд и приличная ёмкость. Не такая, конечно, как у литиевых, но для EDC/домашнего дежурного использования вполне подойдет.
С одного не литиевого AA лучшие фонари снимают порядка 280 люмен. Такой, например как SC52w от Zebralight
Существуют и литиевые аккумуляторы формата AA(14500) но они распространены меньше и пойдут только в те фонари, где это отдельно оговорено.
Охлаждение
Самый, пожалуй, сложный момент. Далеко не все производители задумываются о качественном теплоотводе для фонарей.
(фонарь FL33 на картинке выше — приятное, но довольно дорогое и эксклюзивное исключение)
Сильный нагрев светодиода ведет к уменьшению светового потока и его постепенной деградации. Так же, это не самым приятным образом сказывается на электронной начинке. Это не сильно критично, если вы «жарите» диод не на полную и не очень долго. Но вообще не будет лишним почитать обзоры и отзывы на профильных форумах.
Модификации
Ну, то есть, под замену может пойти всё, кроме корпуса. Есть даже спец магазины, которые торгуют чисто корпусами\головами и т. п.
Так что, если дружите с паяльником, можете сами себе собрать фонарь под свои хотелки.
Советы
Если просто хочется понять и увидеть как светят современные фонарики, вам подойдет любой на XP-G(2)/XM-L(2) с DX и прочих китайских магазинов. Их марки обычно заканчиваются на «Fire», поэтому их так и называют — «разнофаеры» (только чур не путать с дорогущими американскими SureFire). Там же можно купить недорогие(но и качества от них не ждите) 18650. На первое время хватит, но чтоб не портить впечатление от пользования, на питании и зарядке лучше не экономить.
Если хочется чего то большего, то велкам на профильные форумы вроде фонаревки. Там тусуются как флешаголики, так и разработчики. Можно почитать обзоры, посмотреть бимшоты, поучаствовать в холиварах и сделать свой выбор. Ну или заказать себе кастомный фонарь, как это в итоге сделал я.
Ramping driver фонарь что
ИМХО для удобной плавной регулировки нужна полноценная обратная связь (желательно экран), иначе это постоянное свечение непонятно на чем.
Рампинги появились сравнительно недавно и то все BLF-оподобные.
Ну у меня то давно есть. И мне нравится.
fnksb, как всегда всё разложил по полочкам. Я согласен. Апсолютно.
Но настраивать (как в Зебре новой, например, или в тех же БЛФ-х мне совсем не нравится:(
Я лучше плавную настройку выберу.
Представь себе авто, в котором вся светотехника переключается одной кнопкой
Предпочитаю набор режимов чем плавную регулировку.
Как сказал fnksb, без адекватной индикации фиг поймёшь на сколько лупит фонарь, ибо у глаза диафрагму не зафиксировать ))
Но: почему бы не иметь оба режима работы в фонаре?
Не даю Зебры неподготовленным (если человек обучаем, то объясняю алгоритм смены режимов удержанием и вкл/выкл не нажатием, а кликом).
на плавную регулировку внимание стали обращать относительно недавно.Кстати, лет 10 назад плавная регулировка была достаточно популярна (и сейчас сохранилась во многих бюджетниках из ларька).
И даже у Олайта или там iTP когда-то давно были плавные интерфейсы.
Интересные результаты опроса восьмилетней давности (http://forum.fonarevka.ru/showthread.php?t=6906).
Правда, там и вопрос ставился не как противопоставление «дискрет vs плавная», а просто «хорошо это или плохо».
Ну и это период относительной популярности кольцевиков, и надежд на то что они станут еще лучше (увы, не слишком оправдавшихся). В то время как дискретные интерфейсы тогда в массе своей были еще довольно примитивны.
Сейчас другая ситуация, кольцевики практически исчезли (увы), зато распространились фонари с тактовыми кнопками и плавными UI, достаточно популярные у фонаревщиков.
На НУЖНЫХ 🙂
Выставил сколько надо, чтобы значить комфортно и ладно.
Зачем так важно ЗНАТЬ?
Мне все равно на люмены, в моих фонариках знаю три вида мощности
самый малый, средний и максимальный. Точнее мне не нужно.
Наверное важно знать если в пещеры лазить, когда действительно надо знать более менее точное время работы фонаря.
То есть для обратной связи нужно что-то большее, не просто моргания основным светом. Кстати, на Метеоре ЕМНИП есть возможность оценивать яркость через подстветку кнопки. Но там другая проблема, вся возможная индикация (а ее там много) вешается на одну и ту же подсветку, что в итоге зачастую вызывает негатив. Типа «а что это он мигает разным, это вот сейчас режим, перегрев или индикатор батареи или еще что-то».
На магнитных кольцах много было экспериментов, но все-таки-то недоделанные. Найткор в SRT вроде наконец почти дошел до чего-то пристойного, и казалось что «вот уже сейчас наконец научатся». А потом все заглохло как-то. Я так понимаю, что дорого и сложно, там и качество электроники должно быть весьма приличным, и механика, и очень много вопросов к стабильности при длительном юзе (вся грязь-пыль все равно забивается и начинает ухудшать ход кольца).
Мне нужно знать статус по одному только взгляду на фонарь за доли секунды
Это как, во время работы фонаря? Или перед включением?
Впрочем, мы об этом уже столько дискутировали:)) В итоге в Юникорне будут два варианта, плюс возможность подстроить их разными фишечками.
В квадрофонаре будет экран, что даст еще и обратную связь нормальную.
У меня такое было. С Зеброй. Зебра вообще плохо умеет переключаться между режимами на работающем фонаре, за это в том числе ее и не люблю =)
Другое дело, что он с другими индикаторами не должен путаться, а отдельно лепить его хлопотно
залил неизвестно сколько бензина в бак с неизвестным объёмом в автомобиль с неизвестным расходом топлива и без датчика топлива. И вправду, зачем знать, когда и где машина заглохнет.
Подождёмс.
То есть, вы второй в очереди? )
Вот ползунок бы я хотеть. Это лучше, чем кнопкой имитировать плавный регулятор. Но механически его как реализовать?
Вариант с двумя кнопками одна под другой не рассматривается? Одна кнопка вверх, другая вниз или для действия «вернуться в предыдущий режим» после регулировки яркости под «прохват».
А как его сразу включить, если мне нужно режимов 10 минимум? На какие комбинации кликов то их распихивать, чтоб было быстрее рампинга?
Вам нужно от 10 режимов а ещё лучше рампинг, мне сейчас достаточно 3-4 режима. Если реализовать все возможные варианты управления в фонаре, то каждый сможет выбрать для себя оптимальный. Плюс отдельный индикатор для АКБ. Но сколько такой фонарь будет стоить и кто его возьмётся делать?
Кто-нибудь сравнивал скорость рампинга против дискрета?
Не в Юникорне, а в фонарях, заточенных на управление либо рампингом, либо дискретом.
В G18 я откручиваю крышку, достаю аккум, и меряю его, блин, мультиметром, чтоб оценить оставшийся запас энергии. Это что за прошлый век? Люди, вы как вообще таким пользуетесь.
Напрашивается обновление модели?
А что если так: делаем дискретные режимы 0,01 лм, 0,02-0,05-0.1-0,2-0,5-1-2-5-10-20-50-и так до миллиона, а потом переключаем удержанием и яркость как будто плавно растет? Как говорится «ни нашим, ни вашим»?Чтоб всем было плохо? И четкости дискрета нет, и плавности плавной? Зачем?;))
Если реализовать все возможные варианты управления в фонареВсе возможные вообще едва ли можно реализовать (если мы говорим не о «рампинг и дискрет», а о 100500 вариантах рампинга и дискрета).
Фактически под это нужна очень гибкая программа, позволяющая юзеру настроить UI полностью самостоятельно (рампинг-дискрет, скорость переключения, тайминги кнопки, различную реакцию на команды из разных положений и т.п.). Это уже по сути получается не UI, а некая оболочка, средствами которой пользователь создает свой личный UI.
Люкс что-то подобное пытался делать, но кажется не пошло (и там вроде тоже было много ограничений).
И разумеется, это надо делать с компа, а не мучая кнопку.
Кто-нибудь сравнивал скорость рампинга против дискрета?Тут уж как программист сделает, так и будет. Зависит от скорости переключения и количества режимов.
Плюс в хороших дискретах помимо обычной линейной смены режимов часто используются «прыжки», как скажем быстрый доступ к максимуму или к настроенному режиму, с возвратом обратно.
Впрочем, в плавной они тоже могут быть (что по сути приближает плавную регулировку к дискретной). Все это несколько затрудняет корректный расчет скорости.
Все возможные вообще едва ли можно реализовать (если мы говорим не о «рампинг и дискрет», а о 100500 вариантах рампинга и дискрета).
Можете привести пример нескольких из 100500 вариантов рампинга и дискрета в одном фонаре?
И разумеется, это надо делать с компа, а не мучая кнопку.
И на сколько это увеличит конечную цену?
Тут уж как программист сделает, так и будет. Зависит от скорости переключения и количества режимов.
Плюс в хороших дискретах помимо обычной линейной смены режимов часто используются «прыжки», как скажем быстрый доступ к максимуму или к настроенному режиму, с возвратом обратно.
Впрочем, в плавной они тоже могут быть (что по сути приближает плавную регулировку к дискретной). Все это несколько затрудняет корректный расчет скорости.
То есть у Вас нет практических данных сравнения в наиболее типичных сценариях использования фонаря?
Можете привести пример нескольких из 100500 вариантов рампинга и дискрета в одном фонаре?Не понял вопроса.
Может быть очень много вариантов плавной регулировки (с разной скоростью, реализацией разворота, крайних позиций), еще больше вариантов дискретного управления (трунайтовская, скилхантовская, зебровская, и еще куча других вариантов и подвариантов), и поверх этого всего куча вариантов подвешивания памяти и доп-команд.
Не понял вопроса.
Вы всё правильно поняли.
Может быть очень много вариантов плавной регулировки (с разной скоростью, реализацией разворота, крайних позиций),
Это настройки одного и того-же варианта, которые пойдут только на пользу фонарю.
еще больше вариантов дискретного управления (трунайтовская, скилхантовская, зебровская, и еще куча других вариантов и подвариантов), и поверх этого всего куча вариантов подвешивания памяти и доп-команд.
Тут действительно несколько вариантов (но не 100500).
Программные автоматы всех вариантов и их настройки общие. Их добавление не потребует огромного количества памяти.
Вы же сами писали, что под разные задачи востребовано разное управление.
Кроме трунайтовского, другие варианты управления тоже имеют право на жизнь. Тем более, что их реализация чисто программная.
Нет, не «у меня нет практических данных», а исходный вопрос бессмысленный по причине разнообразия реализаций, подходов к управлению и типичных сценариев
Под лежачий камень вода не течёт.
По большому счету, даже отключение памяти в обычных G18/G180/S15 уже дает два существенно отличающихся по подходу варианта управления, хотя формально мы меняем только одну настройку. А в Панде-2MCRI еще и подрежимы добавлены, еще один возможный вариант управления.
Да, конечно там можно было сделать еще больше. Ну так всегда можно сделать еще больше =)
Тем более, что их реализация чисто программная.Программист тоже человек, он хочет иногда спать и что-нибудь есть =)
Тем более что ему потом все это тестировать и отлаживать.
достаточно быстро? )
Еще бы ЯЛ не медлил со стартом продаж. )
То есть у Вас нет практических данных сравнения в наиболее типичных сценариях использования фонаря?
Представил как два ЯЛовца соревнуются в лесу кто быстрее подсветит воонтуу какаху на тропинке. Ну или макет)))
2-3-4 будет достаточно (даже 2 варианта будет уже хорошо).
И все 4 варианта с секундным удержанием кнопки для включения либо выключения фонаря? Ну уж нет, надо гораздо больше!
15 в качестве компромисса =)
TinyFL — драйвер фонарика на микроконтроллере
Хочу рассказать историю о том, как мне в руки попал китайский налобный фонарик на светодиоде Cree XM-L и что дальше с ним стало.
Предыстория
Когда-то давно я заказал с одного китайского сайта фонарик с ярким светодиодом. Фонарик оказался довольно эргономичным (хотя он мог быть и полегче), но вот его драйвер оставлял желать лучшего.
Светил он достаточно ярко, но у драйвера было только 3 режима — очень яркий, яркий и стробоскоп, переключение между которыми производилось нажатием кнопки. Для того, чтобы просто включить и выключить фонарь, требовалось каждый раз перебирать эти 3 режима. Вдобавок, этот фонарик, будучи включенным, разряжал батарею до последнего – так пара моих банок 18650 ушли в глубокий разряд.
Все это было неудобно и надоедало, поэтому в какой-то момент я решил сделать для него свой драйвер, о чем и будет дальнейшее повествование.
Вот такой фонарик, наверняка многие имели дело с подобными
Так выглядит оригинальный драйвер
Техническое задание
Как известно, для достижения хорошего результата любая разработка должна иметь хорошее ТЗ, поэтому постараюсь сформулировать его для себя. Итак, драйвер должен:
Ну и если фонарик подвергается моддингу, почему бы не встроить в него зарядное устройство с 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
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, китайцы его проверили и плата отправилась на производство.
Спустя пару-тройку недель мне пришли те же самые платы, только красивенькие изготовленные промышленным способом. Их остается только распаять и залить в них прошивку.
Программа (прошивка)
Основная трудность, которая возникла при написании прошивки драйвера, связана она с крайне малым размером flash-памяти — у Attiny13 ее всего-навсего 1024 байта.
Так же, поскольку изменение яркости плавное, нетривиальной задачей оказалось равномерное ее изменение — для этого пришлось делать гамма-коррекцию.
Алгоритм управления драйвером
Драйвер включается по короткому нажатию на кнопку, выключается по нему же.
Выбранный режим яркости сохраняется на время выключения.
Если во время работы сделать двойное короткое нажатие кнопки (двойной клик), будет включен/выключен дополнительный светодиод.
При длинном нажатии во время работы начнет плавно изменяться яркость фонаря. Повторное длинное нажатие изменяет направление (сильнее/слабее).
Драйвер периодически проверяет напряжение батареи, и если оно ниже установленных значений, предупреждает пользователя о разряде, а затем отключается во избежание глубокого разряда.
Управление яркостью светодиода
Как известно, самый простой способ управлять яркостью — изменять скважность ШИМ, при этом светодиод на какое-то время включается на полную яркость, затем выключается. Из-за особенностей человеческого глаза кажется, что светодиод светит менее ярко, чем если бы он был включен постоянно. Поскольку светодиод подключен через 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) может превышать значение в 3А. В этом случае данный драйвер Вам скорее всего не подойдет, так как есть риск выхода светодиода из строя. Тем не менее, можно скорректировать параметр 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.
Для редактирования исходного кода нужно будет поставить Arduino IDE с поддержкой Attiny13(a) или Atmel Studio – оно не сложнее, чем Arduino IDE, но гораздо удобнее.
Проект для этого 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, где xx — максимальная яркость от 0 до 255).
Калибровка АЦП не является обязательной процедурой, но если хочется, чтобы драйвер точно отслеживал пороговое напряжение, то придется с этим повозиться.
Расчеты не дадут высокой точности измерений, т. к. во-первых, номиналы резисторов могут варьироваться в пределах допуска (обычно 1-5%), а во-вторых, внутренний ИОН может иметь разброс от 1.0 до 1.2 В.
Поэтому, единственный приемлемый способ — выставить значение в единицах АЦП (BAT_WARNING и BAT_SHUTDOWN), экспериментально подбирая его под нужное. Для этого понадобится терпение, программатор и регулируемый источник питания.
Я выставлял в прошивке значение BAT_PERIOD в 1000 (проверка напряжения раз в секунду) и постепенно снижал напряжение питания. Когда драйвер начинал предупреждать о разряде, я оставлял текущее значение BAT_WARNING как нужное.
Это не самый удобный способ, возможно в будущем надо сделать процедуру автоматической калибровки с сохранением значений в EEPROM.
Сборка фонарика
Когда плата была готова и прошивка была залита, можно было наконец ставить ее на место старого драйвера. Я выпаял старый драйвер и припаял на его место новый.
Проверив, нет ли короткого замыкания по питанию, подключил питание и проверил работоспособность. Затем смонтировал плату зарядки (TP4056), для этого пришлось немного дремелем рассверлить отверстие разъема зарядки, и зафиксировал ее термоклеем (тут важно было, чтобы клей не затек в разъем, достать его оттуда будет сложно).
Я не стал прикручивать плату винтами, т. к. резьба в корпусе сорвалась от многократных закручиваний, а просто залил ее клеем, провода тоже заклеил в местах пайки, дабы они не перетирались. Драйвер и ЗУ я решил покрыть акриловым бесцветным лаком, это должно помочь от коррозии.
Тестирование и расчет стоимости изготовления
После всех операций можно было приступать к тестированию драйверов. Ток измерял обычным мультиметром, подключив его в разрыв цепи питания.
Энергопотребление старого драйвера (измерялось при 4.04 В):
Энергопотребление нового драйвера (измерялось при 4.0 В):
Цена вопроса
Если покупать компоненты в Чип и Дипе, выйдет около 100р (60р Attiny13,
40р остальная рассыпуха). С китая заказывать имеет смысл, если делается несколько штук — тогда в пересчете на штуку выйдет дешевле, китайцы продают как правило партиями от 10 штук.
Платы выйдут по цене в районе 300р за 10 штук (без доставки), если заказывать их в Китае.
Распайка и прошивка одного драйвера у меня занимает где-то час.
Заключение
Китайский фонарик стал гораздо удобнее, хотя теперь у меня появились претензии к его механике — передняя часть слишком тяжелая, да и фокусировка не особо нужна.
В будущем планирую сделать версию этого драйвера для фонарей с кнопкой по питанию (с фиксацией). Правда, меня смущает обилие подобных проектов. Как вы считаете, стоит ли делать еще один такой?
Драйвер крупным планом (версия 2_t)
UPD: Добавлена поддержка Arduino IDE.