Sodobne baterije vsebujejo vezje, ki ščiti celice, spremlja njihovo stanje in omogoča komunikacijo z nadrejenim sistemom. Tako lahko od baterije izvemo kakšni sta njena napolnjenost in zdravje, brez da bi poznali kemične lastnosti celic
Pomanjkljivost baterij brez elektronike je, da je težko ugotoviti koliko naboja oz. energije vsebujejo. Zgolj napetost ni dovolj, saj je ta odvisna tudi od zgodovine praznjenja, temperature in drugih dejavnikov. Dodaten problem je meritev med praznjenjem ali polnjenjem, saj je dodaten padec napetosti tudi na notranji upornosti. Vse to bi sicer lahko tudi spremljala naprava, ki jo baterija napaja, zaplete pa se, ko baterijo vzamemo iz naprave in vstavimo drugo baterijo.
Sodobne baterije zato vsebuje vezje, ki spremlja stanje baterije in omogoča komunikacijo. Tako baterija sama nudi podatek o preostali kapaciteti, celotni kapaciteti, preostali čas delovanja in druge koristne podatke. Vezje baterije je združeno z celicami, zato vedno ostaja z njimi. Baterije, ki se uporabljajo za prenosnike in druge komercialne naprave pokriva standard Smart Battery Data Specification [1]. Za komunikacijo z baterijo se uporablja SMBus (System Management Bus) [2], ki je izvedenka znanega dvožičnega standarda I2C. Baterija se na vodilu obnaša kot suženj, med polnjenjem pa lahko tudi kot gospodar in pošilja zahteve o toku in napetosti neposredno polnilniku. Komunikacija je sestavljena iz množice ukazov, ki omogočajo branje podatkov in nastavljanje parametrov.
Ta vsebina je samo za naročnike
Dostopni standardni podatki
S pomočjo ukazov 0x18 – 0x23 lahko iz baterije preberemo nazivne vrednosti, ime proizvajalca, serijsko številko in podobno. Ti podatki se skozi življenjsko dobo baterije ne spreminjajo. Od baterije lahko izvemo katero različico protokola SMB omogoča (0x1a) in datum izdelave (0x1b). Slednja dva podatka sta 16 bitna, od katerih ima vsaka skupina bitov svoj pomen, npr. leto, mesec. Register 0x1a vsebuje tudi podatek o skaliranju napetosti in tokov s faktorjem do 1.000, kar zadovolji tudi zelo velike baterije. Ukaz 0x23 nam vrne blok bajtov, katerih pomen določi proizvajalec baterije.
Ukazi 0x08 – 0x0b nam omogočajo branje trenutnih vrednosti napetosti, toka in temperature baterije. Na voljo nam je tudi povprečna vrednost toka zadnje minute. Na ta način lahko naprava izmeri svojo porabo brez dodatnega merilnika. Tok ima pozitivno vrednost za polnjenje in negativno za praznjenje.
Odzivi na ukaze 0x0c – 0x17 se nanašajo na spremljanje uporabe baterije. Izvemo lahko koliko naboja oz. energije je še v bateriji (0x0f). Kako jo vezje izračuna je stvar proizvajalca, večinoma pa tako, da meri naboj oz. energijo, ki steče iz oz. v baterijo. Vezje baterije spremlja tudi zdravje celic in nam poda celotno kapaciteto baterije (0x10), ki se s starostjo manjša. Ta kapaciteta je lahko tudi večja, kot nazivna kapaciteta. Vezje korigira podatek z meritvijo med praznjenjem, brez vmesnega polnjena. Postopek se imenuje tudi kalibracija baterije. Napolnjenost, kot jo večina od nas pozna v odstotkih, lahko dobimo relativno glede na celotno kapaciteto (0x0d) ali pa tudi glede na nazivno kapaciteto (0x0e). Posebnost slednje je to, da je lahko tudi več kot 100 %. Za relativno napolnjenost dobimo tudi podatek o največjem odstopanju (0x0c), ki pomeni za koliko % je lahko preostala kapaciteta večja od vrnjene. Iz stanja in vrednosti tokov nam baterija izračuna tudi čas do polnosti oz. do praznosti. Operacijski sistem tako zgolj preračuna prebrano minutno vrednost v ure in minute in nam podatek prikaže na zaslonu.
Polnilni tok in napetost (0x14 in 0x15) nista statična podatka, ampak sta odvisna od trenutnega stanja baterije. Pri globoko izpraznjeni bateriji bo npr. polnilni tok manjši od nazivnega. Oba podatka lahko baterija pošilja tudi neposredno polnilniku. Status baterije nam pove, v kakšnem stanju je baterija. Preberemo lahko tudi ali bo kmalu prazna. Pomen posameznih bitov je v tabeli 2.
Ukazi 0x01 – 0x07 nam omogočajo presojo preostale zmogljivosti baterije. Tukaj določimo, kdaj je baterija skoraj prazna, kar potem preberemo v statusnem registru. Od baterije lahko izvemo koliko časa bo lahko dajala tok oz. moč, ki jo določimo z ukazom 0x04. Odziv na ukaz 0x07 pa nam pove, ali bo baterija sploh prenesla podani tok za vsaj 10 sekund. Z ukazom 0x03 lahko izberemo enoto za kapaciteto in hitrost polnjenja oz. praznjenja in sicer mA (bit 15 = 0 – provzeto) ali 10 mWh (bit 15 = 1). Omogočimo lahko pošiljanje podatkov neposredno polnilniku.
Ukaz 0x00 je dostop za proizvajalca, zato standard ne določa pomena.
Nestandardni podatki
Pogosto proizvajalci integriranih vezij za baterije dodajo svoje ukaze. Na koncu tabele so navedeni ukazi, ki jih omogoča večina baterij. Ti nam omogočajo branje napetosti vsake posamične celice. V statusnem registru pa npr. izvemo ali je trenutni cikel veljaven za kalibracijo in ali je aktivirana katera od zaščit.
Komunikacija z baterijo
Komunikacijo poteka preko vodila SMBus. Vodilo temelji na vodilu I2C z nekaterimi razlikami. Za razliko od I2C ima SMBus le fiksne napetostne nivoje; največ 0,8 V za logično 0 in najmanj 2,1 V za logično 1. Ker je namenjen za naprave z nizko porabo, od naprave zahteva tok izhoda proti masi le 100 μA.
Frekvenca ure na vodilu SMBbus je omejena na območje 10 – 100 kHz, medtem, kot je na I2C tudi manj ali celo 400 kHz. SMBus zahteva podatkovni držalni čas vsaj 300 ns, za toliko časa za padajočim robom urinega signala mora biti podatkovna linija na veljavnem nivoju. Vodilo I2C nima take zahteve.
Podobnosti nam omogočajo mešanje I2C in SMBus naprav na istem vodilu, s tem da moramo upoštevati zgornje omejitve.
Za pametne baterije je rezerviran naslov 0001 011b oz. 0x16 za pisanje in 0x17 za branje. Pri pisanju podatka za naslovom pošljemo ukaz in potem podatke. Pri branju pa po pošiljanju naslova in ukaza, pošljemo naslov za branje, nakar sprejemamo podatke. Ukazi se pošiljajo 8-bitno, vsi podatki pa 16-bitno, razen znakovnih nizov in blokovnih podatkov. Pri blokovnem prenosu, se najprej pošlje število bajtov, potem pa blok oz. znake. Slika 1 prikazuje branje 16-bitnega podatka, kar je tudi večina dostopov do baterije.
Komunikacija v praksi
Za priključitev baterije moramo poznati tudi razpored pinov. Tega določa proizvajalec in zato obstaja veliko različic. Dotičnega lahko ugotovimo iz sheme prenosnika, vendar je merjenje običajno priročnejša možnost. Večina baterij ima na priključku prisotno napetost, ko niso prazne, kar enostavno ugotovimo z voltmetrom. Glavni izhod baterije je skoraj vedno na skrajnih pinih, s tem da sta pogosto dva pina za maso in lahko tudi dva za plus. Če je baterija prazna, lahko položaj mase enostavno izmerimo na prenosniku. Nekatere baterije imajo pin za omogočanje, ki ga je potrebno povezati na maso. Če je temu tako, bo na tem pinu nekaj voltov, kar enostavno ugotovimo. Ugotoviti moramo tudi položaj pinov za vodilu SMBus. Pina lahko identificiramo z merjenjem zaščitne diode proti masi. Oba pina imata enako karakteristiko in večinoma sta edina digitalna pina. Običajno sta skupaj. Kateri je kateri lahko ugotovimo s poizkušanjem. Na sliki 2 je nekaj razporedov pinov na katere sem naletel.
Za komunikacijo z baterijo sem uporabil kar doma izdelan programator mikrokrmilnikov PIC in EEPROMov, ki se priključi na vzporedna vrata računalnika in pripravil ustrezni konzolni program. Za večino baterij je delovalo brez težav, nekatere pa so zahtevale precej upočasnjeno komunikacijo. Žal je pri tem programatorju taktni signal le izhodni, zato baterija ne more upočasniti komunikacije. Velik delež baterij uporablja integriranja vezja Texas Instruments, kot sta bq2060 in bq2084. Njuna podatkovna lista sta zato koristen vir podatkov [3].
Večina baterij se polni zgolj s priklopom na polnilnik, nekatere zahtevajo zbujeno vezje, kar dosežemo zgolj z upori proti napajanju na vodilu SMBus. Ena od baterij, katere sem testiral, pa potrebuje periodično komunikacijo, sicer se polnjenje prekine.
Na znanem prodajnem mestu na spletu lahko najdemo konektorje za različne baterije, čeprav sem si jaz pomagal s kovinskimi trakovi. Na spletu najdemo tudi odprto-kodne mikrokrmilniške projekte za branje in prikaz podatkov na zaslonu LCD.
Zaključek
Vezja pametnih baterij omogočajo boljše informiranje o stanju baterije. Uporabnik naprave ima tako boljši podatek o trajanju napajanja in baterij, kljub uporabi več različnih baterij. Z branjem podatkov iz baterije lahko hitro presodimo kakšno je njeno zdravje brez dolgotrajnega testiranja in tudi brez uporabe naprave za katero je izdelana.
Literatura
[1] “System Management Bus (SMBus) Specification”, Version 2.0, SBS Implementers Forum, 3. 8. 2000, na voljo: http://www.smbus.org/specs/smbus20.pdf
[2] “Smart Battery Data Specification”, Revision 1.1, SBS Implementers Forum, 11. 12. 1998, na voljo: http://sbs-forum.org/specs/sbdat110.pdf
[3] SBS V1.1-Compliant Gas Gauge IC, Texas Instruments, 10. 2005, http://www.ti.com/lit/ds/symlink/bq2060.pdf
Avtor: dr. Boštjan Glažar
2021/296