Innehållsförteckning:

Ännu en batterikapacitetsmätare: 6 steg
Ännu en batterikapacitetsmätare: 6 steg

Video: Ännu en batterikapacitetsmätare: 6 steg

Video: Ännu en batterikapacitetsmätare: 6 steg
Video: Ännu en jul 2024, November
Anonim
Ännu en batteritestare
Ännu en batteritestare
Ännu en batterikapacitetsmätare
Ännu en batterikapacitetsmätare

Varför en kapacitetstestare till

Jag har läst igenom många olika tester bygginstruktioner men ingen av dem verkar passa mina behov. Jag ville också kunna testa mer än bara singel NiCd/NiMH eller Lion -celler. Jag ville kunna testa ett elverktygsbatteri utan att först ta det. Så jag bestämde mig för att titta närmare på saken och designa en egen. En sak leder till en annan och jag bestämde mig slutligen för att skriva en instruerbar själv. Jag bestämde mig också för att inte gå in på alla detaljer om hur man faktiskt bygger testaren eftersom alla kan bestämma vissa val, till exempel vilket storlek motstånd som ska användas eller om ett PCB behövs eller är Veroboard tillräckligt och det finns också massor av instruktioner hur man installera eagle eller hur man gör ett kretskort. Med andra ord kommer jag att koncentrera mig på scheman och koden och hur jag kalibrerar testaren.

Steg 1: Historik - Version 1

Historia - Version 1
Historia - Version 1

Ovan är den första versionen med nedan nämnt över 10V ingångsstöd tillagt (R12 & R17 & Q11 & Q12).

Den första versionen togs mer eller mindre från en instruerbar av deba168 (tyvärr kan jag inte hitta hans instruerbara att tillhandahålla en länk). Endast några mindre ändringar gjordes. I denna version hade jag ett 10 ohm lastmotstånd som styrs av en mosfet. Detta medförde dock vissa problem. När man testade en NiCd- eller NiMH -cell mättes den nödvändiga tiden enkelt i timmar om inte dagar. Ett 1500mAh batteri tog över 12 timmar (strömmen var bara 120mA). Å andra sidan kunde den första versionen endast testa batterier under 10V. Och ett fulladdat 9,6V -batteri kan faktiskt vara upp till 11,2V som inte kunde testas på grund av 10V -gränsen. Något behövde göras. Först lade jag bara till ett par mosfeter och motstånd för att spänningsdelarna ska kunna tillåta mer än 10V. Men detta å andra sidan tog upp ett annat problem. Ett fullt laddat 14,4 V batteri kan ha upp till 16,8 V, vilket med 10 ohm motstånd betydde 1,68 A ström och naturligtvis en effektförlust från lastmotståndet på nästan 30 W. Så med låg spänning för lång testtid och med hög spänning för hög ström. Det var uppenbarligen inte en adekvat lösning och ytterligare utveckling behövdes.

Steg 2: Version 2

Jag ville ha en lösning där strömmen skulle hålla sig inom vissa gränser oavsett batterispänning. En lösning skulle ha varit att använda PWM och bara ett motstånd, men jag föredrog att ha en lösning utan pulserande ström eller att behöva sprida mosfetvärme. Således skapade jag en lösning med 10 spänningsluckor, vardera 2V breda, med 10 3.3ohm motstånd och en mosfet för varje motstånd.

Steg 3: Så här blev det

Så här blev det
Så här blev det

Kommentarer om kretsen Man kan hävda att spänningsförlusten över mosfeten är försumbar eftersom motståndet hos mosfeten är så lågt, men jag har lämnat valet av mosfet till läsaren och därmed kan motståndet gå över 1 ohm där det börjar materia. I version ett skulle man välja rätt mosfet skulle ta bort behovet av lägre punktmätning men i version 2 bestämde jag mig för att mäta spänningen över ett motstånd bara vilket då gör det viktigt att faktiskt ha två mätpunkter. Och anledningen bakom valet var enkelheten i anslutning av Veroboard. Detta lägger till ett visst noggrannhetsfel eftersom den uppmätta spänningen över ett motstånd är betydligt mindre än att mäta över alla motstånd. På komponentvalet bestämde jag mig för att använda det jag antingen redan hade till hands eller vad jag enkelt kunde få. Detta ledde till följande BOM:

  • Arduino Pro Mini 5V! VIKTIGT! Jag använde 5V -versionen och allt är baserat på det
  • 128x64 I2C OLED -skärm
  • 10 x 5W 3.3 Ohm motstånd
  • 3 x 2n7000 mosfets
  • 10 x IRFZ34N mosfeter
  • 6 x 10 kOhm motstånd
  • 2 x 5 kOhm motstånd
  • 16V 680uF kondensator
  • 1 gammal CPU -fläkt

