INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Netzfrequenzmessung
28.09.2016, 21:43 (Dieser Beitrag wurde zuletzt bearbeitet: 30.09.2016 13:29 von ardu_arne.)
Beitrag #1
Netzfrequenzmessung
Ein Beitrag aus der Abteilung "Dinge die die Welt nicht braucht".

Etwas Hardware, sogar mit Schaltplan:
   

Etwas wenig kommentierte Software:
Code:
#include <DS3231.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

DS3231  rtc(SDA, SCL);
LiquidCrystal_I2C lcd(0x27, 20, 4);

int led = 13;
int takt1, takt2;

// t1=Netzfrequenz, t2=Referenzfrequenz
volatile unsigned long t1a, t1b, t2a, t2b;
unsigned long dt1, dt2 = 0;
double f, df, df_mHz;

volatile int Pin2 = LOW;        // Interrupt Netz
volatile int Pin3 = LOW;        // Interrupt RTC


// Interrupt Netz
void ISR0(void)
{
  Pin2 = !Pin2;
  t1b = t1a;
  t1a = micros();
  takt1 = HIGH;
}

// Interrupt RTC
void ISR1(void)
{
  Pin3 = !Pin3;
  t2b = t2a;
  t2a = micros();
  takt2 = HIGH;
}

void lcd_z0(void) {
  //Zeile_0
  lcd.setCursor(0, 0);
  lcd.print("Netzfrequenzmessung");
}

void lcd_z1(void) {
  //Zeile_1
  lcd.setCursor(0, 1);
  lcd.print("  Messwert: ");
  lcd.print(f, 3);
  lcd.print("Hz");
  lcd.setCursor(0, 2);
  lcd.print("Abweichung:");
  if (df_mHz < 10 && df_mHz >= 0)   lcd.print("  ");
  if (df_mHz >= 10)                 lcd.print(" ");
  if (df_mHz < 0 && df_mHz > -10)  lcd.print(" ");
  lcd.print(df_mHz, 0);
  lcd.print("mHz  ");
}


void setup()
{
  Serial.begin(115200);

  rtc.begin();
  rtc.enable32KHz(true);
  rtc.setOutput(OUTPUT_SQW);
  rtc.setSQWRate(SQW_RATE_1);

  lcd.init();
  lcd.backlight();

  pinMode(Pin2, INPUT_PULLUP);
  pinMode(Pin3, INPUT_PULLUP);
  attachInterrupt(0, ISR0, RISING);
  attachInterrupt(1, ISR1, RISING);
  pinMode(led, OUTPUT);
  
  delay(2000);

  lcd_z0();
}

void loop()
{
  if (takt2) {

    // etwas rechnen
    dt1    = t1a - t1b;
    dt2    = t2a - t2b;
    f      = 50.0 / dt1 * dt2;
    df     = f - 50.0;
    df_mHz = df * 1000;

    // Ausgabe auf LCD
    lcd_z1();

    // Ausgabe auf seriellen Monitor
    Serial.print( f, 3);       Serial.print(" ");
    Serial.print( df, 3);      Serial.print(" ");
    Serial.println();

    // Takt der RTC
    digitalWrite(led, !digitalRead(led));

    // Sekundentaktmerker aus beiden ISR nullen
    takt1 = LOW;
    takt2 = LOW;
  }
}

Messen heißt vergleichen.
Wenn man die Netzfrequenz mit dem internen Takt eines Arduinos vergleicht kommt nichts brauchbares dabei heraus.
Der interne Takt ist je nach Typ des Schwingers (Quarz oder Keramikresonator) mehr oder weniger genau und dann auch noch nicht konstant daneben.

Besser sieht es mit RTC-Modulen aus. Das Datenblatt eines DS3231 gibt dazu "Accuracy ±2ppm from 0°C to +40°C" an.
Das ist um einiges besser als jeder Arduino Takt. Dazu kann man die RTC noch so einstellen dass am Ausgang SQW ein 1Hz Signal heraus kommt.

Aus der Netzspannung (hinter einem Trafo) setzt man einen Komparator auf die positive Halbwelle an. Dabei sollte man möglichst weit weg vom Nulldurchgang aber auch noch weit vor dem Scheitelwert triggern. Als Ergebnis erhält man dann ein 50Hz Rechtecksignal. Dieses Signal wird dann über einen Frequenzteiler 50:1 auf 1Hz heruntergeteilt. (siehe Schaltplan)

Von beiden 1Hz Signalen ermittelt der Arduino via micros() den Abstand der steigenden Flanken. Da kommt dann jeweils irgend was in der Nähe von 1000000µs heraus. Aus der Differenz beider Zeitmessungen kann man dann die Abweichung der Netzfrequenz vom 50Hz Sollwert ermitteln. Die beiden Zeitmessungen laufen zwar asynchron aber gleichzeitig ab. Deshalb kürzt sich der Fehler wegen des "schlechten" Arduino Takt aus der Messung heraus.

Erst war es nur eine Spielerei von mir, dann war ich aber erstaunt wie genau das Ergebnis ist. Die Messung mit dem Arduino stimmt bis auf die 3. Stelle hinter dem Komma (±1mHz) mit den Vergleichswerten aus dem Internet überein. Einziger Unterschied: die lokale Messung ist schneller.
Der Messwert auf der Seite http://www.netzfrequenzmessung.de/ erscheint ca. 1-2s verzögert.

Weitere Vergleiche:
www.swissgrid.ch ---> Aktualisierungsgeschwindigkeit für einen direkten Vergleich eigentlich zu gering.
http://www.netzfrequenz.info

Wer es genauer haben will, nimmt statt des 1Hz Impulses von einer RTC Typ DS3231 den 1Hz Impulsausgang von einem GPS Empfänger.

Viel Spaß damit
Arne

ExclamationMit zunehmender Anzahl qualifizierter Informationen bei einer Problemstellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.Exclamation
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.09.2016, 06:40
Beitrag #2
RE: Netzfrequenzmessung
Hi Arne,
interessante Sache, besonders die Links zu den Seiten wo die aktuelle Netzfrequenz angezeigt wird. Das erinnert mich an die Zeit als ich auch mal mit Netzfrequenz gespielt habe...damals gab es einen 8 Füßigen TTL Baustein der 50:1 gemacht hat. Leider war das ganze zu Störanfällig das es für eine Zeitanzeige nicht ausreichte weshalb ich dann meine Uhr mit einem 1MHz Quarz aufgebaut habe.

lgbk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.09.2016, 15:13
Beitrag #3
RE: Netzfrequenzmessung
So ein 50:1 Teiler in TLL als 8 Piner wäre für diesen Fall genau das richtige. Kennst du noch die Typenbezeichnung?
Ich hatte eine Zeit lang gesucht und bin auf den 74390 als einfachste Lösung gekommen. Außerdem lag der noch in der Bastelkiste.
Die Störanfälligkeit muss sich erst noch beweisen. Bisher läuft es recht gut.

Gruß
Arne

ExclamationMit zunehmender Anzahl qualifizierter Informationen bei einer Problemstellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.Exclamation
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.09.2016, 21:14
Beitrag #4
RE: Netzfrequenzmessung
(29.09.2016 15:13)ardu_arne schrieb:  So ein 50:1 Teiler in TLL als 8 Piner wäre für diesen Fall genau das richtige. Kennst du noch die Typenbezeichnung?
Ich hatte eine Zeit lang gesucht und bin auf den 74390 als einfachste Lösung gekommen. Außerdem lag der noch in der Bastelkiste.
Die Störanfälligkeit muss sich erst noch beweisen. Bisher läuft es recht gut.

Gruß
Arne

TTL'er natürlich... das ist ein SN49710P und nein ich habe extra den Restlichtverstärker aktiviert das es keinen Lesefehler gibt....weil Datenblatt im Web ist Fehlanzeige... das Teil trägt das Herstelldatum KW 19 von anno 1973 Tongue
Und 2 Stück davon habe ich noch...hatte auch nie mehr...
Mittlerweile gibt es einen fast ähnlich bezeichneten Analogchip wo 49710 draufsteht...
lgbk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.09.2016, 13:39
Beitrag #5
RE: Netzfrequenzmessung
Im Handel ist der SN49710P wohl nicht mehr erhältlich weil der schon im Museum zu finden ist.
Das berühmte TI "Pocket Guide" mit dem Datenblatt des SN49710P hatte ich sogar kürzlich noch in der Hand als ich mir den SN74LS390 angeschaut habe.

ExclamationMit zunehmender Anzahl qualifizierter Informationen bei einer Problemstellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.Exclamation
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.09.2016, 20:56
Beitrag #6
RE: Netzfrequenzmessung
..oh da war deine Suche ja Erfolgreich, ich habe im Netz nichts finden können...und mein TTL Pocket Guide schwirrt gerade irgendwo in einer Box rum anstatt im Regal wo es hingehört...seufz...
Apropos Museum, bei meiner Suche bin ich auch auf Händler gestoßen wo so alte Typen noch auf Lager haben... auch von diesem Chip sind noch ein paar Hundert erhältlich...nur Preis steht da keiner dabei...Rolleyes
lgbk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste