Forum: Projekte & Code SSLACC Simple lead acid solar charger


von FrankB (Gast)


Angehängte Dateien:

Lesenswert?

Dies Projekt ist keine grosse Wissenschaft. Der kleine Laderegler hat 
nur eines zum Ziel: Den angeschlossenen 12V Blei-Gel Akku mit einem 
Solarpanel (max. 30W) aufladen, über einen Verbraucher entladen und bei 
alledem sicherstellen, dass der Akku nicht beschädigt wird. Es wird 
lediglich die Spannung überwacht, da keine Strommessvorrichtungen 
vorgesehen sind. Maximaler Lade- und Entladestrom ist 3A. Der Vorteil 
gegenüber den ganz billigen Ladereglern ist, dass die Last abgeworfen 
werden kann.

Schaltung

Aufgebaut wurde alles um dem AtMega48 herum. Und selbst dieser ist 
eigentlich vollkommen überdimensionert. Hat aber z.B. den Vorteil, dass 
man zum Debuggen einen MAX232 anschließen kann (das sind die Kabel auf 
dem Bild) und nicht 50 verschiedene Controllertypen auf Lager haben 
muss. Natürlich lassen sich 88/168er auch verwenden.

Aufbau

Hier gibt es nicht viel zu beachten. Lediglich die dünnen roten 
Leiterbahnen auf dem Top-Layer sollen unterhalb der Platine mit 
mindestens 0,5 mm² Leitung verlegt werden. Dafür ist die Platine 
leichter zu ätzen bzw. billiger zu bestellen.

Software

Achillesferse bei diesem Projekt ist die Genauigkeit der 
Spannungsmessung. Eigentlich hatte ich vor VCC als Referenz zu 
verwenden. Laut Datenblatt hat die Spannung vom LP2950-5.0 nur 0,5% 
Toleranz und einen geringen Temperaturdrift. Also deutlich genauer die 
interne Referenz des AVRs. Leider war dies in der Praxis anders, so dass 
ich wieder auf die interne Referenz zurückgreifen musste. Die Software 
enthält ist ziemlich schnell zusammen geworfen, enthält aber einen 
schöne Funktion zum Linearisieren beliebiger Messwerte über einen 
Kennlinie mit beliebig vielen Stützpunkten. Sollte bei jeder gebauten 
Platine angepasst werden (leider :-( ). Der ADC betreibt oversampling um 
auf 12 Bit Auflösung zu kommen.
Im Normalfall läuft der Controller bei 128 kHz und wacht etwa 4 mal in 
der Sekunde aus dem Idle-Zustand auf und übernimmt seine Aufgabe. Es 
gibt einen internen Laufzeitzähler, der einem aber erst dann etwas 
bringt wenn man den Controller mit mind. 1 Mhz taktet und per UART (1200 
Baut 8N1) an den Rechner anschließt. Hier bekommt man nun einen Liste 
von CSV-Werten geliefert, die man so schnell zu einem Diagramm machen 
kann:

Time[s];ADC_Batt[1];U_Batt[mV];ADC_Panel[1];U_Panel[mv]
0.262;3637;12954;6;159
1.048;3637;12954;7;166
1.310;3637;12954;8;172
1.572;3638;12957;9;178
1.835;3636;12951;9;178
2.097;3636;12951;8;172
...

Zum Schluss wurde noch die Messung des eingebauten Temperatursensors 
eingebaut. Doch entweder mache ich etwas falsch oder der Fehler liegt 
mit -23°C noch höher als im Datenblatt angegeben. Und selbst da lassen 
die +-10K bereits kalte Schauer den Rücken herunter laufen.

Anzeigen

Die grüne LED zeigt an, ob der Akku geladen wird. Die Rot-Grün Duo-LED 
soll einen Anhaltspunkt (!) für den Ladezustand (hoch, mittel, tief) des 
Akkus geben. Blinkt sie rot, so wurde die Last wegen zu tiefer 
Akkuspannung abgeworfen und kann nur durch erneutes Aufladen des Akkus 
wieder mit Strom versorgt werden.

Viel Erfolg!

von FrankB (Gast)


Angehängte Dateien:

Lesenswert?

Verbesserte Kalibrierung und Unterdrückung der fälschlicherweise 
aktivierten "Charge"-LED.

main.c
1
// values from 2012-04-14
2
linearizationTableU16_t linListBattVoltage =
3
{
4
    6,
5
    {
6
        {  0,      0},
7
        {929,   3240},
8
        {1781,  6166},
9
        {2616,  9038},
10
        {3522, 12154},
11
        {4064, 14021},
12
    }
13
};
14
15
// values from 2012-04-14
16
linearizationTableU16_t linListPanelVoltage =
17
{
18
    8,
19
    {
20
        {   0,     0},
21
        { 551,  3239},
22
        {1046,  6163},
23
        {1539,  9036},
24
        {2076, 12151},
25
        {2636, 15416},
26
        {3131, 18292},
27
        {3670, 21430},
28
    }
29
};

main.h
1
#define LED_CHARGE_THRESHOLD        135 // [mV] panel voltages has to be at leat this much higher than battery voltage
2
#define LED_CHARGE_HYSTERESIS       20  // [mV]

Diese Werte variieren natürlich mit den Widerstandstoleranzen. Bei drei 
verschiedenen Controllern und Spannungsteilern hatte ich aber 
erstaunlicherweise nicht mehr als 0.7% Abweichung.

von Michael H. (overthere)


Lesenswert?

Hallo Frank,
meld dich mal bitte bei mir bei PN, ich möchte dich etwas fragen.
Grüße,
Michael

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.