Intelligentes 9-V-NiMH-Ladegerät: Konstantstrom, dV/dt-Abschaltung, Erhaltungsladung (v1)
Bauteile
| Komponente | Anzahl |
|---|---|
| Arduino UNO | 1 |
| MCP4725 I²C-DAC (SparkFun Breakout) | 1 |
| LM317 einstellbarer Linearregler (TO-220, mit Kühlkörper) | 1 |
| LM358 Dual-OpAmp | 1 |
| Relais 5 V (Öffner/Kommunikator, z. B. 1 Umschalter) | 1 |
| Shunt-Widerstand 10 Ω / 1 W (Präzision 1 %) | 1 |
| Widerstände: 6,8 kΩ (×2), 3,3 kΩ, 5,1 kΩ, 1 kΩ, 20 kΩ | je 1 |
| I²C-LCD 16×2 (YwRobot / PCF8574) | 1 |
| Steckbrett-Netzteil 5 V/3,3 V (SparkFun) oder Arduino 5 V | 1 |
| Netzteil 17 V DC / ≥ 300 mA (z. B. XL6009 Step-Up) | 1 |
| Elko 100 µF / 25 V (am LM317-Ausgang) | 1 |
Ladeprinzip (NiMH, 9-V-Block = 6–8 Zellen à 1,2 V)
- Konstantstrom (CC): Einstellbarer Ladestrom (z. B. 30–170 mA). Spannung wird per DAC + OpAmp + LM317 so geregelt, dass über dem Shunt (10 Ω) die gewünschte Spannung abfällt (
I = V_shunt / 10 Ω). - Abschaltung: –dV/dt-Erkennung: Während des Ladens wird die Batteriespannung minütlich geloggt. Fällt die lineare Regression über 5 Minuten negativ → Batterie voll.
- Erhaltungsladung (Trickle): C/40 (z. B. 170 mAh / 40 = 4,25 mA) für max. 6 min (einstellbar bis 10 h).
- Sicherheit: Hard-Limits:
MAX_CURRENT = 200 mA,MAX_VOLTAGE = 15 V. Relais trennt Batterie bei Fehler/Ende.
Schaltungsbeschreibung
- DAC (MCP4725) liefert 0–5 V über I²C (Adresse 0x60).
- OpAmp (LM358) als nicht-invertierender Verstärker: Gain = 1 + R4/R3 = 1 + 6,8k/3,3k ≈ 3,06 → 0–15,3 V am LM317-ADJ-Pin.
- LM317 hält 1,25 V zwischen ADJ und OUT → Ausgangsspannung 1,25–16,5 V. 1-kΩ-Widerstand (R6) sichert Mindestlast (3,5 mA). Elko C1 (100 µF) stabilisiert.
- Strommessung: Shunt 10 Ω im Plus-Pfad. Spannung daran → Arduino A2 (0–5 V = 0–500 mA).
- Spannungsmessung: Teiler 5,1 kΩ / 20 kΩ (1:5) vom Batterieplus → Arduino A0 (max 16 V → 3,2 V).
- Relais trennt Batterie vom Ladekreis (Öffner-Kontakt = sicherer Default).
- LCD per I²C (Adresse 0x27, YwRobot-Modul nutzt
NewLiquidCrystal-Library).
Software-Zustandsautomat
Der Sketch (aufgeteilt in charger.ino, main.ino, hw.ino, lcd.ino, calculations.ino) implementiert folgende States:
INITIALIZATION→NO_BATTERY/BATTERY_CONNECTEDBATTERY_CONNECTED→ Spannung prüfen (> 7 V) →CURRENT_RAMP_UPCURRENT_RAMP_UP→ DAC-Schrittweise erhöhen bis Sollstrom erreicht →CHARGINGCHARGING→ CC-Regelung (Nachführung per DAC), –dV/dt-Überwachung (lineare Regression über 5 Min). Bei negativem Trend →FULLY_CHARGEDFULLY_CHARGED→ Ladezeit & Kapazität anzeigen →CURRENT_RAMP_DOWNCURRENT_RAMP_DOWN→ Strom auf Trickle reduzieren →TRICKLETRICKLE→ Erhaltungsladung bis Zeitablauf →END_OF_TRICKLE→ Relais aus →FINAL_STATE- Fehlerzustände:
OVERCURRENT,OVERVOLTAGE,REGULATION_FAILED,UNEXPECTED_CURRENT_FALL,UNABLE_TO_REACH_CURRENT→ Relais aus, Anzeige, Halt.
Konfigurierbare Parameter (in charger.ino)
float target_current_mA = 30; // Ladestrom (mA) float battery_nominal_capacity_mA = 170; // Nennkapazität (mAh) float max_time_for_trickle_charge = 6; // max. Trickle-Zeit (Minuten)
Ladestrom max. 1 C (hier 170 mA), min. C/10 (17 mA). Trickle-Strom = Kapazität / 40.
Anzeige (LCD)
- Zeile 1: Status / Meldung (z. B. „Charging -0.012“, „Completed 12:34“).
- Zeile 2: Aktuelle Werte: „8.45V 30.2mA 12“ (Spannung, Strom, Minuten).
Warnung & Haftung
Achtung: Falsches Laden (zu hoher Strom, falsche Zellenzahl, Alkaline-Zellen) kann zu Explosion, Brand oder Ausgasung führen. Nie unbeaufsichtigt laden! Nur für NiMH-Zellen geeignet (NiCd, Li-Ion benötigen andere Algorithmen). Der Autor übernimmt keine Haftung.
Weiterentwicklung (v2 geplant)
- Entladefunktion (Kapazitätsmessung).
- Zyklusbetrieb (Laden → Entladen → Laden).
- Automatische Zellenzahl-Erkennung.
- Temperaturüberwachung (NTC an Batterie).
- Logging auf SD-Karte.
Fazit
Ein anspruchsvolles, aber lohnendes Projekt für Elektronik-Begeisterte: Präzises Konstantstrom-Laden mit professioneller –dV/dt-Abschaltung, komplett mikrocontrollerbasiert. Die modulare Code-Struktur und detaillierte Dokumentation machen es als Lernplattform für Batteriemanagement hervorragend geeignet.
Herstellungsprozess
- Smart Thirst Alert: DIY Pflanzen-Alarm für optimale Bewässerung
- Italienische Word Clock mit Arduino Nano, NeoPixel, LCD & RTC
- Arduino-Pins sparen: 4x3 Tastenfeld mit nur 3 Anschlüssen verbinden
- Zuverlässiger Sigfox-kWh-Zähler mit Arduino MKR Fox 1200
- Bluetooth-Temperaturmonitor mit Arduino Nano
- Berührungsloses Gesten-Schloss: Sicherer Zugang mit APDS-9960 & Arduino
- Arduino Nano Begleiter-Set – Essentielle Bauteile & Werkzeuge für DIY-Elektronik
- USB-MIDI-Adapter für Arduino Micro / Leonardo – Komplettes Bauteil-Kit & Code
- Isolierter Analogeingang für Arduino: Spannung/Strom galvanisch trennen
- Präziser Reaktionszeit-Test mit Arduino UNO