Indholdsfortegnelse:

Endnu en batterikapacitetstester: 6 trin
Endnu en batterikapacitetstester: 6 trin

Video: Endnu en batterikapacitetstester: 6 trin

Video: Endnu en batterikapacitetstester: 6 trin
Video: ATORCH HIDANCE T18 Защита монитора емкости аккумулятора для зарядки телефона или планшета 2024, Juli
Anonim
Endnu en batterikapacitetstester
Endnu en batterikapacitetstester
Endnu en batterikapacitetstester
Endnu en batterikapacitetstester

Hvorfor endnu en kapacitetstester

Jeg har læst en masse forskellige testinstruktioner op, men ingen af dem synes at passe til mine behov. Jeg ville også være i stand til at teste mere end bare singe NiCd/NiMH eller Lion celler. Jeg ville være i stand til at teste et elværktøjsbatteri uden at tage det til del først. Så jeg besluttede at se nærmere på sagen og designe en af mine egne. En ting fører til en anden, og jeg besluttede endelig at skrive en instruerbar selv. Jeg besluttede også ikke at gå ind på alle detaljerne om, hvordan man faktisk bygger testeren, fordi alle kan beslutte sig for bestemte valg, f.eks. Hvilken størrelse modstand, der skal bruges, eller om der er brug for et printkort eller er Veroboard nok, og der er også masser af instruktører til, hvordan man installere eagle eller hvordan man laver et printkort. Med andre ord vil jeg koncentrere mig om skemaerne og koden og hvordan man kalibrerer testeren.

Trin 1: Historie - Version 1

Historie - Version 1
Historie - Version 1

Ovenfor er den første version med nedenfor nævnt over 10V input understøttelse tilføjet (R12 & R17 & Q11 & Q12).

Den første version blev mere eller mindre taget fra en instruerbar af deba168 (desværre kan jeg ikke finde hans instruerbare at levere et link). Kun nogle mindre ændringer blev foretaget. I denne version havde jeg en 10 ohm belastningsmodstand styret af en mosfet. Dette medførte dog nogle problemer. Ved test af en NiCd- eller NiMH -celle blev den nødvendige tid let målt i timer, hvis ikke dage. Et 1500mAh batteri tog over 12 timer (strømmen var kun 120mA). På den anden side kunne den første version kun teste batterier under 10V. Og et fuldt opladet 9,6V batteri kan faktisk være op til 11,2V, som ikke kunne testes på grund af 10V grænsen. Noget skulle gøres. Først tilføjede jeg lige et par mosfets og modstande for at få spændingsdelerne til at tillade mere end 10V. Men dette gav på den anden side et andet problem. Et fuldt ladet 14,4V batteri kan have op til 16,8V, hvilket med 10 ohm modstand betød 1,68A strøm og naturligvis en effekttab fra belastningsmodstanden på næsten 30W. Så med lav spænding for lang testtid og med høj spænding for høj strøm. Det var klart ikke en tilstrækkelig løsning, og der var behov for yderligere udvikling.

Trin 2: Version 2

Jeg ville have en løsning, hvor strømmen ville forblive i visse grænser uanset batterispændingen. En løsning ville have været at bruge PWM og bare en modstand, men jeg foretrak at have en løsning uden pulserende strøm eller at have behovet for at sprede mosfetvarme. Således skabte jeg en løsning med 10 spændingsåbninger, hver 2V brede, ved hjælp af 10 3.3ohm modstande og en mosfet til hver modstand.

Trin 3: Sådan blev det

Sådan blev det
Sådan blev det

Kommentarer til kredsløbet Man kan hævde, at spændingstabet over mosfet er ubetydeligt, fordi mosfetens modstand er så lav, men jeg har overladt valget af mosfet til læseren, og dermed kan modstanden gå endnu over 1 ohm, hvor den begynder at stof. I version en ville den korrekte mosfet fjerne behovet for lavere punktmåling, men i version 2 besluttede jeg kun at måle spændingen over en modstand, hvilket derefter gør det vigtigt faktisk at have to målepunkter. Og årsagen bag valget var enkelheden ved at tilslutte Veroboard. Dette tilføjer en vis nøjagtighedsfejl, da den målte spænding over en modstand er betydeligt mindre end måling over alle modstande. På komponentvalget valgte jeg at bruge det, jeg enten allerede havde praktisk, eller hvad jeg let kunne få. Dette førte til følgende stykliste:

  • Arduino Pro Mini 5V! VIGTIGT! Jeg brugte 5V version og alt er baseret på det
  • 128x64 I2C OLED -skærm
  • 10 x 5W 3.3 Ohm modstande
  • 3 x 2n7000 mosfets
  • 10 x IRFZ34N mosfets
  • 6 x 10 kOhm modstande
  • 2 x 5 kOhm modstande
  • 16V 680uF kondensator
  • 1 gammel CPU blæser

Jeg har ikke tilføjet følgende i skemaerne

  • pullup -modstande på I2C -linjer, som jeg bemærkede, gjorde skærmen mere stabil
  • elledninger
  • kondensator i 5V linje, som også stabiliserede displayet

Under testen bemærkede jeg, at belastningsmodstandene ville blive ret varme, især hvis de alle var i brug. Temperaturen steg til over 100 grader Celsius (hvilket er over 212 grader Fahrenheit), og hvis hele systemet skal lukkes i en kasse, bør der være en form for køling. Modstande, jeg brugte, er 3,3 ohm / 5W, og den maksimale strøm bør forekomme med ca. 2V pr. Modstand, der giver 2V / 3,3 = 0,61A, hvilket resulterer i 1,21W. Jeg endte med at tilføje en simpel ventilator i kassen. Mest fordi jeg tilfældigvis havde en gammel CPU -ventilator i nærheden.

Skematisk funktionalitet

Det er ganske ligetil og forklarer sig selv. Batteriet, der skal testes, tilsluttes serien af modstande og jord. Spændingsmålepunkterne er batteriforbindelsen og den første modstand. Spændingsdelerne bruges derefter til at sænke spændingen til et niveau, der bedre passer til Arduino. En digital udgang bruges til at vælge enten 10V eller 20V område af delerne. Hver modstand i belastningen kan individuelt jordes ved hjælp af mosfets, som drives direkte af Arduino. Og endelig er displayet forbundet med Arduino I2C -pins. Ikke meget at sige om den skematiske J

Trin 4: Koden

Koden
Koden

Ovenfor ses den grove funktionalitet af koden. Lad os se nærmere på koden (arduino ino -filer er vedhæftet). Der er en række funktioner og derefter hovedsløjfen.

Hovedsløjfe

Når målingen er klar, vises resultaterne, og udførelsen slutter der. Hvis målingen endnu ikke er udført, kontrolleres først, hvilken batteritype der er valgt, og derefter spændingen over indgangen. Hvis spændingen overstiger 0,1V, skal der mindst være en slags batteri tilsluttet. I dette tilfælde kaldes en subrutine for at prøve at finde ud af, hvor mange celler det er i batteriet at beslutte, hvordan man tester. Antallet af celler er mere eller mindre information, som bedre kunne udnyttes, men i denne version rapporteres det kun via seriel grænseflade. Hvis alt er godt, starter afladningsprocessen, og for hver runde med hovedsløjfe beregnes batterikapaciteten. I slutningen af hovedsløjfen er displayet fyldt med kendte værdier.

Fremgangsmåde til visning af resultater

ShowResults -funktionen indstiller simpelthen de linjer, der skal vises på displayet, og også den streng, der skal sendes til det serielle interface.

Fremgangsmåde til måling af spændinger

I begyndelsen af funktionen måles Vcc for Arduino. Det er nødvendigt for at kunne beregne spændingerne målt ved hjælp af analoge indgange. Derefter måles batterispændingen ved hjælp af 20V område for at kunne bestemme hvilket område der skal bruges. Derefter beregnes både batterispænding og modstandsspænding. Batterispændingsmålinger drager fordel af DividerInput -klassen, der har metoder til aflæsning og spænding til at give råmåling eller den beregnede spænding for den pågældende analoge indgang.

Fremgangsmåde til valg af brugte værdier

I funktionen selectUsedValues gætter man på antallet af celler, og de høje og lave grænser for batteriet indstilles til at blive brugt med afladningsproceduren. Målingen er også markeret som startet. Grænserne for denne procedure er sat i begyndelsen af de globale variabler. Selvom de kunne være konstante, og de kunne også defineres inde i proceduren, da de ikke bruges globalt. Men hey der er altid noget at forbedre:)

Fremgangsmåde til beregning af batterikapacitet

Udladningsfunktionen sørger for faktisk at tælle batteriets kapacitet. Det får de lave og høje grænser for spændingerne for batteriet under test som parametre. Den høje værdi bruges ikke i denne version, men den lave værdi bruges til at bestemme, hvornår testen skal stoppes. I begyndelsen af funktionen findes antallet af modstande, der skal bruges, ved at bruge en funktion, der er oprettet til dette formål. Funktionen returnerer antallet af modstand og starter samtidig tømningen og nulstiller tælleren. Derefter måles spændingerne og bruges sammen med kendt modstandsværdi til at beregne strømmen. Nu hvor vi kender spænding og strøm og tiden fra den har været siden sidste måling, kan vi beregne kapacitet. I slutningen af afladningsprocessen sammenlignes batterispændingen med lav grænse, og hvis den er gået under grænsen, stopper afladningsfasen, mosfets lukkes, og målingen markeres som klar.

Fremgangsmåde til at finde antallet af modstande, der skal bruges

I funktionen selectNumOfResistors foretages en simpel sammenligning af spænding med forudindstillede værdier, og efter resultatet bestemmes antallet af modstande, der skal bruges. Den relevante mosfet åbnes for at springe nogle af modstandene over. Spændingsåbningerne vælges således, at den maksimale strøm til enhver tid under afladningen forbliver lidt over 600mA (2V/3.3Ohm = 606mA). Funktionen returnerer antallet af modstande, der bruges. Fordi blæseren bliver drevet fra samme linje som den første mosfet, skal den altid åbnes, når afladning foregår.

Trin 5: Kalibrering af måleren

Kalibrering af måleren
Kalibrering af måleren

For at få måleren kalibreret oprettede jeg en anden app (vedhæftet). Den bruger den samme hardware. I begyndelsen er værdierne for korrektionsdelere alle sat til 1000.

const int divCorrectionB10V = 1000; // divider korrektion multiplikator i område 10V const int divCorrectionR10V = 1000; // divider korrektion multiplikator i område 10V const int divCorrectionB20V = 1000; // divider korrektion multiplikator i område 20V const int divCorrectionR20V = 1000; // divider korrektion multiplikator i området 20V

i funktionen readVcc () afhænger den resulterende Vcc -spænding af indstilling af værdien på funktionens sidste linje før retur. Normalt kan du på internettet finde en værdi på 1126400L, der skal bruges til beregning. Jeg bemærkede, at resultatet ikke var korrekt.

Kalibreringsproces:

  1. Indlæs måle -appen til Arduino.
  2. Du kan se i Arduino (og i den serielle udgang, og hvis blæseren roterer), om belastningen er tændt. Hvis det drejer på kontakten til valg af batteritype.
  3. Juster værdien i readuVCC () for at få det korrekte resultat. Tag den værdi, funktionen giver (som er i millivolt), og del den lange værdi med den. Du får råværdien af den interne reference. Mål nu den faktiske forsyningsspænding i millivolt med et multimeter og gang den med den tidligere beregnede værdi, og du får den nye korrigerede lange værdi. I mit tilfælde returnerede funktionen 5288mV, da den faktiske Vcc var 5,14V. Beregning af 1126400/5288*5140 = 1094874, som jeg finjusterede ved forsøg. Sæt den nye værdi i koden, og upload den igen til Arduino.
  4. Justering af de korrekte værdier for justering af de analoge indgangsmodstande sker ved hjælp af en justerbar strømkilde, der bruges til at fodre målerens input. Enklest er at bruge spændinger fra 1V til 20V med 1V trin og registrere resultaterne til et regneark. I regnearket tages gennemsnittet. De korrigerede værdier beregnes med følgende formel: “raw_value*range*Vcc/Vin”, hvor raw_value er værdien i 10VdivB, 10VdivR, 20VdivB eller 20VdivR afhængigt af hvilken korrektion der skal beregnes.

Se regnearket, hvordan det så ud for mig. Gennemsnittene beregnes kun ud fra de værdier, der skal være på intervallet, og disse værdier indstilles derefter i den faktiske måler -app.

Sådan her

const int divCorrectionB10V = 998; // divider korrektion divider i område 10V const int divCorrectionR10V = 1022; // divider korrektion divider i område 10V const int divCorrectionB20V = 1044; // divider korrektion divider i område 20V const int divCorrectionR20V = 1045; // divider korrektion divider i området 20V

Justering af modstandsværdien kan foretages ved at give en vis spænding til indgangen (dvs. 2V), skifte bat -type -kontakten (for at få belastning) og måle strømmen, der går ind og spændingen over den første modstand og dividere spændingen med strømmen. For mig gav 2V 607mA, hvilket giver 2/0.607 = 3.2948 ohm, som jeg rundede til 3.295 ohm. Så nu er kalibreringen udført.

Trin 6: Sidste BEMÆRK

En vigtig note her. Det er bydende nødvendigt at have alle forbindelser i god stand fra batteriet til modstandene. Jeg havde en dårlig forbindelse og spekulerede på, hvorfor jeg fik 0,3V mindre volt i modstandsnettet end på batteriet. Dette betød, at måleprocessen næsten umiddelbart endte med 1,2V NiCd -celler, fordi den nedre grænse på 0,95V hurtigt blev nået.

Anbefalede: