Самодельный индикатор уровня заряда аккумулятора: Часть 2
В прошлом месяце я писал про создание простейшего индикатора уровня заряда li-ion батарейки. В комментариях многие сокрушались, зачем мне это нужно, ведь можно легко купить готовый модуль. Сегодня я расскажу и покажу, зачем мне понадобился именно свой вариант модуля и расскажу о некоторых обновлениях.
Что поменялось
Я прислушался к советам комментаторов и внес некоторые изменения в прошивку. Теперь замеры проводятся при выключенных светодиодах, что в теории должно повысить точность. Также я реализовал программный ШИМ на все 4 канала, так что яркость отдельных светодиодов можно регулировать, не меняя резисторы (константы LED1_MAX, LED2_MAX и т.д.). Раз ШИМ уже есть, то грех было не запилить эффект плавного переключения светодиодов (строка FADE_LEDS):
Больше никаких изменений нет, так что предлагаю посмотреть, куда я уже успел встроить эти поделки.
Пример использования №1
Есть у меня дешевый микшер для караоке, вот такой:
Он весьма плюшевый и шумный, но для использования под градусом сойдет)) Работает он от собственного блока питания на 12В, что доставляет некоторые неудобства, так как нужна свободная розетка, а шнур БП короткий:
Я уже успел пошаманить над ним и заменил ненужные AV выходы на 3.5мм гнезда. Следующим шагом был перевод на литий по классической схеме: повышайка до 12В на MT3608 + 4056 для зарядки лития. Type C разъем для зарядки и герой предыдущего обзора разместились на задней панели:
Получилось просто и на мой взгляд не очень колхозно, какой-нибудь простой LED вольтметр здесь бы выжигал глаза, причем не только светом.
Пример использования №2
На днях я писал про простенький усилитель для наушников. Мне не понравилось, что в нем полностью отсутствует какая-либо индикация текущего уровня заряда, он просто отключается при падении напряжения на аккумуляторе до критических значений. Первым делом я выпаял бесполезный родной светодиод и его ограничительный резистор:
Места в корпусе очень мало, поэтому мне пришлось побыть Левшой и собрать микроскопическую версию индикатора на SMD компонентах, спичка рядом для масштаба:
Собирал на коленке и тыкал паяльником, поэтому строго не судим) Залив для надежности каплей эпоксидки и одев модуль в термоусадку, разместил на плате усилителя и закрепил это дело клеем:
Питание на модуль подается при включении усилителя и берется с выключателя. В работе выглядит так:
Пример использования №3
У многих есть bluetooth колонки, но немногие из таких колонок умеют отображать свой заряд на телефоне, индикация на самом устройстве тоже мало где предусмотрена. Одна из таких есть у меня — SVEN PS-250BL:
У нее есть 2 индикатора: синий слева горит/мигает при работе, красный справа — горит лишь при зарядке. Так как при обычной работе левый индикатор не задействован, я решил приспособить его для отображения уровня батарейки. Разбираем колонку:
Для доступа к отсеку с кнопками нужно дополнительно открутить 3 винта. Кнопки и светодиод индикации процесса зарядки:
Я решил его не трогать, т.к. в целом его работа с новым модулем не пересекается. Для колонки мне потребовался такой же маленький модуль, как и для усилителя. Располагаем индикатор и подпаиваем минусовой контакт к дорожке GND на плате с кнопками:
Положительный контакт подпаиваем к конденсатору на входе преобразователя, напряжение с аккумулятора присутствует на нем только при работе колонки:
В работе:
Простой индикатор заряда и разряда аккумулятора
Данный индикатор заряда аккумулятора основан на регулируемом стабилитроне TL431. С помощью двух резисторов можно установить напряжение пробоя в диапазоне от 2,5 В до 36 В.
Приведу две схемы применения TL431 в качестве индикатора заряда/разряда аккумулятора. Первая схема предназначена для индикатора разрядки, а вторая для индикатора уровня заряда.
Единственная разница — это добавление n-p-n транзистора, который будет включать какой-либо сигнализатор, например, светодиод или зуммер. Ниже приведу способ вычисления сопротивления R1 и примеры на некоторые напряжения.

Схема индикатора разряда аккумулятора
Стабилитрон работает таким образом, что начинает проводить ток при превышении на нем определенного напряжения, порог которого мы можем установить с помощью делителя напряжения на резисторах R1 и R2. В случае индикатора разряда, светодиодный индикатор должен гореть, когда напряжение батареи меньше, чем необходимо. Поэтому в схему добавлен n-p-n транзистор.
Как можно видеть регулируемый стабилитрон регулирует отрицательный потенциал, поэтому в схему добавлен резистор R3, задачей которого является включение транзистора, когда TL431 выключен. Резистор этот на 11k, подобранный методом проб и ошибок. Резистор R4 служит для ограничения тока на светодиоде, его можно вычислить с помощью закона Ома.
Конечно, можно обойтись и без транзистора, но тогда светодиод будет гаснуть, когда напряжение упадет ниже выставленного уровня — схема ниже. Безусловно, такая схема не будет работать при низких напряжениях из-за отсутствия достаточного напряжения и/или тока для питания светодиода. Данная схема имеет один минус, который заключается в постоянном потреблении тока, в районе 10 мА.
Схема индикатора заряда аккумулятора
В данном случае индикатор заряда будет гореть постоянно, когда напряжение больше, чем то, которые мы определили с помощью R1 и R2. Резистор R3 служит для ограничения тока на диод.
Пришло время для того, что всем нравится больше всего — математики
Я уже говорил в начале, что напряжение пробоя может изменяться от 2,5В до 36В посредством входа «Ref». И поэтому, давайте попытаемся кое-что подсчитать. Предположим, что индикатор должен загореться при снижении напряжении аккумулятора ниже 12 вольт.

Сопротивление резистора R2 может быть любого номинала. Однако лучше всего использовать круглые числа (для облегчения подсчета), например 1к (1000 Ом), 10к (10 000 Ом).
Резистор R1 рассчитаем по следующей формуле:
R1=R2*(Vo/2,5В — 1)
Предположим, что наш резистор R2 имеет сопротивление 1к (1000 Ом).
Vo — напряжение, при котором должен произойти пробой (в нашем случае 12В).
R1=1000*((12/2,5) — 1)= 1000(4,8 — 1)= 1000*3,8=3,8к (3800 Ом).
Т. е. сопротивление резисторов для 12В выглядят следующим образом:
А здесь небольшой список для ленивых. Для резистора R2=1к, сопротивление R1 составит:
- 5В – 1к
- 7,2В – 1,88к
- 9В – 2,6к
- 12В – 3,8к
- 15В — 5к
- 18В – 6,2к
- 20В – 7к
- 24В – 8,6к
Для низкого напряжения, например, 3,6В резистор R2 должен иметь бОльшее сопротивление, например, 10к поскольку ток потребления схемы при этом будет меньше.
Обновление (29/10/21)
Резистор R3 для схемы с транзистором можно рассчитать по следующей формуле :
- Umin — минимальное напряжение
- VREF — 2,5 В
- Imin — минимальный ток
Однако значение Umin следует принимать ниже предполагаемого. Для 12В возьмем 11,8 В. Необходимо также добавить 2 мА для правильной работы схемы — чтобы при минимальном напряжении (в нашем случае менее 12 В) через резистор протекал ток более 1 мА.
R3 = (11,8 В — 2,5 В) / 0,002 A = 4650 Ом
Резистор R4 можно рассчитать по следующей формуле:
- Uon — напряжение в рабочем состоянии — включено
- Imin — минимальное значение тока, протекающего через TL431 — возьмем 1 мА
- R3 – рассчитан ранее
- Uled — напряжение на светодиоде
- Iled — ток, протекающий через светодиод
Предположим: Uon = 12 В, Imin_off = 1 мА, R3 = 4,7 кОм , Uled = 2,4 В, Iled = 10 мА.
R4 = (12 В-0,001 А * 4700 Ом-2,4 В) / 0,010 А = 9,6 В-4,7 / 0,010 А = 4,9 / 0,010 А = 490 Ом
Таким образом, у нас будет полностью функциональная схема. Помните, что эта схема может быть нагружена током максимумом 100 мА (один светодиод примерно 25 мА). По схеме индикатора разряда нужно проверить максимальную нагрузку транзистора (для BC547 она составляет 100 мА). Потребление тока самого TL431 составляет всего 1,5 мкА — практически незаметно.
Минимальный порог напряжения — тот, который еще не повредит аккумулятор, составляет 0,9 В на ячейку. Однако все зависит от того, где вы хотите использовать схему, например, в случае летающих радиомоделей, напряжение на ячейку 0,9 В не является правильным, поскольку сигнализация включится только тогда, когда вертолет уже будет лежать на земле. Поэтому с летающими моделями лучше поставить 1,2 В на ячейку и конечно вместо светодиода лучше использовать зуммер.
Простой индикатор заряда батареи на двухцветном светодиоде

В статье предлагаются два варианта индикатора, цвет свечения которого, по мере разряда батареи, изменяется от зеленого до красного. Существует огромное количество схем, предназначенных для выполнения таких функций, но все из них, на мой взгляд, слишком сложны и дороги. Для моего индикатора требуется всего пять компонентов, один из которых – двухцветный светодиод.
Простейший вариант показан на Рисунке 1. Если напряжение на клемме B+ равно 9 В, будет светиться только зеленый светодиод, поскольку напряжение на базе Q1 равно 1.58 В, в то время, как напряжение на эмиттере, равное падению напряжения на светодиоде D1, в типичном случае составляет 1.8 В, и Q1 удерживается в закрытом состоянии. По мере уменьшения заряда батареи напряжение на светодиоде D2 остается практически неизменным, а напряжение на базе уменьшается, и в какой-то момент времени Q1 начнет проводить ток. В результате часть тока станет ответвляться в красный светодиод D1, и эта доля будет увеличиваться до тех пор, пока в красный светодиод не потечет весь ток.
| Рисунок 1. | Базовая схема монитора напряжения батареи. |
Для типичных элементов двухцветного светодиода различие в прямых напряжениях составляет 0.25 В. Именно этим значением определяется область перехода от зеленого цвета свечения к красному. Полная смена цвета свечения, задаваемая соотношением сопротивлений резисторов делителя R1 и R2, происходит в диапазоне напряжений
Середина области перехода от одного цвета к другому определяется разностью напряжений на светодиоде и на переходе база-эмиттер транзистора и равна приблизительно 1.2 В. Таким образом, изменение B+ от 7.1 В до 5.8 В приведет к смене зеленого свечения на красное.
Различия в напряжениях будут зависеть от конкретных комбинаций светодиодов и, возможно, их будет недостаточно для полного переключения цветов. Тем не менее, предлагаемую схему все равно можно использовать, включив диод последовательно с D2.
На Рисунке 2 резистор R1 заменен стабилитроном, в результате чего область перехода становится намного более узкой. Делитель больше не оказывает влияния на схему, и полная смена цвета свечения происходит при изменении напряжения B+ всего на 0.25 В. Напряжение точки перехода будет равно 1.2 В + VZ. (Здесь VZ – напряжение на стабилитроне, в нашем случае равное примерно 7.2 В).
| Рисунок 2. | Схема на основе стабилитрона. |
Недостатком такой схемы является ее привязка к ограниченной шкале напряжений стабилитронов. Еще больше усложняет ситуацию тот факт, что низковольтные стабилитроны имеют слишком плавный излом характеристики, не позволяющий точно определить, каким будет напряжение VZ при малых токах в схеме. Одним из вариантов решения этой проблемы может быть использование резистора, включенного последовательно со стабилитроном, чтобы иметь возможность небольшой подстройки за счет некоторого увеличения напряжения перехода.
При показанных сопротивлениях резисторов схема потребляет ток порядка 1 мА. Со светодиодами повышенной яркости этого достаточно для использования прибора внутри помещения. Но даже такой небольшой ток весьма значителен для 9-вольтовой батареи, поэтому вам придется выбирать между дополнительным потреблением тока и риском оставить питание включенным, когда необходимости в нем нет. Скорее всего, после первой внеплановой замены батареи вы почувствуете пользу от этого монитора.
Схему можно преобразовать таким образом, чтобы переход от зеленого к красному свечению происходил в случае повышения входного напряжения. Для этого транзистор Q1 надо заменить на NPN и поменять местами эмиттер и коллектор. А с помощью пары NPN и PNP транзисторов можно сделать оконный компаратор.
С учетом довольно большой ширины переходной области, схема на Рисунке 1 лучше всего подходит для 9-вольтовых батарей, в то время как схема на Рисунке 2 может быть адаптирована для других напряжений.
Простой самодельный индикатор уровня заряда аккумулятора

Я поставил цель запилить максимально простой, но в то же время достаточно функциональный индикатор. Для отображения уровня заряда в нем используются 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
Модуль прошит, проверен и отлажен, теперь осталось разместить его в напечатанном ранее корпусе. Вставляем плату:
Для надежности внутренности я залил эпоксидной смолой:
Как оказалось, сделал я это зря) Эпоксидка при застывании расширилась и немного повела корпус, для целей фиксации все же лучше использовать герметик или термоклей.
Переднюю часть для красоты шкурим и тем самым матируем:
Итоговый вид:
Разница в яркости немного портит впечатление, но при желании это можно легко решить.
Выводы
По функциональности самодельный модуль ни в чем не уступает покупным, и при этом имеет кучу преимуществ:
