Projektvorstellung: Phasenbestimmer

Hallo,
ich möchte euch heute mein neues Projekt vorstellen. Der Name „Phasenbestimmer“ ist vielleicht nicht so aussagekräftig, aber was passenderes ist mir leider nicht eingefallen.
Der Hintergrund für das Projekt ist folgender:
Wenn man ein Ethernet über Powerline in seiner Wohnung / Haus / Firma aufbauen will, ist es meist notwendig, dass die Powerline Geräte alle an der gleichen Phase des 230 Volt Netzes hängen, weil die Signale meist nicht oder nur schlecht von einer Phase auf die andere überkoppeln. (Für diejenigen, die bis jetzt nur Bahnhof verstehen, empfehle ich einen Ausflug in die Technikdetails, siehe http://www.tomsnetworking.de/content/tipps_tricks/j2007a/workshop_plc_phasenkoppelung/index.html).
Wenn man den Einsatz eines Phasenkopplers vermeiden will, sollte man also die Powerline Geräte an die gleiche Phase hängen. Doch wie finde ich raus, ob das Büro im Dachgeschoss an der gleichen Phase, wie der Router im Keller oder der Multimedia PC im Wohnzimmer hängt, wenn nicht alles zufälligerweise mit der gleichen Sicherung abgesichert ist?

Die Idee ist folgende:
Mi dem Arduino werte ich den Nulldurchgang des Wechselstroms aus. Diesen Zeitpunkt synchronisiere ich mit dem micros()-Timer. Dann messe ich den Nulldurchgang des Wechselstroms an einer anderen Steckdose und kann jetzt bestimmen, ob hier der Nulldurchgang ein Vielfaches von 20ms, entsprechend der Netzfrequenz von 50Hz vom letzten Wert entfernt ist. Weicht die Differenz um 1/320ms bzw. 2/320ms ab, messe ich gerade eine andere Phase. Ich muss also eine Steckdose suchen, wo die Differenz zwischen den Nulldurchgängen genau ganzzahlig ist. Zur Verdeutlichung die attachte Grafik.

Zur Messung des Nulldurchgangs benötige ich einen einfachen Detektor, den ich aus nur 4 Komponenten aufgebaut habe (s. Schaltplan).

Als Transformator habe ich ein altes Netzteil eines Telefons benutzt. Sekundärseitig liefert das Netzteil 9V Wechselspannung (Achtung: die meisten Netzteile liefern eine Gleichspanung). Wenn man einen offenen Trafo benutzt, sind die entsprechenden Vorsichtmaßnahmen im Umgang mit Netzspannung zu beachten, also lieber ein Netzteil im Gehäuse benutzen. Der Widerstand hat 2k7 und die Diode ist eine 1N4148. Die Diode schaltet die negative Halbwelle der Sekundärspannung kurz , so dass die positive Halbwelle die Fotodiode anregt und den Fototransistor der Optokopplers durchschaltet. Der Arduino Eingang PIN7 wird mit Pullup betrieben und geht somit auf LOW. Am Arduino PIN7 liegt ein Rechtecksignal mit 50Hz an, die Flanken des Rechtecks liegen genau im Nulldurchgang der Sinuswelle der Netzspannung.
Zwischen PIN9 und GND wird zusätzlich ein Taster geschaltet, zu dessen Funktion später mehr.

Jetzt zum Programm:

/*
 This code is in the public domain.
 */
#include <Bounce.h>
#include <LiquidCrystal.h>

#define BUTTON 9       // Schalter zwischen Pin9 und GND (aktiv LOW), Pullup aktiviert
#define OPTO 7

Bounce bouncer = Bounce( BUTTON,5 ); 
LiquidCrystal lcd(22, 23, 24, 25, 26, 27);

unsigned long offFlanke, onFlanke, onFlanke2;
unsigned long phaseInit;
float frequ, frequM;
float phase;
int zaehler;
boolean pushed;

void setup() {
// Eingangs Pins konfigurieren 
  pinMode(OPTO, INPUT);
  digitalWrite (OPTO, HIGH);     // enable pullup
  pinMode(BUTTON, INPUT);
  digitalWrite (BUTTON, HIGH);     // enable pullup

  Serial.begin(9600);
  Serial.println("Programm P_50Hz startet....)");
  Serial.println("HIGH\tLOW\tFrequ");

  lcd.begin(16, 2);
  lcd.clear();
  lcd.print("Phasenwinkel");
  lcd.setCursor(0, 1);
  lcd.print("Anlaufphase");
}
void loop() {
  while (digitalRead(7)) {}  // warte solange HIGH 
  while (!digitalRead(7)) {}  // warte solange wie LOW 
//  Serial.println((micros() - onFlanke));    
  if ((micros() - onFlanke)>200000) {      // in der Anlaufphase einige Zyklen leer durchlaufen lassen
    Serial.println("neue Anlaufphase");
    for (int i=0;i<100;i++){
      while (digitalRead(7)) {}  // warte solange HIGH 
      while (!digitalRead(7)) {}  // warte solange wie LOW 
    }  // Anlaufphase, warte 100 Wechsel
  }
  while (digitalRead(7)) {}  // warte solange HIGH   // für sauberen Start der Messung
  while (!digitalRead(7)) {}  // warte solange wie LOW 
  onFlanke = micros();       // erste steigende Flanke
  while (digitalRead(7)) {}  // warte solange HIGH 
  offFlanke = micros();      // folgende fallende Flanke
  while (!digitalRead(7)) {}  // warte solange LOW 
  onFlanke2 = micros();      // nächste steigende Flanke
  frequ= frequ + (onFlanke2 - onFlanke);   // zur Mittelung aufsummiert
  zaehler = zaehler+1;
  Serial.print(offFlanke - onFlanke, DEC);   // Dauer HIGH
  Serial.print("\t");
  Serial.print(onFlanke2 - offFlanke, DEC);  // Dauer LOW
  Serial.print("\t");
  Serial.print(onFlanke2 - onFlanke, DEC);   // Dauer der Periode
  Serial.print("\t");
  Serial.println(zaehler, DEC);              // Anzahl der Mittelungen
  bouncer.update ( );
  int value = bouncer.read();
  if ((value == LOW)& !pushed ) {
    frequM = frequ/zaehler; // mittlere Frequenz
    phaseInit = onFlanke;  // erste Flanke zur Messung
    zaehler = 0;
    frequ = 0;
    pushed = true;
  }
  if (value == HIGH) {
    pushed = false;
  }
  phase = (onFlanke - phaseInit)/frequM;    // Anzahl der Perioden seit Anfang der Messung
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print(frequM);
  lcd.setCursor(10, 0);
  lcd.print(phase - int(phase+0.5));   // Phasenwinkel 0,33 = 120° 
  lcd.setCursor(0, 1);
  lcd.print((frequ/zaehler));
  lcd.setCursor(10, 1);
  lcd.print((1000000/(frequ/zaehler)));   // Frequenz in Hz
//  delay(100);
}

Nach den üblichen Initialisierungen startet das Programm zunächst mit einigen Durchläufen von Sinuswellen, ohne zu messen. Ich habe die Erfahrung gemacht, dass bei den ersten Durchläufen die Frequenz noch schwankt (mglw ein Temperatureffekt).
Dann wird die erste Sinuswelle gemessen und in mehreren Durchläufen die Länge der Sinuswellen gemittelt. Auf dem LCD Display kann man verfolgen, ob sich die Dauer stark ändert.
Wenn der Taster gedrückt wird, merkt sich der Arduino den Zeitpunkt des Nulldurchgangs. Auf dem LCD wird jetzt zusätzlich die Phasenabweichung ausgegeben. Wechselt man mit dem Trafo jetzt auf eine andere Phase mit weiterlaufendem Programm, wird als Phasenabweichung 0,33 oder 0,66 angezeigt.

Das Programm funktioniert ganz gut. Leider mit einem entscheidenden Nachteil.
Die Netzspannung selbst hat Phasenschwankungen, die in meinem Fall manchmal so schnell passieren, dass das die Messung verfälscht oder gar unmöglich macht, weil man so schnell nicht vom Dachgeschoss ins Wohnzimmer kommt. Aber man kann ja mehrmals ausprobieren.
Wenn jemand eine Idee hat, wie man mit den Phasenschwankungen der Netzspannung umgehen kann, wäre ich dankbar. Zusätzlich scheinen kleine Temperaturunterschiede die Oszillatorfrequenz des Arduinos und damit auch die Messgenauigkeit zu beeinflussen. Nur das Beleuchten des Arduino Boards mit der Schreibtischlampe machte sich schon in der Messung bemerkbar.
Der Programmcode ist sicher noch nicht optimal, aber mir kam es erstmal auf das Prinzip und die Machbarkeit an.

Sinus_Phasen.bmp (788 KB)

Nulldurchgangsdetektor.bmp (987 KB)

Hallo erni-berni Ich bezweifle die Existenz der von Dir beschriebenen Phasenschwankungen, es sei denn, Du hast ein Versorgung im Inselbetrieb mit einem Umrichter der schlecht funktioniert. Diese Phasenschwankungen sind praktisch auch Frequenzschwankungen und beide gibt es Systembedingt bei mechanischen Generatoren im Verbundnetz nicht oder mit sehr kleinen Werten im µSek Bereich. Ich habe eher den Verdacht von Störungen (zB auch durch Powerline) oder einen Programmierfehler (hab Deinen Kode noch nicht analysiert). Ich bezweifle auch ein wenig daß, wenn die Installation in Deinem Hause mit Drehstrom eingespeist wird. Wenn wir mal annehmen, daß eine Drehstromeinspeisung vorhanden ist, dann ist sicher daß die verschiedenen Etagen nicht mit mehrere Phasen versorgt werden sondern mit einer und versucht wird die Lastaufteilung möglichst gut auf alle 3 Phasen zu erreichen. Darum 1 Phase im Keller, (Waschmaschiene, Trockner Hobbykeller) eine in der Küche mit elektrischen Kochfeld und eine im restlichen Räumen. Ein Blick auf den Plan der Hausinstallation gibt hier Auskunft oder auch eine kurze Kontrolle durch einen Fachkundigen Elektriker der mal die Abdeckung des Schaltschranks entfernt. Ich bezweifle, wenn Du in einem Raum eine andere Phase findest als in einem anderen Raum, daß in diesem ersten Raum Steckdosen noch einer 2. Phase vorhanden sind. Das deshalb, weil die Installation dadurch aufwendiger sein würde und bei den erwarteten Leistungen in einem Raum dies nicht notwendig ist. Nur bei Großraumbüros mit einigen 10-20 Computern aufwerts könnten mehrere Phasen vorhanden sein. In diesem Fall ist eine Netzwerkverkabelung sicher vorhanden. Ein Blick in den Schaltkasten mit Vorhanden Sein von 3-Phasingen Sicherungen gibt schon einige Verdachtsmomente.

Die Phasendetektionschaltung erkennt nur eine der beiden Halbwellen. Ein umgekehrtes Einstecken des Trafos bringt eine Phasenunterschied von 180 Grad - entspricht einer Zeitdifferenz von 10mSek. Hast Du das berücksichtigt?

Die beschriebene Empfindlichkeit gegenüber Temperaturänderungen könntest Du durch das Erfassen eines geeigneten Zeitsignals (DCF77 oder im Außenbereich GPS oder einem RTC) kompensieren.

Viele Grüße Uwe

erni-berni: Die Netzspannung selbst hat Phasenschwankungen, die in meinem Fall manchmal so schnell passieren, dass das die Messung verfälscht oder gar unmöglich macht, weil man so schnell nicht vom Dachgeschoss ins Wohnzimmer kommt. Aber man kann ja mehrmals ausprobieren.

Was für einen Umfang haben diese Schwankungen?

Hallo,

erni-berni: Wenn man den Einsatz eines Phasenkopplers vermeiden will, sollte man also die Powerline Geräte an die gleiche Phase hängen. Doch wie finde ich raus, ob das Büro im Dachgeschoss an der gleichen Phase, wie der Router im Keller oder der Multimedia PC im Wohnzimmer hängt, wenn nicht alles zufälligerweise mit der gleichen Sicherung abgesichert ist?

am einfachsten ist es wohl meistens: - Verlängerungskabel von einer Steckdose zur anderen 'verlegen' damit man beide Potenziale örtlich beieinander hat - jeweils Anschluss der Phase bestimmen ( welches Steckdosenloch ) - Multimeter mit Wechselspannungseingang anschließen von Phase zu Phase ( Spannungsfestigkeit beachten ) - Spannung messen, ca. 400 Volt = unterschiedliche Phasen, nur wenig Spannung = gleiche Phase - Verlängerungskabel aufrollen, Ergebnisse notieren irgendwann sind dann alle Steckdosen identifiziert, eine kleine Messreihe sorgt schnell für Klarheit. Erwarteter Zeitaufwand ca. 1 Minute pro Steckdose

Mein Tip: eine Steckdose als L1 festlegen, alle anderen daran orientieren: L1, L2, L3 Aufkleber über dem Pol der Phase an der Steckdose mit Lx beschriftet sorgen für zusätzliche Klarheit

Gruss Kurti

uwefed:
Ich bezweifle auch ein wenig daß, wenn die Installation in Deinem Hause mit Drehstrom eingespeist wird. Wenn wir mal annehmen, daß eine Drehstromeinspeisung vorhanden ist, dann ist sicher daß die verschiedenen Etagen nicht mit mehrere Phasen versorgt werden sondern mit einer und versucht wird die Lastaufteilung möglichst gut auf alle 3 Phasen zu erreichen. Darum 1 Phase im Keller, (Waschmaschiene, Trockner Hobbykeller) eine in der Küche mit elektrischen Kochfeld und eine im restlichen Räumen.

Dem möchte ich gern widersprechen, die meisten Wohnungen (in Deutschland) haben einen dreiphasigen Anschluss, nicht zuletzt deshalb, weil Elektroherde in der Regel auf allen Phasen angeschlossen werden. Ich wohne in einer Mietwohnung und habe mit den gleichen Problemen wie erni-berni zu kämpfen, also dem Finden der entsprechenden Phase für die DLAN-Übertragung. Von daher finde ich das Projekt wirklich spitze.
In einer Sache hat Uwe aber recht, die Phasenschwankungen sollte es hier nicht geben.

Darf ich fragen, welches Arduino-Board du benutzt? Soweit ich mich recht erinnere, sind die Boards mit einem Resonator (Arduino Uno) schlechter geeignet als Boards, deren Mikrocontroller mit einem richtigen Quarz betrieben werden (Arduino Duemilanove).

Nach kurzem Blick auf den Code fiel mir auf, dass viel Aufwand für die Entprellung des Tasters betrieben wurde, sofern ich das richtig interpretiert habe. Möglicherweise liegt hier ein Problem, ich denke für die Prüfung des Nulldurchganges könnte man auch gut einen externen Interrupt verwenden.

Das Hauptproblem das du hast.Ist das die Programzyklen durch die Libaries schwankt deswegen sind deine Messungen der Zeit ungenau. -Arbeite doch mit AttachInterrupt (über Interrupt-Eingang)und werte die Steigende und Fallende Flanke aus damit hast du den Zeitpunkt genauer. -Das Display würde ich nur 1 mal pro Sekunde auffrischen oder eben nur nachdem deine Messungen fertig sind (damit spart du CPU Zeit für andere Sachen) -Debounce raus und das dann manuell gemacht (ist meiner meinung nach Kompakter und hat bessere Timing vorteile)

Meine Vorschläge (aber ich habe ja gut reden XD)

Gruß volvodani

Hallo zusammen,
erstmal herzlichen Dank für das Interesse an meinem Projekt. Eure Kommentare geben viele Ansätze zum Nachdenken und Weiterforschen. Erstmal ein paar Kommentare zur euren Beiträgen.

uwefed:
Ich bezweifle die Existenz der von Dir beschriebenen Phasenschwankungen, es sei denn, Du hast ein Versorgung im Inselbetrieb mit einem Umrichter der schlecht funktioniert.

Nein, ich habe keinen Inselbetrieb. Ich gehe mal davon aus, dass ich in meiner Wohnung wie wohl allgemein üblich hier in Köln am Netz der Rheinenergie hänge.
Meine Wohnung wird 3-Phasen Wechselstrom gespeist, die Zimmer hängen an verschiedenen Phasen und auch an verschiedenen Sicherungen. Der E-Herd wird mit 3 Phasen betrieben (wie sth77 bereits anmerkte). Der Keller mit Waschmaschine hängt an einer Phase.

uwefed:
Ich bezweifle, wenn Du in einem Raum eine andere Phase findest als in einem anderen Raum, daß in diesem ersten Raum Steckdosen noch einer 2. Phase vorhanden sind

Da gebe ich dir Recht. Aber wenn man bei der Messung feststellt, dass es sich um 2 verschiedene Phasen handelt, hilft das bei der Fehlersuche, wenn’s mit der Powerline Übertragung nicht funktioniert. Oder ich weiß dann, dass ich einen Phasenkoppler einbauen muss.

uwefed:
Die Phasendetektionschaltung erkennt nur eine der beiden Halbwellen. Ein umgekehrtes Einstecken des Trafos bringt eine Phasenunterschied von 180 Grad - entspricht einer Zeitdifferenz von 10mSek. Hast Du das berücksichtigt?

Guter Hinweis, hatte ich nicht bedacht. Praktisch habe ich das eben ausprobiert und die Phasenwinkel Anzeige springt tatsächlich auf 0,5. Das bedeutet man braucht einen Phasenprüfer, damit immer der gleiche Steckerpin des Netzteils auf der Phase steckt.

Ich glaube ja auch nicht, dass ich wirklich Schwankungen der Netzfrequenz sehe. Ich habe mal das, was ich als Netzfrequenz messe, über lange Zeit ausgewertet. Die angehängte Grafik zeigt meine Messung über einen Zeitraum von ca. 1h. Die Umgebungsbedingungen waren dabei weitestgehend konstant.
Wenn die Schwankungen vom Programm oder der Timingfunktionen des Arduino kämen, würde ich ein regelmäßigeres Bild erwarten. Beim googeln zum Thema Konstanz der Netzfrequenz habe ich folgendes gefunden http://www.edaboard.de/genauigkeit-der-50hz-netzfrequenz-t4618.html.
Wenn ich dem glaube, scheint es schon über den Tag Schwankungen zu geben.

kurti:

  • Verlängerungskabel von einer Steckdose zur anderen ‘verlegen’ damit man beide Potenziale örtlich beieinander hat
  • jeweils Anschluss der Phase bestimmen ( welches Steckdosenloch )
  • Multimeter mit Wechselspannungseingang anschließen von Phase zu Phase ( Spannungsfestigkeit beachten )
  • Spannung messen, ca. 400 Volt = unterschiedliche Phasen, nur wenig Spannung = gleiche Phase
  • Verlängerungskabel aufrollen, Ergebnisse notieren
    irgendwann sind dann alle Steckdosen identifiziert, eine kleine Messreihe sorgt schnell für Klarheit.

Recht hast du. Aber ich stelle mir gerade die unerfahrenen Hobbyisten vor, die mit dem Multimeter in der Steckdose rumfuchteln und 380V messen wollen. Also bitte Finger weg. Da finde ich den Vorschlag von Uwe besser, den Elektriker mit der Dokumentation zu beauftragen. Ich wollte aber eine einfache, preiswerte Lösung für den Arduino Begeisterten anbieten - und manchmal siegt eben auch der Basteltrieb :slight_smile:

@sth77: ich benutze ein Mega2560 Board. Da ist ein 16MHz Quarz drauf. Die Auflösung von micros() liegt damit bei 4us.

sth77:
Nach kurzem Blick auf den Code fiel mir auf, dass viel Aufwand für die Entprellung des Tasters betrieben wurde, sofern ich das richtig interpretiert habe. Möglicherweise liegt hier ein Problem, ich denke für die Prüfung des Nulldurchganges könnte man auch gut einen externen Interrupt verwenden.

Wieso viel Aufwand, ich benutze die bounce Funktion und stelle mit den weiteren Prüfungen sicher, dass nur die fallende Flanke (drücken des Tasters) gewertet wird. Wenn das einfacher geht, mach einen Vorschlag. Der Code ist eh noch nicht optimiert, da gibt’s bestimmt noch viel Potential.

volvodani:
Das Hauptproblem das du hast.Ist das die Programzyklen durch die Libaries schwankt deswegen sind deine Messungen der Zeit ungenau.

Wieso? Wo sollen da Schwankungen sein. Die Messung der steigenden und fallenden Flanke sind nur diese 6 Programmzeilen

  while (!digitalRead(7)) {}  // warte solange wie LOW 
  onFlanke = micros();       // erste steigende Flanke
  while (digitalRead(7)) {}  // warte solange HIGH 
  offFlanke = micros();      // folgende fallende Flanke
  while (!digitalRead(7)) {}  // warte solange LOW 
  onFlanke2 = micros();      // nächste steigende Flanke

volvodani:
-Arbeite doch mit AttachInterrupt (über Interrupt-Eingang)und werte die Steigende und Fallende Flanke aus damit hast du den Zeitpunkt genauer.

Ist sicher eine Alternative, hatte ich mich gegen entschieden, weil ich den Code erstmal übersichtlich darstellen wollte. Du kannst ja gerne einen Code Vorschlag machen.

volvodani:
-Das Display würde ich nur 1 mal pro Sekunde auffrischen oder eben nur nachdem deine Messungen fertig sind (damit spart du CPU Zeit für andere Sachen)
-Debounce raus und das dann manuell gemacht (ist meiner meinung nach Kompakter und hat bessere Timing vorteile)

Wie gesagt: hier ist noch viel Optimierungspotential.
Über Sinn oder Nicht-Sinn eines Projektes kann man immer diskutieren. Für mich stand im Vordergrund ein Problem auf einfache Art und Weise mit einem Arduino zu erschlagen. Wenn die Netzfrequenz schwankt - dann funktioniert es mit meiner Methode wohl nicht zuverlässig. Wenn die Schwankungen durch Programm oder anderes bedingt ist, lässt sich das vielleicht lösen.
Ich freue mich schon auf weitere Vorschläge
Gruß
Reinhard

Sinus50Hz.png

erni-berni: Das bedeutet man braucht einen Phasenprüfer, damit immer der gleiche Steckerpin des Netzteils auf der Phase steckt.

Nö, warum denn? Den Umstand (also 50% Versatz statt 33% oder 66%) kannst Du doch einfach auf dem Display ausgeben. :)

Joghurt:

erni-berni: Das bedeutet man braucht einen Phasenprüfer, damit immer der gleiche Steckerpin des Netzteils auf der Phase steckt.

Nö, warum denn? Den Umstand (also 50% Versatz statt 33% oder 66%) kannst Du doch einfach auf dem Display ausgeben. :)

ja, richtig. Wenn man mal die Phasenschwankungen außer acht lässt, würden folgende Anzeigen möglich sein, da die Anzeige zwischen -0,5 und + 0,5 möglich ist: 0,00 0,33 -0,33 - wenn richtig gesteckt wurde 0,50 0,17 -0,17 - wenn "andersrum" gesteckt ist

Ich finde es erstaunlich, dass in keiner deiner Messungen jemals 20ms überschritten werden, zumindest sollte das im Mittel herauskommen. Von daher tippe ich wieder einmal auf ein Timingproblem. ;)

Um nochmal auf die Boardwahl zurückzukommen: Das Mega2560 verwendet den (genauen) Quarz für den Interface-Chip (Atmega 8u2), der "Hauptprozessor" hängt an einem weniger genauen Resonator.

sth77:
Ich finde es erstaunlich, dass in keiner deiner Messungen jemals 20ms überschritten werden, zumindest sollte das im Mittel herauskommen. Von daher tippe ich wieder einmal auf ein Timingproblem. :wink:

Stimmt, hatte mich auch gewundert, weil ja eigentlich 20ms 50Hz entsprechen würden. Ich hatte das auf die Genauigkeit des 16MHz Quarzes zurückgeführt (ohne mal zu rechnen, ob das sein kann).

sth77:
Um nochmal auf die Boardwahl zurückzukommen: Das Mega2560 verwendet den (genauen) Quarz für den Interface-Chip (Atmega 8u2), der “Hauptprozessor” hängt an einem weniger genauen Resonator.

Woher hast du diese Info? Ich habe auf dem Board mal nachgesehen. Auf dem Layout sind zwar Pads für bedrahtete Quarze aber ein SMD Bauteil ist verbaut. Und das sieht auch für den 8u2 nicht aus wie ein Quarz (siehe Foto). Wenn das ein Keramik Resonator ist, wie z.B. http://de.farnell.com/abracon/awscr-16-00mtd-t/ceramic-resonator-16mhz-smd/dp/7944111 dann erklärt sich mit der Genauigkeit von ±0,5% die Messgenauigkeit absolut. Ich mess ja im Mittel eine Abweichung von 0,24% zu 20.000us. Hier http://arduino.cc/en/Main/ArduinoBoardMega2560 auf dem Foto ist für den 8u2 noch ein Quarz verbaut. Aber hat eine Keramik Resonator über die Zeit solche Schwankungen?
Ich kann das nicht verstehen, dass hier ein Keramik Resonator verbaut wurde. Wollte man das ein paar Cent einsparen?

