- Waarom hebben we een batterijcapaciteitstester nodig?
- Componenten vereist
- Circuitdiagram van de Arduino-batterijcapaciteitstester
- Arduino-programma om de batterijcapaciteit te meten
- Nauwkeurigheidsverbeteringen
- Het circuit bouwen en testen
Met de opkomst van technologie worden onze elektronische gadgets en apparaten steeds kleiner met meer functionele en complexe toepassingen. Met deze toename in complexiteit is de stroomvereiste van het circuit ook toegenomen en in onze zoektocht om het apparaat zo klein en zo draagbaar mogelijk te maken, hebben we een batterij nodig die gedurende een lange periode een hoge stroom kan leveren en tegelijkertijd tijd, veel minder wegen, zodat het apparaat draagbaar moet blijven. Als u meer wilt weten over batterijen, kunt u ook dit artikel over basisterminologieën van batterijen lezen.
Van de vele verschillende soorten batterijen die beschikbaar zijn, zijn loodzuurbatterijen, Ni-Cd-batterijen en Ni-MH-batterijen niet geschikt omdat ze ofwel meer wegen of niet de stroom kunnen leveren die nodig is voor onze toepassing, dit laat ons over met de lithium-ionbatterijen die een hoge stroom kan leveren terwijl het gewicht laag en compact blijft. Eerder hebben we ook een 18650 acculader en boostermodule gebouwd en een op IoT gebaseerd accubewakingssysteem, je kunt ze bekijken als je interesse hebt.
Waarom hebben we een batterijcapaciteitstester nodig?
Er zijn veel batterijverkopers op de markt die de goedkope knock-off-versies van Li-ion-batterijen verkopen die bizarre specificaties claimen met een zeer lage prijs, wat te mooi is om waar te zijn. Wanneer u deze cellen koopt, werken ze ofwel helemaal niet, ofwel is de laadcapaciteit of de stroom zo laag dat ze helemaal niet kunnen werken met de applicatie. Dus hoe test je een lithiumbatterij als de cel niet een van deze goedkope knockoffs is? Een van de methoden is om de nullastspanning te meten zonder belasting en belasting, maar dit is helemaal niet betrouwbaar.
Dus gaan we een 18650 batterijcapaciteitstester bouwen voor een Li-Ion 18650-cel die een volledig opgeladen 18650-cel zal ontladen via een weerstand terwijl de stroom wordt gemeten die door de weerstand vloeit om de capaciteit te berekenen. Als u de geclaimde batterijcapaciteit niet krijgt terwijl de celspanning binnen de gespecificeerde limieten ligt, dan is die cel defect en moet u die niet gebruiken, aangezien de laadtoestand van de cel onder belasting zeer snel zal afnemen, waardoor een lokale stroomlus indien gebruikt in een batterijpak, wat leidt tot verwarming en mogelijk brand. Dus laten we er meteen in springen.
Componenten vereist
- Arduino Nano
- LCD van 16 × 2 tekens
- LM741 OPAMP IC
- 2.2Ω, 5Watt weerstand
- 7805 Positieve spanningsregelaar IC
- 12V voeding
- 10kΩ Trimmer Potentiometer
- 0.47uF Condensator
- 33kΩ weerstand
- DC Power Barrel Jack-connector
- PCB-schroefklemmen
- IRF540N N-kanaal Mosfet IC
- Perfboard
- Soldeerkit
- Koellichamen
Circuitdiagram van de Arduino-batterijcapaciteitstester
Het volledige schakelschema voor de 18650 batterijcapaciteitstester wordt hieronder weergegeven. De uitleg van het circuit is als volgt-
Computationele en weergave-eenheid:
Dit circuit is verder onderverdeeld in twee delen, ten eerste is er een lage 5V-voeding voor Arduino Nano en een 16 × 2 alfanumeriek LCD-scherm en hun verbindingen om de resultaten van de stroom- en spanningsmetingen in realtime weer te geven. Het circuit wordt gevoed door de 12V-voeding met behulp van SMPS of u kunt een 12V-batterij gebruiken en de maximale stroom zal ongeveer 60-70mA zijn voor het voeden van de Arduino en het LCD-scherm.
Om de spanning terug te brengen naar 5V, zullen we een lineaire spanningsregelaar gebruiken die tot 35V kan opnemen en een ingangsvoeding van ten minste 7.5V nodig heeft om een gereguleerde 5V-voeding te leveren en overtollige spanning wordt als warmte afgevoerd, dus als uw input spanning LM7805 Voltage Regulator IC is meer dan 12V, overweeg dan om een koellichaam toe te voegen zodat deze niet beschadigd raakt. Het LCD-scherm wordt gevoed met een 5V-voeding van de 7805 en is aangesloten op Arduino en werkt in 4-bit-modus. We hebben ook een 10k Ω wiper-potentiometer toegevoegd om het contrast van het LCD-scherm te regelen.
Stroomkring met constante belasting:
Ten tweede is er het op PWM gebaseerde constante stroombelastingscircuit om de belastingsstroom die door de weerstand vloeit door ons regelbaar en constant te maken, zodat er geen fout optreedt als gevolg van stroomvariatie in de tijd als de spanning van de cel daalt. Het bestaat uit LM741 OPAMP IC en IRF540N N-Channel MOSFET, die de stroom die door de MOSFET vloeit bestuurt door de MOSFET AAN en UIT te schakelen volgens het door ons ingestelde spanningsniveau.
De op-amp werkt in de vergelijkingsmodus,dus in deze modus. de output van de op-amp zal hoog zijn wanneer de spanning van de niet-inverterende pin van de op-amp hoger is dan de inverterende pin. Evenzo, als de spanning op de inverterende pin van de op-amp hoger is dan de niet-inverterende pin, zal de output van de op-amp naar beneden worden getrokken. In het gegeven circuit wordt het niet-inverterende pin-spanningsniveau geregeld door de D9 PWM-pin van de Arduino NANO, die schakelt met een frequentie van 500 Hz, die vervolgens door een laagdoorlaat RC-circuitfilter met weerstandswaarde 33kΩ en condensator met een capaciteit van 0,47 wordt geleid. uF, om een bijna constant DC-signaal te leveren op de niet-inverterende pin. De inverterende pin is verbonden met de belastingsweerstand, die de spanning over de weerstand en de gemeenschappelijke GND leest. De output pin van de OPAMP is verbonden met de gate terminal van de MOSFET om deze AAN of UIT te zetten.De OPAMP zal proberen de spanningen op beide aansluitingen gelijk te maken door de aangesloten MOSFET te schakelen, zodat de stroom die door de weerstand vloeit evenredig is met de PWM-waarde die u hebt ingesteld op de D9-pin van de NANO. In dit project, de maximale stroom, heb ik mijn circuit beperkt tot 1,3 A, wat redelijk is, aangezien de cel die ik heb 10 A is als maximale stroomsterkte
Spanningsmeting:
De maximale spanning van een typische volledig opgeladen Li-Ion-cel is 4,1V tot 4,3V, wat minder is dan de 5V-spanningslimiet van de analoge ingangspennen van de Arduino Nano die meer dan 10kΩ interne weerstand bevat, zodat we de Cel naar een van de analoge ingangspennen zonder u zorgen te maken over de stroom die erdoorheen stroomt. Dus in dit project moeten we de spanning van de cel meten, zodat we kunnen bepalen of de cel zich in het juiste spanningsbereik bevindt en of deze volledig is ontladen of niet.
We moeten ook de stroom meten die door de weerstand vloeit, daarvoor kunnen we de stroomshunt niet gebruiken, omdat de complexiteit van het circuit zal toenemen en een toenemende weerstand in het belastingspad de celontladingssnelheid zal verminderen. Het gebruik van kleinere shuntweerstanden vereist een extra versterkercircuit om de spanningsaflezing die eruit komt, leesbaar te maken voor de Arduino.
Dus we lezen direct de spanning over de belastingsweerstand en gebruiken vervolgens de wet van Ohm om de verkregen spanning te delen door de belastingsweerstandswaarde om de stroom er doorheen te laten stromen. De negatieve pool van de weerstand is rechtstreeks verbonden met de GND, dus we kunnen er gerust van uitgaan dat de spanning die we op de weerstand aflezen de spanningsval in de weerstand is.
Arduino-programma om de batterijcapaciteit te meten
Nu we het hardwarecircuit hebben afgerond, gaan we naar Arduino-programmering. Als je Arduino IDE niet op je pc hebt geïnstalleerd, wat doe je hier dan! Ga naar de officiële Arduino-website en download en installeer de Arduino IDE of je kunt ook coderen in een andere editor, maar dat is een onderwerp voor een andere dag, want nu houden we het bij Arduino IDE. Nu gebruiken we Arduino Nano, dus zorg ervoor dat je het Arduino Nano-bord hebt geselecteerd door naar TOOLS> BOARDS te gaan en daar ARDUINO NANO te selecteren, selecteer nu de juiste processor die je nano heeft door naar TOOLS> PROCESSOR te gaanen terwijl je daar bent, selecteer je ook de poort waarop je Arduino is aangesloten op je pc. We gebruiken Arduino om het 16 × 2 alfanumerieke LCD-scherm dat erop is aangesloten aan te sturen en om de spanning van de cel en de stroom die door de belastingsweerstand vloeit te meten, zoals uitgelegd in de vorige sectie, we starten onze code door te verklaren dat de headerbestanden 16 × 2 aansturen Alfanumeriek LCD-scherm. U kunt dit gedeelte overslaan om de volledig bereide en opgediende code aan het einde van de pagina te krijgen, maar wees geduldig terwijl we de code in kleine secties verdelen en proberen uit te leggen.
Nu het header-bestand is gedefinieerd, gaan we verder met het declareren van de variabelen, we zullen in de code gebruiken om de spanning en stroom te berekenen. We moeten ook de pinnen definiëren die we gebruiken om het LCD-scherm aan te sturen en de pinnen die we zullen gebruiken om PWM-uitvoer te geven en ook de analoge spanningen lezen die van de cel en de weerstand komen in dit gedeelte.
# omvatten
Kom nu naar het setup-gedeelte, als je je Arduino de hele tijd op je pc wilt aansluiten en de voortgang wilt volgen met Serial Monitor en het LCD-scherm hier wilt initialiseren. Het zal ook gedurende 3 seconden een welkomstbericht "Battery Capacity Tester Circuit" op het scherm weergeven.
void setup () {Serial.begin (9600); lcd.begin (16, 2); lcd.setCursor (0, 0); // Zet de cursor op de eerste kolom en de eerste rij. lcd.print ("Batterijcapaciteit"); lcd.setCursor (0,1); lcd.print ("Tester Circuit"); vertraging (3000); lcd.clear (); }
Nu hoeven we de Arduino PWM-pin niet als Output te declareren, aangezien de AnalogWrite- functie die we in onze hoofdlus gaan gebruiken voor dit deel zorgt. U moet de PWM-waarde definiëren die op die pin in de code moet worden geschreven. Kies de PWM-waarde zorgvuldig in overeenstemming met de ontlaadstroom die nodig is in uw toepassing. Een te hoge PWM-waarde zal resulteren in een hoge stroom met een hoge spanningsval in de Li-Ion-cel en een te lage PWM-waarde zal resulteren in een lange ontladingstijd van de cel. In de hoofdlusfunctie zullen we de spanningen op de pinnen A0 en A1 aflezen, aangezien de Arduino een 10-bit ADC aan boord heeft, daarom zouden we digitale uitvoerwaarden moeten krijgen variërend van 0-1023 die we moeten terugschalen naar de 0-5V bereik door het te vermenigvuldigen met 5,0 / 1023,0. Zorg ervoor dat u de spanning tussen de 5V- en GND-pinnen van de Arduino Nano correct meet met behulp van een gekalibreerde voltmeter of multimeter, aangezien de gereguleerde spanning meestal niet exact 5,0 V is en zelfs een klein verschil in deze referentiespanning zou resulteren in sluipende fouten meet in de spanningsaflezingen dus de juiste spanning en vervang de 5,0 in de bovenstaande vermenigvuldiger.
Om de logica van de code uit te leggen, meten we continu de spanning van de cel en als de celspanning hoger is dan de door ons in de code gespecificeerde bovengrens, wordt de foutmelding op het LCD-scherm weergegeven om u te laten weten of de cel is overladen of er is iets mis met de verbinding en de stroom naar de MOSFET-poortpen wordt gestopt zodat er geen stroom door de belastingsweerstand kan stromen. Het is cruciaal dat u uw cel eerst volledig oplaadt voordat u deze aansluit op het capaciteitstesterbord, zodat u de totale laadcapaciteit kunt berekenen.
analogWrite (MOSFET_Pin, PWM_VALUE); // lees de invoer op analoge pin 0: int sensorValue_voltage_Cell = analogRead (A0); // Zet de analoge aflezing (die gaat van 0 - 1023) om naar een spanning (0 - 5V): zwevende spanning = sensorValue_voltage_Cell * (5.08 / 1023.0); Serial.print ("VOLTAGE:"); Serial.println (spanning); // Hier wordt de spanning afgedrukt op Serial Monitor lcd.setCursor (0, 0); // Zet de cursor op de eerste kolom en de eerste rij. lcd.print ("Spanning:"); // Druk de spanningswaarde af op het scherm lcd.print (spanning); vertraging (100); int sensorValue_Shunt_Resistor = analogRead (A1); zwevende spanning1 = sensorValue_Shunt_Resistor * (5.08 / 1023.0); zwevende stroom = voltage1 / weerstand; Serial.print ("Huidig:"); Serial.println (huidig); lcd.setCursor (0, 1);// Zet de cursor op de eerste kolom en de tweede rij (tellen begint bij 0!). lcd.print ("Huidig:"); lcd.print (huidig);
Als de celspanning nu binnen de door ons gespecificeerde bovenste en onderste spanningslimieten valt, zal de Nano de huidige waarde lezen met de hierboven gespecificeerde methode en deze vermenigvuldigen met de tijd die is verstreken tijdens de metingen en deze opslaan in de capaciteitsvariabele die we eerder hebben gedefinieerd in mAh-eenheden. Gedurende deze hele tijd worden de realtime stroom- en spanningswaarden weergegeven op het bijgevoegde LCD-scherm en als u wilt, kunt u ze ook zien op de seriële monitor. Het proces van het ontladen van de cel gaat door totdat het voltage van de cel onder de ondergrens komt die door ons in het programma is gespecificeerd en vervolgens wordt de totale capaciteit van de cel weergegeven op het LCD-scherm en wordt de stroom door de weerstand gestopt door aan de MOSFET-poort te trekken pin laag.
anders if (spanning> BAT_LOW && spanning <BAT_HIGH) {// Controleer of de batterijspanning binnen de veilige limiet valt millisPassed = millis () - previousMillis; mA = stroom * 1000,0; Capaciteit = Capaciteit + (mA * (millisPassed / 3600000.0)); // 1 uur = 3600000ms om het om te zetten in mAh-eenheden previousMillis = millis (); vertraging (1000); lcd.clear (); }
Nauwkeurigheidsverbeteringen
Het is in elk geval een goede manier om spanning en stroom te lezen, maar het is niet perfect. De relatie tussen de werkelijke spanning en de gemeten ADC-spanning is niet lineair en dit zal een fout opleveren in de metingen van de spanningen en stromen.
Als u de nauwkeurigheid van het resultaat wilt vergroten, moet u de ADC-waarden die u verkrijgt door het toepassen van verschillende bekende spanningsbronnen in een grafiek uitzetten en vervolgens de vermenigvuldigingsvergelijking ervan bepalen met behulp van elke gewenste methode. Op deze manier wordt de nauwkeurigheid verbeterd en komt u zeer dicht bij de werkelijke resultaten.
Ook is de MOSFET die we hebben gebruikt geen MOSFET op logisch niveau, dus het heeft meer dan 7V nodig om het huidige kanaal volledig in te schakelen en als we er rechtstreeks 5V op toepassen, zouden de huidige metingen onnauwkeurig zijn. Maar je kunt een IRL520N N-Channel MOSFET op logisch niveau gebruiken om het gebruik van een 12V-voeding te elimineren en direct te werken met 5V-logische niveaus die je met je Arduino hebt.
Het circuit bouwen en testen
Nu we verschillende secties van ons circuit op een breadboard hebben ontworpen en getest en nadat we ervoor hebben gezorgd dat ze allemaal werken zoals bedoeld, gebruiken we een Perfboard om alle componenten aan elkaar te solderen, omdat het een veel professionelere en betrouwbaardere methode is om het circuit te testen.. Als je wilt, kun je je eigen PCB ontwerpen op AutoCAD Eagle, EasyEDA of Proteus ARES of elke andere software die je leuk vindt. De Arduino Nano, 16 × 2 alfanumeriek LCD-scherm en LM741 OPAMP zijn gemonteerd op Female Bergstik zodat ze later opnieuw kunnen worden gebruikt.
Ik heb een 12V-voeding geleverd via een DC Barrel Jack-connector voor Constant Load Current Circuit en vervolgens met behulp van LM7805 wordt de 5V voor het Nano- en LCD-scherm geleverd. Zet nu het circuit van stroom en pas de trimmerpot aan om het contrastniveau van het LCD-scherm in te stellen, je zou nu het welkomstbericht op het LCD-scherm moeten zien, en dan als het spanningsniveau van de cel binnen het werkbereik is, dan de huidige -spanning en stroom van de batterij worden daar weergegeven.
Dit is een zeer eenvoudige test om de capaciteit van de cel die u gebruikt te berekenen en deze kan worden verbeterd door de gegevens te nemen en deze op te slaan in een Excel-bestand voor post-gegevensverwerking en visualisatie met grafische methoden. In de datagestuurde wereld van vandaag kan deze celontladingscurve worden gebruikt om nauwkeurige voorspellende modellen van de batterij te bouwen om de reactie van de batterij onder laadtoestand te simuleren en te zien zonder real-world tests met behulp van software zoals NI LabVIEW, MATLAB Simulink, enz.. en er wachten nog veel meer toepassingen op u. De volledige werking van dit project vind je in de onderstaande video. Als je vragen hebt over dit project, schrijf ze dan in de commentaarsectie hieronder of gebruik onze forums. Ga en heb er plezier mee en als je wilt, kunnen we je in de opmerkingen hieronder begeleiden over hoe je verder kunt gaan vanaf hier. Tot dan Adios !!!