Jag har inte lagt till följande i schemat

  • pullup -motstånd på I2C -linjer, vilket jag märkte gjorde skärmen mer stabil
  • kraftledningar
  • kondensator i 5V linje som också stabiliserade displayen

När jag testade märkte jag att lastmotstånden skulle bli ganska heta, särskilt om de alla användes. Temperaturen höjdes till över 100 grader Celsius (vilket är över 212 grader Fahrenheit) och om hela systemet ska stängas i en låda bör det finnas någon form av kylning. Motstånd jag använde är 3,3 ohm / 5W och maximal ström bör uppstå med ca 2V per motstånd som ger 2V / 3,3 = 0,61A vilket resulterar i 1,21W. Jag slutade med att lägga till en enkel fläkt i lådan. Mest för att jag råkade ha en gammal CPU -fläkt i närheten.

Schematisk funktion

Det är ganska rakt fram och självförklarande. Batteriet som ska testas är anslutet till serierna av motstånd och jord. Spänningsmätpunkterna är batterianslutningen och det första motståndet. Spänningsdelarna används sedan för att sänka spänningen till en nivå som bättre passar Arduino. En digital utgång används för att välja antingen 10V eller 20V intervall för delarna. Varje motstånd i lasten kan individuellt jordas med hjälp av mosfets, som drivs direkt av Arduino. Och slutligen är displayen ansluten till Arduino I2C -stift. Inte mycket att säga om den schematiska J

Steg 4: Koden

Koden
Koden

Ovan kan man se kodens grova funktionalitet. Låt oss titta närmare på koden då (arduino ino -filerna bifogas). Det finns ett antal funktioner och sedan huvudslingan.

Huvudslinga

När mätningen är klar visas resultaten och körningen slutar där. Om mätningen ännu inte är klar kontrolleras först vilken batterityp som väljs och sedan spänningen över ingången. Om spänningen överstiger 0,1V måste det vara åtminstone något slags batteri anslutet. I detta fall kallas en subrutin för att försöka ta reda på hur många celler det är i batteriet för att bestämma hur man ska testa. Antalet celler är mer eller mindre information som skulle kunna utnyttjas bättre, men i den här versionen rapporteras det endast via seriellt gränssnitt. Om allt är bra startas urladdningsprocessen och på varje omgång huvudslinga beräknas batterikapaciteten. I slutet av huvudslingan fylls skärmen med kända värden.

Förfarande för att visa resultat

ShowResults -funktionen anger helt enkelt raderna som ska visas på displayen och även strängen som ska skickas till det seriella gränssnittet.

Förfarande för mätning av spänningar

I början av funktionen mäts Vcc för Arduino. Det behövs för att kunna beräkna de uppmätta spänningarna med analoga ingångar. Därefter mäts batterispänningen med 20V -intervall för att kunna bestämma vilket intervall som ska användas. Då beräknas både batterispänning och motståndsspänning. Batterispänningsmätningar drar fördel av DividerInput -klassen som har metoder för avläsning och spänning för att ge råavläsning eller beräknad spänning för den analoga ingången i fråga.

Förfarande för att välja använda värden

I funktionen selectUsedValues gissas antalet celler och de höga och låga gränserna för batteriet är inställda för att användas med urladdningsproceduren. Mätningen är också markerad som påbörjad. Gränserna för detta förfarande sätts i början av de globala variablerna. Även om de kan vara konstanta, och de kan också definieras inuti proceduren eftersom de inte används globalt. Men det finns alltid något att förbättra:)

Procedur för beräkning av batterikapacitet

Urladdningsfunktionen tar hand om att faktiskt räkna batteriets kapacitet. Det får de låga och höga gränserna för spänningarna för batteriet som testas som parametrar. Det höga värdet används inte i den här versionen, men det låga värdet används för att bestämma när testet ska stoppas. I början av funktionen upptäcks antalet motstånd som ska användas genom att använda en funktion som skapats för detta ändamål. Funktionen returnerar antalet motstånd och startar samtidigt urladdnings- och återställningsräknaren. Därefter mäts spänningarna och används tillsammans med känt motståndsvärde för att beräkna strömmen. Nu när vi vet spänning och ström och tiden därifrån har varit sedan förra mätningen kan vi beräkna kapacitet. I slutet av urladdningsprocessen jämförs batterispänningen med låggränsen och om den har gått under gränsen stannar urladdningsfasen, mosfets stängs och mätningen markeras som klar.

Procedur för att hitta antalet motstånd som ska användas

I funktionen selectNumOfResistors görs en enkel jämförelse av spänning med förinställda värden och efter resultatet bestäms antalet motstånd som ska användas. Lämplig mosfet öppnas för att hoppa över några av motstånden. Spänningsluckorna väljs så att den maximala strömmen när som helst under urladdningen kommer att ligga något över 600mA (2V/3.3Ohm = 606mA). Funktionen returnerar antalet motstånd som används. Eftersom fläkten körs från samma linje som den första mosfeten måste den alltid öppnas när urladdning pågår.

Steg 5: Kalibrera mätaren

Kalibrera mätaren
Kalibrera mätaren

För att få mätaren kalibrerad skapade jag en annan app (bifogad). Den använder samma hårdvara. I början är alla korrigeringsdelarens värden inställda på 1000.

const int divCorrectionB10V = 1000; // divider -korrigeringsmultiplikator inom intervall 10V const int divCorrectionR10V = 1000; // divider -korrigeringsmultiplikator inom intervall 10V const int divCorrectionB20V = 1000; // divider -korrigeringsmultiplikator i intervallet 20V const int divCorrectionR20V = 1000; // divider -korrigeringsmultiplikator i intervallet 20V

i funktionen readVcc () beror den resulterande Vcc -spänningen på inställningen av värdet på funktionens sista rad före retur. Vanligtvis kan du hitta på internet ett värde av 1126400L som ska användas i beräkningen. Jag märkte att resultatet inte var korrekt.

Kalibreringsprocess:

  1. Ladda mätappen till Arduino.
  2. Du kan se i Arduino (och i serieutgången och om fläkten roterar) om belastningen är på. Om det är vrid omkopplaren för val av batterityp.
  3. Justera värdet i readuVCC () för att få rätt resultat. Ta det värde funktionen ger (som är i millivolt) och dela det långa värdet med det. Du får råvärdet för den interna referensen. Mät nu den faktiska matningsspänningen i millivolt med en multimeter och multiplicera den med det tidigare beräknade värdet så får du det nya korrigerade långa värdet. I mitt fall returnerade funktionen 5288mV när den faktiska Vcc var 5,14V. Beräknar 1126400/5288*5140 = 1094874 som jag finjusterade genom prövning. Sätt det nya värdet i koden och ladda upp det igen till Arduino.
  4. Justering av de analoga ingångsmotståndsdelarens korrigeringsvärden sker med hjälp av en justerbar strömkälla som används för att mata mätarens ingång. Enklast är att använda spänningar från 1V till 20V med 1V -steg och spela in resultaten till ett kalkylblad. I kalkylbladet tas genomsnittet. De korrigerade värdena beräknas med följande formel:”raw_value*range*Vcc/Vin” där raw_value är värdet i 10VdivB, 10VdivR, 20VdivB eller 20VdivR beroende på vilken korrigering som ska beräknas.

Se kalkylbladet hur det såg ut för mig. Genomsnittet beräknas endast från de värden som ska ligga på intervallet och dessa värden ställs sedan in i den aktuella mätarappen.

Så här

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 -korrigeringsdelare i intervall 20V

Justering av motståndsvärdet kan göras genom att ge lite spänning till ingången (dvs 2V), växla slagtypsbrytaren (för att få belastning) och mäta strömmen som går in och spänningen över det första motståndet och dela spänningen med strömmen. För mig gav 2V 607mA vilket ger 2/0.607 = 3.2948 ohm som jag rundade till 3.295 ohm. Så nu är kalibreringen klar.

Steg 6: Sista OBS

En viktig anteckning här. Det är absolut nödvändigt att ha alla anslutningar i gott skick från batteriet till motstånden. Jag hade en dålig anslutning och undrade varför fick jag 0,3V mindre volt i motståndsnätet än på batteriet. Detta innebar att mätprocessen hamnade nästan omedelbart med 1,2V NiCd -celler eftersom den nedre gränsen på 0,95V nåddes snabbt.

Rekommenderad: