Akkuladegerät 150..7000 mAh mit PIC16F876

für einzelne NC- oder NMH-Zellen



zurück zu Projekte , PIC-Prozessoren , Elektronik , Homepage


Ein Akkuladegerät für NiCd- und NIMh-Zellen von 150 mAh bis 7000 mAh
- Ladestrom 50 mA..2,3 A
- Ladedauer max 4 Stunden
- Ladeendeerkennung Delta-Peak
- Zellenzahl 1



Programme: 
  • Entladen
  • Laden
  • Topping-Laden
  • Erhaltungsladen
Controller des Ladegeräts

Einleitung
Das ist die Erweiterung des einfachen Akkuladegerätes auf verschiedene Akkukapazitäten.
Die Software und der Controller sind weitestgehend  identisch.
Auf dieser Seite werden nur die Änderungen gegenüber dem einfachen Gerät erläutert. Alle grundlegenden Informationen bitte ich, der anderen Seite zu entnehmen.

Dieses Gerät ist nicht dafür gedacht, ständig alle im Haushalt anfallenden Akkus zu laden (dazu ist es zu aufwändig), vielmehr ermöglicht es neben der Ladung eine Analyse des Zustandes einzelner Akkuzellen (noch vorhandene Kapazität wird bestimmt) sowie die Akkupflege.


Anforderungen
Ein Akkuladegerät sollte in der Lage sein,

  1. mit einzelligen NiCd- und NiMh-Akkus umzugehen
  2. einen Akku bis zu seiner Entladespannung zu entladen
  3. einen Akku maximal zu laden, ohne ihn zu überladen
  4. einen Akku in max. 4 Stunden zu laden
  5. die in den Akku geladene oder aus ihm entladene Energiemenge zu messen und anzuzeigen
  6. Akkus von 150 mAh bis 7000 mAh zu laden/entladen.
Dieses Gerät erfüllt alle diese Forderungen.
Ziel ist es nicht, nun alle Akkus einzeln mit diesem Gerät zu laden, sondern einzelnen Zellen zu pflegen und auszumessen.


Schaltung
Controller-Platine Das Herz der Schaltung ist ein PIC16F876, der an PortB mit einem LCD-Display (1x16) und einem Rotary-Encoder versehen ist. PortA dient der Spannungsmessung und PortC der Steuerung der Ladeelektronik. Mit dem PWM-Ausgang RC2 wird die Stärke des Lade/Entladestroms eingestellt.

Aufgebaut ist der 16F876 auf einer universellen Controller-Platine, die im linken Bild zu sehen ist.Auf einer 75 x 100 mm großen Platine befindet sich der Sockel für den 16F876 sowie Anschlüsse für

  • PortA
  • PortB
  • PortC
  • ICSP
  • Tastatur (4x3 Tasten am PortB)
  • LCD-Dotmatrixdisplay (mit Kontrastregler) (am PortB)
  • Rotary Encoder (am PortB)
Ebenfalls vorhanden ist ein RS232-Treiber (MAX232) mit Sub-D-9-Buchse, und ein Gleichricher/Spannungsstabilisiator, der es ermöglicht, die Platine aus jeder AC/DC-Spannungsquelle von 9V..15V zu speisen.

Ein Netzteil liefert +5V / 2,5 A (Vdd - Vss) für den PIC und die Ladeelektronik. Eine präzise Stabilisierung von Vdd = +5V ist nötig, da diese Spannung auch als Referenz für den ADC des PIC benutzt wird. (Entscheidend ist nicht die exakte Einhaltung des Wertes 5V als vielmehr seine Konstanz. Prinzipiell ist eine leicht Überstannung (bis max. 6V) sogar vorteilhaft.)
 
Der PIC steuert eine Konstantstromquelle, die den Akku mit ca. C/3 lädt, und eine Entlade-Konstantstromsenke, die den Akku mit C entlädt. (C ist ein Strom, der der Akkukapazität/h entspricht, also z.B. 700mA für einen 700mAh-Akku.)

Die Konstantstromquelle zum Laden des Akkus ist mit einem OPV (LM358) aufgebaut, der einen P-Kanal MOSFET (IRF9540) ansteuert. Er regelt den Strom so, dass über den Messwiderstand R19 (0,47 Ohm) eine Spannung abfällt, die zu der Spannung am positiven Eingang des OPV identisch ist

Die Entladeschaltung ist eine Konstantstromsenke, die den gleichen OPV benutzt, der diesmal jedoch einen N-Kanal logic-level-MOSFET (SMP60N03-10L) ansteuert, der den Akku über die Messwiderstände R16..R18 entlädt. Er regelt den Strom so, dass über die Messwiderstände (0,157 Ohm) eine Spannung abfällt, die zu der Spannung am positiven Eingang des OPV identisch ist. Dadurch ist garantiert, dass der Entladestrom immer drei mal so groß ist wie der Ladestrom. 

Sowohl Ladeschaltung wie auch Entladeschaltung werden normalerweise vom PIC über D1&D2 blockiert, und erst beim Laden oder Entladen eingeschaltet.

300 mAh ... 7000 mAh  Ladeadapter
Ladeadapter: Leiterseite des Prototyps Die Stromstärke stellt der PIC mit dem Tastverhältnis eines PWM-Signals ein, das von R1&C1 in eine Gleichspannung gewandelt wird. Mit R2 wird die Stromstärke einmalig abgeglichen. Dieser Abgleich wird durch die Software unterstützt.

Durch die hohe Verstärkung des OPV neigen die Stromquellen zwangsläufig zum Schwingen. Eine Unterdrückung der Schwingungen durch einen Gegenkoppelwiderstand am OPV ist durch die unterschiedlichen Arbeitspunkte beim Laden bzw. Entladen nicht möglich. Deshalb wurden C2&C3 zur Schwingungsunterdrückung eingesetzt.

Die Akku-Zellenspannung wird mit dem ADC des PIC überwacht.
Die Zellenspannung wird dem PIC auf zwei Wegen zugeführt. An RA0 liegt die Zellenspannung direkt an und kann mit einer Auflösung von ca. 2,5 mV gemessen werden. Um den Ladeschlusspunkt von NiMH-Akkus bestimmen zu können ist das aber nicht genau genug. Deshalb 'vergrößert' ein OPV das Spannungsfenster von 1,0V ... 1,75V auf 0V .. 3,75V. Diese 'Lupenspannung' wird an RA1 mit ca 1mV Auflösung gemessen. (LSB = 1,03 mV)

Erwärmung:
Der IRF9540 setzt maximal 6 W in Hitze um, der SMP60N03 maximal 2W und die Lastwiderstände R16..R19 maximal je 3 W. Deshalb sollte der IRF9540 einen Kühlkörper mit einem TK von max 10 K/W und der SMP60N03 einen Mini-Kühlkörper bekommen. R16..R19 sind 5W-Typen.

Aufbau:
Der Ladeadapter wurde auf einer 80 mm x 100 mm großen Platine aufgebaut, und mit Kabeln versehen, deren Stecker in die 10-poligen Steckverbinder der Controllerplatine oder der 16F876-Testplatine passen. (Port A und C).

An den Display-Anschluss (Port B) der Controllerplatine/Testplatine wurde (mit einer LCD-Tastatur-Platine) ein 1-zeiliges Dotmatrix-Display angeschlossen. Ebenfalls am Port B ist der Rotary-Encoder angeschlossen.

Als Gehäuse verwende ich ein altes externes SCSI-Gehäuse mit Netzteil.

Beide Dioden D1&D2 müssen aufgrund der geringen Betriebsspannung von nur 5V Shottky-Dioden sein.
Beide MOSFETs sind für diesen Zweck völlig überdimensioniert, ich benutze was gerade in meiner Bauelementekiste ist. Sie können durch billigere Typen (Mindestforderung 10V, 10W, 3A) ersetzt werden. Der N-Kanal MOSFET (T3) sollte aber ein logic-level-Typ sein.

Ladeadapter: Bestückungsseite des Prototyps


Berechnung der geladenen/entladenen Energie
Der Energiezähler ist ein 24 Bit-Softwarezähler dessen obere 16 Bit der Energie in mAh entsprechen. Das LSB hat also eine Wertigkeit von 1/256 mAh = 0,0004 mAh.

Das Ladeprogramm arbeitet in einem 6,75 Sekunden-Rythmus. Bei 33,3 mA-Ladestrom (100 mAh-Akku) wird dem Akku in 6,75 s genau 0,0625 mAh (also 1/16 mAh) zugeführt.
Ein 24-Bit-Zahler wird nach jedem Ladezyklus um einem Wert erhöht, der dem Ladestrom in 100/48 mA entspricht (für 200 mA also um 96, für 1 A folglich um 480). Die oberen 16 Bit des Zählers enthalten dann die geladene Energie in mAh. Werte bis 60 Ah sind auf diese Weise zählbar. Das ist für 7000 mAh-Akkus ausreichend :-)

Das Entladeprogramm arbeitet in einem 2,25 Sekunden-Rythmus. Bei 100 mA-Entladestrom wird dem Akku in 2,25 s genau 0,0625 mAh (also 1/16 mAh) entnommen.
Ein 24-Bit-Zahler wird nach jedem Entladezyklus um einem Wert erhöht, der dem Entladestrom in 300/48 mA entspricht (für 600 mA also um 96, für 3 A folglich um 480). Die oberen 16 Bit des Zählers enthalten dann die entnommene Energie in mAh. Werte bis 60 Ah sind auf diese Weise zählbar. Das ist für 7000 mAh-Akkus ausreichend.

Die Energieberechnung erfordert das Einstellen der Ladeströme in 2,0833 mA-Stufen (Entladestrom ist immer 3 mal so groß). Der Akkutyp kann also in Stufen von 6,25 mAh ausgewält werden. Die Software erlaubt nur ein Einstellen in der sinnvollen Stufung von 50 mAh. Nur in diesen Stufen lässt sich auch die von der PWM erzeugte Strom-Steuerspannung einstellen.


Kalibrierung
Im Ladeadapter gibt es zwei Potentiometer (R2 und R4), die präzise eingestellt werden müssen. Diese 'Kalibrierung' wird durch die Software des PIC ein wenig unterstützt.

Einstellen der Referenzspannung von 2,56 V - 3 Varianten

Am Potentiometer R4 muss die Referenzspannung Uref auf genau 2,56V eingestellt werden. Dazu bieten sich 3 Varianten an, von denen Variante 1 am genauesten und Variante 3 am ungenauesten ist. Die Präzision dieser Einstellung sollte man nicht überbewerten, da sich ein Messfehler von 5% nicht nennenswert auf die Funktion des Ladegerätes auswirkt.

  1. Die Einstellung lässt sich mit einem digitalen Voltmeter am genauesten erledigen, welches dafür an den Uref-Anschluss angeklemmt wird. Dann wird R4 so eingestellt, dass am Voltmeter 2,56 V angezeigt wird.
  2. Wer es auch ohne präzises Digitalvoltmeter genauer haben möchte kann wie folgt vorgehen:

  3. Im Akkulader-Programm wird der Menuepunkt 'AD589' aufgerufen. Nun misst der ADC kontinuierlich die Spannung des AD589, die präzise 1,235V beträgt. Nun muss man nur noch die Stellung des Potentiometers R4 so weit verändern, dass am Display eine Spannung von 1235 mV angezeigt wird. Der Fehler sollte sich somit auf <2% reduzieren lassen.
  4. Alternativ kann man im PIC den Menüpunkt 'U-ref' aufrufen.  Daraufhin zeigt das Display kontinuierlich die Referenzspannung (in Millivolt). Durch Verändern von R4 kann die Referenzspannungsanzeige auf 2560 mV eingestellt werden. Die Genauigkeit dieser 3. Variante hängt von der Genauigkeit der Betriebsspannung ab, die in diesem Fall exakt 5,0 V betragen muss.
Einstellen der Stromquellen bei 100 mA
Dieser Schritt darf erst nach Einstellung der Referenzspannung (2,56V) erfolgen!
Am Potentiometer R2 ist der Strom der Konstantstromquellen einmalig einzustellen. Dazu ruft man im PIC den Menüpunkt 'Kal 0,1A' auf. Daraufhin wird die Ladestromquelle auf 100 mA eingestellt. Wird an den Akkuklemmen ein Amperemeter angeschlossen, kann man den Stromwert direkt prüfen, und daraufhin R2 so verändern, dass exakt 100 mA fließen.
Alternativ kann man während der 'Kalibrierung 0,1A' die Akkuklemmen auch mit einem 10-Ohm-Widerstand überbrücken. Im Display wird ein Spannungswert angezeigt. R2 ist soweit zu verändern, dass die angezeigte Spannung genau 1050 mV beträgt. Die Toleranz des Widerstandes wirkt sich natürlich auf die Genauigkeit der Einstellung aus. Deshalb sollte man einen Widerstand geringer Toleranz verwenden. (Metallschicht-Widerstand 1%)

Prüfung der Stromquellen bei 1 A
Nach der 'Kalibrierung 0,1A' sollten die Stromquellen in der Lage sein, alle Ströme exakt zu erzeugen. Zur Probe kann man im PIC den Menüpunkt 'Kal 1A' aufrufen. Daraufhin wird die Ladestromquelle auf 1 A eingestellt. Wird an den Akkuklemmen ein Amperemeter angeschlossen, kann man den Stromwert direkt prüfen.
Alternativ kann man während der 'Kalibrierung 1 A' die Spannung über R19 mit einem Digital-Voltmeter messen. Diese muss 470 mV betragen, wenn die Akkuklemmen kurzgeschlossen werden. Die Spannungsanzeige im Display sollte bei der 'Kalibrierung 1A' nicht verwendet werden. Sie ist durch Übergangswiderstände stark fehlerbehaftet, und wird deshalb mehr als 470mV anzeigen.
Da Nichts vollkommen linear funktioniert, wird der Strom in der bei 'Kalibrierung 1A' warscheinlich etwas kleiner als 1A ausfallen. Durch abwechseldes Einstellen des 100-mA-Stroms und des 1-A-Stroms ließ sich bei mir eine Position von R2 finden, in der der Stromfehler in jedem Fall unter 3% liegt.


Menue des Akkuladegeräts

Nach dem Einschalten stehen 10 Menuepunkte zur Wahl, die durch Drehen des Rotary-Encoders ausgewählt und durch drücken dessselben (länger als 0,25 s drücken!) gestartet und wieder verlassen werden können. Zur normalen Arbeit werden nur die ersten 4 Menuepunkte benötigt, die anderen dienen Test und Kalibrierfunktionen.

Während der Lade- und Entlade-Programme kann durch Drehen des Rotary-Encoders zwischen den folgenden angezeigten Messwerten umgeschaltet werden:

Display Bedeutung Erläuterung
Akkutyp Akkutyp einstellen
  • Wahl der Akkukapazität zwischen 150 mAh und 7000 mAh
  • Beim Start eines Lade- bzw Entladeprogramms wird dieser Wert auch im EEPROM gespeichert.
Laden Laden des Akkus
  • Laden des Akkus mit C/3
  • falls am Beginn des Ladens die Akkuspannung unter 0,4V liegt, wird bis zu 2 Stunden lang versucht, die Akkuspannung durch Laden mit C/10 auf 0,4V zu heben. Gelingt das nicht, ist der Akku defekt.
  • Nachdem der Akku voll geladen wurde, folgt ein Topping-Laden mit C/10 für 2 Stunden
  • Abschließend folgt ein Erhaltungsladen mit C/40 ohne zeitliche Begrenzung
Entladen Entladen des Akkus
  • Entladen des akkus bis zur Zellenspannung von 1V
Ent/Lade erst Entladen, danach Laden des Akkus
  • Entladen des akkus bis zur Zellenspannung von 1V
  • Laden entsprechend dem Ladeprogramm (Beleben, Laden Toppen, Erhalten)
Spannung Anzeigen der Akkuspannung
  • Anzeige der Spannung am Akkuanschluss in Millivolt
  • als ADC-Referenzspannung wird dabei Uref=2,56V verwendet
U-Lupe Anzeigen der Lupenspannung
  • Anzeige des dezimalen ADC-Ergebnisses bei Messung der Sapnnung am OPV-Ausgang UL
  • Als ADC-Referenz dient dabei Uref=2,56V 
U-ref Anzeigen der Referenzspannung
  • Anzeige der Referenz-Spannung Uref (in Millivolt), vom Poti R4
  • Als ADC-Referenzspannung wird dabei Vdd=5V verwendet
  • Nur wenn Vdd=5V dann wird 256mV angezeigt, ansonsten weicht der Anzeigewert ab
