18650 Li-Ion Akku Kapazitätsmesser

liion_18650_holder

18650 Halter von nappen87 von Thingiverse

Ich habe kürzlich angefangen alte Akkus auszuschlachten und die 18650 Zellen zu sammeln. Mein Problem ist jedoch, dass ich die aktuelle Nennkapazität nicht kenne. Die ältesten Zellen sind über 11 Jahre alt und wurden lange nicht vernünftig gelagert. Diese stammen aus einem alten IBM T43 Laptop. Ebenso war der Akku nicht separat gelagert, sondern steckte noch immer am Laptop.
Also habe ich übers Wochenende einen 18650 Li-Ion Akku Kapazitätsmesser gebaut.

Schaltung

Die Steuerung und Berechnung der Kapazität übernimmt ein ATMega8. Für die Anzeige wird ein kleines 16×2 LC-Display verwendet. Da der ATMega bereits einen ADC eingebaut hat, wird die Spannung der Spannungsteiler über diesen gemessen. Um später im Programmcode den Lastwiderstand ein- und auszuschalten wurde ein N-Channel MOSFET verbaut.
Als Lastwiderstand habe ich einen 5 Ohm Widerstand verwendet.

 

 

 

 

Berechnung

Spannungsmessung
Für die Berechnung wird die Spannung der Batterie (Vbat) sowie die Spannung nach dem Lastwiderstand (Vshunt) benötigt. Dafür wird die Spannung an zwei Spannungsteiler, jeweils mit 10k Ohm Widerständen, vom ADC des ATMega8 gemessen. Die Widerstände sollten im besten Fall eine geringe Toleranz haben, denn auch bei nur ±5% können im schlimmsten Fall 10% Unterschied sein – bzw. 2k Ohm in meinem Fall.

Strommessung
Um die Stromstärke in einer Schaltung messen zu können, wird ein Messwiderstand benötigt, der von dem Strom durchflossen wird. Den Messwiderstand nennt man auch Shunt. An dem Shunt wird dabei ein Spannungsfall gemessen, der nach dem Ohmischen Gesetz auftritt:

U = Rshunt . I

Wenn der Widerstandswert des Shunts bekannt ist und die Spannung gemessen wurde, kann die Stromstärke berechnet werden.
Demnach ist der Strom

I = (Vbat – Vshunt) / Rshunt;

Ladungsberechnung
Die Kapazität ist dann das Produkt des Stroms über die verstrichene Zeit t.
Q = I x t

Programmierung

Zur Programmierung habe ich wiedermal Arduino verwendet. Zum flashen des ATMega8 habe ich meine kürzlich gebaute „Atmel Flash Station“ verwendet.
Der Mikrocontroller erkennt drei Zustände bei denen er nicht laden soll:

  1. Batteriespannung > 4.3V = Zelle ist überladen
  2. Batteriespannung < 2.9V = Zelle ist so gut wie leer und sollte nicht weiter entladen werden
  3. Errechnete Batteriespannung < 1 = Keine Batterie eingelegt
    (Diese Werte sind in den Variablen oben im Programmcode festgelegt)

Andernfalls wird die Kapazität alle vier Sekunden berechnet. Dazu wird der Durchschnitt vom ADC ausgelesen über 200ms und die Kapazität nach den vorherigen Formeln berechnet.

for (int i = 0; i < 100; i++) {
  sample1 = sample1 + analogRead(highPin);
  delay (2);
}
sample1 = sample1 / 100;
battVolt = 2 * sample1 * voltRef / 1024.0;


for (int i = 0; i < 100; i++) {
  sample2 = sample2 + analogRead(lowPin);
  delay (2);
}
sample2 = sample2 / 100;
shuntVolt = 2 * sample2 * voltRef / 1024.0;

millisPassed = millis() - previousMillis;
current = (battVolt - shuntVolt) / shuntRes;
mAh = mAh + (current * 1000.0) * (millisPassed / 3600000.0);

Die Informationen werden auf einem Standard HD44780 LCD angezeigt über die LiquidCrystal Library. Dazu kommt noch eine kleine Spielerei mit zwei Benutzerdefinierten Zeichen, die dem Nutzer symbolisieren ob die Zelle entladen wird oder leer ist.

Mein Programmcode ist für einen Nachbau des Projekts in meinem Git verfügbar: https://git.gurkengewuerz.de/Gurkengewuerz/liiontester

 

Das fertige „Produkt“

Mit dem End­er­geb­nis bin ich sehr zufrieden, nur der Druck vom Gehäuse hätte etwas schöner sein können.

M.I.D.I. Kontroller Demo

Schreiben Sie einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.