erstellt 03.04.2018
50 Hz Frequenzmesser
Warum 50 Herz messen ?
Grundprinzip der Frequenzmessung
Messmethoden
Schaltplan
Funktion
Programm
Fotos
Programm Download
Alternative Messmethode
Technische Daten
Warum 50 Herz messen ?
Unser Stromnetz arbeitet mit einer Frequenz von 50 Herz, diese 50 Herz schwanken um maximal Plus/Minus 2 Herz.
Die Schwankung ist ein Maß für unserer Versorgungsqualität und wird im Tausendstel Herz Bereich von den Energie-Konzerne geregelt.
Unsere Energieversorgung ist so aufgebaut das die Energie die aktuell vom Kunden entnommen wird auch zum gleichen Zeitpunkt vom
Versorger zu Verfügung gestellt werden muss, es muss somit zu jedem Zeitpunkt für ein Gleichgewicht gesorgt werden.
Ist dieses Gleichgewicht mal nicht 100 Prozentig hergestellt so äußert sich das in eine Frequenzänderung.
Bei einer zu hohen Entnahme durch
den Kunden verringert sich die Frequenz, und bei einer zu hohen Bereitstellung durch die
Versorgungsunternehmen erhöht sich die Frequenz.

Hier einmal ein Vergleich:
Die meisten Menschen kennen das Problem , das wenn am Fahrrad der Dynamo eingeschaltet man etwas schwerer treten muss
weil man ja den Dynamo mit antreibt .
Die Erschwernis kommt aber nicht nur vom Dynamo sondern auch dadurch das jetzt die Beleuchtung ihren Dienst tut und
noch zusätzlich dem  Dynamo Strom entnommen wird.
Wenn man davon ausgeht das aber nicht schneller in die Pedale getreten wird, wird der Fahrradfahrer zwangsläufig
etwas langsamer werden, der Dynamo sich also langsamer drehen und sich damit die Frequenz des Dynamo verringern.
Wenn umgekehrt der Dynamo plötzlich abgestellt wird, dadurch die Belastung also geringer wird, würde das Fahrrad schneller werden,
und damit die Frequenz erhöhen.
So in etwa verhält es sich auch bei unseren Energie Netz.

Die 50 Hz sind zu einem wichtig weil innerhalb der gesammten Stromnetze in Europa, Spannungen mit Transformatoren
in ihrer Höhe transformiert werden um sie möglichst verlustarm und kostengünstig tranportieren zu können, und zum
anderen weil viele Elektrische Verbraucher für diese 50 Hz konstruiert wurden.
Es müssen aber nicht zwingend 50 Hz sein, es könnten theoretisch auch 60 Hz sein , so wie zum Beispiele in Groß Britanien.
Aber man hat sich in Europa eben auf diese 50 Hz geeinigt.


Warum aber sind die 50 Hz so wichtig ?
Weil alle Energie Unternehmen, und in letzter Zeit auch zunehment Private Photovoltaik Besitzer ihre Energie
in ein und das gleiche Netz einspeisen.

Eine
Regelung findet statt indem ständig die Frequenz gemessen wird, und je nach Höhe der Frequenz die Energie erzeugt wird, oder aber Lasten
zu oder abgeschaltet werden.

Beispielsweise  werden bei  einer kleinen Abweichungen der Frequenz die Wasserschaufeln der Wasserkraftwerke etwas verdreht so das etwas
mehr oder weniger an Energie erzeugt wird.

Bei großen Abweichungen, und groß heißt ca. 1 Herz, werden zum Beispiel Gaskraftwerke aktiviert oder aber deaktiviert , und "oder" es werden
Pumpwasserkraftwerke
aktiviert bzw deaktiviert.

Durch die in letzter Zeit immer mehr hinzugekommenen erneuerbaren Energien , sprich Photovoltaik, Windkrafträder usw,
und auch durch die vielen Privaten hinzugekommenen
Blockheizkraftwerke wird immer mehr Energie von sogenannten Kleinbetreiber eingespeist
die von den Energieversorgern nur sehr schwer kontrolliert bzw. beeinflusst werden können.

Dadurch werden immer mehr Probleme verursacht weil viele dieser Energiequellen beispielsweise ,wenn bei plötzlicher Windstille alle Windräder
ausfallen oder wenn die
Wolkendecke aufreißt und plötzlich alle Solarpaneele ihr Energie einspeisen .
Diese Differenzen  müssen  dann kurzfristig und sehr flexibel durch andere Energieträger ausgeglichen werden, was aber durch die Vielfalt
und die immer höhere Anzahl von Energieerzeuger immer schwieriger wird.

Die Energieregulierung funktioniert natürlich nicht mehr manuell, sondern wird durch Rechner kontrolliert und gesteuert,
und diese nehmen bei Bedarf automatisch Kraftwerke vom
Netz oder schalten Kraftwerke ein.
Für die Regelung gibt es genaue Europäische Richtlinien  die als Maß für die Regelungen dienen und zwingend eingehalten werden müssen weil sonst
der sogenannte Blackout droht.

Blackout nennt man einen  flächenmäßig großen Stromausfall , der von vielen Menschen völlig unterschätzt wird, weil er noch nie da war,
und viele es sich deshalb auch nicht vorstellen können.

Aber es ist sicher, er wird kommen, wir wissen nur noch  nicht wann und in welcher Größenordnung ?
Kommen aber wird er unbestritten, weil durch die Komplexität der Netze durch ganz Europa die Regelung immer umfangreicher und komplexer wird.
Und je größer die Netze und je mehr Technik eine Rolle spielt umso wahrscheinlicher ist es das die Technik insbesondere die Software zur Regelung
irgendwann versagt.

Das ist in etwas so wie unseren modernen Autos, die immer zuverlässiger und bequemer werden, wenn aber dann irgend ein Fehler auftritt, sind meist
die Fachfirmen nicht mehr in der Lage die Ursachen zu finden weil immer weniger Menschen in der Lage sind  diese komplexen Maschinen in ihrer Gänze
zu durchschauen.
Und wenn wir alle technischen und menschlichen Fehler einmal völlig auschließen, so ist einer der großen Gefahren die niemals völlig ausgeschlossen werden einen Hackerangriff.
Netzstabilität
Um die Netzstabilität aufrecht zu erhalten sind drei Dinge ausschlaggebend,
zu einem die Synchronisation der Spannungshöhe, der Frequenz und der Phasengleichheit.
Hier ist der Spannung und Frequenzverlauf von drei parallel geschalteten Stromerzeuger mit gleicher Spannungshöhe , Phasengleichheit und Frequenz dargestellt.
So sollte das Idealbild unserer Netzfrequenz aussehen.






So sieht  der Spannungsverlauf aus  wenn drei Generatoren Phasengleich
und mit gleicher Spannung parallel betrieben werden , aber einer der Erzeuger
eine abweichende Frequenz bereit stellt.
Hier hat einer der Erzeuger eine Frequenz von 50,5 Herz.


Bei einer Abweichung von nur 0,5 Herz bei einen der Erzeuger gibt es schon enorme Spannungsschwankungen im Netz.
Deshalb ist es besonders wichtig das alle angeschlossenen Stromerzeuger mit der genau gleichen Frequenz einspeisen.






Bei einer 90° Phasenverschiebung bei einem der drei Erzeuger ändert sich die
Spannung im Netz.




Und auch wenn einer der Erzeuger eine niedrigere Spannung von 165 Volt eff hat
ändert sich die gesamte Spannung im Netz.
Das macht offensichtlich das sich die drei Werte , Spannung , Frequenz und Phase
auf das gesamte Netz auswirken und deshalb genau geregelt werden müssen.



Folgend eine Liste in der aufgeführt ist, welche Maßnahmen bei welchen Ereignissen eingeleitet werden.


Wenn ich den genauen Frequenzwert messe, und mit genau ist die dritte Stelle hinter dem Komma gemeint also Tausendstel Herz,
kann ich mir also einen Überblick über die aktuelle Stromlage in Deutschland machen.
nach oben
Grundprinzip der Frequenzmessung
Das Grundprinzip einer Frequenzmessung beruht darauf das die Anzahl der eingehenden Schwingungen idealerweise eine Sekunde lang  gezählt werden um dann
das Ergebnis direkt als Frequenz zu Verfügung zu haben.
Die Messzeit kann aber auch variieren , dann muss das Ergebnis aber umgerechnet werden damit wir auf die Einheit Herz ( Schwingung pro Sekunde) kommen.
Wenn möglich sollte man darauf verzichten weil das Umrechnen die Ressource des Mikroprozessor beansprucht und daher nicht mehr für andere Funktionen zur
Verfügung steht, außerdem wird durch Rundungsfehler beim berechnen die Genauigkeit immer etwas verfälscht.
So könnte man beispielsweise die eingehenden Impulse nicht nur eine, sondern zehn Sekunden lang messen , und das Ergebnis dann durch 10 Teilen um auf das
gleiche Ergebnis zu kommen.
Wobei die Messgenauigkeit mit der Länge der Messzeit zu nimmt.
Dieses Messverfahren wendet man oft bei Messungen von kleinen Frequenzen an, wenn wir beispielsweise eine Frequenz von 0,1 Hz messen wollen würden wir
immer das Ergebnis Null angezeigt bekommen wenn die Messzeit eine Sekunde betragen sollte.
Es kann  also die Messzeit verlängert werden auf beispielsweise 10 Sekunden. Es wird dann in 10  Sekunden ein Impuls gemessen, dieser Messwert
durch 10 geteilt um dann auf den Wert von 0,1 zu kommen.
Das hat allerdings den Nachteil das immer eine relativ lange Zeit nämlich 10 Sekunden auf das Messergebnis gewartet werden muss.
Genauso gut kann aber auch die Messzeit verringert werden um sehr hohe Frequenzen zu messen.
Die Messzeit sollte bei sehr genauen Messungen also immer der zu erwartenden Frequenz angepasst werden um einerseits relativ genau zu messen, und
andererseits nicht zu lange auf das Ergebnis warten zu müssen.

nach oben
Messmethode

Hier wird eine Methode angewandt in der mit Hilfe von Timer 1 ein Sekundentakt erzeugt
wird, während nach jeweils jeder Sekunde eine Routine angesprungen wird in welcher dann
die eingehenden Impulse mit dem"Timer 0" gezählt und anschließend angezeigt werden.
Anschließend werden die gezählten Impulse wieder gelöscht, und der Vorgang beginnt von vorne.



Kleine Frequenzen misst man am besten indem man beispielsweise bei der ansteigende
Flanke des zu messenden Signales einen Taktgenerator startet und dann die Impulse des
Taktgenerators bis zur nächsten ansteigen der Flanke zählt , wenn ich zuvor weiß wie viele
Takte mein Generator pro Zeit abgibt , kann ich daraus die zu messende Frequenz berechnen.
Je höher die Taktfrequenz des Taktgenerators umso genauer das Messergebnis.
Beispiel: Ich habe einen Taktgenerator mit 100 KHz Frequenz und möchte zum Beispiel ein Signal
von 50 Hz messen.
Ich starte also beim eintreffen der aufsteigende Flanke meinen 100 KHz Taktgenerator ,
und stoppe den Taktgenerator wieder mit der nächsten aufsteigende Flanke.
Die Impulse des Taktgenerators  werden gezählt und ergeben den Wert von 2000.
Da eine Periode eines 100 KHz Signal 0,00001 Sekunden dauert, multipliziere ich diese Zeit
mit Anzahl der Impulse und komme auf 0,02 Sekunden und 0,02 Sekunden sind 50 Herz.

Die Pulsmessung ist eine Möglichkeit von vielen um eine Frequenz zu messen.
Unter Bascom gibt es den Befehl "Pulsein" mit dem  man einen bestimmten Portanschluss definiert
an dem dann das zu messende Signal angelegt wird.
Der Atmega selber hat einen integrierten  16 Bit Zähler der also bis 65535 zählen kann,
das macht er völlig unabhängig vom laufenden Programm somit wird der Rest des Programms nicht
beeinflusst.
Es wird  je nach Konfiguration bei einer ansteigenden oder absteigende Flanke ein interner
Zähler gestartet der alle 10 Mikrosekunden seinen Wert um Eins erhöht um dann bei der
nächsten absteigende oder ansteigende Flanke das Ergebnis aus zu geben.
Anschließend wird der Zählwert automatisch gelöscht, um dann bei der nächsten Flanke
wieder erneut zu zählen.
Der Zähler allerdings ist abhängig vom Prozessor Takt, somit werden auch die
10 Mikrosekunden nicht sehr genau sein.


nach oben

Schaltplan


nach oben
Funktion
Funktion:
Das zu messende Signal wird dem aufgefangenen Elektrosmog entnommen und einen Cmos Schmitt Trigger zugeführt.
vom Ausgang des Schmitt Trigger geht das Signal auf Pin 4 vom Atmega
Es wird an jeder ansteigende Flanke an Pin 4 ein interner Zähler aktiviert der alle 10 Mikrosekunden ein Wert von 1 auf addiert.
Dieser Wert in der Variable "Pulszeit" wird dann mit dem Faktor 2 multipliziert um auch die zweite Halbwelle mit zu erfassen.
Dann wird durch die Zeit von 10 Mikrosekunden geteilt.
Weil der Prozessor aber nur eine Rechnung pro Schritt vollziehen kann wird erst durch 10 und anschließend noch mal
durch 1000000 geteilt.
In der Berechnung kommt ein Wert von 2000 heraus, in der Praxis sind es aber 2090 und damit eine angezeigte Frequenz von 47,8469 Herz.
Diese Ungenauigkeiten können durch anpassen des Wertes 1000000 ausgeglichen werden.
Wird der Wert von 1 000 000 durch den Wert 1 044 999 angepasst ergibt sich die
Frequenz von  50,000 Hz.
Das bedeutet das die Zeit pro Zählwert nicht wie im Datenblatt angegeben bei 10 Mikrosekunden liegt sondern in der Praxis bei 9,56 Mikrosekunden.
nach oben
Programm
$regfile "m8def.dat" Definiert den Controller als Atmega 8
$crystal = 16000000 16 MHZ Quarz als Taktgeber
$hwstack = 32 Reservierter Speicher
$swstack = 10 Resevierter Spaeicher
$baud = 9600 Übertragungsgeschwindigkeit für Seriel
Config Lcd = 20 * 4 LCD Festlegen mit 20 Zeichen a 4 Zeilen
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , Rs = Portc.5 , E = Portc.4 LCD Anschlüsse festlegen
Ddrd.5 = 1                                                                                                             
Ausgang Für Led Gelb setzen
Ddrd.0 = 1
Ddrb.2 = 1                                                                                                             
Ausgang für Display Beleuchstung
Ddrd.7 = 1                                                                                                             
Ausgang für Rote Led setzen
Dim Pulszeit As Integer
Dim Zeit As Single
Dim Frequenz As Single
Dim Freq As String * 8
Dim Zeit_format As String * 8
Cls
Portb.2 = 1                                                                                                            
Display beleuchstung einschalten
Locate 1 , 1
Lcd " 50 Hz Zaehler"
Locate 2 , 1
Lcd "Pulsmessung"
Locate 3 , 1
Lcd "23.04.2018"
Wait 1
Cls                                                                                                                    
Display löschen
Do
Pulsein Pulszeit , Pinb , 0 , 0                                                                                        
Zeit für eine Halbwelle wird gemessen
Pulszeit = Pulszeit * 2                                                                                                
Verdoppeln um beide Halbwellen zu haben
Zeit = Pulszeit * 10                                                                                                   
10 us mal Pulszeit
Zeit = Zeit / 1188000
'Zeit = Zeit / 1044999                                                                                                 
durch Million weil Mikrosekunden
Frequenz = 1 / Zeit                                                                                                    
Kehrwert der Zeit um auf Frequenz zu kommen
Freq = Fusing(frequenz , "#.##")                                                                                       
Ausgangsanzeige  formatieren
Zeit_format = Fusing(zeit , "#.######")
Gosub Anzeige

Toggle Portd.7
Waitms 999
 Loop
 Anzeige:
Portd.5 = 1     

Sendeleuchte   an
Print Freq
Waitms 200
Portd.5 = 0       

Sendeleuchte aus
Cls
Locate 1 , 1
Lcd "Pulse=" ; Pulszeit
Locate 2 , 1
Lcd "Zeit=" ; Zeit_format
Locate 2 , 17
Lcd "Sek."
Locate 3 , 1
Lcd "Frequenz=" ; Freq
Locate 3 , 17
Lcd "Hz"
Waitms 1000
Return
nach oben
Fotos

nach oben

 Mit Timer zählen
Die nächste Möglichkeit soll die Genauigkeit bzw. die Auflösung erhöhen.
Beim eintreffen eines Signal ( Positive Halbwelle) wird ein Interrupt ausgelöst.
Das Programm springt damit in die Interrupt Routine, und resettiert einen laufenden Timer (Timer1 wegen der höheren Auflösung).
Beim nächsten Eintreffen des Signal wird abermals die Interrupt Routine aufgesucht, den Wert des bis dahin hochlaufenden Timers
in einer Variable gesichert und im Display angezeigt gleichzeitig auch über die RS232 Schnittstelle ausgegeben um die Daten im PC zu loggen
und anschließend der Timer wieder auf Null gesetzt.

Rechnerische Darstellung:
Wie berechnen wir nun die Frequenz ?
Als erstes nehmen wir den Prozessor Takt, der hier mit 16 MHz taktet.
Nehmen wir davon den Kehrwert kommen wir auf die Zeit die der Timer benötigt um einen Schritt aus zu führen .
1/ 16 000 000= 0,000000062 Sekunden

Wenn der Prozessortakt 16 MHz beträgt, bedeutet dies ,da der Timer1  bekanntermaßen bis 65535 zählen kann
in einer Sekunde ( 16 000 000/65535) 244,14 Timerüberläufe vollführt.
Also in Einer Sekunde 244,14 Überläufe, wir aber wollen nur 20 mSekunden  messen
also (244,14/1000) * 20 = 4,882 Überläufe
Bei 4,882 Überläufe kommen wird auf (4,882* 65535)  320000 Timerschritte
In der Praxis haben wir aber nicht 320 000 sondern 319 975 Schritte was zum einen an der nicht 100% genauen Prozessor Frequenz liegt,
und zum anderen an den Rundungsfehler der Mathematischen Verarbeitung.

Prozessortakt 16 MHz
Zeit
Timerschritte
49,99 Hz
0,02004 Sek
 320 031
50,00 Hz
0,02000 Sek
 319 975
50,01 Hz
0,01999 Sek
 319 918


nach oben

Programmzeile
Beschreibung
$regfile "m8def.dat"
$crystal = 16000000
$hwstack = 32
$swstack = 10
Konfiguration für das Display
Config Lcd = 20 * 4 Größenangabe Display mit 20 Zeichen und 4 Zeilen
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , Rs = Portc.5 , E = Portc.4
E/Ausgänge konfigurieren
Ddrd.5 = 1 
Pin als Ausgang definieren für Led gelb
Ddrd.7 = 1  
Pin als Ausgang definieren für Led blau
Ddrb.2 = 1       
Pin als Ausgang definieren für Display Beleuchstung
Ddrd.7 = 1  
Pin als Ausgang definieren für  Led rot
Pind.2 = 1
Portd.4 = 1
PullUp setzen
Ddrb.1 = 1
Timer 1
On Timer1 Routine_timer_1 
Routine die bei Überlauf angesprungen wird
Tccr1a = &B00000000  

Tccr1b = &B11000001    
(bit7)(Input Capture Noice Canceler) ist die Störunterdrückung
Bit7 =1 also eingeschaltet, wird der Eingangspin viermal hintereinander abgetastet und muss auch 4 mal den gleichen Wert aufweisen also 4 mal 0 oder 4 mal 1 je
nach welche Flanke erkannt werden soll damit der Eingangsimpuls als solcher
gewertet wird.
Bei Ausgeschalteter Störunterdrückung (Bit7 = 0) wird jede Flanke als
Eingangsimpuls erkannt .
So kann es beispielsweise bei nicht entprellten Signale zu Störungen durch mehrfach
Erkennung kommen.
Timsk = &B00000100
Interrupt für Timerüberlauf von Timer1 einschalten

Variable
Dim Zeit As Word
Dim Ueberlauf As Byte
Dim Ueberlauf_neu As Byte
Dim Wert As Long
Dim Ausgabe As Single
Dim Minwert As Single
Dim Maxwert As Single


$baud = 9600
Cls
Portb.2 = 1           

       ' Display beleuchstung einschalten
Locate 1 , 1
Lcd " 50 Hz Zaehler"
Locate 2 , 1
Lcd ""
Locate 3 , 1
Lcd "09.06.2

Wait 3020"
Cls  
Display löschen
Interuppt 1
Gicr = &B10000000            
Interrupt 1 einschalten- Bit 6 setzt Interrupt 0- Bit 7 setzt Interrupt 1
Sreg.7 = 1                 
Global freigeben
Mcucr = &B00001100        
interrupt 1 reagiert auf wechsel von 0 >1
On Int1 Messung             
Namen der Routine festlegen
Wait 3
Programm Anfang
Do
If Ausgabe < 49 Or Ausgabe > 51 Then Gosub Tonausgabe Min/Max Überwachung mit Tonausgabe bei abweichender Frequenz
Frequenz berechnen
Ausgabe = Wert / 991511500    ' Korrektur für kleiner anzeige Atmega Takt davon der Kehrwert sind 62 Nanosekunden dann die Anzahl der Timerwerte mit 62 Nano multipizieren.
Dann den Kehrwert um auf die Frequenz
zu kommen
Ausgabe = Wert / 1 000 000 000
Der Wert musste korrigiert werden.
Ausgabe = Ausgabe * 62
Ausgabe = 1 / Ausgabe

If Maxwert < Ausgabe Then Maxwert = Ausgabe Else Maxwert = Maxwert Berechnen der Maximal Frequenz
If Minwert < 1 Then Minwert = Ausgabe Else Minwert = Minwert Berechnen der Minimalen Frequenz
If Ausgabe < Minwert Then Minwert = Ausgabe Else Minwert = Minwert
Display Ausgabe
Cls
Locate 1 , 1
Lcd Fusing(ausgabe , "#.##")
Locate 1 , 19
Lcd "Hz"
Locate 3 , 1
Lcd "Minwert =" ; Fusing(minwert , "#.##")
Locate 3 , 19
Lcd "Hz"
Locate 4 , 1
Lcd "Maxwert =" ; Fusing(maxwert , "#.##")
Locate 4 , 19
Lcd "Hz"
Print Ausgabe Ausgabe über RS232
Toggle Portd.7
Wait 1
Loop
Programm Ende-
-Interrupt Routine
Messung:
Ueberlauf_neu = Ueberlauf
Wert = Ueberlauf_neu * 65535
Zeit = Timer1
Wert = Wert + Zeit
Ueberlauf = 0
Timer1 = 0
Return
Timer 1 Routine
Routine_timer_1:
Ueberlauf = Ueberlauf + 1
Return
Tonausgabe
Tonausgabe:
Portb.1 = 1
Waitms 1
Portb.1 = 0
Waitms 1
Return

nach oben
Das sind die Daten der erfassten 50 Hz Netzfrequenz

Programm Download hier


Und so sehen die Daten eines von einem Frequenzgenerator zu Verfügung gestelltes 50 Hz Signal aus.


Es wurde noch eine Anzeige für den Mittelwert der Messdaten hinzugefügt.
Update Programm hier.
Und ein Taster, der es ermöglicht das Programm per Tastendruck neu zu starten.
Dazu wurde folgende Zeile in der Hauptroutine plaziert : If Pind.2 = 0 Then Exit Do
nach oben


Technische Daten
nach obenUm den Stromverbrauch zu reduzieren, wurde das vorhandene Display mit 4 X 20 Zeichen gegen ein Display mit
 4 X 16Zeichen welches ohne Hintergrundbeleuchtung auskommt ausgetauscht,
wodurch ungefähr 10-20 mA eingespart werden konnte.
Stromaufnahme ohne Funk-Modul  ca.20 mA
Stromaufnahme mit Funk-Modul ca 40 mA
Messgenauigkeit





Aktualisiert 29.09.2023