Innholdsfortegnelse:

Nok en batterikapasitetstester: 6 trinn
Nok en batterikapasitetstester: 6 trinn

Video: Nok en batterikapasitetstester: 6 trinn

Video: Nok en batterikapasitetstester: 6 trinn
Video: Geometry Dash SubZero – “Nock Em” 100% Complete [All Coins] | GuitarHeroStyles 2024, Juli
Anonim
Nok en batterikapasitetstester
Nok en batterikapasitetstester
Nok en batterikapasitetstester
Nok en batterikapasitetstester

Hvorfor en kapasitetstester til

Jeg leste gjennom mange forskjellige tester byggeinstruksjoner, men ingen av dem ser ut til å passe mine behov. Jeg ønsket å kunne teste mer enn bare singel NiCd/NiMH eller Lion celler. Jeg ønsket å kunne teste et batteri fra et verktøy uten å ta det til del først. Så jeg bestemte meg for å se nærmere på saken og designe en av mine egne. En ting fører til en annen, og jeg bestemte meg til slutt for å skrive en instruerbar selv. Jeg bestemte meg også for ikke å gå inn på alle detaljene om hvordan man faktisk skal bygge testeren fordi alle kan bestemme seg for bestemte valg, for eksempel hvilken størrelse motstand de skal bruke, eller om det er behov for en PCB eller er Veroboard nok, og det er også massevis av instruksjoner om hvordan installere eagle eller hvordan lage en PCB. Med andre ord vil jeg konsentrere meg om skjemaene og koden og hvordan jeg skal kalibrere testeren.

Trinn 1: Historie - versjon 1

Historie - versjon 1
Historie - versjon 1

Ovenfor er den første versjonen med nedenfor nevnt over 10V inngangsstøtte lagt til (R12 & R17 & Q11 & Q12).

Den første versjonen ble mer eller mindre hentet fra en instruerbar av deba168 (dessverre kan jeg ikke finne hans instruerbare å gi en lenke). Bare noen mindre endringer ble gjort. I denne versjonen hadde jeg en 10 ohm lastmotstand kontrollert av en mosfet. Dette ga imidlertid noen problemer. Ved testing av en NiCd- eller NiMH -celle ble den nødvendige tiden enkelt målt i timer om ikke dager. Et 1500mAh batteri tok over 12 timer (strømmen var bare 120mA). På den annen side kunne den første versjonen bare teste batterier under 10V. Og et fulladet 9,6V batteri kan faktisk være opptil 11,2V som ikke kunne testes på grunn av 10V grensen. Noe måtte gjøres. Først la jeg bare til et par mosfeter og motstander for å gjøre spenningsdelerne til å tillate mer enn 10V. Men dette på den annen side tok opp et annet problem. Et fulladet 14,4 V batteri kan ha opptil tp 16,8 V, som med 10 ohm motstand betydde 1,68 A strøm og selvfølgelig en effekttap fra lastmotstanden på nesten 30 W. Så, med lav spenning for lang testtid og med høy spenning for høy strøm. Det var tydeligvis ikke en tilstrekkelig løsning, og videre utvikling var nødvendig.

Trinn 2: Versjon 2

Jeg ønsket en løsning der strømmen ville forbli i visse grenser uavhengig av batterispenningen. En løsning ville vært å bruke PWM og bare en motstand, men jeg foretrakk å ha en løsning uten pulserende strøm eller å ha behov for å spre mosfetvarme. Dermed skapte jeg en løsning med 10 spenningsspor, hver 2V bred, ved bruk av 10 3.3ohm motstander og en mosfet for hver motstand.

Trinn 3: Slik ble det

Slik ble det
Slik ble det

Kommentarer til kretsen En kan hevde at spenningstapet over mosfeten er ubetydelig fordi motstanden til mosfeten er så lav, men jeg har overlatt valget av mosfet til leseren, og dermed kan motstanden gå enda over 1 ohm der den begynner å saken. I versjon en ville det å velge riktig mosfet fjerne behovet for lavere punktmåling, men i versjon 2 bestemte jeg meg for å måle spenningen over bare en motstand, noe som da gjør det viktig å faktisk ha to målepunkter. Og årsaken bak valget var enkelheten i kabling av Veroboard. Dette legger til en viss nøyaktighetsfeil siden den målte spenningen over en motstand er betydelig mindre enn å måle over alle motstander. På komponentvalget bestemte jeg meg for å bruke det jeg enten allerede hadde hendig eller det jeg lett kunne få tak i. Dette førte til følgende BOM:

  • Arduino Pro Mini 5V! VIKTIG! Jeg brukte 5V versjon og alt er basert på det
  • 128x64 I2C OLED -skjerm
  • 10 x 5W 3.3 Ohm motstander
  • 3 x 2n7000 mosfets
  • 10 x IRFZ34N mosfeter
  • 6 x 10 kOhm motstander
  • 2 x 5 kOhm motstander
  • 16V 680uF kondensator
  • 1 gammel CPU -vifte

Jeg har ikke lagt til følgende i skjemaene

  • pullup -motstander på I2C -linjer, som jeg la merke til gjorde displayet mer stabilt
  • strømledninger
  • kondensator i 5V linje som også stabiliserte displayet

Mens jeg testet la jeg merke til at belastningsmotstandene ville bli ganske varme, spesielt hvis de alle var i bruk. Temperaturen økte til over 100 grader Celsius (som er over 212 grader Fahrenheit), og hvis hele systemet skal lukkes i en boks, bør det være en slags kjøling. Motstander jeg brukte er 3,3 ohm / 5W, og maksimal strøm bør oppstå med ca 2V per motstand som gir 2V / 3,3 = 0,61A som resulterer i 1,21W. Jeg endte opp med å legge til en enkel vifte i esken. Mest fordi jeg tilfeldigvis hadde en gammel CPU -vifte rundt meg.

Skjematisk funksjonalitet

Det er ganske rett frem og selvforklarende. Batteriet som skal testes er koblet til serien av motstander og jord. Spenningsmålepunktene er batteritilkoblingen og den første motstanden. Spenningsdelerne brukes deretter til å senke spenningen til et nivå som bedre passer Arduino. En digital utgang brukes til å velge enten 10V eller 20V rekkevidde for delerne. Hver motstand i lasten kan individuelt jordes ved hjelp av mosfets, som drives direkte av Arduino. Og til slutt er skjermen koblet til Arduino I2C -pinner. Ikke mye å si om skjematisk J

Trinn 4: Koden

Koden
Koden

Ovenfor kan du se den grove funksjonaliteten til koden. La oss se nærmere på koden da (arduino ino -filene er vedlagt). Det er en rekke funksjoner og deretter hovedsløyfen.

Hovedløkke

Når målingen er klar, vises resultatene, og utførelsen avsluttes der. Hvis målingen ennå ikke er utført, kontrolleres først hvilken batteritype som er valgt og deretter spenningen over inngangen. Hvis spenningen overstiger 0,1V må det være minst en slags batteri tilkoblet. I dette tilfellet kalles en subrutine for å prøve å finne ut hvor mange celler det er i batteriet for å bestemme hvordan de skal testes. Antall celler er mer eller mindre informasjon som kan utnyttes bedre, men i denne versjonen rapporteres det bare gjennom et serielt grensesnitt. Hvis alt er bra startes utladningsprosessen, og på hver runde med hovedsløyfen beregnes batterikapasiteten. På slutten av hovedløkken er skjermen fylt med kjente verdier.

Fremgangsmåte for å vise resultater

ShowResults -funksjonen angir ganske enkelt linjene som skal vises på displayet og også strengen som skal sendes til det serielle grensesnittet.

Fremgangsmåte for måling av spenninger

I begynnelsen av funksjonen måles Vcc av Arduino. Det er nødvendig for å kunne beregne spenningene målt ved hjelp av analoge innganger. Deretter måles batterispenningen ved hjelp av 20V -område for å kunne bestemme hvilket område som skal brukes. Deretter beregnes både batterispenning og motstandsspenning. Batterispenningsmålinger drar fordel av DividerInput -klassen som har metoder for avlesning og spenning for å gi råavlesningen eller den beregnede spenningen til den aktuelle analoge inngangen.

Fremgangsmåte for valg av brukte verdier

I funksjonen selectUsedValues gjettes antallet celler, og høye og lave grenser for batteriet er satt til å brukes med utladningsprosedyren. Målingen er også merket som startet. Grensene for denne prosedyren er satt i begynnelsen av de globale variablene. Selv om de kan være konstante, og de kan også defineres inne i prosedyren siden de ikke brukes globalt. Men hei, det er alltid noe å forbedre:)

Prosedyre for beregning av batterikapasitet

Utladningsfunksjonen tar seg av å faktisk telle batteriets kapasitet. Den får de lave og høye grensene for spenningene for batteriet som testes som parametere. Den høye verdien brukes ikke i denne versjonen, men den lave verdien brukes til å bestemme når testen skal stoppes. I begynnelsen av funksjonen blir antall motstander som skal brukes funnet ut ved å bruke en funksjon som er opprettet for dette formålet. Funksjonen returnerer antall motstander og starter samtidig tømmingen og tilbakestiller telleren. Deretter måles spenningene og brukes sammen med kjent motstandsverdi for å beregne strømmen. Nå som vi vet spenning og strøm og tiden fra den har vært siden forrige måling, kan vi beregne kapasitet. På slutten av utladningsprosessen blir batterispenningen sammenlignet med lavgrense, og hvis den har gått under grensen stopper utladningsfasen, mosfets lukkes, og målingen markeres som klar.

Fremgangsmåte for å finne antall motstander som skal brukes

I selectNumOfResistors -funksjonen utføres en enkel sammenligning av spenning med forhåndsinnstilte verdier, og resultatet avgjøres hvor mange motstander som skal brukes. Den riktige mosfeten åpnes for å hoppe over noen av motstandene. Spenningssporene er valgt slik at maksimal strøm når som helst under utladningen vil forbli litt over 600mA (2V/3.3Ohm = 606mA). Funksjonen returnerer antall motstander som brukes. Fordi viften blir kjørt fra samme linje som den første mosfeten, må den alltid åpnes når utladningen pågår.

Trinn 5: Kalibrering av måleren

Kalibrering av måleren
Kalibrering av måleren

For å få måleren kalibrert opprettet jeg en annen app (vedlagt). Den bruker den samme maskinvaren. I begynnelsen er alle verdiene for korreksjonsdeler satt til 1000.

const int divCorrectionB10V = 1000; // divider -korreksjonsmultiplikator i område 10V const int divCorrectionR10V = 1000; // divider -korreksjonsmultiplikator i område 10V const int divCorrectionB20V = 1000; // divider -korreksjonsmultiplikator i område 20V const int divCorrectionR20V = 1000; // divider -korreksjonsmultiplikator i område 20V

i funksjonen readVcc () avhenger den resulterende Vcc -spenningen av å sette verdien på siste linje i funksjonen før retur. Vanligvis kan du på internett finne en verdi på 1126400L som skal brukes i beregningen. Jeg la merke til at resultatet ikke var riktig.

Kalibreringsprosess:

  1. Last måle -appen til Arduino.
  2. Du kan se på Arduino (og i serieutgangen og om viften roterer) om belastningen er på. Hvis det er dreie bryteren for valg av batteritype.
  3. Juster verdien i readuVCC () for å få riktig resultat. Ta verdien funksjonen gir (som er i millivolt) og del den lange verdien med den. Du får råverdien til den interne referansen. Mål nå den faktiske forsyningsspenningen i millivolt med et multimeter og multipliser den med den tidligere beregnede verdien, og du får den nye korrigerte lange verdien. I mitt tilfelle returnerte funksjonen 5288mV da den faktiske Vcc var 5,14V. Beregner 1126400/5288*5140 = 1094874 som jeg finjusterte ved prøve. Sett den nye verdien i koden og last den opp igjen til Arduino.
  4. Justering av korreksjonsverdiene for den analoge inngangsmotstandsdeleren skjer ved å bruke en justerbar strømkilde som brukes til å mate inngangen til måleren. Enklest er å bruke spenninger fra 1V til 20V med 1V trinn og registrere resultatene i et regneark. I regnearket er gjennomsnittet tatt. De korrigerte verdiene beregnes med følgende formel: “raw_value*range*Vcc/Vin” hvor raw_value er verdien i 10VdivB, 10VdivR, 20VdivB eller 20VdivR avhengig av hvilken korreksjon som skal beregnes.

Se regnearket hvordan det så ut for meg. Gjennomsnittene beregnes bare ut fra verdiene som skal være på området, og disse verdiene settes deretter i den faktiske målerappen.

Som dette

const int divCorrectionB10V = 998; // divider correction divider in range 10V const int divCorrectionR10V = 1022; // divider correction divider in range 10V const int divCorrectionB20V = 1044; // divider correction divider in range 20V const int divCorrectionR20V = 1045; // divider correction divider in range 20V

Justering av motstandsverdien kan gjøres ved å gi litt spenning til inngangen (dvs. 2V), bytte flaggermus type bryter (for å få belastning) og måle strømmen som går inn og spenningen over den første motstanden og dele spenningen med strømmen. For meg ga 2V 607mA som gir 2/0.607 = 3.2948 ohm som jeg rundet til 3.295 ohm. Så nå er kalibreringen ferdig.

Trinn 6: Siste MERK

En viktig merknad her. Det er viktig å ha alle tilkoblinger i god stand fra batteriet til motstandene. Jeg hadde en dårlig tilkobling og lurte på hvorfor jeg fikk 0,3V mindre volt i motstandsnettet enn på batteriet. Dette betydde at måleprosessen havnet nesten umiddelbart med 1,2V NiCd -celler fordi den nedre grensen på 0,95V ble nådd raskt.

Anbefalt: