Inhoudsopgave:

Nog een batterijcapaciteitstester - Ajarnpa
Nog een batterijcapaciteitstester - Ajarnpa

Video: Nog een batterijcapaciteitstester - Ajarnpa

Video: Nog een batterijcapaciteitstester - Ajarnpa
Video: HIEROVER MOET JE NADENKEN VOORDAT JE EEN KITTEN AANSCHAFT - De gelukkige huiskat - kattengedrag 2024, November
Anonim
Nog een batterijcapaciteitstester
Nog een batterijcapaciteitstester
Nog een batterijcapaciteitstester
Nog een batterijcapaciteitstester

Waarom nog een capaciteitstester?

Ik heb veel verschillende bouwinstructies voor testers gelezen, maar geen enkele lijkt aan mijn behoeften te voldoen. Ik wilde ook meer kunnen testen dan alleen NiCd/NiMH- of Lion-cellen afzonderen. Ik wilde een accu van elektrisch gereedschap kunnen testen zonder deze eerst te demonteren. Dus besloot ik de zaak nader te bekijken en er zelf een te ontwerpen. Van het een komt het ander en ik heb uiteindelijk besloten om zelf een instructable te schrijven. Ik heb ook besloten om niet in te gaan op alle details over hoe de tester daadwerkelijk moet worden gebouwd, omdat iedereen kan beslissen over bepaalde keuzes, zoals welke maatweerstand te gebruiken of of een PCB nodig is of Veroboard voldoende is en er is ook een heleboel instructables hoe te installeer eagle of hoe maak je een PCB. Met andere woorden, ik zal me concentreren op de schema's en de code en hoe de tester te kalibreren.

Stap 1: Geschiedenis - Versie 1

Geschiedenis - Versie 1
Geschiedenis - Versie 1

Hierboven is de eerste versie met de hieronder genoemde meer dan 10V ingangsondersteuning toegevoegd (R12&R17&Q11&Q12).

De eerste versie is min of meer overgenomen van een instructable door deba168 (helaas kan ik zijn instructable niet vinden om een link te geven). Er zijn slechts enkele kleine wijzigingen aangebracht. In deze versie had ik een 10 ohm belastingsweerstand aangestuurd door een mosfet. Dit bracht wel wat problemen met zich mee. Bij het testen van één NiCd- of NiMH-cel werd de benodigde tijd gemakkelijk gemeten in uren, zo niet dagen. Een batterij van 1500 mAh duurde meer dan 12 uur (de stroom was slechts 120 mA). Aan de andere kant kon de eerste versie alleen batterijen onder 10V testen. En een volledig opgeladen 9,6V-batterij kan zelfs tot 11,2V bedragen, wat niet kon worden getest vanwege de 10V-limiet. Er moest iets gebeuren. Ten eerste heb ik zojuist een paar mosfets en weerstanden toegevoegd om de spanningsdelers meer dan 10V toe te laten. Maar dit bracht aan de andere kant een ander probleem met zich mee. Een volledig geladen 14,4V-batterij kan tot 16,8V hebben, wat met een weerstand van 10 ohm 1,68A stroom betekende en natuurlijk een vermogensdissipatie van de belastingsweerstand van bijna 30W. Dus bij laagspanning een te lange testtijd en bij hoogspanning een te hoge stroom. Het was duidelijk geen adequate oplossing en verdere ontwikkeling was nodig.

Stap 2: Versie 2

Ik wilde een oplossing waarbij de stroom binnen bepaalde limieten zou blijven, ongeacht de batterijspanning. Een oplossing zou zijn geweest om PWM en slechts één weerstand te gebruiken, maar ik had liever een oplossing zonder pulserende stroom of de noodzaak om mosfet-warmte af te voeren. Dus heb ik een oplossing gemaakt met 10 spanningsslots, elk 2V breed, met 10 weerstanden van 3,3 ohm en een mosfet voor elke weerstand.

Stap 3: Zo is het geworden

Zo is het geworden
Zo is het geworden

Opmerkingen over het circuit Men zou kunnen stellen dat het spanningsverlies over de mosfet verwaarloosbaar is omdat de weerstand van de mosfet zo laag is, maar ik heb de keuze van de mosfet aan de lezer overgelaten en dus kan de weerstand zelfs meer dan 1 ohm gaan waar het begint te worden materie. In versie één zou het kiezen van de juiste mosfet de noodzaak van het meten van een lager punt wegnemen, maar in versie 2 besloot ik om de spanning over slechts één weerstand te meten, waardoor het dan belangrijk is om daadwerkelijk twee meetpunten te hebben. En de reden achter de keuze was de eenvoud van de bedrading van het Veroboard. Dit voegt wel enige nauwkeurigheidsfout toe, aangezien de gemeten spanning over één weerstand aanzienlijk kleiner is dan het meten over alle weerstanden. Bij de selectie van componenten besloot ik te gebruiken wat ik al bij de hand had of wat ik gemakkelijk kon krijgen. Dit leidde tot de volgende stuklijst:

  • Arduino Pro Mini 5V !BELANGRIJK! Ik heb de 5V-versie gebruikt en alles is erop gebaseerd
  • 128x64 I2C OLED-scherm
  • 10 x 5W 3.3 Ohm weerstanden
  • 3 x 2n7000 mosfets
  • 10 x IRFZ34N-mosfets
  • 6 x 10 kOhm weerstanden
  • 2 x 5 kOhm weerstanden
  • 16V 680uF condensator
  • 1 oude CPU-fan

Ik heb het volgende niet toegevoegd in de schema's:

  • pullup-weerstanden op I2C-lijnen, waarvan ik merkte dat ze het scherm stabieler maakten
  • stroomkabels
  • condensator in 5V-lijn die ook het display stabiliseerde

Tijdens het testen merkte ik dat de belastingsweerstanden behoorlijk heet zouden worden, vooral als ze allemaal in gebruik waren. De temperatuur liep op tot meer dan 100 graden Celsius (dat is meer dan 212 graden Fahrenheit) en als het hele systeem in een doos moet worden gesloten, moet er een soort koeling zijn. Weerstanden die ik gebruikte zijn 3,3 ohm / 5W en de maximale stroom zou moeten optreden met ongeveer 2V per weerstand, wat 2V / 3,3 = 0,61A oplevert, wat resulteert in 1,21W. Ik eindigde met het toevoegen van een eenvoudige ventilator in de doos. Vooral omdat ik toevallig een oude CPU-fan in de buurt had.

Schematische functionaliteit

Het is vrij rechttoe rechtaan en spreekt voor zich. De te testen batterij is verbonden met de serie van de weerstanden en massa. De spanningsmeetpunten zijn de batterijaansluiting en de eerste weerstand. De spanningsdelers worden dan gebruikt om de spanning te verlagen tot een niveau dat beter bij Arduino past. Eén digitale uitgang wordt gebruikt om het 10V- of 20V-bereik van de verdelers te selecteren. Elke weerstand in de belasting kan afzonderlijk worden geaard met behulp van de mosfets, die rechtstreeks door Arduino worden aangestuurd. En tot slot is het display verbonden met Arduino I2C-pinnen. Niet veel te zeggen over het schema J

Stap 4: De code

De code
De code

Hierboven is de ruwe functionaliteit van de code te zien. Laten we de code dan eens nader bekijken (de Arduino ino-bestanden zijn bijgevoegd). Er zijn een aantal functies en dan de hoofdlus.

Hoofdlus

Als de meting gereed is, worden de resultaten getoond en stopt de uitvoering daar. Is de meting nog niet gedaan, dan wordt eerst gekeken welk type accu is geselecteerd en vervolgens de spanning over ingang. Als de spanning hoger is dan 0,1V, moet er op zijn minst een soort batterij zijn aangesloten. In dit geval wordt een subroutine aangeroepen om te proberen te achterhalen hoeveel cellen er in de batterij zitten om te beslissen hoe te testen. Het aantal cellen is min of meer informatie die beter zou kunnen worden gebruikt, maar in deze versie wordt dit alleen via de seriële interface gerapporteerd. Als alles goed is, wordt het ontlaadproces gestart en wordt bij elke ronde van de hoofdlus de batterijcapaciteit berekend. Aan het einde van de hoofdlus wordt het display gevuld met bekende waarden.

Procedure voor het tonen van resultaten

De showResults-functie stelt eenvoudig de lijnen in die op het display moeten worden weergegeven en ook de string die naar de seriële interface moet worden verzonden.

Procedure voor het meten van spanningen

In het begin van de functie wordt de Vcc van Arduino gemeten. Het is nodig om de gemeten spanningen te kunnen berekenen met behulp van analoge ingangen. Vervolgens wordt de batterijspanning gemeten met een bereik van 20V om te kunnen beslissen welk bereik moet worden gebruikt. Vervolgens wordt zowel de batterijspanning als de weerstandsspanning berekend. Batterijspanningsmetingen maken gebruik van de DividerInput-klasse die meetmethoden en spanning heeft om de onbewerkte uitlezing of de berekende spanning van de betreffende analoge ingang te geven.

Procedure voor het selecteren van gebruikte waarden

In de functie selectUsedValues wordt het aantal cellen geraden en worden de hoge en lage limieten voor de batterij ingesteld om te worden gebruikt met de ontlaadprocedure. Ook wordt de meting gemarkeerd als gestart. De limieten voor deze procedure worden aan het begin van de globale variabelen ingesteld. Hoewel ze constant kunnen zijn, en ze kunnen ook binnen de procedure worden gedefinieerd, omdat ze niet wereldwijd worden gebruikt. Maar goed, er is altijd iets te verbeteren:)

Procedure voor het berekenen van de batterijcapaciteit

De ontlaadfunctie zorgt ervoor dat de capaciteit van de batterij daadwerkelijk wordt geteld. Het krijgt de lage en hoge limieten van de spanningen voor de te testen batterij als parameters. De hoge waarde wordt in deze versie niet gebruikt, maar de lage waarde wordt gebruikt om te beslissen wanneer het testen moet worden gestopt. Aan het begin van de functie wordt het aantal te gebruiken weerstanden bepaald met behulp van een voor dit doel gecreëerde functie. De functie retourneert het aantal weerstanden en start tegelijkertijd de ontlading en reset de teller. Vervolgens worden de spanningen gemeten en samen met de bekende weerstandswaarde gebruikt om de stroom te berekenen. Nu we de spanning en stroom weten en de tijd sinds de laatste meting, kunnen we de capaciteit berekenen. Aan het einde van het ontlaadproces wordt de batterijspanning vergeleken met de lage limiet en als deze onder de limiet is gekomen, stopt de ontladingsfase, worden de mosfets gesloten en wordt de meting gemarkeerd als gereed.

Procedure voor het vinden van het aantal te gebruiken weerstanden

In de selectNumOfResistors-functie wordt een eenvoudige vergelijking van spanning met vooraf ingestelde waarden gemaakt en op basis daarvan wordt het aantal te gebruiken weerstanden bepaald. De juiste mosfet wordt geopend om enkele van de weerstanden over te slaan. De spanningsslots zijn zo gekozen dat de maximale stroom op elk moment tijdens de ontlading iets boven 600mA blijft (2V/3,3Ohm=606mA). De functie retourneert het aantal gebruikte weerstanden. Omdat de ventilator vanuit dezelfde leiding wordt aangedreven als de eerste mosfet, moet deze altijd worden geopend wanneer de ontlading plaatsvindt.

Stap 5: De meter kalibreren

De meter kalibreren
De meter kalibreren

Om de meter te laten kalibreren heb ik een andere app gemaakt (bijgevoegd). Het gebruikt dezelfde hardware. In het begin zijn de correctiedelerwaarden allemaal ingesteld op 1000.

const int divCorrectieB10V = 1000; // delercorrectievermenigvuldiger in bereik 10V const int divCorrectionR10V = 1000; // delercorrectievermenigvuldiger in bereik 10V const int divCorrectionB20V = 1000; // delercorrectievermenigvuldiger in bereik 20V const int divCorrectionR20V = 1000; // delercorrectievermenigvuldiger in bereik 20V

in de functie readVcc() hangt de resulterende Vcc-spanning af van het instellen van de waarde op de laatste regel van de functie vóór terugkeer. Meestal kunt u op internet een waarde van 1126400L vinden die bij de berekening moet worden gebruikt. Ik zag dat het resultaat niet klopte.

Kalibratieproces:

  1. Laad de meet-app naar Arduino.
  2. Je kunt in de Arduino (en in de seriële uitgang en of de ventilator draait) zien of de belasting is ingeschakeld. Als dit het geval is, draait u aan de keuzeschakelaar voor het batterijtype.
  3. Pas de waarde in readuVCC() aan om het juiste resultaat te krijgen. Neem de waarde die de functie geeft (in millivolts) en deel de lange waarde ermee. U krijgt de ruwe waarde van de interne referentie. Meet nu de werkelijke voedingsspanning in millivolt met een multimeter en vermenigvuldig deze met de eerder berekende waarde en je krijgt de nieuwe gecorrigeerde lange waarde. In mijn geval retourneerde de functie 5288mV terwijl de werkelijke Vcc 5,14V was. Berekening van 1126400/5288*5140=1094874 die ik proefondervindelijk heb verfijnd. Zet de nieuwe waarde in de code en upload deze opnieuw naar Arduino.
  4. Het aanpassen van de correctiewaarden van de analoge ingangsweerstandsdeler gebeurt met behulp van een instelbare stroombron die wordt gebruikt om de ingang van de meter te voeden. Het eenvoudigst is om spanningen van 1V tot 20V te gebruiken met stappen van 1V en de resultaten vast te leggen in een spreadsheet. In de spreadsheet wordt het gemiddelde genomen. De gecorrigeerde waarden worden berekend met de volgende formule: “raw_value*range*Vcc/Vin” waarbij raw_value de waarde is in 10VdivB, 10VdivR, 20VdivB of 20VdivR, afhankelijk van welke correctie moet worden berekend.

Bekijk de spreadsheet hoe het er voor mij uitzag. De gemiddelden worden alleen berekend uit de waarden die binnen het bereik moeten liggen en die waarden worden vervolgens ingesteld in de daadwerkelijke meter-app.

Zoals dit

const int divCorrectieB10V = 998; // deler correctie deler in bereik 10V const int divCorrectionR10V = 1022; // deler correctie deler in bereik 10V const int divCorrectionB20V = 1044; // deler correctie deler in bereik 20V const int divCorrectionR20V = 1045; // divider correctie divider in bereik 20V

Het aanpassen van de weerstandswaarde kan worden gedaan door wat spanning aan de ingang te leveren (dwz 2V), de schakelaar van het bat-type te schakelen (om belasting aan te zetten) en de stroom die naar binnen gaat en de spanning over de eerste weerstand te meten en de spanning te delen door de stroom. Voor mij gaf 2V 607mA, wat 2/0,607 = 3,2948 ohm geeft, wat ik heb afgerond op 3,295 ohm. Dus nu is de kalibratie gedaan.

Stap 6: Laatste OPMERKING

Een belangrijke opmerking hierbij. Het is absoluut noodzakelijk om alle verbindingen van de batterij naar de weerstanden in uitstekende staat te hebben. Ik had één slechte verbinding en vroeg me af waarom ik 0,3V minder volt in het weerstandsnet kreeg dan op de batterij. Hierdoor kwam het meetproces vrijwel direct uit bij 1,2V NiCd-cellen omdat de ondergrens van 0,95V snel werd bereikt.

Aanbevolen: