Page 1 of 3

Индикатор заряда литиевого аккумулятора (1S)

Posted: 25 Aug 2016 00:20
by hardlock
Давно уже стоит вопрос индикации заряда литиевых аккумуляторов. Причём для 2-3-5 ячеечных батарей давно пользуюсь китайским вольтметром (до 8 ячеек) за $1,1 - 1,5. А тут стала проблема - необходимо максимально компактное, максимально простое, максимально информативное устройство для 1 банки лития. Перебрал я много конструкций, понравились несколько, но ни одна не была подходящей. Для истории оставлю:
1) на 10 штуках TLV431 :scratch:
2) на ATtiny25
3) на ATtiny13, но без исходников...
ну и т.д. достаточно набрать в гугле "индикатор заряда li-ion"
Всё как-то не то, всё как-то не так.

Техническое задание:
1) индикация уровня заряда батареи 3 разноцветными светодиодами (красный, желтый, зелёный)в пределах 3,0 - 4,2 Вольта.
2) Отображение 6 уровней заряда.
3) минимальный размер (до 10*30 мм).

Схема.
Итак поехали. Напряжение индикации от 3,0 до 4,2 Вольта (на ячейке лития больше и меньше быть не может, т.е. не должно). Значит этим же напряжением можно и питать нашу схему на микроконтроллере! Набросал схему, получилось как-то так:
sch_tiny13.gif
sch_tiny13.gif (12.4 KiB) Viewed 20483 times
Питаемся от измерительной цепи. Резисторы R1/R2 делитель напряжения на вход АЦП, подобран так, чтобы при напряжении питания 4,35 на входе АЦП было до 1,1 Вольта (Внутреннее опорное напряжение АЦП). Конденсатор С2 - фильтр на входе АЦП, конденсаторы C1 и C3 - по питанию. Остался резистор R3 - чтобы ресет не болтался в воздухе. Проще наверное не получится.

Пробуем нарисовать плату.
pcb_wo_button.gif
pcb_wo_button.gif (6.99 KiB) Viewed 20483 times
6*19мм... А кнопка влезет? Легко! 6*28мм... Все резисторы, конденсаторы и светодиоды типоразмера 0603.
pcb_with_button.gif
pcb_with_button.gif (13.04 KiB) Viewed 20483 times
По просьбам трудящихся сделал вариант на светодиодах 0805, только пришлось убрать конденсатор C3.
pcb_with_button_led0805.png
Исходник платы - во вложениях (Sprint-Layout 6.0) - pcb_li-ion_charge_indicator.rar

Попробуем реализовать в железе.
DSCN1669.JPG
DSCN1672.JPG
DSCN1695.JPG
Хм, получилось. И получилось довольно компактно. Идём далее, т.к. устройство не будет работать без прошивки.

Прошивка.
Для начала надо придумать способ индикации. Сочетания цветов мне не нравятся - красиво, но не наглядно. Поэтому будем делать просто.
scale.GIF
scale.GIF (4.17 KiB) Viewed 20483 times
Поясню картинку.
Менее 3,3 Вольт - считаем батарея разряжена совсем, моргаем красным.
От 3,3 до 3,6 Вольта - минимальный заряд - горит красный.
и т.д.
Уровни подобрал с учётом графиков зависимости заряда от напряжения на банке (встречались в описанных вначале статьях), но никто не мешает подкорректировать под свои нужды. Внизу картинки указаны идентификаторы, которые задают в прошивке напряжения (строки 35-40):

Code: Select all

                               //"напряжение" в сотнях миливольт, т.е. 42 = 4,2 Вольта.
#define U_1            33      //3,3V
#define U_2            36      //3,6V
#define U_3            38      //3,8V
#define U_4            39      //3,9V
#define U_5            41      //4,1V


Ещё в прошивке можно изменить расположение светодиодов (но только в рамках PB0 - PB2) в строках 29-31:

Code: Select all

#define LED_RED     PORTB.2    //выход красного светодиода
#define LED_YELLOW  PORTB.1    //выход желтого светодиода
#define LED_GREEN   PORTB.0    //выход зелёного светодиода
Остальное лучше не менять, или придётся править код, т.к. не все возможные изменения учтены.

Калибровка.
Но для начала нам нужно получить отправную точку в наших расчётах - значение АЦП при напряжении питания 4,2 Вольта. Для этого:
1) заливаем прошивку
2) включаем устройство и видим бегущий огонь - значит прошивка работает нормально, но не откалибрована (или слетел EEPROM),
3) выставляем напряжение питания 4,2 Вольта (или питаем от полностью заряженной батарейки, можно ещё подключить к зарядному устройству типа TP4056).
4) ВЫКЛЮЧАЕМ УСТРОЙСТВО!
5) замыкаем вывод PB2 на питание вывод 7 + 8 и удерживаем (можно замкнуть хоть отвёрткой).
6) Подключаем питание устройства, должен загореться красный светодиод (мы же его выход замкнули на питание, но не страшно, т.к. этот порт сейчас настроен на вход.)
7) Примерно через 1 секунду загорится желтый светодиод, можно размыкать выводы 7 и 8, но питание убирать нельзя!!!
8) Ещё через секунду загорится зелёный светодиод.
9) Ещё через секунду оба светодиода погаснут. Теперь питание можно выключать или подождать 3 секунды и индикатор начнёт свою нормальную работу!
10) Всё откалибровано, теперь надо свериться с точным мультиметром.

Небольшое видео:

Как по мне, то получилось довольно наглядно, компактно, просто в повторении, ну и дешёво, если тиньки покупать в Китае. А вот собственно для чего изобретался велосипед:
DSCN1699.JPG
Про эту штуку расскажу отдельно.

PS: пришла интересная мысль. Если взять батарею аккуммуляторов, неважно сколько ячеек подключено последовательно, и измерять напряжение одной ячейки, то это так же точно укажет на степень заряда всей батареи... При условии, что разбаланса по ячейкам нет. Допустим у меня шуруповёрт давно переделан на 5S 3000mAh 45C батарею от RC моделей. Заряжаю я её только iMAX B6 (клон). Т.е. разбаланса не допускаю. А вот проверять уровень заряда, каждый раз подключая вольтметр как в самом начале статьи - не очень удобно, а внутрь батареи он не влез, да и отключать его надо, т.к. высадит батарею. А такая кроха (из этой статьи) отлично впишется в любой корпус. Доработаю - покажу )))

Повторять конструкцию можно.

UPD (10.08.2017)
Давно уже были заказаны платы в Китае, но всё никак не доходили руки до написания, да и новая версия оказалась чуть хуже, но об этом позже.

Схема v2.0
sch_tiny13_v2.GIF
Т.к. было пожелание использования RGB светодиодов я попытался сделать схему универсальной. Для этого пришлось светодиодам сделать общий плюс... В этом скрывался косяк, который обнаружился только при отладке новой платы. Косяк заключается, в том, что теперь значительно снизилась точность измерений напряжения. Думаю это как-то связано с внутренними особенностями Тини13, т.к. при переделке светодиодов на общий минус проблема пропадает, т.е. косяк не в плате... Но на практике этот недостаток практически не заметен и точность измерения ± 0,03В уже за гранью разумного для "индикатора". поэтому выкладываю плату в том виде, в котором она есть, в следующий раз буду заказывать платы с "общим минусом", тогда и обновлю.

Ещё в схеме появился коммутатор кнопки на входе. Он нужен для удержания питания схемы после отпускания кнопки. Приобретался NTJD1155L на Aliexpress.

Печатная плата.
Т.к. плата двухстороняя, то показывать скрин из Спринта - кошмар для глаз )))
screen.png
Лучше покажу рендер из файлов Gerber:
ScreenShot_1.png
ScreenShot_2.png
Ну а в живую платы выглядели вот так:
IMG_20161130_115354_.jpg
IMG_20161130_115300_.jpg
Собранная плата (флюс не отмывал, каюсь)...
DSCN2352_.jpg
DSCN2354_.jpg
Файл спринта:
pcb_li-ion_charge_indicator_v2.rar
(13.72 KiB) Downloaded 463 times
Прошивка.
В новой прошивке (voltmeter_v2.0_inet.rar) логика работы не поменялась, за исключением того, что для калибровки нужно замыкать не на плюс, а на землю!

Re: Индикатор заряда литиевого аккумулятора (1S)

Posted: 25 Aug 2016 22:20
by georg77
во-1-х, проще можно сделать, если оставить только 1 светодиод
пусть горит с циклом 1-2 сек столько времени, насколько заряжена батарея
во 2-х, калибровка через считывание епрома кажется мне чересчур для академиков
можно просто написать калибровку при замыкании на землю оставшихся свободных ножек тиньки

Re: Индикатор заряда литиевого аккумулятора (1S)

Posted: 25 Aug 2016 22:32
by hardlock
georg77 wrote:во-1-х, проще можно сделать, если оставить только 1 светодиод
пусть горит с циклом 1-2 сек столько времени, насколько заряжена батарея
согласен, но пострадает удобство, вернее удобочитаемость. Я уже думал оставить 2 светодиода и моргать целые числа одним, десятые доли - другим, но это надо считать каждый раз )))...
georg77 wrote:можно просто написать калибровку при замыкании на землю оставшихся свободных ножек тиньки
через запись в еепром при калибровке и чтении при работе? хотел обойтись без констант в еепроме, но возможно допишу для удобства пользования всем. Но не раньше, чем придут тиньки из Китая - закончились, и только сегодня заказал.

Хм, посмотрел, а свободных ножек то и нет... Чё будем думать? Можно освободить 2-ю ногу, но тогда плата подрастёт... Хотя её можно не запаивать на момент калибровки, а потом запаять. О! вариант!

Re: Индикатор заряда литиевого аккумулятора (1S)

Posted: 26 Aug 2016 07:42
by georg77
резистор на reset не нужен (ИМХО)
чем занимается 2- ножка?
мне кажется, ничем особенно нужным она заниматься не может
может её под калибровку?
качество кнопки подачи питания сильно падает со временем, это может вызвать понятные проблемы
в 10-15 летних телевизорах (находящихся в тепличных условиях) видел кнопки с сопротивлением 50-150 ом
а в ТВ, простоявших в сарае - просто все кнопки приходится менять

Re: Индикатор заряда литиевого аккумулятора (1S)

Posted: 27 Aug 2016 08:55
by georg77
как вариант решения проблемы окисления кнопки - шунтировать её на время измерения и индикации p-канальным мосфетом
но в таком случае рациональнее кнопку включить в цепь затвора этого мосфета - и в некоторая степень окисления кнопки будет допустима
поменять бы местами 2 и 3 ножки
при включении 3-я ножка - в режиме входа
если на ней 0 В (замкнуто с 4- й) - тогда калибровка, считая что на входе 4.2 В
если на 2-й - "1" - тогда перевод её в состояние выхода , вывод "0" на время измерения и индикации
ни на чём не настаиваю, каждый делает как ему кажется лучше.

Re: Индикатор заряда литиевого аккумулятора (1S)

Posted: 27 Aug 2016 10:09
by hardlock
georg77, идея интересная и я об этом думал, но тогда надо учитывать падение на мосфете... Прошивку доработать можно легко под любые варианты, поэтому при возникновении необходимости в разных вариантах буду дорабатывать. В шуруповёрнте вобще была мысль сделать так, чтобы индикатор включался при работе мотора, надо только регулятор чуть доработать - сделать выход... Жду тиньки и буду дорабатывать шурупик, тогда и появятся новые варианты )))

Re: Индикатор заряда литиевого аккумулятора (1S)

Posted: 27 Aug 2016 10:35
by georg77
"но тогда надо учитывать падение на мосфете..."
падение на мосфете будет порядка 1-2 мВ в худшем случае, что сравнимо с погрешностью АЦП тиньки - я бы не парился по поводу падения вообще, ничто не мешает эту "погрешность" корректировать программно.
никто не мерял сопротивление новых кнопок? Боюсь что даже новые кнопки уступят мосфетам.
http://www.aosmd.com/pdfs/datasheet/AO3401.pdf - пример мосфета, на Али очень недорого.

Re: Индикатор заряда литиевого аккумулятора (1S)

Posted: 06 Oct 2016 16:08
by hardlock
Прошивка обновилась - Версия 1.0.

Калибровка.
Но для начала нам нужно получить отправную точку в наших расчётах - значение АЦП при напряжении питания 4,2 Вольта. Для этого:
1) заливаем прошивку
2) включаем устройство и видим бегущий огонь - значит прошивка работает нормально, но не откалибрована (или слетел EEPROM),
3) выставляем напряжение питания 4,2 Вольта (или питаем от полностью заряженной батарейки, можно ещё подключить к зарядному устройству типа TP4056).
4) ВЫКЛЮЧАЕМ УСТРОЙСТВО!
5) замыкаем вывод PB2 на питание (выводы 7 и 8) и удерживаем (можно замкнуть хоть отвёрткой).
6) Подключаем питание устройства, должен загореться красный светодиод (мы же его выход замкнули на питание, но не страшно, т.к. этот порт сейчас настроен на вход.)
7) Примерно через 1 секунду загорится желтый светодиод, можно размыкать выводы 7 и 8, но питание убирать нельзя!!!
8) Ещё через секунду загорится зелёный светодиод.
9) Ещё через секунду оба светодиода погаснут. Теперь питание можно выключать или подождать 3 секунды и индикатор начнёт свою нормальную работу!
10) Всё откалибровано, теперь надо свериться с точным мультиметром.

Все изменения в шапке, там же прошивка и и исходник.

Добавлено спустя 5 часов 19 минут 8 секунд:
По просьбе Alex_S добавил плату на светодиодах 0805. Всё в первом сообщении.

Re: Индикатор заряда литиевого аккумулятора (1S)

Posted: 06 Oct 2016 16:20
by Alex_S
Пасиба!

Re: Индикатор заряда литиевого аккумулятора (1S)

Posted: 07 Oct 2016 08:38
by georg77
как вариант для любителей минимализма (сам такой) могу предложить индикацию уровня заряда таким образом:
1 светодиод, при активации индикатора запускается ШИМ с периодом 5 сек, время свечения светодиода в периоде в % равно степени заряда батареи, если заряд 100% - всё-таки оставить 0,5-1-2% интервала (подобрать на глаз) на еле заметное помаргивание для обозначения исправной работы устройства.
Смысла в большей точности отображения не вижу.
Например, при активации светодиод горит примерно 4 сек и не горит 1 сек - значит заряд около 80%. После 3-х периодов индикации - отключить.

Posted: 07 Oct 2016 08:48
by hardlock
Уж проще воспринять моргание посылками. Типа 4 раза, пауза, 1 раз = 4,1 Вольта. 3 раза, пауза, 5 раз - 3,5 Вольта . По времени почти одинаково )))

Re: Индикатор заряда литиевого аккумулятора (1S)

Posted: 07 Oct 2016 09:45
by Alex_S
Шим с периодом 5 секунд - слишком много. Максимум - секунда. Суть то в том, что должно быть достаточно мимолетного взгляда.

Re: Индикатор заряда литиевого аккумулятора (1S)

Posted: 07 Oct 2016 11:16
by georg77
hardlock:
вроде как собирались отображать не напряжение аккумулятора, а пересчитанную из напряжения степень заряженности?
и как долго будет моргаться 89% ?
при подсчёте можно ошибиться, для достоверности результата придётся повторить подсчёт импульсов - а это опять затраты времени.

Alex_S : период отображения можете делать как Вам удобнее, это не принципиально.

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

Re: Индикатор заряда литиевого аккумулятора (1S)

Posted: 07 Oct 2016 11:30
by hardlock
georg77, ну я точно не буду реализовывать вариант с ШИМом, т.к. слабо представляю как отличить 30-40% от 50-60%... Если есть желание - попробуйте, исходник есть, модифицировать легко.

Re: Индикатор заряда литиевого аккумулятора (1S)

Posted: 07 Oct 2016 12:53
by ma35tr0
Уважаемый hardlock, зачет вам за девайс!
Такой же девайс, но для автомобиля (Uмакс. = 15вольт) с таким же алгоритмом индикации и калибровкой Я сделал года 2-3 назад. Даже статью для форума подготовил, но в самый неудачный момент все пропало. Комп накрылся и винту наступили кранты. Столько всего у меня там было, все пропало :(
Остался только hex-файл залитый в тиньку.
Вот, что у меня получилось тогда.
Отладочная плата с кнопкой калибровки для батарей до 5Вольт и 15вольт.
Отладочная плата с кнопкой калибровки для батарей до 5Вольт и 15вольт.
Готовое устройство в корпусе из под маркера.
Готовое устройство в корпусе из под маркера.
С удовольствие выложил бы и платки в формате lay, но и их не осталось :sorry:

Добавлено спустя 1 минуту 20 секунд:
hardlock wrote:georg77, ну я точно не буду реализовывать вариант с ШИМом, т.к. слабо представляю как отличить 30-40% от 50-60%...
Верно. Это лишнее. :-)

Re: Индикатор заряда литиевого аккумулятора (1S)

Posted: 27 Apr 2017 11:16
by Leo174
Хороший проект, спасибо автору. Косаемо внедрения данного устройства в шуруповёрт неплохо бы добавить ещё один светодиод белого цвета. И сделать отдельный вход, при появлении длинного импульса(допустим более 1сек), ключается белый светодиод на 5сек. Т.е. Шуруповёрт с подсветкой.При коротком импульсе(допустим менее 1сек), белый не включается, а запускается программа индикации на 3-5сек. Затем контроллер засыпает. И просыпается по импульсу. Как думаете возможно такое сделать?

Posted: 27 Apr 2017 11:24
by hardlock
Ног уже не осталось... А сделать можно )))

Re: Индикатор заряда литиевого аккумулятора (1S)

Posted: 27 Apr 2017 13:22
by Leo174
Спасибо до ответ. Так первая и вторая ноги можно задействовать? Не силён я в программировании, но всеже попробую поизучать исходник, да я думаю и форумчане помогут своять. Ведь крайне полезный будет девайс. Ставь в любой шурик.

Re: Индикатор заряда литиевого аккумулятора (1S)

Posted: 27 Apr 2017 21:28
by hardlock
Leo174, ресет использовать не люблю... а вторую можно на выход для светодиода. Но пока я не помощник....

Re: Индикатор заряда литиевого аккумулятора (1S)

Posted: 10 Aug 2017 13:48
by hardlock
Схема v2.0
sch_tiny13_v2.GIF
Собранные платы:
DSCN2352_.jpg
DSCN2354_.jpg
Подробности в первом посте внизу.

Re: Индикатор заряда литиевого аккумулятора (1S)

Posted: 12 Aug 2017 22:36
by Denis_K
Так на 3 вывода МК можно 6 светодиодов повесить... главное программа :-)

Re: Индикатор заряда литиевого аккумулятора (1S)

Posted: 13 Aug 2017 16:17
by hardlock
Denis_K, А зачем 6 светодиодов? Трёх вполне достаточно для наглядной оценки остаточного заряда батареи...

Re: Индикатор заряда литиевого аккумулятора (1S)

Posted: 13 Aug 2017 21:25
by Denis_K
hardlock, достаточно конечно. Я это писал для тех кому ног не хватает... даже 9 можно...

Posted: 13 Aug 2017 21:44
by hardlock
На 3 ноги 9 светодиодов? Нарисуете?

Re: Индикатор заряда литиевого аккумулятора (1S)

Posted: 15 Aug 2017 10:21
by Denis_K
Чего-то и правда ляпнул не подумав... и почему мне показалось 9 не знаю :-) .