Netzfrequenzmessung

#3602730
Lesenswert?

Wikipedia:
> Zungenfrequenzmesser werden üblicherweise zur Bestimmung der Toleranz
> der Netzfrequenz oder anderer niederfrequenter Spannungen eingesetzt,
> da sie meist nur einen kleinen Frequenzbereich anzeigen können. Je
> nach Frequenz und möglicher Abweichung ist ihr Messbereich
> beispielsweise für Netzfrequenz 50 Hz bzw. 60 Hz +/- 2…6 Hz.
Die +/- 2…6 Hz sind der Messbereich

http://www.mueller-ziegler.de/html/zungenfrequenzmesser.html
Dieses Teil hat eine Genauigkeit von 0.5%. Da wäre ein Quarz besser.
Gast #3603136
Lesenswert?

Die Netzfrequenzmessung ist vor allem eins: Teuer.

Da es sich um ein europaweites Netz handelt, kann man davon ausgehen, 
dass auch die Frequenz sehr genau eingehalten wird. Willst Du also hier 
etwas feststellen können, so musst Du "besser" sein.

Meinen Radiowecker, natürlich mit Stützbatterie, habe ich nach dem 
Anstecken, kein einziges Mal gestellt. Das war vor vielen Jahren. Ich 
würde mich wundern, wenn da ein normaler (nicht Funk-) Quarzwecker 
mithalten kann.
Gast #3603145
Lesenswert?

Amateur schrieb:

> Die Netzfrequenzmessung ist vor allem eins: Teuer.

> Da es sich um ein europaweites Netz handelt, kann man davon ausgehen,
> dass auch die Frequenz sehr genau eingehalten wird. Willst Du also hier
> etwas feststellen können, so musst Du "besser" sein.

ein 10€ GPS modul ist schon genauer - das finde ich jetzt nicht so 
teuer.
#3603362
Lesenswert?

Achim Hensel schrieb:
> "Vielleicht"??
Erst war es nur eine Vermutung. Ein Blick ins Datenblatt des NEO-6 hat 
sie dann bestätigt. Das Modul hat einen PPS Ausgang, er ist auf der 
Platine aber nicht nach Außen geführt.
>Und wenn ja, wie belastbar? Also noch einen Treiber dazu...
Vermutlich ein 3V3 CMOS Ausgang, den man direkt mit dem µC verbinden 
kann. Wenn du es genauer wissen willst, musst du nachfragen, welcher 
Spannungsregler auf der Platine von eBay verbaut ist und das oben 
verlinke Datenblatt konsultieren.
Gast #3603398
Lesenswert?

Amateur schrieb:
> Meinen Radiowecker, natürlich mit Stützbatterie, habe ich nach dem
> Anstecken, kein einziges Mal gestellt. Das war vor vielen Jahren. Ich
> würde mich wundern, wenn da ein normaler (nicht Funk-) Quarzwecker
> mithalten kann.

Dein Radiowecker wird aber sicher je nach Tageszeit um mehrere Sekunden 
falsch laufen. Er wird das dann einfach jeweils wieder kompensieren 
(also... nicht er, sondern die Netzbetreiber. ;-) )
Mit einer Quarzbasierten Referenz kann man diese Schwankungen also 
locker messen.
#3603411
Lesenswert?

Max H. schrieb:
> Achim Hensel schrieb:
>> Datenblatt vom Baustein oder von der gesamten Platine?
> Überleg mal logisch...

Erste Aussage ist "Vllt. kann man irgendwo auf der Platine das PPS 
Signal abgreifen."

In welches Datenblatt muss ich dann schauen, wie ich an das 
unbestrittene PPS-Signal des NEO drankomme?

Das

Max H. schrieb:
> Das
> NEO-6 hat laut Datenblatt einen PPS Ausgang.

habe ich nicht bestritten, hätte ich jetzt aber nicht als Vermutung 
erkannt.
#3603559
Lesenswert?

Achim Hensel schrieb:
> In welches Datenblatt muss ich dann schauen, wie ich an das
> unbestrittene PPS-Signal des NEO drankomme?

Max H. schrieb:
> Seite 12:
> 
https://www.u-blox.com/images/downloads/Product_Docs/NEO-6_DataSheet_%28GPS.G6-HW-09005%29.pdf
>
Auf S. 12 ist die Pinbelegung und da sieht man, dass das PPS Signal am 
Pin 3 ausgegeben wird. Also weiß man wo das "irgendwo" auf der Platine 
ist.
Gast #3603748
Lesenswert?

Dirk J. schrieb:
> Ruf doch Deinen Energieversorger an und frage nach der aktuellen
> Netzfrequenz. Oder brauchst Du die Info alle paar Sekunden?

steht doch im Internet - wozu noch telefonieren? Link wurde oben schon 
gepostet.

Sie wir bei ihm auch nicht anders sein, also im Rest von DE.
Gast #3603843
Lesenswert?

> Ruf doch Deinen Energieversorger an und frage nach der aktuellen
> Netzfrequenz. Oder brauchst Du die Info alle paar Sekunden?

Das würde ich nicht tun! Die Strommafia bucht ihm für die Auskunft 
womöglich noch eine Extragebühr auf seine Stromrechnung.
#3604362
Lesenswert?

>> Bei lokal höherer Last ist auch die Netzfrequenz winzig kleiner
> Kannst du das mal näher erklären?
Das Netz ist überall phasenrichtig zusammengeschaltet. Wenn sich die 
Frequenz in einem Teil des Netzes ändert, würde sich die Phasenlage zum 
Rest des Netzes ebenfalls ändern. Dadurch fließen gigantische 
Ausgleichsströme, die irgendwann einem Kurzschluß gleichkommen. Sollte 
sowas also wirklich mal passieren (z.B. außer Tritt fallen eines 
Kraftwerksgenerators) wird der betroffene Netzteil sofort vom Rest 
getrennt (Lastabwurf).
Gast #5028127
Lesenswert?

Die Daten der Netzfrequenz über mehrerer Jahre im Vergleich gibt es 
hier:
https://www.netzfrequenz.info/

Aber vielleicht meinte der TO damals gar nicht die Frequenz im 
europäischen Verbundnetz, sondern betreibt eine eigenes Inselnetz, 
völlig unabhängig in der Frequenz. Wenn dann Netzfrequenz und -phase 
beim Ankoppeln ans große Netz nicht stimmen, kann es danach auch mal so 
wie bei dieser 4x64MW Anlage aussehen.
http://steamforum.com/images/IranshahrThermalPowerPlant4x64MW-Couplingfatigue_2009.pdf

Da er es aber nicht fertig bekommen hat, seine Frage vernünftig zu 
formulieren ...
#5028173
Lesenswert?

Hallo, ich habe das problem für einen Drehstromgenerator mit einem 
Attiny2313 gelöst.

Du benötigst ein Trafo, eine graetzbrücke und eine diode zum entkoppeln 
der brücke. Der trafo sollte etwa 7V nennspannung haben.

Dann kannst du mit dem captureeingang die frequenz messen.


1
program MyProject;
2

3
{ Declarations section }
4

5
const takt = 1000000; //
6
      baud = 9600;
7
      ubrr_val = ((takt+baud*8)/(baud*16)-1);
8

9
var frequenz:word;
10
    pwm_wert:byte;
11
    trig:array [0..7] of byte;
12
    temp,i:byte;
13

14
procedure send_byte(eing:byte);
15
begin
16
   asm
17
   sendbyte:
18
    sbis    UCSRA, UDRE         ; warten bis das UART bereit ist
19
    rjmp    sendbyte
20
   end;
21
   UDR :=eing;
22
end;
23

24
procedure eukl(ein:word);
25
var e,r,eing:word;
26
    c,val:byte;
27
begin
28
           eing:=ein;
29
           e:=100;
30
           for c:=1 to 3
31
           do
32
           begin
33
             r:=(eing div e);
34
             val:='0'+r;    // spart 2 Byte
35
             send_byte(val);
36
             eing:=eing - r*e;
37
             e:=e div 10;
38
           end;
39
      send_byte(';');
40
      send_byte(#13);
41
      send_byte(#10);
42
end;
43
var r:byte;
44
    buff:array[0..7] of word;
45
    
46
procedure TIMER1_CAPT; org IVT_ADDR_TIMER1_CAPT;
47
var  t_reg,t_reg_alt:word;
48
begin
49
     inc(r);
50
     t_reg_alt:=t_reg;
51
     t_reg:=ICR1L;
52
     t_reg:=t_reg or (ICR1H shl 8);               // achtung , genauso auslesen, andernfalls gibt es fehler !!!
53

54
     buff[r and 7]:=(5040000 div (t_reg - t_reg_alt));    // frequenz div 2 da vollweggleichrichter
55
     //buff[r and 7]:=(4950000 div (t_reg - t_reg_alt));      // frequenz div 2 da vollweggleichrichter
56
     frequenz:=0;
57

58
     for i:=0 to 7
59
      do frequenz:=frequenz+buff[i];
60
     
61
     frequenz:=frequenz shr 3;
62
     eukl(frequenz);                           // ausgabe des wertes über die serielle schnittstelle
63
     
64
     if frequenz < 400                         // unter 40 Hz komplett aus
65
       then
66
            OCR0B:=0
67
       else
68
         begin
69
            OCR0B:=(frequenz - 400) shl 1;     // nullpunkt verschieben
70
            if frequenz > 525
71
                        then OCR0B:=0;         // überlauf verhindern
72
         end;
73
            
74
     frequenz:=frequenz div 10;                // nur den ganzzahligen ausgeben ...
75

76
     for i:=0 to 7
77
     do
78
       if  frequenz >= trig[i]
79
       then portb.i:=0                           // hier ist portb:=portb and not X nicht kürzer
80
       else portb.i:=1;
81

82
     (*
83
     if frequenz >= trig[0]                       // PWM für das Netzgerät
84
        then
85
            begin
86
                    if pwm_wert < 255
87
                       then inc(pwm_wert);
88
            end
89
                  else
90
            begin
91
                    if pwm_wert > 0
92
                            then dec(pwm_wert);
93
            end;
94
       *)
95

96

97

98

99
end;
100

101

102
procedure ADDR_INT0(); org IVT_ADDR_INT0;
103
begin
104
    GIMSK:=0;   // ext INT off
105
    GIMSK:=(1 shl INT0);// INT0 aktivieren
106
end;
107

108

109
procedure write_all;
110
begin
111
    for i:=0 to 7
112
    do
113
        eeprom_write(i,trig[i]);
114
end;
115

116
procedure read_values;
117
var err:byte;
118
begin
119
  send_byte(#10);
120
  send_byte(#13);
121
  err:=0;
122
  for i:=0 to 7
123
  do
124
   begin
125
        temp:=eeprom_read(i);
126

127
        if  (temp < 20 ) or (temp > 60)
128
        then
129
              temp:=54-i;
130
        trig[i]:=temp;
131
        eukl(temp);
132
   end;
133
   if err > 0 then write_all;
134
   
135
   send_byte('*');
136
   send_byte(#10);
137
   send_byte(#13);
138
   Delay_ms(800);                          // Wait for UART module to stabilize
139
end;
140

141

142
procedure USART__RX();  org IVT_ADDR_USART__RX;
143
var val:byte;
144
begin
145
     exit;
146
     val:= UDR; //UART1_Read();            // read the received data,
147
     case val of
148
          'R':begin
149
                 for val:=0 to 7
150
                 do
151
                  trig[val]:=54-val;
152
              end;
153
              
154
          'q':dec(trig[0]); 'a':inc(trig[0]);
155
          'w':dec(trig[1]); 's':inc(trig[1]);
156
          'e':dec(trig[2]); 'd':inc(trig[2]);
157
          'r':dec(trig[3]); 'f':inc(trig[3]);
158
          't':dec(trig[4]); 'g':inc(trig[4]);
159
          'z':dec(trig[5]); 'h':inc(trig[5]);
160
          'u':dec(trig[6]); 'j':inc(trig[6]);
161
          'i':dec(trig[7]); 'k':inc(trig[7])
162
          
163
         else 
164
              val:=0;
165
     end;
166

167
     if val > 0 then
168
                 write_all;
169
                 
170
     read_values;
171
end;
172

173
begin
174
  (*
175
   ubrrh:=hi(ubrr_val);       // rs232c init
176
   ubrrl:=ubrr_val and $FF;
177
   *)
178
   UART1_Init(9600);
179
   UCSRB:= (1 shl RXEN) or (1 shl TXEN) or 128;// empfangen , senden und IRQ wenn Zeichen empfangen wird.
180
  // 8 data bits, 1 stop bit
181
   UCSRC:= (1 shl UCSZ1) or (1 shl UCSZ0);
182

183
   //-----------------------------
184
   DDRB:= $FF; //port B ausgang
185
   portb:=$FF; // alles auf low
186
   DDRD:= $FF and not (1 shl 2 or 1 shl 3 or 1 shl 3 or 1 shl 6); // INT0,INT1,port PD6 eing;
187
                                                            // Pin 6    7         8  am IC
188
   portd:=0; // keine pullubs
189
  //-------------------------------
190
  TCCR1A:= 0;                                   // CTC mode
191
  TCCR1B:=(1 shl CS10) or                       // clk src = CPU-Takt / 256 , start timer
192
          (1 shl ICNC1) (*or (1 shl ICES1)*) ;  // fallende Flanke auswählen , Rauschfilter ein
193
  TIMSK:= (1 shl ICIE1);                        // Input-capture aktivieren, Mega32: TIMSK
194
  TIFR:=  (1 shl ICIE1);                        // Schon aktive Interrupts löschen, Mega32: TIFR
195
  //-------------------------------
196
  //MCUCR:= (1 shl ISC00);                        // pegelwechsel schaltet löst int aus
197
  //GIMSK:= (1 shl INT0)                     ;    // INT0 aktivieren
198
   /// --------------------Hier für PWM -----------------------------
199
  pwm_wert:=0;                                  // PWM zähler auf null setzen
200
  TCCR0A:=(1 shl COM0B1) or (1 shl WGM00);      // phase correct PWM mode
201
  OCR0B:=0;                                     // PWM auf 0% einstellen
202
  TCCR0B:=(1 shl CS01);                         // clock source = CLK/8, start PWM
203
   // ---------------------------------------------------------------
204
  read_values;
205
   // ---------------------------------------------------------------
206
   asm                                      ;   // ints freigeben
207
      SEI
208
   end;
209
   while TRUE do       // Endless loop
210
      begin
211
      end;
212
  { Main program }
213
end.
#7802371
Lesenswert?

Um die Netzfrequenz zu messen verwende ich ein gebrauchtes AC-Netzteil. Dazu ein paar Komponenten auf einer Raster Platine. Und ein ESP32-C3. Der posaunt das Ergebnis per MQTT an HomeAssistent.

Zum Messen verwende ich analogRead(A0), welches ich gegen 2000 vergleiche. Alles größer 2000 ist Logisch 1, darunter ist logisch 0.

Es werden 50 Übergänge von 1 zu 0 gemessen und die Zeit dafür ermittelt.

1
freq = (( PROBE_COUNT * MICROS * KORREKTUR ) / ( endzeit - startzeit ));

Ist hinreichend genau. Auf eine Webserver und der gleichen habe ich auf dem ESP verzichtet, es reicht wenn der WLAN offen hält und nach dem Messen eine MQTT Nachricht sendet.

Wichtig ist es den Eingang von A0 nicht zu hochohmig zu lassen, sonst sieht der die negative Halbwelle auch. Dann bekommt man ca. 100Hz heraus. Deshalb der Schwellwert von 2000. Das Maximum liegt bei mir bei ca 3980 counts, bei einer Z-Diode von 3Volt. In der negativen Halbwelle habe ich Wert von 0 bis 50 counts, obwohl der Eingang dann bei -0,7 Volt liegen sollte. Anscheinend misst der ADC die negativen Spannungswerte irrtümlich auch positiv. Die Eingänge dürfen bis -0,7V gefahren werden. Also eine Diodenspannung in Durchflussrichtung.

Der LM1117-5V sorgt dafür das der 3.3V-Spannungsregler auf dem ESP-Modul immer die gleiche Spannung hat, auch wenn ich USB anschließe oder nicht. Es ist kein Problem den 5V von USB und von der Platine kurzfristig parallel zu schalten.

Das Netzteil ist in einer Halbwelle etwas mehr belastet, wird aber nur handwarm. Sonst müsste man über D3 noch einen Widerstand von 470k legen um es gleichmäßig zu machen.

Angehängte Dateien:
Moderator (Firma: Titel) Persönliche Seite #7802393
Lesenswert?

Jens S. schrieb:

Um die Netzfrequenz zu messen

Den 10 Jahre alten Link gleich am Anfang des Threads hast du gesehen? Der funktioniert immer noch.

ein ESP32-C3.

Wie gut und stabil ist dessen Quarz?

Der posaunt das Ergebnis per MQTT an HomeAssistent.

Du könntest die amtliche Netzfrequenz auch einfach aus dem Netz holen. Und mit deiner vergleichen. Wenn du eine andere heraus bekommst, dann musst du noch nachbessern.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren