Тестер емкости литий-ионных батарей 18650 на Arduino


Как известно, литий-ионные батареи (Li-Ion Battery) являются в настоящее одними из самых эффективных типов аккумуляторов. Но чтобы обеспечить им "долгую жизнь", их необходимо специальным образом заряжать, разряжать и даже хранить. В данной статье мы рассмотрим создание тестера емкости литий-ионных батарей 18650 на основе платы Arduino, который будет полностью разряжать батарею и на основе этого определять ее емкость. Таким образом, можно будет выявлять неисправные или мало пригодные (вследствие их малой емкости) для дальнейшего использования аккумуляторы.

Внешний вид тестера емкости литий-ионных батарей 18650 на Arduino

Наше устройство будет обладать следующими основными техническими особенностями:

  • две кнопки для установки тока;
  • OLED дисплей для отображения пользовательского интерфейса и результатов измерения емкости;
  • термистор (терморезистор) для определения температуры батареи.

Ранее на нашем сайте мы рассматривали аналогичный тестер емкости аккумуляторов 18650 на основе Arduino, но в нем не предусмотрена регулировка тока разряда и измерение температуры батареи. Также в нем используется ЖК дисплей вместо OLED дисплея, применяемого в данном проекте для более наглядного отображения информации по сравнению с обычным ЖК дисплеем.

Также ранее на нашем сайте мы рассматривали двухрежимное зарядное устройство литиевых батарей на основе Arduino – можете посмотреть если интересно. Еще можете просмотреть все проекты силовой электроники на нашем сайте.

Необходимые компоненты

  1. Плата Arduino Nano (купить на AliExpress).
  2. OLED дисплей SSD1306 с диагональю экрана 0.96” (купить на AliExpress - для данного проекта выбирайте вариант дисплея с 4 контактами).
  3. Операционный усилитель LM358 (купить на AliExpress).
  4. MOSFET RLZ44N (купить на AliExpress).
  5. Резистор 0,5 Ом 5 Вт (для нагрузки) (купить на AliExpress).
  6. 18650 Li-ion Battery (для тестирования).
  7. Терморезистор 10 кОм NTC типа (купить на AliExpress).
  8. Резисторы 1 МОм, 10 кОм, 4,7 кОм (2 шт.) (купить на AliExpress).
  9. Конденсатор 100 нФ – 2 шт. (купить на AliExpress).
  10. Конденсатор 220 мкФ (купить на AliExpress).
  11. Тактильные переключатели/кнопки (Tactile Switches) – 2 шт.
  12. Держатель (отсек) для батареи 18650.
  13. Перфорированная плата.
  14. Соединительные провода.

Схема проекта

Схема тестера емкости литий-ионных батарей 18650 на Arduino представлена на следующем рисунке.

Схема тестера емкости литий-ионных батарей 18650 на Arduino

Схема нашего тестера состоит из 4-х основных элементов:

  • схема нагрузки постоянного тока;
  • схема измерения емкости батареи;
  • схема измерения температуры батареи;
  • пользовательский интерфейс.

Рассмотрим каждый из этих элементов более подробно.

Схема нагрузки постоянного тока

Основным компонентом данной схемы является двойной операционный усилитель LM358 (в едином корпусе). Тем не менее, в нашем проекте необходим только один операционный усилитель. ШИМ выход с контакта 3 платы Arduino подключен к неинвертирующему входу первого операционного усилителя (ОУ). Сигнал ШИМ фильтруется с помощью ФНЧ для получения эквивалентного аналогового напряжения. В то же время инвертирующий вход операционного усилителя работает в качестве обратной связи для выхода операционного усилителя, который подключен между IRFZ44N MOSFET и шунтирующим резистором 0,5 Ом.

Схема нагрузки постоянного тока

Этот операционный усилитель, резистор R4 и MOSFET образуют схему нагрузки постоянного тока (constant current load circuit). Когда мы устанавливаем напряжение на неинвертирующем входе ОУ, то ОУ включает MOSFET чтобы вызвать такое же падение напряжения на резисторе R4 – падение напряжения на данном резисторе создается исходя из-за закона Ома вследствие протекания по нему тока. Таким образом, мы можем контролировать величину тока, протекающего через нагрузочный резистор (0,5 Ом) изменяя ширину импульса сигнала ШИМ, поступающего на неинвертирующий вход ОУ.

Схема измерения емкости батареи

Напряжение на батарее измеряется с помощью аналогового контакта A0 платы Arduino. Два конденсатора (C1 и C2) используются для фильтрации шумов от схемы нагрузки постоянного тока, которые могут ухудшить точность аналого-цифрового преобразования (АЦП).

Схема измерения емкости батареи

Схема измерения температуры батареи

Температура батареи измеряется с помощью терморезистора 10 кОм с отрицательным температурным коэффициентом (NTC). Сопротивление терморезистора изменяется в зависимости от температуры. Поскольку это терморезистор NTC типа, то при увеличении температуры его сопротивление уменьшается.

Схема измерения температуры батареи

Используя делитель напряжения, состоящий из терморезистора и обычного резистора сопротивлением 10 кОм, мы можем с помощью измерения напряжения в средней точке этого делителя измерять текущую температуру (за счет изменения сопротивления терморезистора). Напряжение со средней точки делителя напряжения подается на аналоговый контакт A1 платы Arduino для измерения напряжения.

Пользовательский интерфейс

Пользовательский интерфейс в нашем проекте состоит из двух кнопок и 0.96" OLED дисплея с интерфейсом I2C. Кнопки (Up и Down) используются для изменения ширины импульса ШИМ сигнала. Третья кнопка (RST) используется для сброса платы Arduino.

Пользовательский интерфейс в нашем проекте

Принцип работы тестера емкости батарей

Принцип работы нашего тестера емкости батарей основан основан на сравнении напряжений на инвертирующем (контакт 2) и неинвертирующем (контакт 3) входах операционного усилителя. Когда мы подаем на неинвертирующий вход определенный уровень напряжения с помощью ШИМ сигнала, выход ОУ открывает затвор MOSFET транзистора. А когда он открывается, то через резистор R1 начинает протекать ток, который создает на нем падение напряжения, которое используется как сигнал отрицательной обратной связи для ОУ. Он управляет MOSFET транзистором таким образом, чтобы уровни напряжений на инвертирующем и неинвертирующем входах операционного усилителя были примерно одинаковы. Таким образом, ток через нагрузочный резистор будет пропорционален напряжению на неинвертирующем входе ОУ. ШИМ сигнал с выхода Arduino фильтруется с помощью ФНЧ, состоящего из R3 и C3.

Таким образом, для определения емкости батареи получаем формулу:

Battery Capacity (mAh) = Current (I ) in mA x Time ( T ) in Hours

То есть чтобы рассчитать емкость батареи в мАч (mAh) нам необходимо знать ток в мА и время в часах. Наша схема нагрузки постоянного тока позволяет разряжать батарею постоянным током на протяжении всего времени разрядки. Ток разряда можно отрегулировать с помощью кнопок. Время разряда измеряется программным способом с помощью таймера в Arduino.

Сборка конструкции проекта

Собрать всю конструкцию проекта мы решили на перфорированной плата как показано на следующем рисунке.

Собранная конструкция проекта

Объяснение программы для Arduino

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

Первым делом в программе подключим все используемые библиотеки. Библиотека JC_Button.h используется для считывания состояния кнопок, а библиотека Adafruit_SSD1306.h – для взаимодействия с OLED дисплеем. Обе эти библиотеки можно установить с помощью менеджера библиотек (library manager) в Arduino IDE.

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

Затем установим в программе величину опорного напряжения (reference voltage). Это значение напряжения (Vcc) играет очень важную роль в нашей программе поскольку позволяет идентифицировать напряжение батареи. Для установки значения Vcc сначала соедините плату Arduino с внешним источником питания напряжением 7-12 Вольт. Затем измерьте напряжение на контакте 5V платы Arduino с помощью мультиметра. После этого установите измеренное значение Vcc в коде программы.

После этого рассчитаем значение напряжения на резисторе R4 зная величину тока через него.

Затем установим значение коэффициента заполнения ШИМ сигнала, подаваемого на контакт 3 операционного усилителя, чтобы достигнуть требуемого значения падения напряжения на резисторе R4. Также зададим аппроксимирующие коэффициенты рабочей характеристики терморезистора.

Мы можем использовать уравнение Стейнхарта-Харта (приведено ниже) для расчета температуры исходя из сопротивления терморезистора.  Более подробно про использование данного уравнения вы можете прочитать в статье про измерение температуры с помощью терморезистора и Arduino.

Но в данном проекте мы будем использовать более простое выражение для определения значения температуры (приведено ниже), которое называется уравнением на основе параметра Beta (или B). Оно не такое точное как уравнение Стейнхарта-Харта, но несмотря на это обеспечивает достаточную точность вычислений в необходимом нам узком температурном диапазоне.

Переменная T в этом выражении – это значение температуры окружающей среды в Кельвинах. T0 – это обычная комнатная температура, также в Кельвинах (25°C = 298.15K), B – константа beta, R – сопротивление терморезистора при текущей температуре окружающей среды, R0 – сопротивление терморезистора при температуре T0. Значения T0, B и R0 можно найти в даташите на имеющийся у вас терморезистор.

Если напряжение на делителе напряжения и Vref (опорное напряжение) одинаковы, то в этом случае у вас нет необходимости знать значения R0 или R чтобы определить значение температуры. В этом случае вы можете записать уравнение для определение сопротивления терморезистора используя отношение значений на выходе АЦП.

Тогда получаем:

Рассчитав обратное значение полученного по этой формуле результата, мы получим значение температуры в Кельвинах. Допустим, что напряжение с выхода делителя напряжения (с терморезистором) у нас подается на 10-битный АЦП. Константа beta для терморезистора равна 3380, сопротивление R0 терморезистора при температуре 25°C равно 10 кОм, а значение на выходе АЦП равно 366. Тогда по выше приведенной формуле получим:

Этот алгоритм вычисления температуры отражен в функции temp() в нашей программе.

Далее в функции loop мы будем считывать состояния кнопок. При нажатии этих кнопок ток разряда будет увеличиваться или уменьшаться (в зависимости от нажатой кнопки). Если кнопка нажата на время более 1000ms, то включается таймер отсчета.

Тестирование работы проекта

Когда аппаратная часть проекта будет готова и программа будет загружена в плату Arduino можно будет приступить к тестированию работы проекта. Для этого поставьте тестируемую батарею в крепление для нее на плате. После этого на экране OLED дисплея должны начать показываться результаты работы схемы: ток разряда, емкость батареи и т.д.

Тестирование работы проекта

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

Исходный код программы (скетча)

Видео, демонстрирующее работу проекта

(Проголосуй первым!)
Загрузка...
609 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован.