Тестер емкости Li-ion аккумуляторов

Возникла надобность определения емкости Li-ion аккумуляторов, а именно тип 18650. Просмотрев несколько статей нашел еще один блог о электронике. Методика проста, зарядив полностью тестируемый аккумулятор будем разряжать его через резистор известной емкости и считать время. Плата Arduino будет замерять падение напряжение на нагрузочном резисторе каждую секунду. Подключение аккумулятора с резистором к любому аналоговому входу Arduino. Если подключать батарею аккумуляторов или аккумулятор с напряжением больше 5В, необходим делитель напряжения.
Из закона Ома I = U/R. Деля полученное на 3600 и суммируя значения получим емкость в А*ч. Окончание процесса — срабатывание защиты от переразряда или при ее отсутствии 2,75В.
Немного информации об аккумуляторе 18650 из datasheet Panasonic.
Под рукой был резистор на 10,2Ом. Рабочее напряжение аккумулятора 3,7В. Ток через резистор будет 3,7/10,2 = 0,36А. Выделяемая мощность 3,7*0,36 = 1,3Вт. Резистор должен быть соответствующей мощности.
Процесс измерения полуавтоматический. По окончании процесса включим светодиод на плате Arduino и необходимо будет отключить аккумулятор. Данные выводим на LCD дисплей. Скетч тестера приведен ниже.

//
// Тестер емкости Li-ion аккумуляторов
//
#include <Wire.h>               // библиотека интерфейса I2C
#include <LCD.h>                    
#include <LiquidCrystal_I2C.h>  // библиотека ЖК дисплея с интерфейсом I2C

#define I2C_ADDR     0x27       // I2C адрес интерфейса дисплея
#define LED 13                  // светодиод на плате
#define PIN_tester 0            // аналоговый вход куда подключен аккумулятор
#define resistor 10.2           // значение сопротивления нагрузочного резистора в омах

float capacity=0, value,voltage,current, time=0;
boolean x=false;

// инициализания дисплея
LiquidCrystal_I2C iLCD(I2C_ADDR, 2, 1, 0, 4, 5, 6, 7);   

// процедура измерения
void measure (void) {
  value= analogRead(PIN_tester); // читаем значение
  voltage=value/1024*5.0;        // переводим в вольты
  current = voltage/resistor;    // рассчитываем ток
  capacity=capacity+current/3600;// суммируем емкость
  time++;
}

// измерения будут делаться по аппаратному таймеру
ISR(TIMER1_OVF_vect) {
  TCNT1=0x0BDC;
  x=!x;
  measure();
}

void setup() {
 // выключим диод на плате 
 pinMode ( 13, OUTPUT );
 digitalWrite ( 13, LOW ); 
 // конфигурация дисплея 16 х 2
 iLCD.begin ( 16, 2 );
 // установка подсветки
 iLCD.setBacklightPin(3,POSITIVE);
 // включение подсветки
 iLCD.setBacklight(HIGH);
 
 TIMSK1=0x01;   // регистр таймера прерываний = прерывание по переполнению, стр. 139 руководства
 TCCR1A=0x00;   // обычный режим, стр. 134 руководства (mode0)
 TCNT1=0x0BDC;  // установка начального значения, стр. 138 руководства
 TCCR1B=0x04;   // старт таймера / установка источника, стр. 137 руководства
}

void loop() {
  // выводим на дисплей падение напряжения
  iLCD.home();
  iLCD.print("V="); 
  iLCD.setCursor(2,0);
  iLCD.print(voltage);
  // выводим на дисплей рассчитанный ток
  iLCD.setCursor(9,0);
  iLCD.print("A="); 
  iLCD.setCursor(11,0);
  iLCD.print(current);
  // выводи на дисплей подсчитанную емкость
  iLCD.setCursor(0,1);
  iLCD.print("A*h="); 
  iLCD.setCursor(4,1);
  iLCD.print(capacity); 
  // когда напряжение <2.75В включаем для индикации светодиод
  if (voltage&lt;=2.75) {
   digitalWrite(LED, HIGH); 
  }
}


Ниже приведено фото тестера в процессе работы.
Li-Ion tester
Update. Измерения показали что при напряжении отсечки 2,5В тестируемый аккумулятор Samsung ICR18650-25F имеет емкость порядка 2,5 А*ч.

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *