Tartalomjegyzék:

Még egy akkumulátorkapacitás -tesztelő: 6 lépés
Még egy akkumulátorkapacitás -tesztelő: 6 lépés

Videó: Még egy akkumulátorkapacitás -tesztelő: 6 lépés

Videó: Még egy akkumulátorkapacitás -tesztelő: 6 lépés
Videó: Generátor töltés és akkumulátor állapot gyors vizsgálata otthon multiméterrel. 2024, Július
Anonim
Még egy akkumulátorkapacitás -tesztelő
Még egy akkumulátorkapacitás -tesztelő
Még egy akkumulátorkapacitás -tesztelő
Még egy akkumulátorkapacitás -tesztelő

Miért kell még egy kapacitásmérő

Sok különböző tesztelési utasítást olvastam el, de úgy tűnik, hogy egyik sem felel meg az igényeimnek. Szerettem volna több, mint egy NiCd/NiMH vagy Lion cellát kipróbálni. Azt akartam, hogy kipróbálhassam az elektromos kéziszerszám akkumulátorát anélkül, hogy először elvinném a részét. Ezért úgy döntöttem, hogy alaposabban megvizsgálom az ügyet, és megtervezem a sajátomat. Egy dolog a másikhoz vezet, és végül úgy döntöttem, hogy magam is írok egy tanulságosat. Azt is elhatároztam, hogy nem részletezem a teszter felépítésének részleteit, mert mindenki eldöntheti, hogy milyen választást szeretne használni, például milyen méretű ellenállást kell használni, vagy szükség van -e PCB -re, vagy elég Veroboard, és rengeteg utasítás is található a telepítse az eagle -t, vagy hogyan készítsen NYÁK -t. Más szóval, a vázlatokra és a kódra fogok koncentrálni, valamint a tesztelő kalibrálására.

1. lépés: Előzmények - 1. verzió

Előzmények - 1. verzió
Előzmények - 1. verzió

A fenti az első verzió, amely az alábbiakban felsorolt 10V -os bemeneti támogatással (R12 & R17 & Q11 & Q12) rendelkezik.

Az első verziót többé -kevésbé a deba168 utasítása vette át (sajnos nem találom az utasítását a link megadására). Csak néhány apró változtatás történt. Ebben a verzióban volt egy 10 ohmos terhelési ellenállásom, amelyet egy mosfet vezérelt. Ez azonban néhány problémát hozott. Egy NiCd vagy NiMH cella tesztelésekor a szükséges időt könnyen meg lehetett mérni órákban, ha nem napokban. Egy 1500 mAh -s akkumulátor több mint 12 órát vett igénybe (az áram csak 120 mA volt). Másrészt az első verzió csak 10 V alatti akkumulátorokat képes tesztelni. A teljesen feltöltött 9,6 V -os akkumulátor pedig akár 11,2 V -os is lehet, amit a 10 V -os határ miatt nem lehetett tesztelni. Valamit tenni kellett. Először csak hozzáadtam néhány mosfetet és ellenállást, hogy a feszültségosztók több mint 10 V -ot engedjenek. De ez másfelől egy másik problémát is felvetett. Egy teljesen feltöltött 14,4 V -os akkumulátor akár 16,8 V -os tp teljesítményű is lehet, ami 10 ohmos ellenállással 1,68A áramot jelentett, és természetesen majdnem 30 W teljesítményveszteséget jelent a terhelési ellenállásból. Tehát alacsony feszültség esetén túl hosszú tesztidő és nagyfeszültségű túl nagy áram esetén. Nyilvánvalóan nem volt megfelelő megoldás, és további fejlesztésre volt szükség.

2. lépés: 2. verzió

Olyan megoldást akartam, ahol az áram bizonyos korlátok között marad az akkumulátor feszültségétől függetlenül. Az egyik megoldás a PWM és csak egy ellenállás használata lett volna, de én inkább pulzáló áram nélküli megoldást választottam, vagy a mosfet hő elvezetését. Így létrehoztam egy megoldást 10 feszültségrésszel, mindegyik 2V széles, 10 db 3,3 ohmos ellenállást és minden ellenálláshoz mosfetet használva.

3. lépés: Így alakult

Ez így alakult
Ez így alakult

Lehet vitatkozni azzal, hogy a mosfet feletti feszültségveszteség elhanyagolható, mert a mosfet ellenállása olyan alacsony, de a mosfet megválasztását az olvasóra bízom, és így az ellenállás akár 1 ohm felett is mehet, ahol elkezdi ügy. Az egyik változatban a megfelelő mosfet kiválasztása megszünteti az alacsonyabb pont mérésének szükségességét, de a 2 -es verziónál úgy döntöttem, hogy csak egy ellenálláson mérem a feszültséget, ami akkor fontos, hogy ténylegesen két mérési pont legyen. A választás oka pedig a Veroboard bekötésének egyszerűsége volt. Ez némi pontossági hibát ad hozzá, mivel az ellenálláson mért feszültség lényegesen kisebb, mint az összes ellenálláson mért. Az összetevők kiválasztásakor úgy döntöttem, hogy azt használom, ami már kéznél volt, vagy amit könnyen beszerezhettem. Ez a következő BOM -hoz vezetett:

  • Arduino Pro Mini 5V! FONTOS! Én 5V -os verziót használtam, és minden ezen alapul
  • 128x64 I2C OLED kijelző
  • 10 x 5W 3,3 Ohm ellenállás
  • 3 x 2n7000 mosfet
  • 10 db IRFZ34N mosfet
  • 6 x 10 kOhm ellenállás
  • 2 x 5 kOhm ellenállás
  • 16V 680uF kondenzátor
  • 1 régi CPU ventilátor

Az alábbiakat nem adtam hozzá a rajzokhoz

  • felhúzó ellenállások az I2C vonalakon, amelyek észrevettem, hogy stabilabbá tették a kijelzőt
  • távvezetékek
  • kondenzátor 5V -os vonalban, ami szintén stabilizálta a kijelzőt

A tesztelés során észrevettem, hogy a terhelési ellenállások nagyon felforrósodnak, különösen akkor, ha mind használatban vannak. A hőmérsékletet 100 Celsius fok fölé kell emelni (ami több mint 212 Fahrenheit fok), és ha az egész rendszert egy dobozban kell lezárni, akkor valamilyen hűtést kell biztosítani. Az általam használt ellenállások 3,3 ohm / 5 W, és a maximális áramnak körülbelül 2 V -nak kell lennie ellenállásonként, ami 2 V / 3,3 = 0,61 A, ami 1,21 W -ot eredményez. Végül hozzáadtam egy egyszerű ventilátort a dobozba. Leginkább azért, mert véletlenül volt egy régi CPU -ventilátorom.

Sematikus funkcionalitás

Elég egyértelmű és magától értetődő. A vizsgálandó akkumulátor az ellenállások sorozatához és a földeléshez van csatlakoztatva. A feszültségmérési pontok az akkumulátor csatlakozója és az első ellenállás. Ezután a feszültségosztókat arra használják, hogy a feszültséget olyan szintre csökkentsék, amely jobban megfelel az Arduino -nak. Egy digitális kimenettel választhatja ki az elválasztók 10V vagy 20V tartományát. A terhelés minden ellenállása egyenként földelhető a Mosfets segítségével, amelyeket közvetlenül az Arduino hajt. És végül a kijelző az Arduino I2C csapokhoz van csatlakoztatva. A sematikus J -ről nem sokat lehet mondani

4. lépés: A kód

A kód
A kód

Fent látható a kód durva működése. Nézzük meg közelebbről a kódot (az arduino ino fájlok csatolva vannak). Számos függvény van, majd a fő hurok.

Főhurok

