Ардуино измеритель емкости аккумуляторов

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 для последующей обработки и визуализации данных графическими методами.

Источник

Делаем тестер литий-ионных батарей c помощью Ардуино

Когда речь заходит о создании аккумуляторных батарей, литий-ионные элементы являются, без сомнения, одними из самых лучших. Но если вы используете старые батареи, например, от старого ноутбука, то, возможно, захотите провести тест емкости перед сборкой батарейного блока.

Поэтому сегодня мы покажем вам, как сделать Li-ion измеритель емкости, используя микроконтроллер Ардуино.

Шаг 1. Всё, что нам нужно

Ниже перечислим комплектующие для проекта:

  1. PCB (печатная плата);
  2. Силовой резистор;
  3. Резистор 10К;
  4. OLED (светодиодный дисплей)
  5. Ардуино
  6. Зуммер
  7. Разъемы для подключения винтовых клемм
  8. 40-контактный разъем/коннектор (или меньше)
  9. Транзистор IRFZ44N

Шаг 2. Что такое емкость?

Прежде чем делать наш Ардуино тестер, мы должны немного разобраться в том, что такое емкость. Единица для емкости — мАч или Ач.

Если вы посмотрите на любую литий-ионную емкость (см. фото выше), то на неё будет упомянута ее емкость — на рисунке 2600 мАч.

В основном, это означает, что если мы подключим нагрузку на нее, которая составит 2.6A, эта батарея будет работать в течение часа. Точно так же, если у меня есть аккумулятор емкостью 1000 мАч и нагрузка 2A, то он длительность составит 30 минут. Примерно это означают мАч или Ач.

Шаг 3. Практически невозможно

Но вычисление таким образом практически невозможно, потому что все мы знаем V = IR. Первоначально, напряжение батареи будет 4,2 В, если мы будем поддерживать постоянное сопротивление, будет протекать некоторый ток, протекающий через нагрузку. Но с течением времени напряжение батареи будет уменьшаться, а также наш ток. Это сделает наши вычисления намного сложнее, чем ожидалось, потому что нам нужно будет измерить ток и время для каждого раза.

В таком случае выполнения всех расчетов практически невозможно, поэтому здесь мы будем использовать Ардуино, которая будет измерять текущее время и напряжение, обрабатывать информацию и, в конце концов, давать нам пропускную способность.

Шаг 4. Наша схема

У нас был SPI OLED, который валялся без дела, поэтому мы преобразовали его в I2C и использовали. Если вы хотите узнать, как преобразовать SPI в OLED, то мы обязательно это разберем в ближайших уроках.

Схему проекта смотрите выше. И вот как работает эта схема. Сначала Arduino измеряет падение напряжения, создаваемое резистором 10 Ом, если выше 4,3 В, тогда она отключит высокое напряжение дисплея MOSFET, если оно меньше 2,9 В, оно отображает низкое напряжение и выключает MOSFET, а если находится между 4,3 В и 2,9 В, то она включит MOSFET. Батарея начнет разряжаться через резистор, начнется измерение тока, используя закон Ома. Ардуино также использует функцию Миллиса для измерения времени, а произведение тока и времени дает нам пропускную способность.

Шаг 5. Скетч для Ардуино

Вы можете взять код или скачать его ниже:

Шаг 6. Финальный результат

В итоге после тестирования вы можете начать процесс пайки на печатной плате. Рекомендуем использовать коннекторы, так как позже вам может понадобятся дисплей OLED или Arduino для другого проекта.

После пайки, когда вы подключаете мощность, всё может работать не так, как ожидалось. Возможно, потому что мы забыли добавить, так называемые, Pull Up резисторы на интерфейсе шины I2C, поэтому мы вернулись к коду и использовали встроенные резисторы Ардуино.

Теперь Ардуино тестер литий-ионных батарей работает отлично.

Источник

Измерение уровня заряда аккумулятора на Ардуино

Отслеживание уровня заряда аккумулятора или батареи является одной из основных задач при разработке автономных устройств. Особенно она актуальна для устройств, которые работают удалённо и сообщают о своём статусе, используя, например, GSM канал*. Даже когда устройство находится рядом с вами, индикация уровня заряда аккумулятора поможет сделать его использование более удобным. В данной статье мы рассмотрим простой способ отслеживания уровня заряда аккумулятора или батареи при помощи Ардуино.

*Знакомые с GSM модулями могут возразить, что в их составе уже присутствуют средства мониторинга заряда аккумулятора, и не нужно изобретать велосипед. Справедливое замечание. Но при условии, что для GSM модуля не используется стабилизация напряжения, скажем, от 12-вольтового аккумулятора. В этом случае модуль не сможет оценить уровень заряда аккумулятора. Таким образом, не стоит преуменьшать актуальность данной темы.

Теория

Предлагаемый способ отслеживания уровня заряда основан на измерении напряжения источника питания. Возьмем, к примеру, литий-ионный аккумулятор. В процессе разрядки его напряжение изменяется от 4.2 В до 3 В. Выполняя периодические замеры напряжения и сопоставляя полученный результат с приведённым диапазоном 4.2. 3 В, мы можем оценить уровень заряда. Но не всё так однозначно. Дело в том, что напряжение аккумулятора при разряде изменяется не линейно. Это видно из графика разряда литий-ионного аккумулятора, который легко найти в google по запросу li-ion discharge graph:

Данный график позаимствован с сайта batteryuniversity. На нём отражён процесс разряда аккумулятора Panasonic NCR18650B 3200мАч разными токами от 0.2C до 2C. Как видите, напряжение аккумулятора изменяется более-менее линейно лишь при разряде большими токами. Здесь можно вспомнить математику и посчитать процент оставшегося заряда по линейной формуле. Но это, скорее, частный случай. Пожалуй, более актуальны случаи, когда устройство потребляет незначительные токи, поэтому ориентироваться мы будем на красную и синюю кривые.

Таким образом, чтобы получить наиболее точное представление об оставшемся заряде аккумулятора или батареи на основе напряжения, нужно иметь соответствующий график разряда.

Следующий момент, который я беру во внимание – это то, что высокая детализация уровня заряда (в тех же процентах, которые дают нам 100 значений) бывает нужна крайне редко. В большинстве случаев достаточно понимания: когда уровень заряда находится в «зелёной зоне», когда в «жёлтой», а когда нужно быть готовым к отключению устройства из-за разряда аккумулятора. Поэтому наиболее рациональным представляется подход, когда мы выделяем 3-4 пороговых напряжения и относительно них определяем уровень заряда. Грубо говоря, если напряжение литий-ионного аккумулятора больше 4 В, то заряд высокий; если меньше 3.2 В – аккумулятор вот-вот разрядится, а между этими двумя значениями выделяем еще несколько зон. Если необходимо выразить заряд именно в процентах – пожалуйста: выделяем 10 зон и показываем результат десятками (10%, 20% и т.д.).

Аналогичные графики разряда можно найти и для других элементов питания, смысл будет тот же.

Реализация

Итак, задача поставлена: необходимо измерять напряжение источника питания нашего устройства. Я бы выделил 2 возможных варианта реализации:

  • измерять напряжение, используя АЦП Ардуино;
  • воспользоваться датчиком напряжения, например, INA219.

Первый вариант хорош тем, что для него ничего не требуется. Разве что пара резисторов. А датчик напряжения – это уже дополнительный компонент. Зато он позволит более точно измерять напряжение. Кроме того INA219 измеряет потребляемый ток и мощность, поэтому имеет потенциал для дальнейшего развития в плане мониторинга питания (с его помощью можно построить ту же кривую разряда аккумулятора, определить его ёмкость, спрогнозировать время работы устройства), но это уже отдельная тема.

Вариант 1. Измерение напряжения при помощи Ардуино.

Все платы Ардуино имеют в своём составе АЦП. У популярных плат (UNO, NANO, MEGA2560) разрядность АЦП составляет 10 бит, у более продвинутых (Due, Zero) – 12 бит. АЦП позволяет измерять напряжение в диапазоне от 0 В до опорного напряжения Vref. Значение Vref в общем случае соответствует напряжению питания платы – 5 В или 3.3 В, но может быть привязано к внутреннему стабилизатору. Для лучшего понимания принципов использования АЦП предлагаю рассмотреть следующий скетч.

Загрузите скетч в Ардуино, соедините A0 с выводом 5V и откройте монитор порта. Вы должны увидеть следующий результат:

