Тестер аккумуляторов li-ion на базе TP4056 и acs712.

vitalikost
Offline
Зарегистрирован: 28.11.2014

Тестер аккумуляторов li-ion на базе TP4056 и acs712.

Доброе время суток! Есть идея сделать тестере аккумуляторов на базе TP4056 и acs712.

Вот по такой схеме:

Данная схема умеет отслеживать как зарядку, так и разрядку батареи. Что думаете? Стоит заморачиваться? Спасибо!

vitalikost
Offline
Зарегистрирован: 28.11.2014

vitalikost пишет:

Тестер аккумуляторов li-ion на базе TP4056 и acs712.

Доброе время суток! Есть идея сделать тестер аккумуляторов на базе TP4056 и acs712.

Вот по такой схеме:

Данная схема умеет отслеживать как зарядку, так и разрядку батареи. Что думаете? Стоит заморачиваться? Спасибо!

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

vitalikost, не стоит.ACS712 очень грубый инструмент, на малых токах точность будет никакая.

vitalikost
Offline
Зарегистрирован: 28.11.2014

Вечером было скучно, решил накатать.

За основу был взят код: http://cxem.net/arduino/arduino35.php

Немного переделан под датчик ACS712 а также подключен lcd 1602 shield.

Код еще на стадии отладки, так что сильно за криворукость не ругать:

#include <LiquidCrystal.h>

LiquidCrystal lcd(8, 9, 4, 5, 6, 7 );


#define SENSOR_PIN A1// подключаем acs712

float capacity=0, value,voltage,current,ziro,coef;
int time=0;

void setup() {
  Serial.begin(9600);
  lcd.begin(16, 2);             
  lcd.print("Tester Li-ion"); 
  delay(500);
  lcd.clear();
  lcd.print("Tester"); 
  lcd.setCursor(0, 1); 
  lcd.print("calibration"); 
  delay(500);
  ziro=0;
  for(int i = 0; i < 1000; i++) { 
  
  ziro =   ziro +  analogRead( SENSOR_PIN );

  delay(1);
  }
  
  ziro=ziro/1000;//калибровка в ноль.

  
  lcd.clear();
  lcd.print("Test begin"); 
  delay(100);
 
  
}

void loop() {
  float amp =0;
  float analogReading=0;
  float analogReading_summa=0;
  for(int i = 0; i < 1000; i++) { 
  analogReading = analogRead( SENSOR_PIN );
  analogReading_summa = analogReading_summa +  analogReading;
  //amp= amp + ((2.5 - (analogReading * 0.0049)) / 0.1);//Эта формула не подошла
  delay(1);
  }
  
  analogReading_summa=analogReading_summa/1000;
  amp = analogReading_summa - ziro;
  coef=0;
 //Подобрано методом измерения, оказалось чувствительность не 185, а 133
//Немного заваливает в одну сторону 
  if(amp<512.00){
    coef=0.0375;
  }
  else{
     coef=0.038;
  }  

  Serial.print(" A = ");
  Serial.print(amp*coef);
  Serial.print(", Am = ");
  Serial.println( amp * 1000*coef );
  Serial.print(" Bit - ");  
  Serial.println(analogReading_summa);  

  current=amp * coef;
  capacity=capacity+current/3600;
  time++;

//Вывод на lcd
    lcd.setCursor(0, 0); 
    lcd.print("                 "); 
    lcd.setCursor(0, 0); 
    lcd.print("A= ");
    lcd.print(current);
    
    lcd.setCursor(0, 1); 
    lcd.print("                 "); 
    lcd.setCursor(0, 1);
    lcd.print("Ah=");
    lcd.print(capacity);
    lcd.print(" ");
    lcd.print("T=");
    lcd.print(time);


  
  //delay(1000);
}


 

 

vitalikost
Offline
Зарегистрирован: 28.11.2014

Сделал, откалибровав, за основу для калиброкви был взят код: 

http://cxem.net/arduino/arduino35.php

Подключил по такой схеме:

 

vitalikost
Offline
Зарегистрирован: 28.11.2014

Погренность подяка 2-3%. Для тестов б/у банок пойдет, в планах на будущие поставить 

http://ru.aliexpress.com/item/Free-shipping-1pcs-INA219-I2C-Bi-direction...

А так пока и так сойдет. 

jinix
Offline
Зарегистрирован: 20.11.2017

Делаю похожий проект. Нарвался на вашу тему.

Могу от себя добавить пару идей:

Замер производить не по количеству циклов (1000) а используя все время от цикла к циклу. Тогда получится более средний результат. 

В ТР4056 можно управлять током зарядки и он зависит от напряжения на ноге 2 Микросхемы U1.

Током разряда так же можно управлять с ШИМ выводов через RC цепочку используя транзистор PNP током >3А и R=2Ом. Транзистор на радиатор.

Ток заряд и разряда можно поддерживать постоянным.

Для увеличения точности замера тока можно дополнительно использовать операционный усилитель. ТР4056 Ограничена током заряда 1 Ампер ,а датчик позволяет мерить до 5 Ампер, нужно усилить сигнал в 5 раз.

Мой проект почти готов. Осталось придумать как по удобнее подключаться к аккумулятору.