Amikor a mérés kész, az eredmények megjelennek, és a végrehajtás ezzel véget ér. Ha a mérést még nem végezte el, először ellenőrizze, hogy melyik elemtípust választotta, majd a bemeneti feszültséget. Ha a feszültség meghaladja a 0,1 V -ot, akkor legalább valamilyen akkumulátort kell csatlakoztatni. Ebben az esetben egy alprogramot hívnak meg, hogy megpróbálja kitalálni, hogy hány elem van az akkumulátorban, hogy eldöntse, hogyan kell tesztelni. A cellák száma többé -kevésbé olyan információ, amelyet jobban ki lehetne használni, de ebben a verzióban csak soros interfészen keresztül jelentik. Ha minden rendben van, akkor a kisütési folyamat elindul, és a főhurok minden körében kiszámítják az akkumulátor kapacitását. A főhurok végén a kijelző ismert értékekkel van feltöltve.

Az eredmények megjelenítésének eljárása

A showResults függvény egyszerűen beállítja a kijelzőn megjelenő sorokat és a soros interfészre küldendő karakterláncot.

Eljárás a feszültségek mérésére

A függvény elején az Arduino Vcc -jét mérjük. Az analóg bemenetek segítségével mért feszültségek kiszámításához szükséges. Ezután az akkumulátor feszültségét 20 V -os tartomány segítségével mérik, hogy eldönthessék, melyik tartományt használják. Ezután kiszámítják az akkumulátor feszültségét és az ellenállás feszültségét is. Az akkumulátor feszültségmérései kihasználják a DividerInput osztály előnyeit, amely leolvasási és feszültségi módszerekkel megadja a nyers leolvasást vagy a kérdéses analóg bemenet számított feszültségét.

A használt értékek kiválasztásának menete

A selectUsedValues függvényben a cellák számát kitalálják, és az akkumulátor felső és alsó határait a lemerítési eljáráshoz kell használni. Ezenkívül a mérés megkezdettként van megjelölve. Ennek az eljárásnak a korlátai a globális változók elején vannak megadva. Bár lehetnek állandóak, és az eljáráson belül is meghatározhatók, mivel nem használják globálisan. De hát mindig van mit javítani:)

Az akkumulátor kapacitásának kiszámítása

A kisütési funkció gondoskodik az akkumulátor kapacitásának tényleges számításáról. Paraméterekként teszteli az akkumulátor feszültségének alsó és felső határait. A magas értéket nem használják ebben a verzióban, de az alacsony értéket használják a tesztelés leállításának eldöntésére. A függvény elején a használni kívánt ellenállások számát egy erre a célra létrehozott függvény segítségével határozzuk meg. A függvény visszaadja az ellenállás számát, és ezzel egyidejűleg elindítja a kisütést és visszaállítja a számlálót. Ezután mérik a feszültségeket, és az ismert ellenállásértékkel együtt használják az áram kiszámításához. Most, hogy ismerjük a feszültséget és az áramot, valamint az utolsó mérés óta eltelt időt, kiszámíthatjuk a kapacitást. A kisütési folyamat végén az akkumulátor feszültségét összehasonlítják az alsó határértékkel, és ha a határérték alá esett, akkor a kisütési fázis leáll, a mosfets zárva van, és a mérés késznek jelzi.

Eljárás a használandó ellenállások számának megállapítására

A selectNumOfResistors funkcióban a feszültség és az előre beállított értékek egyszerű összehasonlítása történik, és ennek eredményeként határozzák meg a használni kívánt ellenállások számát. A megfelelő mosfet kinyílik, hogy kihagyja az ellenállások egy részét. A feszültségnyílásokat úgy választják ki, hogy a maximális áram a kisülés során bármikor 600mA (2V/3.3Ohm = 606mA) felett maradjon. A függvény a felhasznált ellenállások számát adja vissza. Mivel a ventilátort ugyanabból a vezetékből hajtják, mint az első mosfetet, mindig ki kell nyitni, amikor a kisülés történik.

5. lépés: A mérő kalibrálása

A mérő kalibrálása
A mérő kalibrálása

A mérő kalibrálásához létrehoztam egy másik alkalmazást (mellékelve). Ugyanazt a hardvert használja. Kezdetben a korrekciós osztó értékei 1000 -re vannak állítva.

const int divCorrectionB10V = 1000; // osztó korrekciós szorzó a 10V tartományban const int divCorrectionR10V = 1000; // osztó korrekciós szorzó a 10V tartományban const int divCorrectionB20V = 1000; // osztó korrekciós szorzó a 20V tartományban const int divCorrectionR20V = 1000; // osztó korrekciós szorzó 20V tartományban

a readVcc () függvényben a kapott Vcc feszültség függ a függvény utolsó sorában az érték beállításától a visszatérés előtt. Általában az interneten 1126400L értéket talál a számításhoz. Észrevettem, hogy az eredmény nem volt helyes.

Kalibrálási folyamat:

  1. Töltse be a mérési alkalmazást az Arduino -ba.
  2. Láthatja az Arduino -ban (és a soros kimenetben, és ha a ventilátor forog), ha a terhelés be van kapcsolva. Ha igen, forgassa el az akkumulátor típusválasztó kapcsolót.
  3. Állítsa be a readuVCC () értékét a helyes eredmény érdekében. Vegyük a függvény által megadott értéket (ami millivoltban van megadva), és osszuk el vele a hosszú értéket. Megkapja a belső referencia nyers értékét. Most multiméterrel mérje meg a tényleges tápfeszültséget millivoltban, és szorozza meg a korábban kiszámított értékkel, és megkapja az új korrigált hosszú értéket. Esetemben a függvény 5288 mV -ot adott vissza, amikor a tényleges Vcc 5,14 V volt. 1126400/5288*5140 = 1094874 számítása, amelyet próbával finomítottam. Tegye be az új értéket a kódba, és töltse fel újra az Arduino -ba.
  4. Az analóg bemeneti ellenállásosztó korrekciós értékeinek beállítása egy állítható áramforrás használatával történik, amely a mérő bemenetének táplálására szolgál. A legegyszerűbb, ha 1V -tól 20V -ig terjedő feszültséget használ 1V -os lépésekkel, és rögzíti az eredményeket egy táblázatba. A táblázatban az átlagot vesszük. A korrigált értékek kiszámítása a következő képlettel történik: „nyers_érték*tartomány*Vcc/Vin”, ahol a nyers_érték a 10VdivB, 10VdivR, 20VdivB vagy 20VdivR érték, attól függően, hogy melyik korrekciót kell kiszámítani.

Nézze meg a táblázatot, hogyan nézett ki nekem. Az átlagokat csak a tartományon belüli értékekből számítják ki, majd ezeket az értékeket a tényleges mérőalkalmazásban állítják be.

Mint ez

const int divCorrectionB10V = 998; // osztó korrekciós osztó a 10V tartományban const int divCorrectionR10V = 1022; // osztó korrekciós osztó a 10V tartományban const int divCorrectionB20V = 1044; // osztó korrekciós osztó 20V tartományban const int divCorrectionR20V = 1045; // osztó korrekciós osztó 20V tartományban

Az ellenállás értékét úgy lehet beállítani, hogy feszültséget biztosítunk a bemenetre (pl. 2 V), átkapcsoljuk a denevér típusú kapcsolót (a terhelés érdekében), és megmérjük a bemenő áramot és az első ellenálláson lévő feszültséget, és elosztjuk a feszültséget az árammal.. Nekem a 2V 607mA -t adott, ami 2/0,607 = 3,2948 ohm -ot ad, amit 3,295 ohmra kerekítettem. Tehát most a kalibrálás megtörtént.

6. lépés: Utolsó megjegyzés

Egy fontos megjegyzés itt. Az akkumulátor és az ellenállások között feltétlenül minden csatlakozásnak tökéletes állapotban kell lennie. Volt egy rossz kapcsolatom, és azon tűnődtem, hogy miért kaptam 0,3 V -al kevesebb feszültséget az ellenállás rácsában, mint az akkumulátoron. Ez azt jelentette, hogy a mérési folyamat szinte azonnal véget ért az 1,2 V -os NiCd cellákkal, mert az alsó 0,95 V -os határértéket gyorsan elérték.

Ajánlott: