13 схем индикаторов разряда Li-ion аккумуляторов: от простых к сложным
Что может быть печальнее, чем внезапно севший аккумулятор в квадрокоптере во время полета или отключившийся металлоискатель на перспективной поляне? Вот если бы можно было бы заранее узнать, насколько сильно заряжен аккумулятор! Тогда мы могли бы подключить зарядку или поставить новый комплект батарей, не дожидаясь грустных последствий.
И вот тут как раз рождается идея сделать какой-нибудь индикатор, который заранее подаст сигнал о том, что батарейка скоро сядет. Над реализацией этой задачи пыхтели радиолюбители всего мира и сегодня существует целый вагон и маленькая тележка различных схемотехнических решений — от схем на одном транзисторе до навороченных устройств на микроконтроллерах.
Далее будут представлены только те индикаторы разряда li-ion аккумуляторов, которые не только проверены временем и заслуживают вашего внимания, но и с легкостью собираются своими руками.
Вариант №1
Начнем, пожалуй, с простенькой схемки на стабилитроне и транзисторе:
Разберем, как она работает.
Пока напряжение выше определенного порога (2.0 Вольта), стабилитрон находится в пробое, соответственно, транзистор закрыт и весь ток течет через зеленый светодиод. Как только напряжение на аккумуляторе начинает падать и достигает значения порядка 2.0В + 1.2В (падение напряжение на переходе база-эмиттер транзистора VT1), транзистор начинает открываться и ток начинает перераспределяться между обоими светодиодами.
Если взять двухцветный светодиод, то мы получим плавный переход от зеленого к красному, включая всю промежуточную гамму цветов.
Типовое различие прямого напряжения в двухцветных светодиодах составляет 0.25 Вольта (красный зажигается при более низком напряжении). Именно этой разницей определяется область полного перехода между зеленым и красным цветом.
Таким образом, не смотря на свою простоту, схема позволяет заранее узнать, что батарейка начала подходить к концу. Пока напряжение на аккумуляторе составляет 3.25В или более, горит зеленый светодиод. В промежутке между 3.00 и 3.25V к зеленому начинает подмешиваться красный — чем ближе к 3.00 Вольтам, тем больше красного. И, наконец, при 3V горит только чисто красный цвет.
Недостаток схемы в сложности подбора стабилитронов для получения необходимого порога срабатывания, а также в постоянном потреблении тока порядка 1 мА. Ну и, не исключено, что дальтоники не оценят эту задумку с меняющимися цветами.
Кстати, если в эту схему поставить транзистор другого типа, ее можно заставить работать противоположным образом — переход от зеленого к красному будет происходить, наоборот, в случае повышения входного напряжения. Вот модифицированная схема:
Вариант №2
В следующей схеме использована микросхема TL431, представляющая собой прецизионный стабилизатор напряжения.
Порог срабатывания определяется делителем напряжения R2-R3. При указанных в схеме номиналах он составляет 3.2 Вольта. При снижении напряжения на аккумуляторе до этого значения, микросхема перестает шунтировать светодиод и он зажигается. Это будет сигналом к тому, что полный разряд батареи совсем близок (минимально допустимое напряжение на одной банке li-ion равно 3.0 В).
Если для питания устройства применяется батарея из нескольких последовательно включенных банок литий-ионного аккумулятора, то приведенную выше схему необходимо подключить к каждой банке отдельно. Вот таким образом:
Для настройки схемы подключаем вместо батарей регулируемый блок питания и подбором резистора R2 (R4) добиваемся зажигания светодиода в нужный нам момент.
Вариант №3
А вот простая схема индикатора разрядки li-ion аккумулятора на двух транзисторах:Порог срабатывания задается резисторами R2, R3. Старые советские транзисторы можно заменить на BC237, BC238, BC317 (КТ3102) и BC556, BC557 (КТ3107).
Вариант №4
Схема на двух полевых транзисторах, потребляющая в ждущем режиме буквально микротоки.
При подключении схемы к источнику питания, положительное напряжение на затворе транзистора VT1 формируется с помощью делителя R1-R2. Если напряжение выше напряжение отсечки полевого транзистора, он открывается и притягивает затвор VT2 на землю, тем самым закрывая его.
В определенный момент, по мере разряда аккумулятора, напряжение, снимаемое с делителя становится недостаточным для отпирания VT1 и он закрывается. Следовательно, на затворе второго полевика появляется напряжение, близкое к напряжению питания. Он открывается и зажигает светодиод. Свечение светодиода сигнализирует нам о необходимости подзаряда аккумулятора.
Транзисторы подойдут любые n-канальные с низким напряжением отсечки (чем меньше — тем лучше). Работоспособность 2N7000 в этой схеме не проверялась.
Вариант №5
На трех транзисторах:
Думаю, схема не нуждается в пояснениях. Благодаря большому коэфф. усиления трех транзисторных каскадов, схема срабатывает очень четко — между горящим и не горящим светодиодом достаточно разницы в 1 сотую долю вольта. Потребляемый ток при включенной индикации — 3 мА, при выключенном светодиоде — 0.3 мА.
Не смотря на громоздкий вид схемы, готовая плата имеет достаточно скромные габариты:
С коллектора VT2 можно брать сигнал, разрешающий подключение нагрузки: 1 — разрешено, 0 — запрещено.
Транзисторы BC848 и BC856 можно заменить на ВС546 и ВС556 соответственно.
Вариант №6
Эта схема мне нравится тем, что она не только включает индикацию, но и отрубает нагрузку.
Жаль только, что сама схема от аккумулятора не отключается, продолжая потреблять энергию. А жрет она, благодаря постоянно горящему светодиоду, немало.
Зеленый светодиод в данном случае выступает в роли источника опорного напряжения, потребляя ток порядка 15-20 мА. Чтобы избавиться от такого прожорливого элемента, вместо источника образцового напряжения можно применить ту же TL431, включив ее по такой схеме*:
*катод TL431 подключить ко 2-ому выводу LM393.
Вариант №7
Схема с применением так называемых мониторов напряжения. Их еще называют супервизорами и детекторами напряжения (voltdetector'ами). Это специализированные микросхемы, разработанные специально для контроля за напряжением.
Вот, например, схема, поджигающая светодиод при снижении напряжения на аккумуляторе до 3.1V. Собрана на BD4731.
Согласитесь, проще некуда! BD47xx имеет открытый коллектор на выходе, а также самостоятельно ограничивает выходной ток на уровне 12 мА. Это позволяет подключать к ней светодиод напрямую, без ограничительных резисторов.
Аналогичным образом можно применить любой другой супервизор на любое другое напряжение.
Вот еще несколько вариантов на выбор:
- на 3.08V: TS809CXD, TCM809TENB713, MCP103T-315E/TT, CAT809TTBI-G;
- на 2.93V: MCP102T-300E/TT, TPS3809K33DBVRG4, TPS3825-33DBVT, CAT811STBI-T3;
- серия MN1380 (или 1381, 1382 — они отличаются только корпусами). Для наших целей лучше всего подходит вариант с открытым стоком, о чем свидетельствует дополнительная циферка "1" в обозначении микросхемы — MN13801, MN13811, MN13821. Напряжение срабатывания определяется буквенным индексом: MN13811-L как раз на 3,0 Вольта.
Также можно взять советский аналог — КР1171СПхх:
В зависимости от цифрового обозначения, напряжение детекции будет разным:
Сетка напряжений не очень-то подходит для контроля за li-ion аккумуляторами, но совсем сбрасывать эту микросхему со счетов, думаю, не стоит.
Неоспоримые достоинства схем на мониторах напряжения — чрезвычайно низкое энергопотребление в выключенном состоянии (единицы и даже доли микроампер), а также ее крайняя простота. Зачастую вся схема умещается прямо на выводах светодиода:
Чтобы сделать индикацию разряда еще более заметной, выход детектора напряжения можно нагрузить на мигающий светодиод (например, серии L-314). Или самому собрать простейшую "моргалку" на двух биполярных транзисторах.
Пример готовой схемы, оповещающей о севшей батарейке с помощью вспыхивающего светодиода приведен ниже:
Еще одна схема с моргающим светодиодом будет рассмотрена ниже.
Вариант №8
Крутая схема, запускающая моргание светодиода, если напряжение на литиевом аккумуляторе упадет до 3.0 Вольта:
Эта схема заставляет вспыхивать сверхяркий светодиод с коэффициентом заполнения 2.5% (т.е. длительная пауза — коротка вспышка — опять пауза). Это позволяет снизить потребляемый ток до смешных значений — в выключенном состоянии схема потребляет 50 нА (нано!), а в режиме моргания светодиодом — всего 35 мкА. Сможете предложить что-нибудь более экономичное? Вряд ли.
Как можно было заметить, работа большинства схем контроля за разрядом сводится к сравнению некоего образцового напряжения с контролируемым напряжением. В дальнейшем эта разница усиливается и включает/отключает светодиод.
Обычно в качестве усилителя разницы между опорным напряжением и напряжением на литиевом аккумуляторе используют каскад на транзисторе или операционный усилитель, включенный по схеме компаратора.
Но есть и другое решение. В качестве усилителя можно применить логические элементы — инверторы. Да, это нестандартное использование логики, но это работает. Подобная схема приведена в следующем варианте.
Вариант №9
Схема на 74HC04.
Рабочее напряжение стабилитрона должно быть ниже напряжение срабатывания схемы. Например, можно взять стабилитроны на 2.0 — 2.7 Вольта. Точная подстройка порога срабатывания задается резистором R2.
Схема потребляет от батареи около 2 мА, так что ее тоже надо включать после выключателя питания.
Вариант №10
Это даже не индикатор разряда, а, скорее, целый светодиодный вольтметр! Линейная шкала из 10 светодиодов дает наглядное представление о состоянии аккумулятора. Весь функционал реализован всего на одной-единственной микросхеме LM3914:
Делитель R3-R4-R5 задает нижнее (DIV_LO) и верхнее (DIV_HI) пороговые напряжения. При указанных на схеме значениях свечению верхнего светодиода соответствует напряжение 4.2 Вольта, а при снижении напряжения ниже 3х вольт, погаснет последний (нижний) светодиод.
Подключив 9-ый вывод микросхемы на "землю", можно перевести ее в режим "точка". В этом режиме всегда светится только один светодиод, соответствующий напряжению питания. Если оставить как на схеме, то будет светиться целая шкала из светодиодов, что нерационально с точки зрения экономичности.
В качестве светодиодов нужно брать только светодиоды красного свечения, т.к. они обладают самым малым прямым напряжением при работе. Если, например, взять синие светодиоды, то при севшем до 3х вольт аккумуляторе, они, скорее всего, вообще не загорятся.
Сама микросхема потребляет около 2.5 мА, плюс 5 мА на каждый зажженный светодиод.
Недостатком схемы можно считать невозможность индивидуальной настройки порога зажигания каждого светодиода. Можно задать только начальное и конечное значение, а встроенный в микросхему делитель разобьет этот интервал на равные 9 отрезков. Но, как известно, ближе к концу разряда, напряжение на аккумуляторе начинает очень стремительно падать. Разница между аккумуляторами, разряженными на 10% и 20% может составлять десятые доли вольта, а если сравнить эти же аккумуляторы, только разряженненные на 90% и 100%, то можно увидеть разницу в целый вольт!
Типичный график разряда Li-ion аккумулятора, приведенный ниже, наглядно демонстрирует данное обстоятельство:
Таким образом, использование линейной шкалы для индикации степени разряда аккумулятора представляется не слишком целесообразным. Нужна схема, позволяющая задать точные значения напряжений, при которых будет загораться тот или иной светодиод.
Полный контроль над моментами включения светодиодов дает схема, представленная ниже.
Вариант №11
Данная схема является 4-разрядным индикатором напряжения на аккумуляторе/батарейке. Реализована на четырех ОУ, входящих в состав микросхемы LM339.
Схема работоспособна вплоть до напряжения 2 Вольта, потребляет меньше миллиампера (не считая светодиода).
Разумеется, для отражения реального значения израсходованной и оставшейся емкости аккумулятора, необходимо при настройке схемы учесть кривую разряда используемого аккумулятора (с учетом тока нагрузки). Это позволит задать точные значения напряжения, соответствующие, например, 5%-25%-50%-100% остаточной емкости.
Вариант №12
Ну и, конечно, широчайший простор открывается при использовании микроконтроллеров со встроенным источником опорного напряжения и имеющих вход АЦП. Тут функционал ограничивается только вашей фантазией и умением программировать.
Как пример приведем простейшую схему на контроллере ATMega328.
Хотя тут, для уменьшения габаритов платы, лучше было бы взять 8-миногую ATTiny13 в корпусе SOP8. Тогда было бы вообще шикарно. Но пусть это будет вашим домашним заданием.
Светодиод взят трехцветный (от светодиодной ленты), но задействованы только красный и зеленый.
Готовую программу (скетч) можно скачать по этой ссылке.
Программа работает следующим образом: каждые 10 секунд опрашивается напряжение питания. Исходя из результатов измерений МК управляет светодиодами с помощью ШИМ, что позволяет получать различные оттенки свечения смешением красного и зеленого цветов.
Свежезаряженный аккумулятор выдает порядка 4.1В — светится зеленый индикатор. Во время зарядки на АКБ присутствует напряжение 4.2В, при этом будет моргать зеленый светодиод. Как только напряжение упадет ниже 3.5В, начнет мигать красный светодиод. Это будет сигналом к тому, что аккумулятор почти сел и его пора заряжать. В остальном диапазоне напряжений индикатор будет менять цвет от зеленого к красному (в зависимости от напряжения).
Вариант №13
Ну и на закуску предлагаю вариант переделки стандартной платы защиты (их еще называют контроллерами заряда-разряда), превращающий ее в индикатор севшего аккумулятора.
Эти платы (PCB-модули) добываются из старых батарей мобильных телефонов чуть ли не в промышленных масштабах. Просто подбираете на улице выброшенный аккумулятор от мобилы, потрошите его и плата у вас в руках. Все остальное утилизируете как положено.
Чаще всего PCB-плата представляет собой вот такую схемку:
Микросборка 8205 — это два миллиомных полевика, собранных в одном корпусе.
Внеся в схему некоторые изменения (показаны красным цветом), мы получим прекрасный индикатор разряда li-ion аккумулятора, практически не потребляющий ток в выключенном состоянии.
Так как транзистор VT1.2 отвечает за отключение зарядного устройства от банки аккумулятора от при перезаряде, то он в нашей схеме лишний. Поэтому мы полностью исключили этот транзистор из работы, разорвав цепь стока.
Резистор R3 ограничивает ток через светодиод. Его сопротивление необходимо подобрать таким образом, чтобы свечение светодиода было уже заметным, но потребляемый ток еще не был слишком велик.
Кстати, можно сохранить все функции модуля защиты, а индикацию сделать с помощью отдельного транзистор, управляющий светодиодом. То есть индикатор будет загораться одновременно с отключением аккумулятора в момент разряда.
Вместо 2N3906 подойдет любой имеющийся под рукой маломощный p-n-p транзистор. Просто подпаять светодиод напрямую не получится, т.к. выходной ток микросхемы, управляющий ключами, слишком мал и требует усиления.
Как, наверное, не сложно догадаться, схемы могут быть использованы и наоборот — в качестве индикатора заряда.
О реализации индикатора батареи в устройствах на МК
В портативном устройстве, работающем от аккумулятора, почти обязательным «удобством» является индикатор уровня его заряда. Казалось бы, если оно собрано на основе любого современного микроконтроллера и имеет графический дисплей, ничего сложного в этом нет: нужно лишь регулярно измерять напряжение батарейки с помощью встроенного АЦП и выводить его в виде традиционной батарейки, степень заполнения которой зеленой краской зависит от напряжения. Но если так сделать в лоб, есть риск, что индикатор будет вести себя, как в известном перле «она металась, как стрелка осциллографа». В лучшем случае, он будет время от времени раздражающе подергиваться туда-сюда на один-два пикселя.
В статье описывается простая реализация индикатора разряда, лишенная этого недостатка.
Проблема «дергающейся батарейки»
Типичные разрядные характеристики литий-ионного аккумулятора при различных токах
Причин такой нестабильности показаний индикатора несколько. Для начала, нужно отметить, что напряжение почти полностью заряженного литий-ионного аккумулятора – 4,0 В, а почти полностью разряженного — 3,4-3,5 В. Соответственно, перепад от 0 до 100% соответствует всего 0,5-0,6 В, то есть индикация заряда с шагом 10% требует точности измерения напряжения не хуже 1%. При этом метрологические характеристики «вольтметра», встроенного в устройство, чаще всего достаточно скверные, потому что всерьез к проектированию этого узла относятся достаточно редко. Да и само напряжение, поступающее на устройство, потребление тока которым постоянно меняется в интервале от нескольких до 150-200 миллиампер, с учетом его подключения через невысокого качества китайский разъем типа JST – тоже непостоянно. При непостоянном токе потребления, зависимость разрядной характеристики аккумулятора от тока разряда – самое главное препятствие для точного определения заряженности по напряжению. Поэтому в смартфонах и ноутбуках для этого чаще применяют другой подход – специализированный контроллер подсчитывает кулоны, пошедшие на зарядку батареи и затраченные затем при разряде, а напряжение при этом играет вспомогательную роль.
Но мы не будем забираться в такие дебри. Способ этот дает прекрасные результаты, но он не так прост в реализации: такие контроллеры сложно достать в розницу, трудно паять вручную, и вдобавок их нужно прошивать на требуемые параметры аккумулятора с помощью платной программы и не менее платного программатора. Тем более, что простыми средствами тоже можно достичь неплохих результатов, пусть и не таких точных.
Решение
Черная линия – измеренное напряжение, красная – то, что мы будем использовать для определения уровня заряда.
Предлагаемая идея состоит в том, что раз потребление тока устройством меняется и наибольшая просадка напряжения происходит в моменты наибольшего потребления, нужно фиксировать напряжение именно в такие моменты. Это логично, так разряженный аккумулятор еще может долгое время «тянуть» устройство, пока оно находится в малопотребляющем режиме, но быстро просядет ниже минимально допустимого напряжения, когда потребление подскочит, например, при включении дисплея. При этом очевидно, что когда аккумулятор разряжается, степень его заряженности может только снижаться, но никак не увеличиваться. И наоборот, когда аккумулятор заряжается – степень его заряженности только возрастает, несмотря на то, что измеренное значение напряжения может в какие-то моменты падать из-за помех и т.п. Поэтому давайте будем во время разряда игнорировать поступающие данные об изменениях напряжения, если оно растет, считать этот рост артефактом. Делается это элементарно – путем сравнения каждого следующего значения измеренного напряжения с ранее зафиксированным минимальным, которое обновляется каждый раз, когда измеренное значение окажется ниже него. Во время заряда мы поступим аналогично, но фиксировать будем не минимумы, а максимумы.
Разумеется, нам здесь понадобится некий сигнал от зарядного устройства, информирующий о том, в каком состоянии (заряд или разряд) находится аккумулятор. Обычно контроллеры заряда литиевых аккумуляторов имеют выход на светодиод или пару светодиодов, который несложно завести на GPIO контроллера.
Тут нужно учесть еще и то, что кривые разряда и заряда существенно различаются. Поэтому по смене статуса зарядного контроллера нам нужно сменить не только направление работы индикатора, но и формулу расчета процентов заряженности от напряжения. А также то, что на протяжении этапа CV, на который приходится примерно 25-30% емкости батареи и половина времени заряда, индикатор будет показывать 100%, если мы будем принимать во внимание только напряжение. Можно так и оставить (сделав внятную индикацию, что зарядка еще не окончена), а можно заморочиться и вычислять на этом этапе проценты заряженности, как линейную (или более сложную) функцию от времени.
Нижеприведенный код на Си реализует самый простой вариант описанного алгоритма. Здесь мы считаем, что полностью разряженная батарейка при разряде дает 3,4 В. Чем это обусловлено? Во-первых, тем, что примерно с этого напряжения начинается быстрый спад напряжения, и дальнейший разряд не дает существенно большего времени работы. Во-вторых, если питать МК от аккумулятора через LDO на 3,3 В, при снижении напряжения ниже этого значения начинает падать и напряжение питания МК. В некоторых случаях это не очень желательно, и в частности, в данной задаче пришлось бы задействовать встроенный источник опорного напряжения, чтобы измерить напряжение батареи в 3,3В и ниже. Та же полностью разряженная батарея при включении заряда сразу увеличивает напряжение до 3,65 В, я же взял 3,6 В, так как тогда при том же коэффициенте наклона автоматически выходит нужное напряжение на 100% заряженном аккумуляторе 4,2 В.
Далее мы в удобном месте вызываем функцию batPercent, скажем, раз в секунду, и то, что она вернула, передаем в код, рисующий батарейку.
Вот и все. Теперь никаких ненужных колебаний и шевелений, индикатор аккумулятора стоит, как вкопанный, не забывая, впрочем, убавляться по мере разряда. Данный способ, конечно, не претендует на точность измерения остатка заряда, но это обычно и не требуется. При необходимости, конечно, можно усложнить код, добавив в него учет температуры, использовав вместо линейной интерполяции более сложную и точную.
Простой самодельный индикатор уровня заряда аккумулятора
Я поставил цель запилить максимально простой, но в то же время достаточно функциональный индикатор. Для отображения уровня заряда в нем используются 4 светодиода, логика работы проста:
- Горят 4 светодиода — заряд 100% — 75%, напряжение 4.2В — 3.9В
- 3 светодиода — 75% — 50%, напряжение 3.9В — 3.7В
- 2 светодиода — 50% — 25%, напряжение 3.7В — 3.5В
- 1 светодиод — 25% — 0%, напряжение 3.5В — 3.3В
Настройки и режимы работы
Доступные для изменения настройки в прошивке:
UHI здесь задает порог напряжения, выше которого начинает работать индикация перезаряда, остальные (U100, U75, U50, U25) — пороги для зажигания соответствующих светодиодов. При напряжении ниже U25 срабатывает индикация низкого напряжения. Общая формула для вычисления этих пороговых значений в зависимости от номиналов резисторов и напряжения аккумулятора имеет вид:
Где Ubat — напряжение на входе, R1, R2 — значения сопротивлений резисторов делителя. В случае, если МК подключен через диод Шоттки, в формулу добавляется величина падения на диоде Ud:
Но, как я уже говорил, погрешность АЦП у этого типа МК довольно большая, поэтому занесенные мною в прошивку значения слегка отличаются от теоретических. В идеале можно добиться очень высокой точности, но только методом проб и ошибок на конкретном экземпляре микроконтроллера. Для использования индикатора в качестве простого показомера «заряжено» — «разряжено» подойдут и мои значения.
Помимо пороговых значений изменять можно еще 2 параметра: гистерезис UHYS и режим отображения USE_ALL_LEDS. Первый служит для предотвращения мерцания светодиодов при переходе через пороговые напряжения, чем выше значение — тем меньше вероятность мерцаний. Если никаких неожиданных миганий при работе индикатора вы не наблюдаете — то этот параметр трогать нет необходимости. Второй параметр, USE_ALL_LEDS, задает один из двух способов индикации: в случае наличия строки с этим параметром в индикации будут участвовать все «младшие» светодиоды, если же эту строку закомментировать или вовсе удалить — будет гореть только один светодиод, отвечающий за текущий уровень заряда. Как это выглядит — покажу дальше, а пока предлагаю приступить к сборке модуля.
DIY, DIY, DIY
В случае использования МК в исполнении DIP-8 удобнее всего собирать модуль навесным монтажом. В моем случае МК в SOIC-8, поэтому я буду делать плату буквально на коленке и покажу небольшой лайфхак, как можно легко от руки разводить платы для SMD. Первое, что нам для этого нужно — кусок текстолита, размером примерно 20×10мм:
Его даже не обязательно покупать, можно вырезать из ненужной платы какого-либо устройства, покрытые медью площадки такого маленького размера встречаются довольно часто. Далее шкурим и обезжириваем поверхность, затем примеряем наш МК:
Придерживая пинцетом, с помощью тонкого перманентного маркера наносим на будущую плату риски между контактами контроллера:
Так легко и просто мы получаем практически идеальное посадочное место под пайку, и так можно «обрисовать» практически любой SMD компонент:
Далее просто от руки дорисовываем места под резисторы делителя и выводы на светодиоды:
Осталось протравить нарисованную плату, сделать это легко и просто с помощью валяющихся у каждого дома ингредиентов, записываем рецепт:
- Пол рюмки перекиси водорода из аптечки
- Кидаем в нее половину чайной ложки поваренной соли
- Добавляем чайную ложку лимонной кислоты
- Перемешиваем до полного растворения компонентов, если плохо растворяется — смесь можно подогреть
Заливаем прошивку
Для заливки прошивок в контроллеры я приспособил Arduino Nano. Прямо в Arduino Studio есть специальный скетч, который заливается в Nano и превращает его в AVRISP программатор:
В коде скетча перед заливкой в Arduino необходимо предварительно раскомментировать строку #define USE_OLD_STYLE_WIRING:
В результате мы получаем удобный ISP программатор, который можно использовать с avrdude. Подключаем ардуину к микроконтроллеру в соответствии со схемой:
SOIC клипса в таких делах очень сильно выручает, но при ее отсутствии можно подпаяться напрямую к контроллеру. Конденсатор между RESET и GND можно не использовать, все должно работать и без него.
После подключения и проверки всех проводов пытаемся запустить прошивку командой, подставив нужное название файла:
В случае успеха на экране будет что-то типа такого:
Если ошибка — то проверяем в первую очередь провода и правильность установки софта/драйверов, правильность выбора COM-порта. По опыту скажу, что сломать Attiny при прошивке очень сложно, они практически не убиваемые. Ни внезапно отвалившаяся в процессе прошивки клипса, ни баги с софтом на компе ему не страшны. Единственное, чем можно запороть этот МК — это неправильными фьюзами.
Проверяем работоспособность
После удачной прошивки модуль должен сразу заработать, потому что на него подается питание через программатор. Для большей уверенности необходимо подключить его к регулируемому источнику питания и прогнать диапазон 3В — 5В и проверить, что все светодиоды и режимы индикации работают. За неимением ЛБП выйти из положения можно с помощью наборов различных элементов питания: при работе от одной CR2032 модуль должен мигать красным светодиодом, сигнализируя о слишком низком напряжении; при питании от 3xAA или 2xCR2032 должен напротив мигать белый светодиод, обозначая превышение допустимого для Li-ion напряжения. Если при проверке на ЛБП выясняются расхождения с заявленными пороговыми напряжениями и индикацией, то для повышения точности можно методом проб и ошибок найти более точные значения UHI, U100, U.
Примеры работы в гифках
Изменение напряжения от 4.2В до 3.3В и обратно:
Индикация превышения допустимого напряжения:
Те же примеры с удаленной из прошивки строкой USE_ALL_LEDS:
Индикация низкого напряжения:
Продолжаем DIY
Модуль прошит, проверен и отлажен, теперь осталось разместить его в напечатанном ранее корпусе. Вставляем плату:
Для надежности внутренности я залил эпоксидной смолой:
Как оказалось, сделал я это зря) Эпоксидка при застывании расширилась и немного повела корпус, для целей фиксации все же лучше использовать герметик или термоклей.
Переднюю часть для красоты шкурим и тем самым матируем:
Итоговый вид:
Разница в яркости немного портит впечатление, но при желании это можно легко решить.
Выводы
По функциональности самодельный модуль ни в чем не уступает покупным, и при этом имеет кучу преимуществ: