Netzsynchroner Langzeittimer
von Hubert Freisinger, OE3FHA
Mit
Toleranzen zu leben hat man im langen Leben eines Technikers gelernt,
Abweichungen über ein gewisses Maß müssen beseitigt werden. In Europa
haben wir das Glück mit sehr genauem 50Hz Netzwechselstrom versorgt zu
werden. Trotz der Komplexität des europäischen Netzverbundes sind die
EVU's bestrebt, über längere Zeit, mit langsamen Frequenzkorrekturen
eine gute Synchronität zu gewährleisten.
Warum nun die 50Hz als
Zeitbasis? Ein externer Quarzgenerator ist gut jedoch benötigt er Strom
und wandert über lange Zeit ebenfalls. Ich will mit einem
Minimalaufwand an Bauteilen und verbrauchter Energie ein Maximum an
Erfolg. Noch ist die Sicherheit des Netzes so gut das ohne
"Notstromversorgung" und Quarzgenerator dies zu bewerkstelligen ist.
Dar Timer selbst benötigt unter einer KW/h im Jahr!
Was hat sich
geändert: Wait ist lt. Datenblatt in BASCOM mit seinem Parameter nicht
definiert, mein Versuch hohe Raten einzugeben war, wie wir jetzt
wissen, ein Schlag ins Wasser. Also machte ich die Lösung mit
Zeitschleifen. die sind jedoch sehr schwer zu kalibrieren und müssen
für jeden Prozessor aus Toleranz-Gründen neu angepasst werden. So hatte
ich die Idee den Tiny13 mit den vorhandenen 50Hz zu synchronisieren.
Dazu musste das Signal einem Port zugeführt werden der die Zeitschleife
genau um 20 Millisekunden verzögert. Die Schleife selbst benötigt ca.
160µs und wird mit einem Wait um 13ms verzögert, damit steigt die
Portabfrage bei einer positiven Halbwelle ein und wartet auf fallende
Flanke. Diese 13ms können variiert werden, dürfen jedoch auf keinen
Fall kürzer als 11ms+Schleifenlaufzeit und länger als
18ms+Schleifenlaufzeit sein, es verändert sich aber etwas die Zeit zum
synchronisieren nach der Inbetriebnahme. Der Rest ist warten auf eine
Freigabe nach 20ms für den nächsten Zyklus.
Dazu habe ich mit dem Spannungsteiler R6, R7
(2:1) klare Verhältnisse am PORTB.2 / Pin7 geschaffen. Die Grätzbrücke
wird nach C1/0,1µF einseitig gegen GND angezapft und liefert wie das
Oszilloskop zeigt einen guten Rechteck mit +6,2 und -0,8V in der
Spitze, das Ergebnis aus Zenerspannung 5,1V und Si-Dioden Schwellwert
der Grätzbrücke. Das ist auch der Grund warum niedervoltige Dioden wie
1N4148 oder 1N4001 problemlos zum Einsatz kommen können. Mit dem
Spannungsteiler wird die Spannung für den µC auf erträgliche +4V und
-0,5V herabgesetzt welche lt. Datenblatt ohne Problem verarbeitbar sind
(siehe Oszi-Bild des Rechteck vor dem Spannungsteiler).
Es muss nun nur mehr der richtige
Schleifenwert Z mit dem Taschenrechner errechnet und in den Schleifen
eingesetzt werden. Als Grundgerüst dient folgende Tabelle.
Richtwerte für Variable Z und das Vielfache von 20 Millisekunden:
Z = 1 entspricht 20 Millisekunden
Z = 50 entspricht 1 Sekunde (50Hz)
Z = 3 000 entspricht 1 Minute
Z = 180 000 entspricht 1 Stunde
Z = 4 320 000 entspricht 1 Tag
Max. Wert für Z = 4 294 967 295 = DWORD, entspricht 23 860,92942Stunden oder 994,2 Tagen.
Beispiel:
Z = 186 154 entspricht 1 Stunde, 2 Minuten, 3 Sekunden und 80 Millisekunden.
Dowbload: TimerNetzsynchron.zip
'Angedacht für Ladegeräte die eine eigenständige Ladekontrolle haben, oder
'für wiederkehrende Erhaltungsladung mit Dauerstrom auf Zeit
'
'Ein Quarz-Takt ist nicht erforderlich da mit der Netzfrequenz = 50 Hz
'synchronisiert wird. Ab Start des Timers wird die einprogrammierte Zeit mit der
'Netzfrequenz konstant gehalten, diese wird bekanntlich von den EVU's über längere
'Zeit wieder exakt auf 50 Hz Synchronität gebracht.
'Angaben für den Kompiler
'------------------------
'Prozessor
$regfile = "attiny13.dat"
'intern Takt 1,2 MHz
$crystal = 1200000
$hwstack = 10
$swstack = 15
$framesize = 10
Dim Z As Dword
'conf Port's B auf Eingabe=0, Ausgabe=1
Ddrb = &B0001_1000
'Strom sparen
Stop Adc 'Switch off ADC
Stop Ac 'Switch off the power to the Analog Comparator
Reset Acsr. Acbg 'Disable Analog Comparator Bandgap Select
'Programmschleife
'----------------
Netz_ein:
Z = 0 'Zähler auf 0
Portb.4 = 0 'Grüne LED aus
Portb.3 = 1 'SSR und rote Led ein
Schleife_ein:
Z = Z + 1 'Zähler um 20ms erhöhen
Do
Loop Until Pinb.2 = 0 'weiter bei neg. Halbwelle
Waitms 13 'warten auf pos. Halbwelle
If Z = 1440000 Then Goto Netz_aus '1440000 = 8H ein
Goto Schleife_ein
Netz_aus:
Z = 0 'Zähler auf 0
Portb.3 = 0 'SSR und rote Led aus
Portb.4 = 1 'Grüne LED ein
Schleife_aus:
Z = Z + 1 'Zähler um 20ms erhöhen
Do
Loop Until Pinb.2 = 0 'weiter bei neg. Halbwelle
Waitms 13 'warten auf pos. Halbwelle
If Z = 192960000 Then Goto Netz_ein '192960000 = 44T/16H aus
Goto Schleife_aus
Zu beachten ist immer dass die
Einschaltzeit von der Gesamtzeit für ein korrektes Ergebnis abgezogen
werden muss. Also in meinem Fall 45 Tage beinhalten 8 Stunden aktiv und
44 Tage 16 Stunden warten. Wird jetzt der Timer um 12:00 Uhr Mittag in
Betrieb genommen so wird er (ohne Stromausfall) 45 Tage später um 12:00
Uhr wieder aktiv. Ganz kurze Sromausfälle (EVU Umschaltvorgänge) sollte
der Siebkondensator abfangen.
Eine Bemerkung noch zum SSR:
die
meisten SSR haben intern einen sog. Snubber-Kondensator, dieser liegt
über dem Triac und kann ein kurzes periodisches anspringen eines
Schaltnetzteil verursachen. Der Ladekondensator eines sparsamen
Schaltnetzteil lädt sich netzseitig über diesen Snubber-Kondensator
langsam auf bis der Wandlertransistor durchschaltet um nach entladen
des Elkos gleich wieder zu sperren. Grundsätzlich verursacht dieses
periodische Pumpen kein Problem. Wem das nicht gefällt der muss auf ein
gutes altes Relais umsteigen, natürlich mit der Konsequenz eines
erhöhten Stromverbrauch auch in der Ruhephase, der Kondensator C1 muss
größer werden. Bei Trafonetzteilen tritt aufgrund der Grundlast des
Trafos dieser Effekt nicht auf.
Jetzt sollte dem Bau eines Langzeit-Timer, der fast keinen Eigenverbrauch hat, nichts mehr im Wege stehen.
Als
kleine Hilfestellung für Leute die das nachbauen wollen die FUSE-Bit
für 2 Programmer. Im Prinzip der Auslieferzustand, doch für
einwandfreies "RESET" sollte BODLEVEL auf 2,7V eingestellt werden.
Erweiterung: Blinkanzeige
Der
Langzeittimer funktioniert einwandfrei, doch ein wenig unsicher ist man
doch nach vielen Tagen Wartezeit, läuft er noch oder hängt er schon.
Daher habe ich nochmals etwas Gehirnschmalz eingebracht (neudeutsch
Brainstorming) um hier etwas Abhilfe zu schaffen. An der Schaltung
selbst hat sich nichts geändert.
Um in der wochenlangen
Wartezeit eine Info zu haben habe ich in die Warteschleife "Netz
ausgeschaltet" eine Blinkfunktion der grünen LED implementiert, somit
zeigt ein kurzer Seitenblick, das Teil läuft noch.
Da ich ein
SSR ohne "zerro cross" Steuerung verwende, diese auch nur einmal am
Start des Timers notwendig ist, habe ich am Beginn des Programm eine
Synchronisation eingebaut so dass im Nulldurchgang geschaltet wird
(Einschaltstromstoß). Später ist das nicht notwendig weil durch den
Programmablauf ein Schalten im Nulldurchgang gegeben ist.
Zu
guter letzt habe ich am Start des Programm ein 10maliges kurzes Blinken
der Grünen LED eingebaut (Dauer 4sek) um zu sehen ob der µC richtig
angelaufen ist (RESET).
Im "Netz eingeschaltet" Teil hat sich
nichts verändert da aus Stromverbrauchgründen (es wird gespart wo es
nur geht C1/0,1µF liefert ca. 7,1mA) die rote Led in Serie mit dem SSR
liegt und hier zu blinken wäre äußerst kontraproduktiv. Die Ladezeit
ist auch je nach Dauer noch überschaubar und danach blinkt es ohnehin
wieder grün.
Damit ist für mich das Thema abgeschlossen denn bei
mir fuktioniert das Teil wie es soll. Die Akkus bei mir sind durch
eigene Ladekontroller geschützt (LiIo Akkus werden eigenständig
abgeschaltet, NiMh Akkus werden mit -delta peek überwacht und trickeln
noch einige Zeit bist der Langzeittimer ausschaltet) und ich brauche
nicht mehr ans rechtzeitige Nachladen denken. Viel Erfolg beim Nachbau.
Download: TimerNetzsynchron2.zip