Этот скетч измеряет напряжение на входе A0 и выводит результат в монитор порта. Разрешение АЦП используемой мной Ардуино УНО составляет 10 бит, а значит, результатом измерений будет число от 0 до 1023 (2^10 значений). При этом значение 0 будет говорить об отсутствии напряжения, а максимальное значение – 1023 – о его равенстве (а так же превышении, что мы не будем рассматривать) опорному напряжению Vref, каким бы оно ни было. У меня в монитор порта выводится как раз число 1023. Поскольку опорным напряжением АЦП по умолчанию является напряжение питания Ардуино – 5 вольт, выдаваемые USB портом компьютера (разумеется, это не точное значение), можно утверждать, что напряжение на входе A0 тоже составляет 5 вольт.

Попробуем отсоединить A0 от вывода 5V и подсоединить к 3v3. Теперь у меня в монитор порта выводится значение 687. Зная опорное напряжение, нетрудно вычислить напряжение на A0:

(5 В / 1024) * 687 = 3.35 В

Для получения более точного результата следует измерить напряжение, выдаваемое USB портом.

Если же вывод A0 соединить с «землёй», то в монитор порта будет выводиться значение 0.

Вернёмся к нашей задаче. Питание от аккумулятора не всегда предполагает наличие стабильного напряжения, которое может использоваться как опорное для АЦП. В таких случаях в качестве Vref следует использовать напряжение от внутреннего стабилизатора Ардуино. Для большинства плат, в том числе Ардуино УНО, это напряжение составляет 1.1 В. Это означает, что измеряемое напряжение необходимо понизить при помощи делителя, чтобы оно не превышало 1.1 В. Здесь нам помогут пара резисторов номиналом в несколько десятков-сотен кОм, включенные по следующей схеме:

Это простейший резистивный делитель напряжения. Он характеризуется коэффициентом передачи, который показывает, во сколько раз выходное напряжение будет меньше входного, то есть:

Сам коэффициент рассчитывается по следующей формуле:

Остаётся лишь подобрать номиналы резисторов таким образом, чтобы понизить напряжение аккумулятора до нужного нам уровня. Для измерения напряжения аккумулятора 18650 я выбрал номиналы 47k и 10k. Реальное сопротивление будет отличаться, поэтому их нужно обязательно измерить мультиметром. Выбранные мной номиналы дают коэффициент

0.175, что позволяет измерять напряжение до 1.1 В / 0.175 = 6,27 В. Ниже приведены схема, пример скетча, реализующий описанный функционал, и результат его работы. Предполагается, что Ардуино питается от аккумулятора, поэтому результаты выводятся на дисплей 1602, а не в Serial.

На фото видно, что результат измерения напряжения при помощи Ардуино и делителя не сильно отличается от того значения, что показывает мультиметр. Это хороший результат.

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

Опорное напряжение, выдаваемое внутренним стабилизатором, не обязательно будет 1.1 В, и может отличаться от одного микроконтроллера к другому. Даташит допускает разброс от 1.0 до 1.2 В. Поэтому для получения более точных измерений можно вычислить значение Vref и использовать его в скетче при расчетах. Его легко найти путём измерения заранее известного напряжения (обозначим его как V(A0)):

Vref = V(A0) * 1024 / analogRead(A0)

Вариант 2. Использование датчика напряжения INA219.

После шаманства со всеми этими делителями и внутренними источниками опорного напряжения преимущество датчиков напряжения на базе специализированных микросхем очевидно. Они позволяют измерять напряжение (а некоторые ещё и потребляемый устройством ток) в широком диапазоне и с высокой точностью. INA219 – хороший пример такого датчика. Он потребляет не более 1мА, а в спящем режиме менее 15мкА, что весьма ценно при создании автономных устройств, в условиях энергосбережения. Подробное описание датчика и используемой далее библиотеки для работы с ним вы найдёте здесь: https://compacttool.ru/datchik-napryazheniya-i-toka-na-chipe-ina219

Для отслеживания уровня заряда аккумулятора 18650 при помощи INA219 и вывода результата на дисплей я соединил компоненты в соответствии со схемой:

В этот раз я решил выделить 10 уровней заряда, чтобы отображать его в процентах. Скетч и результат его работы ниже:

Заключение

Конечно, предложенный способ не претендует на высокую точность. Существуют специализированные микросхемы мониторинга питания, которые определяют оставшуюся ёмкость аккумулятора с учётом нагрузки и других параметров. Они находят применение в ноутбуках, телефонах и другой портативной технике. Но вряд ли вы найдёте что-то подобное в любительских проектах – не тот уровень. Таким образом, определение уровня заряда аккумулятора по напряжению – приемлемая альтернатива, не требующая серьёзных аппаратных или программных ресурсов.

Источник

Оцените статью