- Защо се нуждаем от тестер за капацитет на батерията?
- Необходими компоненти
- Схема на тестера за капацитет на батерията Arduino
- Програма Arduino за измерване на капацитета на батерията
- Подобрения в точността
- Изграждане и тестване на веригата
С появата на технологиите нашите електронни джаджи и уреди стават все по-малки и по-малки с по-функционални и сложни приложения. С това увеличаване на сложността, изискването за мощност на веригата също се е увеличило и в стремежа си да направим устройството възможно най-малко и преносимо, се нуждаем от батерия, която може да осигурява силен ток за дълъг период от време и в същото време време, претеглете много по-малко, за да може устройството да остане преносимо. Ако искате да научите повече за батериите, можете също да прочетете тази статия за основните терминологии на батерията.
От много различни налични батерии, оловните батерии, Ni-Cd батериите и Ni-MH батериите не са подходящи, тъй като те тежат повече или не могат да осигурят необходимия ток за нашето приложение, това ни оставя с литиево-йонните батерии което може да осигури голям ток, като същевременно поддържа теглото ниско, а размерът - компактен. Преди това сме изградили и зарядно устройство за зареждане и бустер 18650, и система за наблюдение на батерията, базирана на IoT, можете да ги проверите, ако се интересувате.
Защо се нуждаем от тестер за капацитет на батерията?
На пазара има много доставчици на батерии, които продават евтини унищожаващи версии на Li-ion батерии, претендирайки за странни спецификации с много ниска цена, която е твърде добра, за да е истина. Когато купувате тези клетки, те изобщо не работят или ако работят, капацитетът на зареждане или текущият поток са толкова ниски, че изобщо не могат да работят с приложението. И така, как да тествате литиева батерия, ако клетката не е едно от тези евтини чукания? Един от методите е да се измери напрежението на отворена верига без товар и натоварване, но това изобщо не е надеждно.
Така че ние ще изгради 18 650 капацитет тестер батерия за Li-Ion 18650 Cell, който ще се освободи напълно заредена 18650 клетка през резистор, докато измерване на тока, протичащ през резистора за изчисляване на капацитета му. Ако не получите заявения капацитет на батерията, докато напрежението на клетката е в определените граници, тогава тази клетка е дефектна и не трябва да я използвате, тъй като състоянието на зареждане на клетката ще се изтощи с много бърза скорост при натоварване, създавайки локален токов контур, ако се използва в батерия, което води до нагряване и вероятно пожар. Така че нека скочим направо в него.
Необходими компоненти
- Arduino Nano
- 16 × 2 символен LCD
- LM741 OPAMP IC
- 2.2Ω, 5W резистор
- 7805 IC регулатор на положително напрежение
- 12V захранване
- 10kΩ тример потенциометър
- Кондензатор 0,47uF
- 33kΩ резистор
- DC конектор за захранване
- Винтови клеми на печатни платки
- IRF540N N-канален Mosfet IC
- Перфборд
- Комплект за запояване
- Радиатори
Схема на тестера за капацитет на батерията Arduino
Пълната схема на тестера за капацитет на батерията 18650 е показана по-долу. Обяснението на веригата е както следва -
Изчислителна и дисплейна единица:
Тази схема е допълнително разделена на две части, първата е ниско 5V захранване за Arduino Nano и 16 × 2 буквено-цифров LCD екран и техните връзки за показване на резултатите от измерванията на тока и напрежението в реално време. Веригата се захранва от 12V захранване чрез SMPS или можете да използвате 12V батерия, както и максималният ток ще бъде около 60-70mA за захранване на Arduino и LCD екрана.
За да намалим напрежението до 5V, ще използваме a, който е линеен регулатор на напрежение, който може да отнеме до 35V и се нуждае от най-малко 7,5V входно захранване, за да осигури регулирано захранване от 5V и излишното напрежение се разсейва като топлина, следователно, ако вашият вход напрежение LM7805 IC регулатор на напрежение е повече от 12V, след това помислете за добавяне на радиатор, за да не се повреди. LCD дисплеят се захранва с 5V захранване от 7805 и е свързан към Arduino и работи в 4-битов режим. Добавихме и 10k Ω потенциометър за чистачки, за да контролираме контраста на LCD дисплея.
Верига с постоянен товар:
Второто е базирана на ШИМ верига за постоянен ток, за да направи тока на натоварване, преминаващ през резистора, контролируем от нас и постоянен, така че да няма проникване на грешка поради вариране на тока във времето, когато напрежението на клетката спада. Състои се от LM741 OPAMP IC и IRF540N N-Channel MOSFET, който контролира тока, протичащ през MOSFET чрез включване и изключване на MOSFET според нивото на напрежение, зададено от нас.
Операционният усилвател работи в режим на сравнение,така че в този режим. изходът на операционния усилвател ще бъде висок, когато напрежението на неинвертиращия щифт на операционния усилвател е по-високо от инвертиращия щифт. По същия начин, ако напрежението на инвертиращия щифт на операционния усилвател е по-високо от неинвертиращия щифт, изходът на операционния усилвател ще бъде изтеглен надолу. В дадената верига неинвертиращото ниво на напрежение на щифта се контролира от PWM щифта на Arduino NANO, който се превключва с честота 500Hz, която след това се предава през нискочестотен RC верижен филтър със стойност на съпротивление 33kΩ и кондензатор с капацитет 0,47 uF, за да осигури почти постоянен DC сигнал на неинвертиращия щифт. Обръщащият щифт е свързан към товарния резистор, който отчита напрежението на резистора и общия GND. Изходният щифт на OPAMP е свързан към порталния терминал на MOSFET, за да го включите или изключите.OPAMP ще се опита да направи напреженията на двата му терминала равни чрез превключване на свързания MOSFET, така че токът, протичащ през резистора, да бъде пропорционален на стойността на ШИМ, която сте задали на щифта D9 на NANO. В този проект максималният ток, който съм ограничил, е до 1,3А, което е разумно, тъй като клетката, която имам, е 10А като максимален ток
Измерване на напрежението:
Максималното напрежение на типична напълно заредена Li-Ion клетка е 4,1 V до 4,3 V, което е по-малко от границата на напрежение 5 V на аналоговите входни щифтове на Arduino Nano, което има повече от 10 kΩ вътрешно съпротивление в тях, за да можем директно да свържем Клетка към някой от аналоговите входни щифтове, без да се притеснявате за тока, протичащ през тях. И така, в този проект трябва да измерим напрежението на клетката, за да можем да определим дали клетката е в правилния работен обхват на напрежението и дали е напълно разредена или не.
Трябва да измерим и тока, протичащ през резистора, за да не можем да използваме токовия шънт, тъй като сложността на веригата ще се увеличи и увеличаването на съпротивлението в пътя на натоварване ще намали скоростта на разреждане на клетката. Използването на по-малки шунтиращи резистори ще изисква допълнителна усилвателна схема, за да направи отчитането на напрежението, идващо от него, четливо за Arduino.
Така че директно отчитаме напрежението в товарния резистор и след това, използвайки закона на Ом, разделяме напрежението, получено от стойността на товарния резистор, за да получим тока, протичащ през него. Отрицателният извод на резистора е свързан директно към GND, така че можем спокойно да предположим, че напрежението, което четем на резистора, е спадът на напрежението в резистора.
Програма Arduino за измерване на капацитета на батерията
Сега след финализиране на хардуерната схема, преминаваме към програмиране на Arduino. Сега, ако нямате инсталиран Arduino IDE на вашия компютър, какво правите тук! Отидете на официалния уебсайт на Arduino и изтеглете и инсталирайте Arduino IDE, или можете да кодирате и във всеки друг редактор, но това е тема за друг ден, засега се придържаме към Arduino IDE. Сега използваме Arduino Nano, затова се уверете, че сте избрали дъската Arduino Nano, като отидете на TOOLS> BOARDs и като изберете ARDUINO NANO там, сега изберете правилния процесор, който имате нано, като отидете на TOOLS> PROCESSORи докато сте там, изберете и порта, към който е свързан вашият Arduino на вашия компютър. Използваме Arduino за задвижване на 16 × 2 буквено-цифров LCD, свързан към него и за измерване на напрежението на клетката и тока, протичащ през товарния резистор, както е обяснено в предишния раздел, започваме нашия код, като декларираме заглавните файлове, за да управляваме 16 × 2 Буквено-цифров LCD екран. Можете да пропуснете този раздел, за да получите напълно приготвения и сервиран код в края на страницата, но търпете с нас, докато ние разделяме кода на малки секции и се опитваме да обясним.
Сега, когато заглавният файл е дефиниран, преминаваме към декларирането на променливите, ще използваме в кода за изчисляване на напрежението и тока. Също така трябва да дефинираме щифтовете, които използваме за задвижване на LCD, и щифтовете, които ще използваме, за да дадем ШИМ изход и да прочетем аналоговите напрежения, идващи от клетката и резистора, както и в този раздел.
#include
Сега стигаме до частта за настройка, Ако искате да поддържате Arduino през цялото време свързан с вашия компютър и да наблюдавате напредъка с помощта на Serial Monitor и да инициализирате LCD екрана тук. Той също така ще покаже приветствено съобщение „Тестери за капацитет на батерията“ на екрана за 3 секунди.
void setup () {Serial.begin (9600); lcd.begin (16, 2); lcd.setCursor (0, 0); // Задайте курсора на първата колона и първия ред. lcd.print ("Капацитет на батерията"); lcd.setCursor (0,1); lcd.print ("Тестерна верига"); забавяне (3000); lcd.clear (); }
Сега не е необходимо да декларираме PIN на Arduino като изход като функцията AnalogWrite, която ще използваме в основния ни цикъл, се грижи за тази част. Трябва да дефинирате стойността на ШИМ, която да бъде записана на този пин в кода. Изберете внимателно стойността на ШИМ според тока на разреждане, който се изисква във вашето приложение. Твърде много PWM стойност ще доведе до висок ток с голям спад на напрежението в Li-Ion клетката и твърде ниска PWM стойност ще доведе до високо време за разреждане на клетката. Във функцията на главния контур ще четем напреженията на щифтовете A0 и A1, тъй като Arduino има 10-битов ADC на борда, поради което трябва да получим цифрови изходни стойности, вариращи от 0-1023, които ще трябва да мащабираме обратно до Обхват 0-5V, като го умножите по 5.0 / 1023.0. Уверете се, че правилно измервате напрежението между 5V и GND щифтовете на Arduino Nano с помощта на калибриран волтметър или мултиметър, тъй като повечето пъти регулираното напрежение не е точно 5.0V и дори малка разлика в това референтно напрежение би довело до пълзящи грешки в показанията на напрежението, така че измерете правилното напрежение и заменете 5.0 в множителя, даден по-горе.
Сега, за да обясним логиката на кода, ние непрекъснато измерваме напрежението на клетката и ако напрежението на клетката е над горната граница, посочена от нас в кода, тогава съобщението за грешка се показва на LCD, за да ви уведоми дали клетката е прекалено заредени или има нещо нередно с връзката и захранването към щифта на MOSFET порта е спряно, така че през товарния резистор да не може да протича ток. От решаващо значение е първо да заредите напълно клетката си, преди да я свържете към платката за тестване на капацитета, за да можете да изчислите общия й капацитет на зареждане.
analogWrite (MOSFET_Pin, PWM_VALUE); // четем входа на аналогов щифт 0: int sensorValue_voltage_Cell = analogRead (A0); // Преобразуваме аналоговото отчитане (което преминава от 0 - 1023) в напрежение (0 - 5V): плаващо напрежение = sensorValue_voltage_Cell * (5.08 / 1023.0); Serial.print ("НАПРЕЖЕНИЕ:"); Serial.println (напрежение); // Тук напрежението се отпечатва на Serial Monitor lcd.setCursor (0, 0); // Задайте курсора на първата колона и първия ред. lcd.print ("Напрежение:"); // отпечатваме показанията на напрежението на екрана lcd.print (напрежение); забавяне (100); int sensorValue_Shunt_Resistor = analogRead (A1); плаващо напрежение1 = sensorValue_Shunt_Resistor * (5.08 / 1023.0); плаващ ток = напрежение1 / резистор; Serial.print ("Current:"); Serial.println (текущ); lcd.setCursor (0, 1);// Задайте курсора върху първата колона и втория ред (броенето започва от 0!). lcd.print ("Current:"); lcd.print (текущ);
Сега, ако напрежението на клетката е в горната и долната граница на напрежението, посочени от нас, тогава Nano ще отчете текущата стойност по метода, посочен по-горе и ще я умножи с времето, изминато по време на измерванията, и ще я съхрани в променливата на капацитета, която дефинирахме по-рано в mAh единици. През цялото това време стойностите на тока и напреженията в реално време се показват на прикрепения LCD екран и ако искате, можете да ги видите и на серийния монитор. Процесът на разреждане на клетката ще продължи, докато напрежението на клетката достигне под долната граница, посочена от нас в програмата и след това общият капацитет на клетката се показва на LCD екрана и токовият поток през резистора се спира чрез изтегляне на MOSFET портата щифт ниско.
иначе ако (напрежение> BAT_LOW && напрежение <BAT_HIGH) {// Проверете дали напрежението на батерията е в границите на безопасността millisPassed = millis () - previousMillis; mA = ток * 1000,0; Капацитет = Капацитет + (mA * (millisPassed / 3600000.0)); // 1 час = 3600000ms, за да го преобразуваме в mAh единици previousMillis = millis (); забавяне (1000); lcd.clear (); }
Подобрения в точността
Това по всякакъв начин е достатъчно добър начин за отчитане на напрежението и тока, но не е перфектен. Връзката между действителното напрежение и измереното напрежение ADC не е линейна и това ще доведе до известна грешка в измерванията на напреженията и токовете.
Ако искате да увеличите точността на резултата, трябва да нанесете на графиката стойностите на ADC, получени от прилагането на различни известни източници на напрежение, и след това да определите уравнението на множителя от него, като използвате всеки метод, който ви харесва. По този начин точността ще бъде подобрена и ще се доближите много до действителните резултати.
Също така MOSFET, който използвахме, не е MOSFET на логическо ниво, така че се нуждае от повече от 7V, за да включи напълно текущия канал и ако приложим 5V директно към него, текущите показания биха били неточни. Но можете да използвате логическо ниво IRL520N N-Channel MOSFET, за да елиминирате използването на 12V захранване и директно да работите с 5V логически нива, които имате с вашия Arduino.
Изграждане и тестване на веригата
Сега, когато проектирахме и тествахме различни секции от нашата верига върху макет и след като се уверихме, че всички те работят по предназначение, ние използваме Perfboard, за да спойкаме всички компоненти заедно, тъй като това е много по-професионален и надежден метод за тестване на веригата. Ако искате, можете да проектирате своя собствена платка на AutoCAD Eagle, EasyEDA или Proteus ARES или друг софтуер, който харесвате. Arduino Nano, 16 × 2 буквено-цифров LCD и LM741 OPAMP са монтирани на женски Bergstik, за да могат да бъдат използвани повторно по-късно.
Предоставил съм 12V захранване чрез DC Barrel Jack конектор за верига с постоянен товар и след това с помощта на LM7805 се осигуряват 5V за Nano и LCD екрана. Сега включете веригата и настройте тримера, за да настроите нивото на контраст на LCD екрана, досега трябва да видите приветственото съобщение на LCD екрана и след това, ако нивото на напрежение на клетката е в работния диапазон, тогава текущото -напрежение и ток от батерията ще бъдат показани там.
Това е много основен тест за изчисляване на капацитета на клетката, която използвате и може да бъде подобрен, като вземете данните и ги съхраните във файл на Excel, за да извършите обработка и визуализация на данни след графични методи. В днешния свят, управляван от данни, тази крива на разреждане на клетките може да се използва за изграждане на точни прогнозни модели на батерията, за да се симулира и види реакцията на батерията в състояние на зареждане, без реално тестване чрез използване на софтуер като NI LabVIEW, MATLAB Simulink и т.н. и ви очакват много повече приложения. Можете да намерите пълната работа на този проект във видеото по-долу. Ако имате някакви въпроси относно този проект, моля, напишете ги в раздела за коментари по-долу или използвайте нашите форуми. Отидете и се забавлявайте с него и ако искате, можем да ви насочим в раздела за коментари по-долу как да продължите от тук. До тогава Адиос !!!