Hier geht es wieder um die
Franzis-Solarwindmühle,
die aber diesmal ohne den Motor und nur mit der eingebauten LED in der
höchsten Helligkeitsstufe arbeitet. Nun soll eine Langzeitmessung der
Spannung durchgeführt werden. Mich interessiert, ob der
Speicherkondensator mit 15 F
im Mittel ausreichend aufgeladen wird, auch wenn die LED über Nacht
aktiv bleibt. Der Messbereich für die Spannungsmessung beträgt 5 V.
Die Messung soll mit 8 h/Div aufgezeichnet werden, sodass mehr als drei
Tage erfasst werden. Damit der PC nicht die ganze lange Zeit
eingeschaltet bleiben muss, habe ich ein 9V-Steckernetzteit an Vin
angeschlossen. Der Arduino hat ja für diesen Zweck einen 5V-Regler. Das
hat den weiteren Vorteil, dass die Referenz des AD-Wandler sehr genau
bei 5 V ist, während die USB-Versorgung über den PC und einen Hub eher
nur bei 4,5 CV liegt.
Für die ersten Versuche sollten die Messungen wesentlich schneller
ablaufen. Die laufende Messung mit insgesamt 256 Bytes wird mit einer
LED an D0 angezeigt. Das Programm wird mit Byte-Kommandos gesteuert:
1: Alles löschen
2: Messung starten
3: Messung auslesen
Eine besondere Anforderung ist, dass man Zwischenergebnisse auslesen
darf, um den korrekten Verlauf zu überprüfen. Falls nämlich bei einer
Langzeitmessung irgendetwas schief läuft, dauert die ganze Sache noch
länger. Ich kann also mit dem Kommando 3 zu jeder Zeit nachsehen, wie
weit die Messung schon gekommen ist. Dazu wird während der eigentlichen
Messung ab L2 mit Input A auf Signale vom PC gelauscht. Wenn ein Byte
kommt, wird das Auslesen ab L5 ausgeführt und danach weiter gemessen.
Weil der Datapointer B bei Auslesen verändert wird, muss er am Ende des
Auslesevorgangs aus dem Zähler C rekonstruiert werden, damit die
Messung an der richtigen Stelle fortgeführt werden kann.
Rem Logger
L1:
0x09FF Pdir = 255
0x0800 Pout = 0
0x2023 Jmp L9:
|
Rem Log
L2:
0x0200 B = 0
0x03FF C = 255
L4:
0x0801 Pout = 1
0x3C00 A = AD0
0x3B00 [B+] = A
0x3500 A = B
0x1964 Delay ms = 100
0x4100 Input A
0x220D If A=B Jmp L13:
0x2110 Call L5:
L13:
0x2505 C*Jmp L4:
0x0800 Pout = 0
0x4800 Ret
|
Rem Read
L5:
0x0200 B = 0
0x04FF D = 255
0x1A03 Delay s = 3
L6:
0x3A00 A = [B+]
0x4200 Print A
0x1902 Delay ms = 2
0x2613 D*Jmp L6:
0x3700 A = C
0x3400 B = A
0x01FF A = 255
0x2B00 A = A - B
0x3400 B = A
0x4800 Ret |
Rem Clear
L7:
0x04FF D = 255
0x0200 B = 0
0x0100 A = 0
L8:
0x3B00 [B+] = A
0x2620 D*Jmp L8:
0x4800 Ret
|
Rem PC
L9:
0x0100 A = 0
0x19C8 Delay ms = 200
0x4100 Input A
0x0201 B = 1
0x222D If A=B Jmp L10:
0x0202 B = 2
0x222F If A=B Jmp L11:
0x0203 B = 3
0x2231 If A=B Jmp L12:
0x2023 Jmp L9:
L10:
0x211D Call L7:
0x2023 Jmp L9:
L11:
0x2103 Call L2:
0x2023 Jmp L9:
L12:
0x2110 Call L5:
0x2023 Jmp L9: |
Beim ersten Praxistest kam noch ein Problem ans Licht. Wenn ich den PC
während einer Messung neu anschließe und die Schnittstelle öffne, führt
der Arduino einen Reset aus. Damit wird das ganze Programm neu
gestartet und dabei der Datenbereich gelöscht. Das wäre auch passiert,
wenn ich erst nach drei Tagen ausgelesen hätte. Was nun? Dann kam mir
die Erinnerung an ein ähnliches Problem mit dem Arduino. Die Lösung
war, dass ich den Reset-Pin gegen +5V schalte und damit jeden
automatischen Reset unterdrücke. Getestet, funktioniert. Nur die
Reset-Taste darf ich jetzt nicht mehr drücken, denn damit würde die
Betriebsspannung kurzgeschlossen.
Die Wartezeit zwischen zwei Messpunkten beträgt nur 100 ms, sodass mit
insgesamt 25 Sekunden ein schneller Test möglich wird. Hier wurde eine
Kondensatorentladung mit 100µF und 100 kΩ als Testobjekt verwendet.
Etwa zur halben Zeit wurde das Zwischenergebnis ausgelesen. Im
TLScript-Fenster wurde das Kommando 3 gesendet und dann das Programm
mit Stop angehalten, sodass genügend Zeit bleibt, ins TestLab-Fenster
zu wechseln und den Plotter zu starten. Dort wurde mit das Programm mit
Go fortgeführt, damit die bis dahin gemessenen Daten geplottet wurden.
Die Messung wurde automatisch fortgeführt, bis am Ende die LED
ausgeschaltet wurde. Erneutes Auslesen zeigte dann den gesamten Inhalt
des Speichers. Man sieht einen Sprung, der durch die vom Auslesevorgang
verursachte Messpause verursacht wurde. Das ist aber für echte
Langzeitmessung kein Problem, und bei schnellen Messungen ist das
Zwischenergebnis weniger wichtig.
Für die echte Messung mit acht Stunden pro Skalenteil musste ich nur
noch die Wartezeit anpassen. Bei 50 Messpunkten pro Skalenteil beträgt
die Wartezeit 8 * 60 min / 50 = 9,6 min oder 9 Minuten, 36 Sekunden.
Deshalb musste zwei Wartezeiten eingesetzt werden, Delay min = 9 und
Delay s = 36. Im Messzeitraum gab es durchgängig starke Bewölkung
und Regen. Die Messung zeigte, dass der Kondensator nicht nachgeladen
wurde. Die Spannung sank in drei Tagen von anfangs 2,75 V bis auf 2,69
V. Man kann erkennen, dass die Spannung zunehmend langsamer abnahm.
Damit ist eine wichtige Frage beantwortet: Die Dimensionierung der
Schaltung stellt tatsächlich sicher, dass der Kondensator auch unter
schwierigen Bedingungen nicht unter 2,5 V entladen wird. Um diese
mühsam gefundenen Daten auch in numerischer Form festzuhalten, wurden
sie dann als LiC1.dat gespeichert.
Während der zweiten Messung gab es dagegen sonnige Abschnitte, durch
die der Kondensator zwischenzeitlich nachgeladen werden konnte. Maximal
wurden 2,90 V erreicht.
Die letzte Messung wurde ganz ohne die LED-Last durchgeführt. Auch da
gab es nur wenig Sonne, aber der LiC wurde bis 3 V aufgeladen.
Rem Logger2
Rem 8h/div
L1:
0x09FF Pdir = 255
0x0800 Pout = 0
0x2024 Jmp L9:
Rem Log
L2:
0x0200 B = 0
0x03FF C = 255
L4:
0x0801 Pout = 1
0x3C00 A = AD0
0x3B00 [B+] = A
0x3500 A = B
0x1A24 Delay s = 36
0x1B09 Delay min = 9
0x4100 Input A
0x220E If A=B Jmp L13:
0x2111 Call L5:
L13:
0x2505 C*Jmp L4:
0x0800 Pout = 0
0x4800 Ret
....
(gekürzt