Kal   1A Kalibrierung 1A
  • Es wird an den Akkuklemmen ein Strom von 1A erzeugt
  • Die Spannung an den Akkuklemmen wird angezeigt (in Millivolt)
  • Als ADC-Referenz dient Uref=2,56V
Kal 0.1A Kalibrierung 0,1A
  • Es wird an den Akkuklemmen ein Strom von 100mA erzeugt
  • Die Spannung an den Akkuklemmen wird angezeigt (in Millivolt)
  • Als ADC-Referenz dient Uref=2,56V
AD589 Anzeigen der Spannung des AD589
  • Es wird die Spannung des AD589 (1,235V) gemessen und angezeigt (in Millivolt)
  • Als ADC-Referenz dient dabei Uref=2,56V
  • Die Anzeige beträgt genau 1235mV , wenn Uref auch genau 2,56V beträgt.

Zur Realisierung wird u.a. auf folgende Unterprogramme zurückgegriffen:


Entladeprogramm:
Um dem viel diskutierten Memmoryeffekt aus dem Wege zu gehen, sollten insbesondere NiCd-Akkus vor dem Laden entladen werden. Dazu werden sie mit einem Strom belastet, der ihrer Nennkapazität C entspricht (alo ein 750 mAh-Akku mit 750 mA). Die Entladung wird beendet, wenn die Zellenspannung 1,0 V erreicht hat. Während der Spannungsmessung, wird die Entladung kurzfristug unterbrochen.

  1. Einschalten der Entladeschaltung für 2,25 Sekunden
  2. 5 ms Pause
  3. Anzeigen der entnommenen Energiemenge
  4. Messen der Zellenspannung
  5. falls Spannung unter 1V liegt, dann das Entlade-Programm verlassen: zum Ladeprogram gehen
  6. ansonsten zurück zu Punkt 1
Ladeprogramm:
Falls die Akkuspannung unter 0,4V liegt wird zuerst das Belebungs-Programm aufgerufen. Dann geht es im Ladeprogramm wie folgt witer.
Der Akku wird mit einem Strom geladen, der 1/3 seiner Nennkapazizät entspricht. dabei steigt seine Zellenspannung an. Ist der Akku voll, stagniert seine Zellenspannung und beginnt schließlich zu fallen. Das kann zum Erkennen des Ladungsendes genutzt werden. Zum Messen der Zellenspannung muss das Laden unterbrochen werden.
Außerdem erwärmt sich ein voller Akku, wenn er weiter geladen wird, auch das kann genutzt werden, um den Ladevorgang zu beenden (tu ich aber noch nicht).
Schließlich sollte es nicht länger als 4 Stunden dauern einen Akku mit 1/3*C zu laden. Nach dieser Zeit sollte die Ladung also auch abgebrochen werden.
  1. falls die Zellenspannung unter 0,4V liegt, dann zum Belebungsprogramm gehen
  2. sind schon 4 Stunden vorbei?
  3. wenn ja: dann STOP TIMEOUT
  4. Einschalten der Ladeschaltung für 6,75 Sekunden
  5. 5 ms Pause
  6. Anzeigen der geladenen Energiemenge
  7. Messen der Zellenspannung
  8. falls Spannung fällt, dann das Lade-Programm verlassen: zum Topping-Programm
  9. ansonsten zurück zu Punkt 1
Belebungs-Programm:
Falls ein Akku unter 0,4V entladen ist, wird versucht ihn mit diesem Programm wieder zu aktivieren. Dazu erfolgt eine Ladung mit C/10. Sobald der Akku 0,4V erreicht hat, wird zum Ladeprogramm gewechselt. Hat der Akku nach 2h keine 0,4V erreicht, ist er defekt.
  1. Einschalten der Ladeschaltung für 250 ms Sekunden
  2. 750 ms Pause
  3. sind 2 Stunden vorbei? Wenn ja, dann STOPP. Der Akku ist defekt
  4. Messen der Zellenspannung
  5. Liegt die Zellenspannung über 0,4V, dann das Belebungs-Programm verlassen: zum Ladeprogramm
  6. ansonsten zurück zu Punkt 1
Topping-Programm:
Um einen Akku maximal zu laden, kann er nach dem Laden noch eine Topping-Ladung bekommen. Dazu wird er 2 Stunden lang mit 1/10 seiner Kapazität geladen.
  1. Einschalten der Ladeschaltung für 250 ms Sekunden
  2. 750 ms Pause
  3. sind 2 Stunden vorbei? Wenn ja, dann das Lade-Programm verlassen: zum Erhaltungslade-Programm
  4. ansonsten zurück zu Punkt 1
Erhaltungslade-Programm:
Um den fertig geladenen Akku vor Selbstentladung zu schützen, bis er aus dem Ladegerät genommen wird, kann mit 1/40 seiner Nennkapazität C eine Erhaltungsladung durchgeführt werden.
  1. Einschalten der Ladeschaltung für 75 ms Sekunden
  2. 1 Sekunde Pause
  3. zurück zu Punkt 1



Mechanischer Aufbau
 
anklicken zum Vergrößern Das Gerät wurde in ein altes SCSI-2-Gehäuse eingebaut. Solche Gehäuse sind gebraucht für ein Butterbrot (z.B. bei ebay) zu bekommen, da der SCSI-2-Standard mit seinen alten Steckverbindern schon so gut wie ausgestorben ist. Somit hat man ein billiges, stabiles Gehäuse mit einem leistungsfähigen Schaltnetzteil. Die auf der Controllerplatine integrierte 5V-Versorgung wird nicht benötigt (ist im obrigen Schaltplan auch folgerichtig nicht enthalten).

Die 5,25-Zoll-Frontblende trägt Das LCD-Display, den Rotaryencoder und die beiden Bananenbuchsen.

Die drei linken Bananenbuchsen stellen lediglich die 5V und 12V des Schaltnetzteils extern zur Verfügung.


Mögliche Verbesserungen
Bei Erhöhung der Speisespannung könnten auch mehrzellige Akkus geladen werden. Allerdings benötigt dann der PIC eine eigene 5V-Stabilisierung für Vdd, und der Speisewiederstand für den B589 ist anzupassen. Außerdem muss dann die Akkuspannung über einen Spannungsteiler dem ADC und dem OPV zugeführt werden.

Auf der Suche nach einem Netzteil fiel  mir im Keller ein altes externes SCSI-Gehäuse in die Hand. Das ist ein geeignetes Gehäuse für das Akkuladegerät, und enthält ein Schaltnetzteil für 5V / 6A und 12V / 3A. Damit ließe sich der Akkulader zu einem Akkupacklader bis zu 7 Zellen a 9000 mAh oder zu einem Einzelzellenlader bis zu 18000mAh oder zu einem Sinterzellenschnellader bis zu 2400mAh erweitern.

Die Schaltung besitzt noch keinen Verpolschutz. Ein falsch herum eingesetzter Akku kann (wenn auch nur theoretisch) den Eingang RA0 des PIC und den OPV beschädigen. Das Problem lässt sich durch den Einsatz von 2 Schutzdioden beheben.

Die Spannungsmessung könnte einfacher (ohne OPV) und genauer (0,4mV Auflösung bei 10 Bit im Bereich von 1,2 bis 1,6 V) erfolgen, wenn man anstelle eines 16F876 einen 16F628 verwendet, und mit dem Komparator einen 10-Bit-Delta-Sigma-ADC aufbaut. Außerdem kostet der 16F628 nur die Hälfte des Preises des 16F876.
Der kleinere RAM des 16F628 würde aber eine Verkleinerung des FIR-Filters auf 48-Stufen nötig machen. Das sollte aber reichen. Eng wird es mit der geringen Anzahl an freien I/O-Pins beim 16F628. Die Kalibrierung der Spannungsmessung würde komplizierter werden.

Für Freunde der Tasten, sollte alternativ zum Rotary-Encoder eine Bedienung über drei Tasten vorgesehen werden.

Eine unabhängige Einstellung von Lade- und Entladestrom wäre durch die Nutzung beider PWM-Ausgänge des 16F876 möglich.



Programmlisting



zurück zu Projekte , PIC-Prozessoren , Elektronik , Homepage
Autor: sprut
erstellt: 03.02.2003
letzte Änderung: 11.04.2004