Ja, ich bin nach der Darstellung der Hauptseite gegangen, selbst habe ich kein Mega-Board. So ein Keramikresonator hat natürlich seine Vorteile gegenüber einem Quarz. Im Endkundenmarkt nimmt sich das nicht viel, bei 1000er Stückzahlen rechnet sich das schon. Aber auch das Einschwingverhalten ist besser, besser im Sinne der Geschwindigkeit. Hier liegt man bis zum Faktor 20 über den Einschwingzeiten eines Quarzes - sagt zumindest die Wikipedia. ;) Hast du ein alternatives Board mit Quarz zum Testen?

sth77: Hast du ein alternatives Board mit Quarz zum Testen?

Nein, leider nicht :-( Vielleicht jemand anders ?

Nun ja, ich hätte wohl noch ein Duemilanove rumzuliegen. Ich will es nicht fest versprechen, aber zumindest die Messung der Netzfrequenz finde ich so interessant, dass ich das gern mal in Angriff nehmen würde. Momentan bin ich beruflich sehr eingespannt, vor dem Wochenende wird das garantiert nichts. Wie stellst du die Spannungsversorgung des Arduino sicher, wennn du mit der Schaltung durchs Haus flitzt? Batteriebetrieb?

sth77: Nun ja, ich hätte wohl noch ein Duemilanove rumzuliegen. Ich will es nicht fest versprechen, aber zumindest die Messung der Netzfrequenz finde ich so interessant, dass ich das gern mal in Angriff nehmen würde. Momentan bin ich beruflich sehr eingespannt, vor dem Wochenende wird das garantiert nichts. Wie stellst du die Spannungsversorgung des Arduino sicher, wennn du mit der Schaltung durchs Haus flitzt? Batteriebetrieb?

Das wäre super, wenn du das mal nachstellen würdest. Die Spannungsversorgung stelle ich über 4x NiMH Akkus sicher, die zusätzlich zur Versorgung über USB an den 5V Eingang auf der Buchsenleiste. Das ergibt ca. 5V. So kann ich USB abziehen und das Programm läuft weiter.

Also dazu muß ich jetzt unbedingt meinen Senf los werden:

1) Fast alle Arduinos haben einen Quarz, allerdings gibt es Ausnahmen. 2) Auch die mit Quarz sind nicht besonders genau, aber genau genug im Vergleich zur Netzfrequenz. Wer's genau wissen will, ich habe das hier sehr ausführlich breitgetreten: http://blog.blinkenlight.net/experiments/measurements/crystal-deviations/ und http://blog.blinkenlight.net/experiments/measurements/crystal-deviations/2. 3) Die Netzfrequenz ist nicht ausreichend stabil für das gewünschte Ziel: http://de.wikipedia.org/wiki/Netzfrequenz. Die aktuelle Netzfrequenz + Schwankungen kann man sich hier anschauen https://www.swissgrid.ch/swissgrid/de/home/experts/dso/frequency.html bzw. hier https://www.entsoe.eu/system-operations/the-frequency/. 4) Wer das mit dem Arduino nachstellen will, da habe ich schon wieder ein schönes Experiment :) http://blog.blinkenlight.net/experiments/measurements/power-grid-monitor/. Das Video wurde übrigens Nachts aufgenommen das sind die Schwankungen niedriger. Tagsüber ist das alles noch viel schlechter.

Um die Phase zu finden würde ich einen Leitungsverfolger nehmen. Wer keinen kaufen will könnte das auch wie folgt per Arduino probieren:

Schritt 1) 2 billige Netzteile (Trafos) bei Pollin kaufen. Wichtig: es muß AC (also Wechselstrom draufstehen). Nennspannung irgendwo zwischen 6 und 12V. Schritt 2) Die Niedervoltseite des einen Netzteils aus einem Arduino mit 1kHz beschicken. Ein Kondensator dazwischen wäre gut. Schritt 3) Das andere Netzteil an der Niedervoltseite an einen Lautsprecher anschliessen. Ein Kondensator dazwischen schadet sicher auch nicht. Schritt 4) Hauptsicherungen rausdrehen und alle Verbraucher abschalten Schritt 5) Arduino + Netzteil an eine Steckdose Schritt 6) Das andere Netzteil an eine andere Steckdose Schritt 7) Ton zu hören? Wie laut? --> Phase gleich oder verschieder sollte man hören können.

Gruß, Udo

Hallo Udo,
danke für deinen interessanten Beitrag. Da habe ich wieder einiges gelernt.

  • der Keramik-Oszillator vom Mega2560 ist ungenau
  • die Netzfrequenz schwankt, wie man sehr beeindruckend unter deinem Link auf Swissgrid beobachten kann.
    Für das Projekt ist damit die Messmethode zu ungenau.
    Trotzdem hat mir das mit dem Quarz keine Ruhe gelassen und ich habe einen “BreadBoarduino” mit Atmega168 und 16MHz Quarz aufgebaut.
    @sth77: damit du dein Wochenende für anderes hast
  • das Ergebnis der Messung der Netzfrequenz liegt deutlich näher an 50Hz bzw. 20ms, d.h. der Quarz ist näher an den 16MHz dran als der Keramik-Oszillator des Mega
  • aber das Tollste ist: wenn ich meine gemessene Netzfrequenz mit der von Swissgrid vergleiche, sehe ich eine Abweichung in der 3. Stelle hinter dem Komma !
    (Ich konnte mir nicht verkneifen und habe keine Mühe gescheut ein Beweisfoto zu schiessen :slight_smile: ).
    So hab ich zwar keinen Phasenfinder aber mein persönliches “Grid” (nur wofür soll’s gut sein?).
    Auf jeden Fall war der Aufwand die Erfahrung wert.
    Gruß Reinhard

Ich glaube wir standen gerade alle auf dem Schlauch. Es geht ganz einfach. Besorg Dir einen Phasenprüfer oder nimm eine Lampe oder einen Staubsauger oder irgendwas mit dem Du feststellen kannst ob Spannung anliegt. Dann gehst Du zum Verteiler und schaltest L1 ab und schaust welche Steckdosen keine Spannung mehr führen. Danach L2 und L3. Fertig.

Na ja, ganz so einfach ist es nur, wenn man 3 Sicherungen hat..... z.B. ich habe 5 und die Phase im Keller ist auch separat abgesichert - aber du hast natürlich Recht. Und warum einfach, wenn's auch schwierig geht und Spaß dabei macht. Mal sehen, was das nächste Projekt bringt....

Normalerweise gibt es pro Phase genau eine Hauptsicherung. Wenn Du 5 Sicherungen hast, dann sind das keine Hauptsicherungen.