Üdvözlök mindenkit. Aki olvasta a tervemet, hogy a Keweisi kapacitás mérővel mérem majd meg a 18650-es akksik kapacitását, az tudja, hogy inkább egy Arduino-s megoldást választottam, mert pontosabb eredményt ad. Nem két napomba került, mire megtaláltam mi kell nekem, hasonló projekteket nézegetve az interneten. A kóddal is meggyűlt a bajom, de már működik minden ahogy kell. Ezzel a megoldással lehet 1,2 V-os NI-MH, NI-CD és 3,7V-os LI-ION vagy Polimer akksik kapacitását is mérni. Igazából aminek kisebb a feszültsége mint 5V, arra jó a kód és az alkatrészek.
A hozzávalók:
-Egy mikrokontroller, jelen esetben egy Arduino Duemilanove, ami nekem van. Természetesen nem egy eredeti Olasz gyártmány, hanem egy kínai utánzat. Már nem gyártják szerintem, csak az Uno-t és utánzatait, de nem változott rajta kb semmi. Ha valakinek más mikrokontrollere van akkor a bekötés is biztos más lesz.
-egy ellenállás. Na legalább 5W-os legyen, hogy bírja a terhelést. Én egy 3,9 OHM-os és egy 5,9 OHM-os ellenállást vettem. Minél kisebb értékűt építünk be, annál nagyobb árammal meríti az akksit. Miért kell legalább 5W-os? Mert ha a feszültség mondjuk 4 Volt és 1A-ral akarom meríteni az akksit, akkor az 4W teljesítmény ami hővé alakul az ellenálláson. Az OMH törvény alapján 4V-nál és 3,9 OHM-os ellenállásnál kb 1A-rel meríti az akksit majd. Persze ahogy csökken az akksi feszültsége az áramerősség is csökken. Ha viszont az 5,9 OHM-os ellenállást rakom be, akkor 4V-nál 677mA-rel fogja meríteni az akksit. A 4V-ot a teljesen feltöltött Li-ion cellák miatt használom. Ez csak egy példa. De mondjuk egy AAA 1,2V NI-MH akksinál így alakulnak a számok: a 3,9 OHM-os ellenállással 307mA-rel fogja meríteni, amit elvileg el is bírnak. Túl nagy árammal nem szabad a NI-MH-kat meríteni azért, mintha ezt olvastam volna valahol. Úgy tűnik nyugodtan lehet őket 1A-rel is meríteni. Mindenki ki tudja számolni ő mekkora áramerősséggel merítene és mit.
-egy MOSFET. Amit én használok az egy három lábú, IRLU8256-os. Ezen keresztül lehet az áramkört nyitni és zárni az Arduinoval. Mintha egy kapcsoló lenne, csak a kód alapján nyit vagy zár. Li-ion esetében pl. 3V-nál bontja az áramkört, nehogy túlmerítse a cellákat.
A fontosabb tulajdonságok: Vds=25V, ez legyen több mint 5V, így bírja a feszültésget. Rds=kb. 5mOHM, itt a minél kisebb érték a jobb, hogy minél kisebb legyen a FET ellenállása. Vgs. Ennek az értéknek elég alacsonynak kell lennie, hogy az Arduino 5V feszültségével aktiválni tudja a FET-et.
-egy merítendő akkumulátor. Lehet venni foglalatot neki amibe teszi az ember, de az pénzbe kerül meg venni kell. Ráadásul nagyon nem is kaptam alkatrészboltban 18650-es foglalatot. Tehát én mágnesekkel rögzítem az akkuhoz a kábeleket.
Ennyi. Még olvastam máshol, hogy a MOSFET-en is mérik a feszültséget és ha van rajta veszteség, akkor azt is felhasználják a kalkulációhoz. Nekem itt mindig 0-t mért az arduino, úgyhogy kihagytam.
Figyelem! Az ellenállás, merítés közben annyira felmelegszik, hogy éget. Persze nem ég el, de forró lesz. Arra figyeljünk, ha megszakítjuk a kódot vagy kihúzzuk az Arduinot, lehet, hogy a MOSFET nyitva marad egy ideig és meríti tovább az akkumulátort. Soha ne hagyjuk őrizetlenül. Természetesen semmilyen felelősséget nem vállalok a károkért ami a megépítés közben vagy után okozódik.
Ha nem csatlakoztatunk akkumulátort az áramkörhöz és elindítjuk a kódot, teljesen fals feszültségértékeket fog mérni.
A képen látható hogyan kell bekötni az alkatrészeket. Itt két sorba kötött akkumulátor van a képen, de csak mert nem volt más fotó a programban. Én egyszerre egyet szoktam meríteni.
Az Arduino kód:
#define MIN_VOLTAGE 950 // mV ez alá ne essen a feszültség LI-ionnál: 3000, NI-MH-nál:950 int FETPin = 13; // kiválasztjuk a használni kívánt digitális kimenetet a LED-nek és a FET-nek int BatVoltage = 0; int STOPI = 0; float loadCurrent, TotalCurrent, TotalCurrent2, onescurrent; int sec = 1; void setup() { unsigned long PrevTime; Serial.begin(9600);// serial port megnyitása és az adatok küldése a PC-nek pinMode(FETPin, OUTPUT); digitalWrite(FETPin, LOW); Serial.println("6"); //visszaszámlálás a merítés kezdetéig, én itt szoktam csatlakoztatni az akkumulátort delay(1000); Serial.println("5"); delay(1000); Serial.println("4"); delay(1000); Serial.println("3"); delay(1000); Serial.println("2"); delay(1000); Serial.println("1"); delay(1000); Serial.println("START!"); int val1 = analogRead(0); //a kiinduló feszültség megmérése BatVoltage = map(val1, 0,1023,0,5000);; Serial.print("Starting voltage in mV="); Serial.println(BatVoltage + 40); //itt 40-et hozzáadtam a mért értékhez mert az Arduino ennyivel kevesebbet mért } void loop() { if(STOPI != 1){ digitalWrite(FETPin, HIGH); //aktiválódik a meríto áramkör int val1 = analogRead(0); BatVoltage = map(val1, 0,1023,0,5000);; loadCurrent = (BatVoltage + 40) / 3.9; //a végén az osztásnál az ellenállást amit beraktunk kell pontosan beírni OHM-ban onescurrent = loadCurrent / 3.6; //itt az egy másodpercre eso áramerosséget számoljuk ki TotalCurrent = onescurrent + TotalCurrent; Serial.print(BatVoltage + 40); Serial.print(" mV I="); Serial.print(loadCurrent); //a pillanatnyi áramerosség Serial.print(" mA Time="); Serial.print(sec); Serial.print(" s Totalcurrent="); Serial.print(TotalCurrent / 1000); // a teljes mért kapacitás az ido függvényében Serial.println(" mAh"); sec = sec + 1; if(BatVoltage + 40 <= MIN_VOLTAGE){ STOPI = 1; Serial.println("Voltage is lower then the set min Voltage STOP!"); } } else{ digitalWrite(FETPin, LOW); } delay(1000); // egy másodpercenként új mintát veszünk }
A mért kapacitás érték persze csak tájékoztató értékű, mivel pl. minél nagyobb áramerősséggel merítünk egy akkumulátort, annál kevesebb kapacitást tud leadni.
Nincsenek megjegyzések:
Megjegyzés küldése