INHOUDSOPGAWE:

Nog 'n ander batterykapasiteitstoetser: 6 stappe
Nog 'n ander batterykapasiteitstoetser: 6 stappe

Video: Nog 'n ander batterykapasiteitstoetser: 6 stappe

Video: Nog 'n ander batterykapasiteitstoetser: 6 stappe
Video: Full review of XH-M240 18650 Lithium Battery Capacity Tester Discharger 2024, November
Anonim
Nog 'n toetser vir batterykapasiteit
Nog 'n toetser vir batterykapasiteit
Nog 'n toetser vir batterykapasiteit
Nog 'n toetser vir batterykapasiteit

Waarom nog 'n kapasiteitstoetser?

Ek het baie verskillende testinstruksies gelees, maar dit blyk nie dat dit by my behoeftes pas nie. Ek wou ook meer as net NiCd/NiMH- of Lion -selle kan toets. Ek wou 'n elektriese gereedskapbattery kan toets sonder om dit eers te deel. Daarom het ek besluit om die saak van naderby te bekyk en een van my eie te ontwerp. Die een ding lei na die ander en ek het uiteindelik besluit om self 'n instruksies te skryf. Ek het ook besluit om nie al die besonderhede van die toetser in te gaan nie, want almal kan besluit oor sekere keuses, soos watter grootte weerstand om te gebruik, of as 'n PCB nodig is, of is Veroboard genoeg, en daar is ook baie inligting oor instruksies. arend installeer of hoe om 'n PCB te maak. Met ander woorde, ek sal konsentreer op die skemas en die kode en hoe om die toetser te kalibreer.

Stap 1: Geskiedenis - Weergawe 1

Geskiedenis - Weergawe 1
Geskiedenis - Weergawe 1

Hierbo is die eerste weergawe met onderstaande meer as 10V invoerondersteuning bygevoeg (R12 & R17 & Q11 & Q12).

Die eerste weergawe is min of meer geneem uit 'n instruksies deur deba168 (ek kan dit ongelukkig nie vind dat dit 'n skakel is nie). Slegs 'n paar klein veranderinge is aangebring. In hierdie weergawe het ek 'n 10 ohm lasweerstand gehad wat deur 'n mosfet beheer word. Dit het egter 'n paar probleme meegebring. By die toets van een NiCd- of NiMH -sel, is die benodigde tyd maklik gemeet in ure indien nie dae nie. 'N 1500mAh -battery het meer as 12 uur geneem (die stroom was slegs 120mA). Aan die ander kant kan die eerste weergawe slegs batterye onder 10V toets. En 'n volledig gelaaide 9.6V -battery kan eintlik tot 11.2V wees, wat weens die limiet van 10V nie getoets kon word nie. Iets moes gedoen word. Eerstens het ek net 'n paar mofette en weerstande bygevoeg om die spanningsverdelers meer as 10V toe te laat. Maar dit het aan die ander kant 'n ander probleem opgelewer. 'N 14.4V -battery wat vol gelaai is, kan 'n maksimum van 16.8V hê, wat met 'n weerstand van 10 ohm 1.68A -stroom beteken en natuurlik 'n kragverlies van byna 30W van die lasweerstand. Dus, met lae spanning te lang toetstyd en met hoë spanning te hoë stroom. Dit was duidelik nie 'n voldoende oplossing nie en verdere ontwikkeling was nodig.

Stap 2: Weergawe 2

Ek wou 'n oplossing hê waar die stroom binne sekere perke sou bly, ongeag die batteryspanning. Een oplossing sou gewees het om PWM en net een weerstand te gebruik, maar ek het verkies om 'n oplossing te hê sonder om pulserende stroom te hê of om die behoefte aan die verwydering van mosfet -hitte te hê. So het ek 'n oplossing geskep met 10 spanningsgleuwe, elk 2V breed, met behulp van 10 3.3ohm weerstande en 'n mosfet vir elke weerstand.

Stap 3: Dit is hoe dit uitgedraai het

Dit is hoe dit uitgedraai het
Dit is hoe dit uitgedraai het

Opmerkings oor die stroombaan 'n Mens kan argumenteer dat die spanningsverlies oor die mosfet onbeduidend is omdat die weerstand van die mosfet so laag is, maar ek het die keuse van die mosfet aan die leser oorgelaat, en die weerstand kan dus selfs meer as 1 ohm gaan waar dit begin saak. In weergawe een sou die keuse van korrekte mosfet die behoefte aan laerpuntmeting verwyder, maar in weergawe 2 het ek besluit om slegs die spanning oor een weerstand te meet, wat dit dan belangrik maak om eintlik twee meetpunte te hê. En die rede agter die keuse was die eenvoud van die bedrading van die Veroboard. Dit voeg wel 'n mate van akkuraatheidsfout by, aangesien die gemete spanning oor een weerstand aansienlik kleiner is as om oor alle weerstande te meet. By die keuse van komponente het ek besluit om te gebruik wat ek al byderhand gehad het, of wat ek maklik kon kry. Dit het gelei tot die volgende BOM:

  • Arduino Pro Mini 5V! BELANGRIK! Ek het 'n 5V -weergawe gebruik en alles is daarop gebaseer
  • 128x64 I2C OLED -skerm
  • 10 x 5W 3.3 Ohm weerstande
  • 3 x 2n7000 mosfets
  • 10 x IRFZ34N mosfets
  • 6 x 10 kOhm weerstande
  • 2 x 5 kOhm weerstande
  • 16V 680uF kapasitor
  • 1 ou CPU fan

Ek het nie die volgende bygevoeg in die skemas nie

  • pullup -weerstande op I2C -lyne, wat ek opgemerk het, het die skerm stabieler gemaak
  • kragdrade
  • kondensator in 5V -lyn wat ook die skerm gestabiliseer het

Terwyl ek getoets het, het ek opgemerk dat die lasweerstand baie warm sou word, veral as hulle almal gebruik word. Die temperatuur styg tot meer as 100 grade Celsius (meer as 212 grade Fahrenheit) en as die hele stelsel in 'n boks gesluit moet word, moet daar 'n soort verkoeling wees. Weerstande wat ek gebruik het, is 3,3 ohm / 5W en die maksimum stroom moet voorkom met ongeveer 2V per weerstand wat 2V / 3,3 = 0,61A gee, wat tot 1,21W lei. Ek het uiteindelik 'n eenvoudige waaier in die boks bygevoeg. Meestal omdat ek toevallig 'n ou CPU -waaier gehad het.

Skematiese funksie

Dit is redelik eenvoudig en duidelik. Die battery wat getoets moet word, is gekoppel aan die reeks resistors en grond. Die spanningsmetingspunte is die batteryaansluiting en die eerste weerstand. Die spanningsverdelers word dan gebruik om die spanning te verlaag tot 'n vlak wat Arduino beter pas. Een digitale uitset word gebruik om 'n reeks van 10V of 20V van die verdelers te kies. Elke weerstand in die vrag kan afsonderlik op die aarde vasgemaak word met behulp van die mosfets, wat direk deur Arduino aangedryf word. En uiteindelik is die skerm gekoppel aan Arduino I2C -penne. Nie veel te sê oor die skematiese J

Stap 4: Die kode

Die kode
Die kode

Hierbo kan die ruwe funksionaliteit van die kode gesien word. Kom ons kyk nou na die kode (die arduino ino -lêers is aangeheg). Daar is 'n aantal funksies en dan die hooflus.

Hooflus

As die meting gereed is, word die resultate getoon en eindig die uitvoering daar. As die meting nog nie gedoen is nie, word eers gekyk watter tipe battery gekies is en dan die spanning oor insette. As die spanning 0.1V oorskry, moet daar ten minste 'n soort battery gekoppel wees. In hierdie geval word 'n subroutine ontbied om te probeer uitvind hoeveel selle in die battery is om te besluit hoe om te toets. Die aantal selle is min of meer inligting wat beter gebruik kan word, maar in hierdie weergawe word dit slegs deur middel van 'n seriële koppelvlak gerapporteer. As alles goed is, begin die ontladingsproses en op elke ronde hooflus word die batterykapasiteit bereken. Aan die einde van die hooflus word die skerm gevul met bekende waardes.

Prosedure om resultate te wys

Die showResults -funksie stel eenvoudig die lyne wat op die skerm vertoon moet word en ook die string wat na die seriële koppelvlak gestuur moet word, in.

Prosedure vir die meting van spannings

In die begin van die funksie word die Vcc van Arduino gemeet. Dit is nodig om die spannings wat gemeet is met analoog insette te kan bereken. Dan word die batteryspanning gemeet met behulp van 'n 20V -reeks om te kan besluit watter reeks om te gebruik. Dan word beide batteryspanning en weerstandspanning bereken. Metings van batteryspanning trek voordeel uit die DividerInput -klas met metings en spanning om die rou lesing of die berekende spanning van die betrokke analoog ingang te gee.

Prosedure vir die keuse van gebruikte waardes

In die funksie SelectUsedValues word die aantal selle geraai en die hoë en lae perke vir die battery is ingestel om saam met die ontladingsprosedure gebruik te word. Die meting word ook gemerk as begin. Die perke vir hierdie prosedure word aan die begin van die as globale veranderlikes gestel. Alhoewel dit konstant kan wees, en dit kan ook binne die prosedure gedefinieer word, aangesien dit nie wêreldwyd gebruik word nie. Maar daar is altyd iets om te verbeter:)

Prosedure vir die berekening van die batterykapasiteit

Die ontladingsfunksie sorg daarvoor dat die kapasiteit van die battery eintlik getel word. Dit kry die lae en hoë perke van die spanning vir die battery wat getoets word as parameters. Die hoë waarde word nie in hierdie weergawe gebruik nie, maar die lae waarde word gebruik om te besluit wanneer die toetsing gestaak moet word. In die begin van die funksie word die aantal resistors wat gebruik moet word, uitgevind deur 'n funksie te gebruik wat vir hierdie doel geskep is. Die funksie gee die aantal weerstand terug en begin terselfdertyd die ontladings- en herstelteller. Dan word die spannings gemeet en saam met 'n bekende weerstandswaarde gebruik om die stroom te bereken. Noudat ons die spanning en stroom ken, en die tydsduur sedert die laaste meting, kan ons die kapasiteit bereken. Aan die einde van die ontladingsproses word die batteryspanning vergelyk met die lae limiet, en as dit onder die limiet gegaan het, stop die ontladingsfase, word die masjiene gesluit en word die meting as gereed gemerk.

Prosedure vir die bepaling van die aantal weerstande wat gebruik moet word

In die selectNumOfResistors -funksie word 'n eenvoudige vergelyking van spanning met vooraf ingestelde waardes gedoen, en die resultaat is dat die aantal weerstande wat gebruik moet word, bepaal word. Die gepaste mosfet word oopgemaak om sommige van die weerstande oor te slaan. Die spanningsgleuwe word so gekies dat die maksimum stroom enige tyd tydens die ontlading effens meer as 600mA bly (2V/3.3Ohm = 606mA). Die funksie gee die aantal weerstande wat gebruik word, terug. Omdat die waaier uit dieselfde lyn as die eerste mosfet gedryf word, moet dit altyd oopgemaak word wanneer daar ontlading plaasvind.

Stap 5: Kalibreer die meter

Kalibreer die meter
Kalibreer die meter

Om die meter te laat kalibreer, het ek 'n ander app (aangeheg) geskep. Dit gebruik dieselfde hardeware. Aan die begin is die waardes vir die regstellingsverdeler almal op 1000 gestel.

const int divCorrectionB10V = 1000; // verdeler korreksie vermenigvuldiger in reeks 10V const int divCorrectionR10V = 1000; // verdeler korreksie vermenigvuldiger in reeks 10V const int divCorrectionB20V = 1000; // verdeler korreksie vermenigvuldiger in reeks 20V const int divCorrectionR20V = 1000; // verdeler korreksie vermenigvuldiger in reeks 20V

In die readVcc () -funksie hang die resulterende Vcc -spanning af van die instelling van die waarde op die laaste reël van die funksie voor terugkeer. Gewoonlik kan u op die internet 'n waarde van 1126400L vind om in die berekening gebruik te word. Ek het opgemerk dat die uitslag nie korrek was nie.

Kalibrasieproses:

  1. Laai die meetprogram na Arduino.
  2. U kan sien of die las op die Arduino (en in die seriële uitvoer en as die waaier draai) is. As dit is, draai die batterytipe keuserskakelaar.
  3. Pas die waarde in readuVCC () aan om die korrekte resultaat te hê. Neem die waarde wat die funksie gee (wat in millivolt is) en deel die lang waarde daarmee. U kry die rou waarde van die interne verwysing. Meet nou die werklike voedingsspanning in millivolt met 'n multimeter en vermenigvuldig dit met die voorheen berekende waarde, en u kry die nuwe, gekorrigeerde lang waarde. In my geval het die funksie 5288mV teruggekeer toe die werklike Vcc 5.14V was. Bereken 1126400/5288*5140 = 1094874 wat ek deur proefneming verfyn het. Plaas die nuwe waarde in die kode en laai dit weer op na Arduino.
  4. Die aanpassing van die analoog insetweerstandsverdeler se regstellingswaardes vind plaas deur 'n verstelbare kragbron te gebruik wat gebruik word om die insette van die meter te voer. Die eenvoudigste is om spannings van 1V tot 20V te gebruik met 1V -stappe en die resultate op te teken in 'n sigblad. In die sigblad word die gemiddelde geneem. Die gekorrigeerde waardes word bereken met die volgende formule: “raw_value*range*Vcc/Vin” waar raw_value die waarde in 10VdivB, 10VdivR, 20VdivB of 20VdivR is, afhangende van watter regstelling bereken moet word.

Sien die sigblad hoe dit vir my gelyk het. Die gemiddeldes word slegs bereken uit die waardes wat op die reeks moet wees, en die waardes word dan in die werklike meter -app gestel.

Soos hierdie

const int divCorrectionB10V = 998; // verdeler korreksie verdeler in reeks 10V const int divCorrectionR10V = 1022; // verdeler korreksie verdeler in reeks 10V const int divCorrectionB20V = 1044; // verdeler korreksie verdeler in reeks 20V const int divCorrectionR20V = 1045; // verdeler korreksie verdeler in reeks 20V

Die weerstandswaarde kan aangepas word deur 'n bietjie spanning aan die ingang (dws 2V) te verskaf, die kolf tipe skakelaar te skakel (om las te kry) en die stroom wat ingaan en die spanning oor die eerste weerstand te meet en die spanning met die stroom te verdeel. Vir my het 2V 607mA gegee wat 2/0.607 = 3.2948 ohm gee wat ek afgerond het tot 3.295 ohm. Die kalibrasie is dus gedoen.

Stap 6: Laaste LET WEL

Een belangrike opmerking hier. Dit is noodsaaklik dat alle verbindings in prima toestand is, van die battery na die weerstande. Ek het 'n slegte verbinding gehad en het gewonder hoekom het ek 0.3V minder volt in die weerstandsrooster gekry as op die battery? Dit het beteken dat die meetproses byna onmiddellik met 1.2V NiCd -selle beland het omdat die onderste grens van 0.95V vinnig bereik is.

Aanbeveel: