Download Download als ZIP Archiv (33 kB)

Software

Das Programm ist relativ einfach: Der Timer1 weckt den Microcontroller jede 200ms aus dem Idle Mode, der zum Stromsparen verwendet wird (auch wenn die Reduktion der Stromaufnahme nicht wirklich nötig gewesen wäre). In der Hauptschleife (also nicht im Interrupthandler) wird die Spannung gemessen. Im Interrupthandler des Timers wird die Spannung dann über mehrere Messungen gemittelt und ausgewertet. Die LEDs werden entsprechend der aktuellen Spannung gesetzt. Das Relais wird ein- bzw. ausgeschaltet, wenn die Spannung für eine gewisse Zeit oberhalb der Einschaltschwelle bzw. unterhalb der Ausschaltschwelle ist.

Bei der Softwareerstellung war vor allem die Verwendung von ADC (Analog-Digital-Konverter) und Timer-Interrupt (zum Wecken des Mikrocontrollers) etwas schwierig. Beide lösen Interrupts aus. Man muss sicherstellen, dass der ADC ausgeschaltet wird, wenn die CPU in den Schlafmodus versetzt werden soll. Ansonsten weckt sie sofort wieder auf, so dass kein Stromsparen möglich ist.

AchtungDirekt nach dem Einschalten des Geräts wird das Relais bereits eingeschaltet, wenn (nach der eingestellten Verzögerung) die Spannung oberhalb der Ausschaltschwelle ist. Ist jedoch im Betrieb die Spannung einmal unter die Ausschaltschwelle gesunken, schaltet das Relais erst wieder ein, wenn die Spannung über die Einschaltschwelle steigt. Dieses Verhalten ist bewußt so gewählt, damit nach Einschalten des Geräts bei ausgeschaltetem Motor der Verbraucher initial eingeschaltet wird.

Gemessene Batteriespannungen

Zur Bestimmung der Schaltschwellen habe ich zunächst die Batteriespannung zweier Fahrzeuge mit einem Multimeter gemessen:

Nach meiner Einschätzung sollte die Batteriespannung bei geringer Leistungsentnahme (die zu betreibende Kühlbox hat ~ 65 W) etwas über 12 V liegen. Unter 12 V wollte ich die Ausschaltschwelle nicht legen, da sonst die Gefahr besteht, dass der Motor nicht mehr anspringt, da die Batterie zu weit entladen wurde. Eine leere Batterie hat ca. 11,5 - 11,9 V.
Die Einschaltschwelle habe ich mit 13,2 V sehr hoch gelegt. Allerdings wird diese Spannung ohne Probleme bei eingeschaltetem Motor erreicht. Somit schaltet das Relais genau bei eingeschaltetem Motor ein. Das Einschalten, wenn die Batteriespannung durch den abgeschalteten Verbrauchen wieder ansteigt, wollte ich vermeiden.

Strom-Überwachung

Wenn die Strom-Überwachung aktiviert ist, leuchtet die LED, sobald der Stromverbrauch über dem eingestellten Wert liegt. Falls der Strom für die eingestellte Zeit unter der eingestellten Stromstärke liegt, wird ein Alarm im Minutentakt ausgelöst.

Vor allem zu Testzwecken können des weiteren zwei Info-Schwellen eingestellt werden, so dass akustisch angezeigt wird, wenn der Verbraucher (die Kühlbox) ab jetzt einen anderen Stromverbrauch hat. Die eingesetzte Kühlbox läuft grundsätzlich nur in drei Stufen und verbraucht ~0 A, ~1,7 A und ~4,1 A, so dass ich mit dieser Funktion interessehalber mal das Verhalten der Box mitbekommen kann.

Die Strom-Überwachung bietet zudem die Möglichkeit, die tatsächliche Batteriespannung anhand der am Gerät anliegenden Spannung hochzurechnen. In meinem Fall hatte ich einen Spannungsabfall von immerhin 0,7V zwischen Batterie und Elektronik. Deshalb schaltete die Elektronik natürlich die Kühlbox recht schnell ab, obwohl die Batterie auf keinen Fall schon leer war. Durch die Berücksichtigung des Widerstands des Kabels bis zur Elektronik kann die tatsächliche Batteriespannung hochgerechnet werden und so ein vorzeitiges Abschalten unterbunden werden. Um diese Funktion nutzen zu können, muss die Stromüberwachung bestückt und im EEPROM eingeschaltet werden.

Eine weitere Möglichkeit, die ich allerdings bisher nicht implementiert habe, wäre das Messen der Batteriespannung nach kurzzeitigem Ausschalten des Verbrauchers (also ohne Last). Dies würde bedeuten, dass der Verbraucher aber zyklisch (z.B. alle 15 Minuten) ausgeschaltet werden muss.

Software-Parameter

Mit folgenden Parametern können im EEPROM gesetzt werden, um Schaltschwellen und Schaltverzögerung anzupassen.

Zudem werden zwei Testmodi unterstützt, um die (halbfertige) Hardware auf Funktionstüchtigkeit zu prüfen.

Zum Schreiben des Testmodus ist im Downloadpaket eine passende Batchdatei und ein hex File für das EEPROM enthalten.

Der Brownout-Detector, der den Mikrocontroller im Falle von Unterspannung ausschaltet, sollte aktiviert werden, damit bei Unterspannung nicht unkontrolliert ins EEPROM geschrieben werden kann. Dies geht durch Setzen des entsprechenden Fuse-Bits "brownout detection enabled" auf 0.

EEPROM Position (Byte) Bedeutung
0
Betriebsmodus
ungleich 1 und 2, z.B. FF (EEPROM unbeschrieben) = LED Test (LEDs 1-8 werden in einer Schleife nacheinander eingeschaltet)
1 = Spannungstest (LEDs zeigen im Sekundentakt aktualisiert die Spannung entsprechend der Schaltschwellen ein. Dient zum Prüfen der Spannungsmessung.)
2 = Normalbetrieb
1
Anzahl Spannungsmessungen für Durchschnittsberechnung
Die Spannung wird (alle 200ms) mehrfach gemessen und ein Durchschnitt gebildet, bevor sie ausgewertet wird. Auch die Spannungsanzeige wird in diesem Intervall aktualisiert.
(Default = 5 = 1s)
2 + 3
Ausschaltschwelle in 1/100 V
Unterhalb dieser Spannung wird das Relais ausgeschaltet.
(Default = 1200)
4 + 5 Einschaltschwelle in 1/100 V
Oberhalb dieser Spannung wird das Relais eingeschaltet.
(Default = 1320)
6 + 7 Ausschalt-Delay
Das Relais wird erst ausgeschaltet, wenn die Ausschaltschwelle für x Sekunden unterschritten wird.
(Default = 20)
8 + 9
Einschalt-Delay
Das Relais wird erst eingeschaltet, wenn die Einschaltschwelle für x Sekunden überschritten wird.
(Default = 20)
10 - 25
Spannungsschwellen in 1/100 V für die LED-Anzeige
Byte 10 + 11 ist die niedrigste Spannungsschwelle
(Default =  1170, 1200, 1230, 1260, 1290, 1310, 1340, 1370)
26 LED-Anzeige umdrehen
Je nach Einbau der LEDs kann man deren Bedeutung umdrehen.
0 = aus
1 = ein
27

Strom-Überwachung
Hiermit kann die optionale Stromüberwachung eingeschaltet werden, falls verbaut.
0 = aus
1 = ein

28 + 29 Alarm-Schwelle
Ist der Strom unterhalb dieses Wertes in mA, wird der akustische Alarm ausgelöst.
(Default = 1000)
30 + 31

Alarm Timeout
Der Alarm wird nur ausgelöst, wenn die Stromstärke für diese Zeit (in Sekunden) unterhalb der Schwelle ist.
(Default = 900)

32 + 33 Strom Max (UNBENUTZT!)
Dieser Wert gibt den zu erwartenden maximalen Strom in mA an. (Damit sollte ein Pulsverhältnis der Stromstärken-LED justiert werden, so dass bei maximaler Stromstärke ein Dauerleuchten erreicht wird.)
(Default = 5000)
34 + 35 Strom Info-Schwelle 1
(Default = 900, aus = 0)
36 + 37 Strom Info-Schwelle 2
(Default = 2900, aus = 0)
38 + 39

Widerstand des Kabels zwischen Batterieklemmen und Elektronik in mOhm
Unter Last mißt man dazu die Spannung an den Batterieklemmen, an der Elektronik und die Stromstärke. Als Beispiel seien 12,27V und 11,57V sowie 4,1A gemessen. Daraus errechnet sich der Widerstand wie folgt: R = U / I = 0,7V / 4,1A = 0,17 Ohm. Der Wert wird verwendet, um unter Last die Batteriespannung hochzurechnen. Funktioniert nur bei eingeschalteter Strom-Überwachung.
(Default = 170)