Home ==>
Power supply ==> Akku-Ladegerät
Ungetestet und unfertig! Mit Vorsicht zu
genießen!
Ein Akkupack-Lader für 4,8V-NiMH-Akkupacks mit Mikrocontroller und LCD
So, oder so ähnlich, sehen NiMH-Akkupacks aus: vier Zellen nacheinander
geschaltet, und es kommen 4,8V heraus (linkes Bild: hinten sind auch noch
zwei!).
Oder auch nicht. Wenn die Akkus nämlich leer sind, kommt halt auch nix
mehr raus. Und man muss sie neu aufladen. Dazu kann kann einfach ein
regelbares Netzteil auf 80 (für 800-mAh-Akkus) oder 200 mA (für
2000-mAh-Akkus) strombegrenzen und den Akkupack für genau 10 Stunden
dranstöpseln.
Was passiert, wenn noch 400 mAh - oder wieviel auch immer - drin waren?
Oder wenn man das Abstöpseln nach 10 Stunden vergisst und die
Akkus 24 Stunden lang gebraten werden? Nun, dann kann man die
15 Euro, die der Akkupack gekostet hat, in die Wertstoff-Tonne kloppen
(nein, besser in die Batterie-Sammelstelle damit, wegen dem vielen Nickel
darin).
Damit das alles nicht passiert, braucht man ein intelligentes Ladegerät:
eines, das den Akku zuerst kontrolliert entlädt und dann ebenso
kontrolliert mit den richtigen mAh volllädt. Und das Beste an diesem
hier ist: man kann immer genau sehen, wieviel noch drin war und wie lange
es noch dauert, bis das Laden fertig ist. Neben einer grünen LED (die
bei angeschlossenem Akku leuchtet, gibt es eine gelbe (die beim Entladen
angeht) und eine rote (die beim Laden angeht).
Die LCD zeigt noch mehr an: die Spannung am Akkupack in Millivolt, den
Entlade- und Ladestrom in mA und die Entlade- und Ladekapazität in mAh.
Also: volle Transparenz und Kontrolle.
Die Schaltbilder, der Aufbau und weitere Zeichnungen sind in der
LibreOffice-Draw-Datei hier enthalten.
Berechnungen gibt es in der LibreOffice-Calc-Datei
hier zum Download. Diese enthält auch
die Rechenschritte für den Bleiakku-Lader
hier.
1 Schaltbild
Das ist die Hälfte der Miete: die Entlade- und Lademimik und die
Aufbereitung der Messwerte. Das Ganze geht an eine sechspolige Verbindung
zum TN24-LCD Modul. Das ist
hier
genauer beschrieben.
Das Trafo-Netzteil links macht die Ladespannung von ca. 10 Volt. Der
Spannungsregler 78L05 macht daraus die 5V, die der Mikrokontroller und das
CMOS-IC 4066 so brauchen.
Ein Spannungsteiler mit 10kΩ und 1kΩ bereitet die Akkuspannung
zur Messung mit dem AD-Wandler im ATtiny24 auf (Sense-V, ADC0) und gibt sie an
den ADC0-Eingang des ATtiny24 weiter. Dieser arbeitet mit der intern erzeugten
Referenzspannung von 1,1 V. In der gezeigten Teiler-Schaltung können
Spannungen bis knapp oberhalb von 12 V gemessen werden.
Überschreitet die Spannung am Akku den Mindestschwellwert (per Default:
1.000 mV), dann beginnt der Entlade-Algorithmus. Solange die
Akkuspannung 4.500 mV überschreitet, schaltet dazu der ATtiny24 die
Unload-Leitung auf Eins-Potenzial. Das öffnet den daran angeschlossenen
BD439, dessen Kollektor über einen 39 Ω-Widerstand den Akku
entlädt. Der Entladestrom fließt durch den 3,9Ω-Widerstand
am Emitter, an dem pro mA Entladestrom 3,9 mV anfallen. Der
Analogschalter 4066-1 schaltet beim Entladen diese Spannung auf die Sense-I-
Leitung, die an ADC1 des ATtiny24 führt.
Unterschreitet der Akku die Entladespannung von 4.500 mV, schaltet der
Kontroller die Leitung Unload auf Low und die Leitung Load auf High. Das
startet das Laden. Der an Load angeschlossene BC547-Transistor schaltet dazu
die Basis des Ladetransistors BD440 auf 2 V unterhalb der
Betriebsspannung, eingestellt mittels der Durchlass-Spannung der roten LED.
Der Emitter des BD440 wird dadurch auf 1,35 V unterhalb der
Betriebsspannung eingestellt. Der 5,6Ω-Widerstand stellt dadurch den
Ladestrom auf ca. 250 mA ein.
Noch eine Anmerkung zum Analogschalter 4066. Der hat neben der Tatsache,
dass für alle Strommessungen nur ein einziger ADC-Kanal benötigt
wird, eine weitere sehr wichtige Funktion. Beim Entladen würde an dem
3,9Ω-Widerstand am Minus-Pol des Akkus eine negative Spannung von bis
zu -1,1 Volt abfallen. Das würde nicht nur keine Strommessung
ermöglichen, da der ADC-Eingang bei negativen Spannungen immer nur Null
liefert. Mehr noch: die Spannung würde die Grenze von -0,5 Volt
unterschreiten, die minimal für jeden Pin des ATtiny24 in den Absolute
Maximum Ratings festgelegt sind. Könnte also durchaus sein, dass der
ATtiny24 damit kaputtgeht. Der 4066 kann solche negativen Spannungen aber
locker ab und schaltet die Verbindung zu ADC1 zuverlässig ab, solange
kein Laden eingeschaltet ist.
Aufbau
So passen alle Bauteile für das Ladegerät auf ein Stück
Platine mit 50 x 80 mm (1/4 Euro).
Achtung bei den drei LED, die an den sechspoligen Stecker angeschlossen
werden! Ist die rote LED nicht angeschlossen, dann kann es beim Laden zu
einem üblen Überstrom kommen. Das verbrät den
5,6Ω-Widerstand mit mehr als einem Watt, vergrämt den 2,3VA-Trafo
und das alles tut auch dem angeschlossenen Akku nicht gut.
Stückliste
Viele Kleinteile. Beim Gehäuse kann man etwas sparen, bei der LCD sollte man
das auf jeden Fall.
Das Ganze ist nicht viel teurer als ein Ladegerät von der Stange, aber
hier hat man alles im Griff, kann es nach Bedarf umbauen (z. B. auf
800 mAh-Packs - einfach den 6Ω8 in 18Ω und den Sollwert
in der Software von 2.000 auf 800 umschreiben), die Software an die eigenen
Bedürfnisse anpassen und überhaupt ist alles viel schöner als
nur mit drei popeligen LEDs. Und man hat was Eigenes, was sonst keiner hat.
Die Software
Die Software ist noch in Arbeit. Bitte etwas Geduld.
TBD
Wie es funktioniert
TBD
16*16-Bit-Multiplikation
Das sind zwei 16-Bit-Zahlen M1 und M2, die miteinander malgenommen werden
sollen. Sie sind in vier Registern untergebracht.
Bevor es ans Malnehmen geht, muss erst einiges vorbereitet werden. Für
M2 brauchen wir zwei zusätzliche Register, denn wir müssen M2 im
ungünstigsten Fall 16 mal mit Zwei malnehmen, und dafür brauchen
wir leeren Platz, wozu wir zwei Register entleeren (= mit Null-Bits
befüllen).
Und für das Ergebnis brauchen wir vier weitere leere Register, denn
bei Malnehmen zweier 16-Bit-Zahlen kann das Ergebnis 32 Bits haben. Wir
beginnen den Tanz auch hier mit leeren Null-Bits.
Aber jetzt geht es endlich los. M1 wird jetzt um ein Bit nach rechts
geschoben. Zuerst wird M1H nach rechts geschoben. Von links wird eine Null
ins Bit 7 geschoben und rechts rollt Bit 0 in das Carry-Bit. Die Instruktion
dafür ist Logical-Shift-Right (LSR). Dieses Carry wird nun mit einer
anderen Instruktion, nämlich Rotate-Right (ROR), in das untere Byte
hereingeschoben. Dafür rotiert jetzt das Bit 0 des unteren Bytes in das
Carry-Bit.
Faktisch haben wir damit M1 halbiert, denn jedes Rechtsschieben macht jedes
Bit zu seinem halben Wert: was vorher zwei war (Bit 1), wird nun eins (Bit 0),
was vier war wird zwei, usw. usw.
War beim Rechtsschieben eine Eins herausgerollt, müssen wir M2 zum
Ergebnis dazu addieren. Dazu addieren wir E0 mit M2L mit der Instruktion ADD
und schreiben das Ergebnis in E0 zurück. Weil bei jedem Addieren auch
ein Überlauf auftreten kann, wird E1 mit M2H UND gleichzeitig das Carry
addiert, mit der Instruktion ADC, und dessen Ergebnis in E1 geschrieben. Und
so geht es weiter mit E2 und M22 und dann E3 und M23.
War keine Eins herausrotiert, dann lassen wir das einfach mit dem Addieren.
Jetzt müssen wir testen, ob alle beide Bytes von M1 schon Null sind.
Wenn das der Fall ist, sind wir fertig mit dem Malnehmen. Sind hingegen noch
Einsen in den beiden Registern, müssen wir weiter malnehmen.
Weil das nächste Bit, das aus M1 rechts herausgeschoben werden wird,
doppelt so viel wert ist wie das vorherige, muss M2 jetzt mit zwei malgenommen
werden. Das könnten wir mit ADD und ADC mit sich selbst erledigen. Oder
wir verwenden LSL (dasselbe wie ADD) und ROL (dasselbe wie ADC). Auf jeden
Fall ist das Carry-Bit dabei wieder der Zwischenspeicher.
Nun geht es einfach mit dem Rechtsschieben von M1 weiter und das nächste
Bit wird behandelt. Alle Schritte werden nun solange wiederholt, bis alle
Einsen aus M1 herausgerollt sind.
Die Spannungsberechnung
Das hier zeigt am Beispiel einer Spannung von +5V, wie die Spannungsberechnung
funktioniert. Wie man sieht, teilt der Spannungsteiler aus den beiden
Widerständen die Spannung so, dass dann 455 mV am ADC0-Eingang
liegen. Daraus macht der AD-Wandler einen Wert von 424, bei 64 Messungen und
Aufsummieren werden daraus 27.136. Das passt in eine 16-Bit-Zahl.
In eine zweite 16-Bit-Zahl passt FU mit 12.100. Mit der nehmen wir
die AD-Wandler-Summe mal und kriegen gigantische 328.345.600 heraus, eine
32-Bit-Zahl. Nun streichen wir einfach die beiden untersten Bytes dieses
Ergebnisses (bzw. runden diese auf), was dem Teilen durch 65.536 entspricht,
und kriegen dezimal 5.010 heraus. Das weicht, in mV, nur ganz wenig von 5.000
ab und entspricht unserer Genauigkeit des Widerstandsteilers und der
Auflösung.
Wer die Teilerwiderstände ein wenig ändern will, kriegt mit der
Tabelle hier, im Tabellenblatt "ADC"
einen anderen Wert für FU heraus.
Die Stromberechnung
Beim Entladen schaltet der Kontroller die Unload-Leitung auf High und den
ADC1-Messeingang mit dem 4066-Analogschalter auf den 3,9Ω-Widerstand,
durch den der Entladestrom fließt. Am Beispiel eines Entladestroms von
130 mA ist hier der Rechengang gezeigt.
Wie bei der Spannung wird auch hier eine 16*16-Bit-Multiplikation verwendet.
Allerdings nicht mit 12.100, sondern nur mit 282. Das ergibt beim Teilen durch
65.536 direkt den Strom in mA.
Wer mit der Auflösung von +/-1mA unzufrieden ist und lieber +/-0,1mA
haben möchte, nimmt statt mit 282 einfach mit 2.820 mal und setzt vor
der Ausgabe der letzten Ziffer ein Komma davor. Einfacher geht's nicht. Und
wer es noch weiter treiben will, nimmt stattdessen 28.200 und kriegt +/-0,01mA
Auflösung. Das ist dann allerdings bei der letzten Dezimalziffer eher
Kaffeesatz.
Die Kapazitätsberechnung
Das Berechnen der Kapazität ist beim Entladen und beim Laden zu
erledigen, schließlich wollen wir auch gerne wissen, wieviel mAh noch
in den Akkus waren.
Das hier zeigt den Rechengang, wie das erledigt wird, am Beispiel des Ladens
mit 250 mA Ladestrom. Entscheidend ist dabei der Zeitraum, über den
der Ladestrom bei jeder Spannungs- und Strommessung in den Akku fließt.
Das sind hier 0,213 Sekunden. In dieser Zeit laden 250 mA eine
Kapazität von 0,01479 mAh in den Akku. An dieser kleinen Zahl sieht
man schon, dass wir nicht einfach mAh zählen können: erst nach etwa
einer Minute ist ein mAh erreicht.
Der zweite Abschnitt zeigt die Berechnung des Ladestroms aus den gemessenen
975 mV am ADC1-Eingang, die der zweite 4066-Analogschalter beim Laden
dorthin transportiert hat. Beim Teilen durch 65.536 kommen die 250 heraus,
aber zur Kapazitätsberechnung brauchen wir ein weiteres Byte, zur
Vermeidung von Rundungsfehlern. Das machen wir, indem wir nur das letzte
Byte des Ladestroms aufrunden und die beiden höheren Bytes (64.002)
mit dem Faktor FK von 993 multiplizieren.
Das Teilen durch 65.536 (mit Aufrunden) liefert uns 970 in den beiden
untersten Bytes der Multiplikation. Teilen wir das durch 65.536, kriegen wir
0,01480 mAh heraus, was wir schon von oben her kennen (dort: 0,01179).
Das addieren wir nun jedes Mal zur 32-Bit-Zahl der Kapazität. Wenn wir
das 10 Stunden / 0,213 Sekunden = 169.014-mal genauso addieren, kriegen wir
die 2.500 mAh schon zusammen, die 10 Stunden Laden mit 250 mA
so in die Akkus schaufeln. Nun sehen wir auch, wie bedeutend es ist, den
Strom mit einem weiteren Byte zu versehen, denn 169.000-faches Addieren
würde ohne weiteres Byte ziemlich ungenau werden.
Noch ein Wort gegen Genauigkeitsfanatiker: bloss nicht zu viel erwarten, denn
der ATtiny24 ist ohne Quarz zwischen 3 und 10% ungenau beim internen
RC-Oszillator. Und die Prozente gehen so in die Zeit von 0,213 Sekunden
und damit auch in die Kapazitätsberechnung ein. Also: Vorsicht und nicht
zu viel des Guten tun.
Die LCD-Ansteuerung
TBD
Viel Erfolg beim Nachbau.
Email an mich:

©2023 by http://www.gsc-elektronic.net