Batterimonitor

A PIC based battery monitor

Bild

Denna sida beskriver ett batteriövervakningsprojekt. Då man seglar så hinner man tänka och en tanke som dök upp var: "Räcker laddningen i vårt batteri?". s/y Moulin Rouge har en 110Ah blyackumulator som enbart laddas via en 25W NAPS solpanel. Den största förbrukaren är kylboxens kompressor. Såväl laddning som urladdning är inte konstant över tiden. Uppmätt med batterimonitorn nedan tar boxen ca 8,5 Ah/dygn.

Den ursprungliga designen hittar du här

Vänligen se Juli-Augusti-numret av Elektor för en artikel och för beställning av kretskort

Scroll down for an English summary

Erfarenhetsmässigt vet vi att strömmen brukar räcka, men vi resonerar som Sokrates: Det outforskade livet är inte värt att leva.

Att övervaka laddningen i ett blybatteri är ingen exakt vetenskap. Noggrannast resultat får man om man kollar elektrolytens specifika vikt med en syraprovare, men det är litet bökigt. För att veta vartåt det lutar så kan man räkna strömmen in i batteriet och ut över tiden. Helst skall man ligga på plus och ha en marginal. Man kan även mäta batteriets vilospänning som motsvarar laddningsgrad vid 20C.

Nu är jag inte den första som funderat på detta. Några alternativa (hobby)lösningar hittar du nedan

En lösning som liknar min, men mätkretsen tillverkas ej längre
Baserad på en hall-sensor
A low-power battery ampere-hour meter

Om du inte är intresserad av elektronik så lönar det sig att köpa färdigt, tex:

NASA Marine, har extremt låg egenförbrukning
Baserad på en AVR, kan programmeras om

Bygger man själv så kan man få den precis som man vill ha den. Målen för mitt projekt var:

Batteriteori

En bra sammanfattning av teorierna kring blybatterier hittar du bla Svenska Kryssarklubbens sidor ,hos Maxim, samt i Värt att veta om startbatterier och Startbatteriets konstruktion och funktion.

Att mäta effekt

Att mäta effekt är enkelt i teorin. Mät strömmen och integrera. För att hantera transienta laster måste man sampla ofta och för att få bra noggrannhet måste man ha bra upplösning, gärna motsvarande 16-bitar. Antingen mäter man strömmen med PICens DAC och adderar fortlöpande (samplande mätning), alternativt kan man förvandla strömmen till ett pulståg där frekvensen är proportionell mot strömmen och räkna pulserna (integrerande mätning). Båda metoderna har sina för och nackdelar. Med en LM331 V/F-omvandlare är den maximala, teoretiska uplösningen 1/100000, vilket motsvarar 16-17 bitar. Notera att upplösningen halveras eftersom vi måste mäta såväl + som -.

En samplande mätning är enklare att implementera, medan en integrerande ger bättre noggrannhet över tiden. Skillnaderna berörs helt kort i AN485 från Maxim. Denna appnote utenämnar dock den teoretiska bakgrunden och resonemanget om långtidsnoggrannhet. Dessa faktorer diskuteras i detalj i "Smart battery analog front end architecture comparison" från IEEE. Den integrerande lösningen eliminerar kvantieringsfelet som faktor i långtidsberäkningen. I en jämförelse mellan ADC och VFC som på pappret har samma upplösning (3,05uV) blir felet för ADC-lösningen 17% medan VFC lösningens fel är 0,08% i slutet av laddnings/urladdningscykeln

För att mäta själva strömmen kan man använda spänningsfallet över en shunt (som i extremfallet kan vara tex jordflätan!) eller också använda en färdig sensor, tex en Hall-effekt sensor. En bla sammanfattning av tekniken finns här Fördelen med Hall-effekt sensorerna är att de ger en utspänning som direkt passar PICens DAC, däremot är de dåliga på att mäta svaga strömmar. En strömshunt ger en svag spänning som måste förstärkas, själva shunten är dock linjär inom ett mycket stort område. Däremot är det är frågan om svaga signalervilket leder till vissa utmaningar rent mät-tekniskt.

Om vi lämnar hall-effektgivare därhän och koncentrerar oss på shuntar så kan man mäta på två sätt "high side" dvs i detta fall på ackumulatorns pluspol, eller "low side", på ackumulatorns minuspol. Det finns för och nackdelar med båda och det behandlas bla i Current sense Circuit Collection från Analog Devices.

Integrerad Coluomb-räknare

Kretsen bq2018 från Texas Instruments ersätter hela den analoga delen samt V/F- omvandlaren i den förra prototypen. Bq2018 innehåller en förförstärkare, en balanserad, självkalibrerande V/F-omvandlare, temperaturmätare samt räknare. För mätning av laddning och urladdning finns två par räknare:

Maximal inspänning är +/- 200mV varför det dynamiska omfånget blir 16.000, eller 84dB. Om man antar att fullskala är 100A, blir den lägsta ström man kan mäta 6,3mA, dock kan man mäta ännu lägre, men det tar då längre än 1 timme att få svar. I praktiken kommer den nedre ändan av skalan att begränsas av annat som brus och störningar.

Bq2018 innhehåller ytterligare en räknare, SCR som räknar temperaturberoende 1/h vid 25C. Detta värde dubbleras för varje 10C ökning och halveras för varje 10C minskning. Denna räknare används för att beräkna självurladdning. Vidare finns statusregister och annat. Noggrannheten anges som max 1% icke-repeterbarhet och max 2% olinearitet.

Konstruktionen

I korthet fungerar denna batterimonitor så här:

Prototyp

Prototypen består av två delar. Sensorn, som kan arbeta fristående av displaydelen, samt själva displaydelen. Sensorn är uppbyggd kring kretsen bq2018 från Texas Instruments. Denna krets är avsedd att byggas in i batteripaket och levereras därför enbart i smd-utförande. På bilden sitter den monterad i en adapter. På motsatta sidan sitter strömshunten som även den är ytmonterad. Ett 1W ytmonterat motstånd med mycket låg temperaturkoefficient om +/- 20ppm/C. Detta innebär att shunten maximalt bidrar med ett fel om 0,08% om temperaturen ändrar från 0C till 40C. Till vänster ser du en prototyp. Till höger det färdiga kretskortet.

Bild Bild

Kopplingsschema för sensordelen. Denna monteras nere vid ackumulatorn för att den skall kunna känna av temperaturen och justera självurladdning. Från stiftlisten dras en kabel upp till displaydelen.

Bild

Displaydelen består i princip bara av PIC, display samt en handfull komponenter. Fyra tryckknappar avänds för navigering i menyerna.

Bild Bild

Bild Bild

Bild

Egenförbrukningen för denna är 3,4mA. Möjligheten finns att sätta PICen i sleep-läge och låta bq2018 väcka den via WAKE tråden då strömmen går över en viss ,inställbar, nivå.

Bild Bild

Mätaren på plats i den nya elpanelen.

Mjukvara

Mjukvaran är skriven för PIC 16F690 och i assembler. Den är fn. 3,9k. I korthet består den av

Algoritmer

Kalibrering

Bq2018 har en inbyggd funktion för kalibrering. Kravet är att batteriet är i vila mera än en timme. Rent konkret kalibrerar man batterimätaren genom att kortsluta shunten och sedan slå på matningsspänningen med ned-knappen intryckt. PIC sätter då bq2018 i kalibreringsläge och väntar litet över en timme. Då kalibreringstiden är slut läses offset från bq2018 och lagras i EEPROM. Denna subtraheras sedan ifrån den uppmätta laddningen en gång per timme.

Offset och självurladdning

Dessa båda värden är baserade på en timme. Att läsa och nolla Bq2018 så ofta leder dock till ett oacceptabelt stort fel över tiden. I stället väljer vi att nolla den var sjätte timme, vilket givetvis minskar felet med en sjättedel. Vid fullskala så klarar räknarna att räkna 8,19h, så 6-7h är en rimlig kompromiss. Då bq2018 nollas justeras samtidigt totalen med offset och självurladdning.

Laddningsgrad från tomgångsspänning

Vid tester på en 12Ah acku fann jag att spänningen steg relativt snabbt, efter urladdning, då lasten kopplades bort, för att sedan stiga mycket långsamt. Den nu valda algoritmen lagrar spänningen då strömmen (+/-) varit under ett gränsvärde (fn 100mA) under en viss tid (fn 255*0,5s). Vi antar vidare att spänningen är = -0,4114*G^2 + 1,2754*G + 11,841, där G är laddningsgraden i procent. Rutinen i programmet kollar helt enkelt mot en tabell, där den kan slå upp laddningsgraden från spänningen.

Bild

Självurladdning

En blyackumulators självurladdning är normalt 5-15% vid 20C. Programmet tar hänsyn till detta genom en subrutin som körs varje minut och då subtraherar ett värde från laddningen. Självurladdningen är vidare temperaturberoende så att den fördubblas för varje 10 grader C höjning över 20C och halveras för varje 10 graders sänkning. Det subtraherade värdet bör justeras utifrån detta. Bq2018 innehåller en speciell räknare som räknar upp med 1/h vid 20C, 2/h vid 30C etc.

Effektivitet

Med effektivitet avses att vi måste föra in mera laddning än vi tar ut. Om ackun är full-laddad och vi drar ur 5Ah, så måste vi kanske ladda 5,5Ah för att batteriet åter skall vara full-laddat. Effektiviteten är i detta fall 90%. Programmet tar hänsyn till detta genom att justera laddningen med en k onsant man själv väljer.

NMEA Utgång

NMEA är användbart för övervakning. Min båt är iofs helt fri från NMEA, men jag fann att denna utsignal var helt ovärderlig för loggning då jag utvecklade mjukvaran. Mjukvaran matar ut spänning, ström (medel) och laddning i formen.

$IIXDR,U,vvvvvv*CS
$IIXDR,A,aaaaaaa*CS
$IIXDR,G,hhhhhhh*CS

Där vvvv är spänningen i millivolt, aaaa är medelström i mA och hhhh är laddning i mAh. CS är kontrollsiffra. Om man inte vill ha NMEA kan man stänga av det med en #define i mjukvaran och spara litet ström.

Kapacitetstestning

Mjukvaran har en fuktion där RB5 sätts hög vid reset, om batterispänningen sjunker under 10,5V antas batteriet urladdat och RB5 sätts låg. Du kan således låta RB5 styra ett relä, förslagsvis via en transistor som bryter lasten som tex kan vara ett par glödlampor. Ladda batteriet fullt och koppla sedan på lasten. Batteriet kommer nu att laddas ur tills polspänningen sjunker till 10.5V. Då kopplas lasten ur och du kan direkt avläsa hur många Ah batteriet klarar vid den belastningen.

Källkod

Källkoden finns till påseende här.

Kretskortslayout

Displayens kretskort, tillverkat i KiCad sensor koppar, sensor komponent,här.

Andras byggen

Diverse bilder från andra som byggt min konstruktion.

Bild

English summary

The goal is to build a battery monitor for lead-acid batteries. Design goals are

The English summary ended up as an article in the July-August 2010 issue of Elektor, where you also can buy PCBs and pre-programmed PICs.

Notes on the Elektor PCBs: The tracks on the sensor PCB are a tad on the thin side. So you might want to solder some wire across the current-carrying tracks. It is naturally perfecly OK to use the PCB with an external shunt as well. Also note that the revised code here uses pin 12 as an output. So if you have the original Elektor PCB and intend to use the revised code cut the tracks that ground pin 12 or disable the battery test function in the code.

Source Code

Download the PIC source code here.

PCB Layout

The original layouts, done in KiCad are sensor copper side, sensor component side, Display. But you are better off with the Elektor ones. Soldering is so much more fun when you have a soldermask.

Disclaimer

This information and the circuits are provided as is without any express or implied warranties. While every effort has been taken to ensure the accuracy of the information contained in this text, the authors/maintainers/contributors assume no responsibility for errors or omissions, or for damages resulting from the use of the information contained herein. I disclaim everything. The contents of the articles below might be totally inaccurate, inappropriate, or misguided. There is no guarantee as to the suitability of said circuits and information for any purpose whatsoever other than as a self-training aid. I.E. If it blows your equipments, trashes your hard disc, wipes your backup, burns your building down or just plain don't work, IT ISN'T MY FAULT. In the event of judicial ruling to the contrary, any liability shall be limited to the sum charged on you by us for the aforementioned document or nothing, whichever is the lower. I will not be held responsible for any damages or costs which might occur as a result of my advice or designs. Nor are you allowed to use any of my designs for commercial purposes without my written authorisation.

Bild

Valid HTML 4.0!