Простой тестер ёмкости аккумуляторов на Arduino
В последнее время я начал замечать, что мой смартфон стал разряжаться быстрее. Поиски программного «пожирателя» энергии плодов не принесли, поэтому стал задумываться, не пришло ли время заменить АКБ. Но абсолютной уверенности в том, что причина в батарее не было. Поэтому прежде чем заказывать новый аккумулятор решил попробовать измерить реальную емкость старого. Для этого было решено собрать простой измеритель емкости АКБ, тем более что идея эта вынашивалась уже давно – уж очень много батареек и аккумуляторов окружает нас в повседневной жизни, и было бы неплохо иметь возможность время от времени тестировать их.
Сама идея, лежащая в основе работы устройства, крайне проста: есть заряженный аккумулятор и нагрузка в виде резистора, нужно лишь измерять ток, напряжение и время в ходе разряда АКБ, и по полученным данным рассчитать его емкость. В принципе, можно обойтись вольтметром и амперметром, но сидеть за приборами несколько часов удовольствие сомнительное, поэтому намного проще и точнее можно сделать это используя регистратор данных. Я в качестве такого регистратора использовал платформу Arduino Uno.
С измерением напряжения и времени в Arduino проблем нет – есть АЦП, но чтобы измерить ток нужен шунт. У меня появилась идея использовать сам нагрузочный резистор в качестве шунта. То есть, зная на нем напряжение и предварительно измерив сопротивление, мы всегда можем рассчитать ток. Поэтому простейший вариант схемы будет состоять лишь из нагрузки и АКБ, с подключением к аналоговому входу Arduino. Но было бы неплохо предусмотреть отключение нагрузки по достижению порогового напряжение на батарее (для Li-Ion это обычно 2,5-3В). Поэтому я предусмотрел в схеме реле, управляемое цифровым пином 7 через транзистор. Конечный вариант схемы на рисунке ниже.
Все элементы схемы я разместил на кусочке макетной платы, которая устанавливается прямо на Uno. В качестве нагрузки использовал спираль из нихромовой проволоки толщиной 0,5мм, имеющей сопротивление около 3 Ом. Это дает расчетное значение тока разряда 0,9-1,2А.
2. Измерение тока
Как было сказано выше ток рассчитывается исходя из напряжения на спирали и её сопротивления. Но стоит учесть, что спираль нагревается, а сопротивление нихрома довольно сильно зависит от температуры. Чтобы компенсировать ошибку я просто снял вольт-амперную характеристику спирали, используя лабораторный блок питания и давая ей прогреться перед каждым измерением. Далее вывел в Excel уравнение линии тренда (график ниже), которое дает довольно точную зависимость i(u) с учетом нагрева. Видно, что линия не прямая.
3. Измерение напряжения
Поскольку точность данного тестера напрямую зависит от точности измерения напряжения, я решил уделить этому особое внимание. В других статьях уже неоднократно упоминали метод, позволяющих наиболее точно измерять напряжение контроллерами Atmega. Повторю лишь вкратце – суть состоит в определении внутреннего опорного напряжения средствами самого контроллера. Я пользовался материалами данной статьи.
Код не представляет из себя ничего сложного:
Каждые 5 секунд данные о времени, напряжении батареи, токе разряда, текущей емкости в мАч и ВтЧ, а также напряжении питания передаются в последовательный порт. Ток рассчитывается по полученной в п. 2 функции. По достижении порогового напряжения Voff тест прекращается.
Единственным, на мой взгляд, интересным моментом в коде я бы выделил использование цифрового фильтра. Дело в том, что при считывании напряжения значения неизбежно «пляшут» вверх-вниз. Сначала я пытался уменьшить этот эффект просто сделав 100 измерений за 5 секунд и взяв среднее. Но результат по-прежнему меня не удовлетворил. В ходе поисков я наткнулся на такой программный фильтр. Работает он похожим образом, но вместо усреднения он сортирует все 100 значений измерений по возрастанию, выбирает центральные 10 и высчитывает среднее из них. Результат меня впечатлил – флуктуации измерений полностью прекратились. Я решил использовать его и для измерения внутреннего опорного напряжения (функция readVcc в коде).
Данные из монитора последовательного порта в несколько кликов импортируются в Excel и выглядят следующим образом:
Далее легко построить график разряда АКБ:
В случае с моим Nexus 5 заявленная ёмкость аккумулятора BL-T9 – 2300 мАч. Измеренная мной – 2040 мАч при разряде до 2,5 В. В реальности контроллер вряд ли позволяет сесть батарее до такого низкого напряжения, скорее всего пороговое значение 3В. Ёмкость в этом случае 1960 мАч. Полтора года службы телефона привели к просадке емкости примерно на 15%. С покупкой новой АКБ было решено повременить.
С помощью данного тестера было разряжено уже несколько других Li-Ion аккумуляторов. Результаты выглядят очень реалистично. Измеренная емкость новых АКБ совпадает с заявленной с отклонением менее 2%.
Данный тестер подойдет и для металл-гидридных пальчиковых аккумуляторов. Ток разряда в этом случае составит около 400 мА.
Digitrode
цифровая электроника вычислительная техника встраиваемые системы
Устройство проверки емкости литий-ионного аккумулятора на основе Arduino
С развитием технологий наши электронные устройства становятся все меньше и меньше с более функциональными и сложными приложениями. С увеличением сложности, требования к мощности схемы также увеличились, и в нашем стремлении сделать устройство как можно меньшим и портативным, нам нужна аккумуляторная батарея, которая может обеспечивать высокий ток в течение длительного периода времени и в то же время, весить намного меньше, чтобы устройство оставалось портативным.
Из множества доступных типов аккумуляторов свинцово-кислотные, никель-кадмиевые и никель-металлогидридные аккумуляторы не подходят, поскольку они либо весят больше, либо не могут обеспечить ток, необходимый для нашего применения, поэтому нам остаются литий-ионные аккумуляторы, которые могут обеспечить высокий ток, сохраняя при этом небольшой вес и компактный размер.
На рынке есть много поставщиков аккумуляторов, которые продают дешевые копии литий-ионных аккумуляторов со странными характеристиками по очень низкой цене, что слишком хорошо, чтобы быть правдой. Когда вы покупаете эти элементы, они либо вообще не работают, либо, если они работают, емкость заряда или ток настолько мал, что они вообще не могут работать с требовательным приложением. Итак, как проверить литиевую батарею? Один из методов – измерить напряжение холостого хода без нагрузки, но это совсем не надежно.
В связи с этим мы создадим тестер емкости аккумулятора литий-ионного аккумулятора 18650, который будет разряжать полностью заряженный аккумулятор 18650 через резистор, одновременно измеряя ток, протекающий через резистор, для расчета его емкости. Если вы не получите заявленную емкость аккумулятора, когда напряжение на элементе находится в указанных пределах, значит, этот элемент неисправен, и вам не следует его использовать, поскольку состояние заряда элемента будет истощаться с очень высокой скоростью под нагрузкой, создавая токовую петлю, что может привести к нагреву и, возможно, возгоранию. Компоненты, которые нам понадобятся для нашего устройства проверки емкости аккумулятора:
Полная принципиальная схема тестера емкости аккумуляторов 18650 показана далее.
Эта схема дополнительно разделена на две части: первая – это схема низкого напряжения 5 В для Arduino Nano и буквенно-цифрового ЖК-экрана 16×2, а также их соединения для отображения результатов измерений тока и напряжения в реальном времени. Схема питается от источника питания 12 В или вы можете использовать аккумулятор 12 В, а максимальный ток будет около 60-70 мА для питания Arduino и ЖК-экрана.
Чтобы понизить напряжение до 5 В, мы будем использовать линейный стабилизатор напряжения, который может принимать на входе до 35 В для обеспечения регулируемого питания 5 В, а избыточное напряжение рассеивается в виде тепла, следовательно, если ваш вход превышает 12 В, тогда подумайте о добавлении радиатора, чтобы он не повредился. ЖК-дисплей питается от источника питания 5 В от 7805, подключен к Arduino и работает в 4-битном режиме. Мы также добавили потенциометр 10 кОм для управления контрастностью ЖК-дисплея.
Вторая часть схемы – это цепь нагрузки с постоянным током на основе ШИМ, которая делает ток нагрузки, протекающий через резистор, управляемым и постоянным, чтобы не возникала ошибка, возникающая из-за изменения тока со временем, когда напряжение аккумуляторного элемента падает. Она состоит из ОУ LM741 и полевого транзистора IRF540N, который управляет током, протекающим через полевик, путем включения и выключения полевика в соответствии с установленным нами уровнем напряжения.
Операционный усилитель работает в режиме компаратора, значит, в этом режиме выходной сигнал операционного усилителя будет высоким, когда напряжение на неинвертирующем выводе операционного усилителя выше, чем на инвертирующем выводе. Точно так же, если напряжение на инвертирующем выводе операционного усилителя выше, чем на неинвертирующем выводе, выход операционного усилителя будет понижен. В данной схеме уровень напряжения неинвертирующего вывода контролируется ШИМ-выводом D9 Arduino NANO, который переключается с частотой 500 Гц, которая затем проходит через RC-фильтр нижних частот со значением сопротивления 33 кОм и конденсатор емкостью 0,47 мкФ, чтобы обеспечить почти постоянный сигнал постоянного тока на неинвертирующем выводе. Инвертирующий вывод подключен к нагрузочному резистору, который считывает напряжение на резисторе и общем GND. Выходной контакт ОУ подключен к клемме затвора полевого МОП-транзистора, чтобы включить или выключить его. ОУ попытается уравнять напряжения на обоих своих выводах, переключая подключенный полевик, чтобы ток, протекающий через резистор, был пропорционален значению ШИМ, которое вы установили на выводе D9. В этом проекте максимальный ток, который мы ограничили для своей схемы, составляет 1,3 А, что является разумным, поскольку у нас есть элемент на 10 А в качестве максимального номинального тока.
Максимальное напряжение стандартного полностью заряженного литий-ионного элемента составляет от 4,1 В до 4,3 В, что меньше предела напряжения 5 В аналоговых входных контактов Arduino Nano, который имеет внутреннее сопротивление более 10 кОм, так что мы можем напрямую подключить к любому из аналоговых входных контактов, не беспокоясь о протекающем через них токе. Итак, в этом проекте нам необходимо измерить напряжение элемента, чтобы мы могли определить, находится ли элемент в правильном рабочем диапазоне напряжения и полностью ли он разряжен.
Нам также необходимо измерить ток, протекающий через резистор, для этого мы не можем использовать токовый шунт, так как сложность схемы будет увеличиваться, а увеличение сопротивления на пути нагрузки уменьшит скорость разряда элемента. Использование шунтирующих резисторов меньшего размера потребует дополнительной схемы усилителя, чтобы считываемое с него напряжение считывалось на Arduino. Таким образом, мы непосредственно считываем напряжение на нагрузочном резисторе, а затем, используя закон Ома, делим полученное напряжение на значение нагрузочного резистора, чтобы получить ток, протекающий через него. Отрицательный вывод резистора подключен непосредственно к GND, поэтому мы можем с уверенностью предположить, что напряжение, которое мы читаем на резисторе, является падением напряжения на резисторе.
Полный код программы устройства проверки емкости аккумулятора представлен далее.
Теперь, когда мы разработали и протестировали различные участки нашей схемы на макетной плате и убедившись, что все они работают должным образом, мы используем перфорированную плату для пайки всех компонентов вместе, поскольку это гораздо более профессиональный и надежный метод проверки схемы. . При желании вы можете спроектировать свою собственную печатную плату в AutoCAD Eagle, EasyEDA или Proteus ARES или в любом другом программном обеспечении, которое вам нравится.
Теперь включите цепь и отрегулируйте потенциометр, чтобы установить уровень контрастности ЖК-экрана. К этому моменту вы должны увидеть приветственное сообщение на ЖК-экране, а затем, если уровень напряжения аккумуляторного элемента находится в рабочем диапазоне, тогда параметры будут отображаться на дисплее.
Это очень простой тест для расчета емкости используемой ячейки, и его можно улучшить, взяв данные и сохранив их в файле Excel для последующей обработки и визуализации данных графическими методами.
Измеритель емкости для аккумуляторов NiMH, NiCd, Li-Ion, Li-Poli и LiFePo4 на Arduino Nano
Фальсификация аккумуляторов — особенно литий-ионных (Li-ion) и никель-металлогидридных (NiMH) аккумуляторов — печальный факт. Многие компании рекламируют аккумуляторы или PowerBank, указывая огромные значения емкости, которые значительно превышают фактические параметры этих компонентов.
Благодаря данному устройству вы можете легко измерить реальную емкость аккумуляторов и выбрать те, которые имеют соответствующие параметры. Трудно проверить реальную емкость аккумуляторов, особенно когда вы их покупаете много.
Точно так же трудно определить доступную емкость восстановленных ячеек формата 18650 (например, с ноутбуков). Устройство для измерения фактической емкости аккумуляторов позволит выбрать подходящий элемент для питания какого-либо устройства.
Схема, представленная ниже, представляет собой второе поколение измерителя емкости аккумуляторов, созданного автором проекта на портале Instructables под ником Open Green Energy.
Схема, построенная ранее в 2016 году, разряжала элемент через постоянный резистор, а модуль Arduino измерял ток и напряжение как функцию времени. В конце, после разрядки элемента до заданного уровня, емкость определялась как произведение тока разряда и времени, которое потребовалось для разрядки элемента до установленного уровня.
Однако во время измерения при уменьшении напряжения батареи также уменьшается и ток. Это делало процесс вычисления емкости достаточно сложным и неточными. Чтобы устранить эту проблему, автор создал версию V2.0, которая была разработана таким образом, чтобы ток оставался постоянным на протяжении всего процесса разрядки.
Это достигнуто за счет использования активной нагрузки для разрядки аккумулятора. Ток разряда аккумулятора может быть постоянным на протяжении всего процесса измерения.
Основные преимущества тестера емкости аккумуляторов:
- Возможность измерять емкость элементов NiMH, NiCd, Li-Ion, Li-Poli и LiFePo4 различных размеров — AA, AAA, 18650 и др. Единственным условием является напряжение аккумулятора ниже 5 В.
- Настраиваемый ток разряда аккумулятора.
- Пользовательский интерфейс на основе легко читаемого OLED-дисплея.
- Возможность использования устройства в качестве программируемой электронной нагрузки.
Для создания данного тестера нам понадобятся:
- Печатная плата.
- Arduino Nano.
- Операционный усилитель LM358.
- Дисплей OLED с диагональю 0,96 дюйма.
Конструкция тестера аккумуляторов
Принципиальная схема показана на следующем рисунке:
Условно всю конструкцию можно разделить на следующие части:
- Источник питания.
- Нагрузка постоянного тока.
- Измерение напряжения аккумулятора.
- Интерфейс пользователя.
- Сигнализатор — зуммер.
Источник питания
Источник питания состоит из разъема для подключения внешнего источника питания (входное напряжение в диапазоне 7…9 В) и двух фильтрующих конденсаторов С1 и С2. Входное напряжение (Vin) подключено к выводу Vin Arduino. Схема использует встроенный стабилизатор напряжения Arduino.
Схема нагрузки постоянного тока
Основным элементом этой схемы является интегральная схема LM358, которая включает в себя два операционных усилителя. ШИМ-сигнал с цифрового вывода D10 Arduino подается на фильтр нижних частот, состоящий из компонентов R1 и C3.
Далее он поступает на неинвертирующий вход операционного усилителя сконфигурированного вместе с полевым транзистором VT1 в качестве источника тока.
Операционный усилитель DD1 питается от стабилизированного напряжения 5 В, отфильтрованного конденсатором, который должен быть расположен как можно ближе к операционному усилителю.
ОУ DD1 вместе с R3 и VT1 , образует активную нагрузку постоянного тока, которая разряжает батарею. Ток, протекающий через резистор R3, управляется широтно-импульсной модуляцией (ШИМ), подаваемой с Arduino на транзистор VT1 .
Принцип работы источника питания, встроенного в эту систему, очень прост. Операционный усилитель DD1 сравнивает напряжение на контакте 2 (инвертирующий вход) и контакте 3 (неинвертирующий вход).
Сам операционный усилитель настроен как буфер с единичным усилением. Отфильтрованный ШИМ сигнал подается на неинвертирующий вход, что вызывает появление некоторого напряжения на выходе усилителя, который открывает затвор MOSFET.
Когда MOSFET включается, ток, протекающий через R3, вызывает определенное падение напряжения на этом резисторе, что обеспечивает отрицательную обратную связь для операционного усилителя. Схема управляет полевым транзистором таким образом, что напряжения на инвертирующем и неинвертирующем входах одинаковы (с помощью управления затвором MOSFET).
Таким образом, ток, протекающий через нагрузочный резистор, будет пропорционален напряжению на неинвертирующем входе операционного усилителя. Напряжение на неинвертирующем входе, которое управляет работой источника тока, поступает от низкочастотного фильтра RC, на который подается прямоугольный сигнал с переменным заполнением, генерируемый Arduino.
На следующем рисунке показан ШИМ сигнал от Arduino (канал 1, желтый) и сигнал после фильтра (канал 2, зеленый). Таким образом, из ШИМ и RC-фильтра собран простой ЦАП.
Значения элементов фильтра RC могут быть подобраны с помощью осциллографа и анализа выходного сигнала от фильтра для различных значений аккумуляторов и/или частоты сигнала ШИМ.
Схема измерения напряжения аккумулятора
Напряжение аккумулятора измеряется через контакт A0 (вход аналого-цифрового преобразователя в Arduino). Два конденсатора С1 и С2 используются для фильтрации помех, присутствующих в цепи испытуемого аккумулятора, которые возникают из-за пульсаций тока в цепи активной нагрузки. Эти помехи могут снизить точность измерения АЦП в Arduino.
Интерфейс пользователя
Схема интерфейса пользователя состоит из двух кнопок и 0,96-дюймового модуля OLED-дисплея, управляемого по I2C. Две кнопки (Вверх и Вниз) используются для увеличения или уменьшения ширины импульса ШИМ, что позволяет регулировать ток разрядки аккумулятора.
Резисторы R2 и R4 подтягивают обе линии, подключенные к кнопкам. Третья кнопка (RST) используется для сброса Arduino. Напряжение аккумулятора, ток разряда и измеренная емкость отображаются на OLED-дисплее.
Его разрешение составляет 128 × 64 пикселей, а связь с Arduino осуществляется через шину I2C, благодаря которой для передачи данных требуются только две сигнальные линии — контакт SCL (A5) и SDA (A4). Два других контакта платы дисплея являются источником питания (+5 В и GND).
Сигнализация — зуммер
5-вольтный зуммер подключен к цифровому выводу D9 Arduino. Этот выход управляет сигналом тревоги, который сигнализирует о начале и конце измерения емкости ячейки.
Программное обеспечение
Во время измерения емкости аккумулятора схема стабилизирует ток на заданном уровне и разряжает аккумулятор до получения установленного напряжения в зависимости от типа батареи (например, 3,2 В для литий-ионного элемента). Емкость (в мАч) рассчитывается как установленный ток разряда (в мА) умноженный на время (в часах) необходимое для разрядки до порогового напряжения.
Ток разряда можно регулировать путем изменения заполнения ШИМ-сигнала, который управляет источником тока. Прежде чем мы перейдем к саму скетчу, мы должны загрузить и установить две библиотеки:
- JC_Button — используется для управления кнопками.
- Adafruit_SSD1306 — поддержка дисплея OLED с драйвером SSD1306.
Скетч для Arduino
Перед компиляцией в коде необходимо заполнить два значения калибровки:
- Массив значений тока для различных величин ШИМ и используемого силового резистора. Этот ток мы измеряем, подключая мультиметр последовательно с ячейкой, уже после сборки нашего устройства. Кнопками меняем заполнение управляющего сигнала и измеряем текущий для отдельных порогов ток ячейки. Полученные значения помещаем в переменную Current.
- Уровень напряжения VCC в нашей схеме. Мы измеряем напряжение 5 В с помощью мультиметра на выводе VCC Arduino и вводим фактическое значение в переменную Vcc.
После вышеуказанной калибровки код программы готов к компиляции. Мы еще можем изменить значение переменной Low_BAT_ Level — это порог напряжения, до которого будет разряжаться элемент. Это зависит от типа аккумулятора. Хорошей идеей будет установить этот порог чуть выше минимально возможного напряжения для конкретного типа аккумулятора.
Далее следуют минимальные напряжения ячеек различной химии для разрядки ячеек током 1С:
- Оксид лития-кобальта: напряжение = 2,5 В.
- Оксид лития-марганца: напряжение = 2,5 В.
- Фосфат лития и железа: напряжение = 2,5 В.
- Титанат лития: напряжение = 1,8 В.
- Литий-марганец-кобальт оксид: напряжение = 2,5 В.
- Литий-никель-кобальт-алюминий оксид: напряжение = 3,0 В.
Скачать скетч и файлы печатной платы(220,3 KiB, скачано: 1 331)