Справочници, схемотехника, теория > Батерии, зарядни и десулфатизиращи устройства
"Разрядно" устройство, или как да измерим капацитета на батерията
juliang:
Това засега е сглобено "на коляно", с подръчни елементи. Единственото което прави в момента е да мери напрежение и време. Идеята в бъдеще е следната:
1. Ограничаване на минималното напрежение до което да пада батерията, за да не се повреди необратимо. Теста трябва да прекъсне при достигане на 3.0 волта (или ако съм садист - до 2.5 волта :) ).
2. "Наръч" от резистори, с възможност за избор на оптималния според капацитета на батерията.
3. Много евентуално и много напред в бъдещето - и функция за зареждане, и функция за балансиране ... абе нещо такова:
В момента ползвам наскоро дошлите ми Ардуино Уно, LCD Shield и real-time clock модул. Резистор 10 вата 5.1 ома като товар. Едно це-ка ключенце с което може да се прекъсне товара и едновременно с това да се спре часовника (ако човек иска да похапне и да не оставя батерията без надзор).
Код:
--- Код: ---#include <virtuabotixRTC.h>
#include <LiquidCrystal.h>
// Creation of the Real Time Clock Object
//SCLK -> 6, I/O -> 7, CE -> 8
virtuabotixRTC myRTC(10, 11, 12);
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
byte oldSeconds;
int analogPin = 1;
int startMeasurementPin = 3;
float voltage = 0.0;
String text;
float batteryCapacity = 0;
int elapsedTime = 0;
void setup() {
Serial.begin(9600);
pinMode(startMeasurementPin, INPUT);
lcd.begin(16, 2); // start the library
// Set the current date, and time in the following format:
// seconds, minutes, hours, day of the week, day of the month, month, year
//myRTC.setDS1302Time(00, 22, 20, 2, 21, 2, 2017);
}
void loop() {
// This allows for the update of variables for time or accessing the individual elements.
myRTC.updateTime();
if (oldSeconds != myRTC.seconds)
{
oldSeconds = myRTC.seconds;
elapsedTime++;
voltage = analogRead(analogPin) / 204.38;
batteryCapacity += voltage / 5.1;
lcd.setCursor(0, 0);
lcd.print(String(voltage) + "V ");
if (digitalRead(startMeasurementPin) == LOW)
{
lcd.setCursor(6, 0);
lcd.print(String(elapsedTime) + "s");
lcd.setCursor(11, 0);
lcd.print("RUN ");
lcd.setCursor(0, 1);
lcd.print("Capacity " + String(batteryCapacity / 3.6) + "mAh");
// lcd.print(getTimeAsString(myRTC));
}
else
{
lcd.setCursor(11, 0);
lcd.print("STOP");
}
}
}
String getTimeAsString(virtuabotixRTC rtc)
{
String result;
result = "Time:";
if (rtc.hours < 10) {
result = result + "0";
}
result = result + rtc.hours + ":";
if (rtc.minutes < 10) {
result = result + "0";
}
result = result + rtc.minutes + ":";
if (rtc.seconds < 10) {
result = result + "0";
}
result = result + rtc.seconds;
return result;
}
--- Край на кода ---
И по кода има неща за издялкване ... ма като за 1/2 час с налучкването на правилните библиотеки - толкоз :)
Коев:
Ако го направиш да изключва разряда при достигане на 3,6 волта, ще става за тестване и на оловнокисели батерии/с две клетки/.За зареждане след теста може да се ползват зарядни за таблет-5в, 1или2А, на първо време.
Радико:
Юлияне аз лично проявявам интерес към това как точно си се справил с модула за точно време.
Би ли споделил повече за ,от къде го купи, имаше ли проблем с библиотеките, изобщо всичко за него защото и аз мисля да ползвам такъв модул и всяка информация би била полезна.
juliang:
--- Цитат на: Радико в Февруари 25, 2017, 11:26:14 am ---Юлияне аз лично проявявам интерес към това как точно си се справил с модула за точно време.
Би ли споделил повече за ,от къде го купи, имаше ли проблем с библиотеките, изобщо всичко за него защото и аз мисля да ползвам такъв модул и всяка информация би била полезна.
--- Край на цитат ---
Модула го взех от али-то - поръчах една камара модули за всякакви функции, без да подбирам много конкретното реализиране. Ето този точно:
Реално самия модул представлява един чип DS1302 ( https://datasheets.maximintegrated.com/en/ds/DS1302.pdf), кварцов резонатор на 32768 херца и гнездо за батерийка. Има 5 писти на кръст, никаква допълнителна логика - каквото предлага чипа, това е. В али-то има и по-евтини, и по-функционални модули за реално време.
Колко ще е точен модула зависи изцяло от точността на кварца. Чипа само брои и превръща броя импулси в удобен за човека вид - смята си дни от седмицата, съобразява се с високосни години и т.н. Един път като "го свериш" с определена команда от библиотеката можеш да го откачаш от ардуиното и да го оставяш някъде по чекмеджетата и той ще си цъка от батерийката. Специално моя не е много точен... бяга около минута на ден :)
Коя библиотека ще се ползва зависи изцяло от това какъв чип се ползва в определения модул. Има библиотеки които могат да се оправят с различни чипове, има специализирани (и съответно по-малки като обем) библиотечки които могат да обслужват само един чип. Но общо-взето предлагат четене на дата и час и запис на дата и час. Връщат цялата информация в един клас, пък ти си взимаш каквото ти е нужно.
Този чип DS1302 има и 31 байта памет в него, която също се крепи от батерията и там можеш да си запишеш някаква дата/час - примерно за аларма. Идеята е да не товариш това инфо в ардуиното и да не се грижиш за запазването му. Но и за там имаш само четене/запис - чипа няма да те уведоми че времето е настъпило, трябва сам да сравняваш.
Другото което не можах да намеря е фукнционалност за elapsed time - разлика между две времена, или нещо като хронометър. Нито хардуерно, нито като библиотека (не че търсих много де :) ). Трябва сам да си правиш сметките колко дни, часа, минути и секунди са изтекли между двете дати. Вероятно някой по-добър чип има тази функционалност.
vsl:
Здравейте,
Ако се използва резистор за разреждане на батерия то тока няма да константен. Напрежението пада във всеки момент и тока също би намалил. Това което се използва е електронен товар или electronic load. Пускам примерен сайт и схема за Ардино.
http://jasper.sikken.nl/electronicload/index.html
Навигация
[0] Списък на темите
Премини на пълна версия