Sisällysluettelo:

Vielä yksi akun kapasiteettimittari: 6 vaihetta
Vielä yksi akun kapasiteettimittari: 6 vaihetta

Video: Vielä yksi akun kapasiteettimittari: 6 vaihetta

Video: Vielä yksi akun kapasiteettimittari: 6 vaihetta
Video: Full review of DL24P Battery Capacity Tester, Energy Monitor and 180W Electronic Load 2024, Marraskuu
Anonim
Vielä yksi akun kapasiteettimittari
Vielä yksi akun kapasiteettimittari
Vielä yksi akun kapasiteettimittari
Vielä yksi akun kapasiteettimittari

Miksi yksi kapasiteettimittari lisää?

Luin paljon erilaisia testaajien rakennusohjeita, mutta mikään niistä ei näytä sopivan tarpeisiini. Halusin pystyä testaamaan myös muutakin kuin vain yhdistäviä NiCd/NiMH- tai Lion -soluja. Halusin pystyä testaamaan sähkötyökalun akun ottamatta sitä ensin osiin. Joten päätin tarkastella asiaa tarkemmin ja suunnitella oman. Yksi asia johtaa toiseen ja päätin vihdoin kirjoittaa itse ohjeen. Päätin myös olla menemättä kaikkiin yksityiskohtiin testerin todellisesta rakentamisesta, koska jokainen voi päättää tietyistä valinnoista, kuten minkä kokoisen vastuksen käyttää tai tarvitaanko piirilevyä tai onko Veroboard tarpeeksi, ja on myös paljon ohjeita ohjeista kotkan asentaminen tai piirilevyn tekeminen. Toisin sanoen keskityn kaavioihin ja koodiin sekä testerin kalibrointiin.

Vaihe 1: Historia - Versio 1

Historia - versio 1
Historia - versio 1

Yllä on ensimmäinen versio, jossa on alla mainittu yli 10 V: n tulotuki (R12 & R17 & Q11 & Q12).

Ensimmäinen versio otettiin enemmän tai vähemmän deba168: n ohjeesta (valitettavasti en löydä hänen ohjeistusta linkin antamiseen). Vain pieniä muutoksia tehtiin. Tässä versiossa minulla oli yksi 10 ohmin kuormitusvastus, jota ohjaa mosfet. Tämä toi kuitenkin joitain ongelmia. Kun testattiin yhtä NiCd- tai NiMH -solua, tarvittava aika mitattiin helposti tunteina, ellei päivinä. 1500 mAh: n akku kesti yli 12 tuntia (virta oli vain 120 mA). Toisaalta ensimmäinen versio voisi testata vain alle 10 V: n akkuja. Täyteen ladattu 9,6 V: n akku voi itse asiassa olla jopa 11,2 V, jota ei voitu testata 10 V: n rajan vuoksi. Jotain oli tehtävä. Ensinnäkin lisäsin juuri pari mosfettiä ja vastuksia, jotta jännitteenjakajat voisivat sallia yli 10 V. Mutta toisaalta tämä toi esiin toisen ongelman. Täysin ladatulla 14,4 V: n akulla voi olla jopa 16,8 V: n tp, mikä 10 ohmin vastuksella tarkoitti 1,68 A: n virtaa ja tietysti lähes 30 W: n kuormitusvastuksen tehonhäviötä. Joten matalalla jännitteellä liian pitkä testausaika ja korkea jännite liian suuri virta. Se ei selvästikään ollut riittävä ratkaisu, ja sitä oli kehitettävä edelleen.

Vaihe 2: Versio 2

Halusin ratkaisun, jossa virta pysyisi tietyissä rajoissa akun jännitteestä riippumatta. Yksi ratkaisu olisi ollut käyttää PWM: ää ja vain yhtä vastusta, mutta pidin parempana saada ratkaisua ilman sykkivää virtaa tai tarvetta hajottaa mosfet -lämpöä. Siten loin ratkaisun, jossa oli 10 jännitepaikkaa, joista jokainen oli 2 V leveä, käyttäen 10 3,3 ohmin vastuksia ja mosfet kutakin vastusta varten.

Vaihe 3: Näin se osoittautui

Näin kävi
Näin kävi

Kommentteja piiristä Voidaan väittää, että jännitehäviö mosfetin yli on vähäinen, koska mosfetin vastus on niin alhainen, mutta olen jättänyt mosfetin valinnan lukijalle ja siten vastus voi mennä jopa yli 1 ohmin kohdasta asia. Versiossa yksi oikean mosfetin valitseminen poistaisi alemman pisteen mittauksen tarpeen, mutta versiossa 2 päätin mitata jännitteen vain yhden vastuksen yli, mikä tekee tärkeänä, että todellisuudessa on kaksi mittauspistettä. Valinnan syy oli Veroboardin johdotuksen yksinkertaisuus. Tämä lisää tarkkuusvirhettä, koska yhden vastuksen mitattu jännite on merkittävästi pienempi kuin kaikkien vastuksen mittaus. Komponenttivalinnassa päätin käyttää sitä, mikä minulla oli jo käsillä tai jota voin helposti hankkia. Tämä johti seuraavaan BOM: iin:

  • Arduino Pro Mini 5V! TÄRKEÄÄ! Käytin 5V -versiota ja kaikki perustuu siihen
  • 128x64 I2C OLED -näyttö
  • 10 x 5W 3,3 ohmin vastukset
  • 3 x 2n7000 mosfettiä
  • 10 x IRFZ34N mosfetti
  • 6 x 10 kOhm vastukset
  • 2 x 5 kOhm vastukset
  • 16V 680uF kondensaattori
  • 1 vanha CPU -tuuletin

En ole lisännyt seuraavaa kaavioihin

  • vetovoimat I2C -linjoilla, jotka huomasin tehneen näytön vakaammaksi
  • sähkölinjat
  • kondensaattori 5 V: n linjassa, joka myös stabiloi näytön

Testauksen aikana huomasin, että kuormitusvastukset kuumenevat varsinkin, jos ne olivat kaikki käytössä. Lämpötila nostettiin yli 100 celsiusasteeseen (mikä on yli 212 astetta Fahrenheit) ja jos koko järjestelmä suljetaan laatikossa, on oltava jonkinlainen jäähdytys. Käyttämäni vastukset ovat 3,3 ohmia / 5 W ja suurimman virran pitäisi tapahtua noin 2 V: n vastuksen kohdalla, jolloin 2V / 3,3 = 0,61A, jolloin tuloksena on 1,21 W. Päätin lisätä yksinkertaisen tuulettimen laatikkoon. Lähinnä siksi, että minulla oli vanha CPU -tuuletin ympärillä.

Kaavamainen toimivuus

Se on melko suoraviivaista ja itsestään selvää. Testattava akku on kytketty vastuksen sarjaan ja maahan. Jännitteen mittauspisteet ovat akun liitäntä ja ensimmäinen vastus. Jännitteenjakajia käytetään sitten pudottamaan jännite tasolle, joka sopii paremmin Arduinolle. Yhdellä digitaalilähdöllä valitaan jakajien 10V- tai 20V -alue. Jokainen kuorman vastus voidaan maadoittaa erikseen käyttämällä Arduinon käyttämiä mosfetteja. Ja lopuksi näyttö on kytketty Arduino I2C -nastoihin. Ei paljon sanottavaa kaavamaisesta J

Vaihe 4: Koodi

Koodi
Koodi

Yllä näkyy koodin karkea toimivuus. Katsotaanpa sitten koodia tarkemmin (arduino ino -tiedostot ovat liitteenä). On olemassa useita toimintoja ja sitten pääsilmukka.

Pääsilmukka

Kun mittaus on valmis, tulokset näytetään ja suoritus päättyy siihen. Jos mittaus ei ole vielä suoritettu, tarkistetaan ensin, mikä akkutyyppi on valittu ja sitten tulon välinen jännite. Jos jännite ylittää 0,1 V, on oltava kytkettynä ainakin jonkinlainen akku. Tässä tapauksessa aliohjelma kutsutaan yrittämään selvittää, kuinka monta kennoa akussa on päättääkseen testata. Solujen määrä on enemmän tai vähemmän tietoa, jota voitaisiin hyödyntää paremmin, mutta tässä versiossa se raportoidaan vain sarjaliitännän kautta. Jos kaikki on kunnossa, purkausprosessi käynnistyy ja akun kapasiteetti lasketaan jokaisella pääsilmukan kierroksella. Pääsilmukan lopussa näyttö on täynnä tunnettuja arvoja.

Menettely tulosten näyttämiseksi

ShowResults -toiminto asettaa yksinkertaisesti näytössä näytettävät rivit ja myös sarjaliitännälle lähetettävän merkkijonon.

Menettely jännitteiden mittaamiseksi

Toiminnon alussa mitataan Arduinon Vcc. Sitä tarvitaan, jotta voidaan laskea analogituloilla mitatut jännitteet. Sitten akun jännite mitataan 20 V: n alueella, jotta voidaan päättää, mitä aluetta käytetään. Sitten lasketaan sekä akun jännite että vastuksen jännite. Akun jännitemittauksissa hyödynnetään DividerInput -luokkaa, jossa on menetelmiä lukemalla ja jännitteellä, joka antaa raakalukeman tai kyseisen analogiatulon lasketun jännitteen.

Menettely käytettyjen arvojen valitsemiseksi

SelectUsedValues -toiminnossa arvataan kennojen lukumäärä ja akun ylä- ja alarajat asetetaan käytettäväksi purkauksen yhteydessä. Myös mittaus merkitään aloitetuksi. Tämän menettelyn rajat asetetaan globaalimuuttujiksi. Vaikka ne voisivat olla vakioita, ne voitaisiin myös määritellä menettelyn sisällä, koska niitä ei käytetä maailmanlaajuisesti. Mutta hei, aina on jotain parannettavaa:)

Menettely akun kapasiteetin laskemiseksi

Purkaustoiminto laskee akun kapasiteetin. Se saa akun jännitteiden ala- ja ylärajat testattavaksi parametreiksi. Tässä versiossa ei käytetä korkeaa arvoa, mutta alhaista arvoa käytetään päätettäessä, milloin testaus lopetetaan. Toiminnon alussa käytettävien vastuksien lukumäärä selvitetään käyttämällä tätä tarkoitusta varten luotua funktiota. Toiminto palauttaa vastuksen määrän ja käynnistää samalla purkaus- ja nollauslaskurin. Sitten jännitteet mitataan ja niitä käytetään yhdessä tunnetun vastusarvon kanssa virran laskemiseksi. Nyt kun tiedämme jännitteen ja virran ja siitä kuluneen ajan viimeisestä mittauksesta, voimme laskea kapasiteetin. Purkamisprosessin lopussa akun jännitettä verrataan alarajaan ja jos se on alittanut rajan, purkausvaihe pysähtyy, mosfetit suljetaan ja mittaus merkitään valmiiksi.

Menettely käytettävien vastusten lukumäärän löytämiseksi

SelectNumOfResistors -toiminnossa jännite verrataan yksinkertaisesti esiasetettuihin arvoihin ja tuloksena päätetään käytettävien vastusten määrä. Sopiva mosfet avataan ohittamaan joitakin vastuksia. Jännitepaikat on valittu siten, että suurin virta milloin tahansa purkauksen aikana pysyy hieman yli 600 mA: n (2 V/3,3 ohmia = 606 mA). Toiminto palauttaa käytettyjen vastuksien määrän. Koska tuuletin ajaa samalta linjalta kuin ensimmäinen mosfet, se on aina avattava, kun tyhjennys on käynnissä.

Vaihe 5: Mittarin kalibrointi

Mittarin kalibrointi
Mittarin kalibrointi

Jotta mittari kalibroitiin, loin toisen sovelluksen (liitteenä). Se käyttää samaa laitteistoa. Aluksi korjausjakajan arvot on asetettu arvoon 1000.

const int divCorrectionB10V = 1000; // jakajan korjauskerroin alueella 10V const int divCorrectionR10V = 1000; // jakajan korjauskerroin alueella 10V const int divCorrectionB20V = 1000; // jakajan korjauskerroin alueella 20 V const int divCorrectionR20V = 1000; // jakajan korjauskerroin alueella 20V

funktiossa readVcc () tuloksena oleva Vcc -jännite riippuu arvon asettamisesta funktion viimeiselle riville ennen paluuta. Yleensä löydät Internetistä arvon 1126400L käytettäväksi laskennassa. Huomasin, että tulos ei ollut oikea.

Kalibrointiprosessi:

  1. Lataa mittaussovellus Arduinolle.
  2. Näet Arduinosta (ja sarjalähdöstä ja jos tuuletin pyörii), onko kuorma päällä. Jos se on, käännä akun tyypin valintakytkintä.
  3. Säädä readuVCC (): n arvoa saadaksesi oikean tuloksen. Ota funktion antama arvo (millivolteina) ja jaa pitkä arvo sen kanssa. Saat sisäisen viittauksen raaka -arvon. Mittaa nyt todellinen syöttöjännite millivoltteina yleismittarilla ja kerro se aiemmin lasketulla arvolla, niin saat uuden korjatun pitkän arvon. Minun tapauksessani toiminto palautti 5288 mV, kun todellinen Vcc oli 5,14 V. Laskeminen 1126400/5288*5140 = 1094874, jonka olen viimeistellyt kokeilulla. Laita uusi arvo koodiin ja lataa se uudelleen Arduinolle.
  4. Analogisen tulon vastuksen jakajan korjausarvojen säätö tapahtuu käyttämällä säädettävää virtalähdettä, jota käytetään syöttämään mittarin tulo. Yksinkertaisin on käyttää jännitteitä 1V - 20V 1V portailla ja tallentaa tulokset laskentataulukkoon. Laskentataulukossa otetaan keskiarvo. Korjatut arvot lasketaan seuraavalla kaavalla: "raw_value*range*Vcc/Vin", jossa raw_value on arvo 10VdivB, 10VdivR, 20VdivB tai 20VdivR riippuen siitä, mikä korjaus lasketaan.

Katso laskentataulukko, miltä se minusta näytti. Keskiarvot lasketaan vain arvoista, jotka ovat alueella, ja nämä arvot asetetaan sitten todellisessa mittarisovelluksessa.

Kuten tämä

const int divKorjausB10V = 998; // jakajan korjausjakaja alueella 10 V const int divCorrectionR10V = 1022; // jakajan korjausjakaja alueella 10 V const int divCorrectionB20V = 1044; // jakajan korjausjakaja alueella 20 V const int divCorrectionR20V = 1045; // jakajan korjausjakaja alueella 20V

Vastusarvon säätäminen voidaan tehdä syöttämällä jonkin verran jännitettä tuloon (eli 2 V), kytkemällä bat -tyyppinen kytkin (kuormituksen saamiseksi) ja mittaamalla sisään tuleva virta ja jännite ensimmäisen vastuksen välillä ja jakamalla jännite virralla. Minulle 2V antoi 607 mA, mikä antaa 2/0,607 = 3,2948 ohmia, jotka pyöristin 3,295 ohmiksi. Joten nyt kalibrointi on tehty.

Vaihe 6: Viimeinen HUOM

Tässä yksi tärkeä huomautus. On välttämätöntä, että kaikki liitännät ovat hyvässä kunnossa akusta vastuksiin. Minulla oli yksi huono yhteys ja ihmettelin, miksi sain 0,3 V vähemmän volttia vastusverkkoon kuin akussa. Tämä tarkoitti sitä, että mittausprosessi päättyi lähes välittömästi 1,2 V: n NiCd -kennoihin, koska alaraja 0,95 V saavutettiin nopeasti.

Suositeltava: