Тестер аккумуляторов li-ion на базе TP4056 и acs712.
- Войдите на сайт для отправки комментариев
Пнд, 04/07/2016 - 16:47
Тестер аккумуляторов li-ion на базе TP4056 и acs712.
Доброе время суток! Есть идея сделать тестере аккумуляторов на базе TP4056 и acs712.
Вот по такой схеме:

Данная схема умеет отслеживать как зарядку, так и разрядку батареи. Что думаете? Стоит заморачиваться? Спасибо!
Тестер аккумуляторов li-ion на базе TP4056 и acs712.
Доброе время суток! Есть идея сделать тестер аккумуляторов на базе TP4056 и acs712.
Вот по такой схеме:
Данная схема умеет отслеживать как зарядку, так и разрядку батареи. Что думаете? Стоит заморачиваться? Спасибо!
vitalikost, не стоит.ACS712 очень грубый инструмент, на малых токах точность будет никакая.
Вечером было скучно, решил накатать.
За основу был взят код: 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); }Сделал, откалибровав, за основу для калиброкви был взят код:
http://cxem.net/arduino/arduino35.php
Подключил по такой схеме:
Погренность подяка 2-3%. Для тестов б/у банок пойдет, в планах на будущие поставить
http://ru.aliexpress.com/item/Free-shipping-1pcs-INA219-I2C-Bi-direction...
А так пока и так сойдет.
Делаю похожий проект. Нарвался на вашу тему.
Могу от себя добавить пару идей:
Замер производить не по количеству циклов (1000) а используя все время от цикла к циклу. Тогда получится более средний результат.
В ТР4056 можно управлять током зарядки и он зависит от напряжения на ноге 2 Микросхемы U1.
Током разряда так же можно управлять с ШИМ выводов через RC цепочку используя транзистор PNP током >3А и R=2Ом. Транзистор на радиатор.
Ток заряд и разряда можно поддерживать постоянным.
Для увеличения точности замера тока можно дополнительно использовать операционный усилитель. ТР4056 Ограничена током заряда 1 Ампер ,а датчик позволяет мерить до 5 Ампер, нужно усилить сигнал в 5 раз.
Мой проект почти готов. Осталось придумать как по удобнее подключаться к аккумулятору.