Peter Hofbauer’s private Homepage
Selbstbauprojekte
eigene Entwicklungen
3-Phasen-Wattmeter fürs Haus
Wozu soll das gut sein?
Die letzte Stromrechnung war etwas höher wie im Vorjahr. Den Stromverbrauch
will ich ab jetzt mal besser überwachen. Die großen Verbraucher wie
Waschmaschine, E-Herd usw kann ich nicht beeinflussen, die müssen sein.
Aber die vielen kleinen Verbraucher, die zum Teil 24h aktiv sind und solche die ich
vergessen habe aus zu schalten, sollen jetzt sichtbar sein. Dazu ist eine Auflösung
der Anzeige von 1W nötig. Sonst kann man die kleinen Verbraucher nicht
erkennen.
Meine Überlegungen
Die Messung der Leistungsaufnahme ist nur bei DC einfach. Bei AC ist es nicht so
einfach. Die Effektivwerte von Strom und Spannung reichen nicht zur Berechnung.
Die Phasenlage und die Kurvenform sind noch zu berücksichtigen. Um das genau
zu erfassen müsste man in möglichst kurzen Zeitabständen gleichzeitig die
augenblicklichen Werte von Strom und Spannung messen, multiplizieren und
aufaddieren.
Die unbedingt nötige Potentialtrennung vom Netz ist für den Strom einfach mit 3
Stromtrafos erledigt. Für die Spannung sind 3 kleine Netztrafos (mit Korrekturen
der Phasenlage) nötig.
Ohne Spannungsmessung geht es auch. Die Spannung kann man als konstant
annehmen und die Werte in einer Tabelle in der Software hinterlegen. Das
erfordert aber eine exakte Synchronisation der Berechnung mit der Netzfrequenz.
Das ist mir alles zu aufwändig, es muss auch asynchron gehen! Die Netzspannung
soll nur für das kleine Netzteil für die Betriebsspannungen zur Platine gehen.
Ich könnte den Strom mit Eff/DC-Wandlern in Gleichspannung wandeln und dann messen. Diese ICs (z.B. AD736) sind mir aber zu teuer.
Ich habe mir zur Bedingung gemacht nur bereits vorhandene Teil zu verwenden und die AD736 habe ich nicht.
Ich messe den Strom ohne Wandlung nach DC sondern direkt die Halbwellen. Aus den gemessenen Stromwerten wird der arithmetische
Mittelwert berechnet. Das funktioniert auch ohne Synchronisation mit der Netzfrequenz. Zuerst habe ich nur den Spitzenwert erfasst und
damit die Leistung berechnet. Das hat aber nur mit Labormitteln gut funktioniert. In der Praxis war das Ergebnis eine Katastrophe. Starke
Schwankungen und meist falsche Werte. Der Strom war nicht sauber sinusförmig sondern mit haufenweise Spitzen verseucht. Der
arithmetische Mittelwert war die Lösung, stabile Anzeigen und ausreichend genau.
Die Stromtrafos
Stromtrafos verwendet man um hohe Ströme in Leitungen zu
messen ohne diese auftrennen zu müssen.
Er besteht aus einen Ringkern mit beispielsweise wie hier
verwendet 80 Windungen. Der durch das Loch im Zentrum
fließende Strom erzeugt in der Wicklung einen um den Faktor
der Windungen (hier 80) kleineren Strom. Allerdings nur wenn
die Wicklung kurzgeschlossen ist.
Der von mir verwendete Stromtrafo ist eigentlich stark
überdimensioniert. Er kann einen Strom bis 400A auf 5A
transformieren bis zu einer Leistung von 5VA.
Bei meiner Schaltung belaste ich den Stromtrafo mit 0,5 Ohm.
Für jede Phase ist einer nötig.
Ich messe den Strom von 8
Stromkreisen. Dazu müssen
immer nur die Leitungen von den
Sicherungen durch einen
Stromtrafo geführt werden. Das
sind hier zwei mal 3 Leitungen und
einmal nur 2.
Wichtig ist das die Leitungen nur
einer Phase zugehören dürfen.
Verschiedene Phasen in einen
Stromtrafo geht nicht.
Die Leitungen von den Stromtrafos
zur Messplatine müssen getrennt
verlegt werden. Ein gemeinsamer
Rückleiter zur Platine aller 3
Trafos darf nicht verwendet
werden, er verfälscht die Messung.
Obwohl die auf der Platine
verbunden sind.
Die 3 Stromtrafos sind in der Zählertafel im Keller montiert, die Anzeige ist oben im Büro.
Der Schaltplan
Verwendet wird der 16-bit Prozessor dsPIC33FJ16MC102. Den hatte ich noch vorrätig, weil mal aus versehen bestellt, und
musste mal weg. Der wird mit 3,3V betrieben, hat einige 5V-tolerante Ausgänge, die ich fürs LCD benötige. Leider benötigt
man für diese kleine Anwendung 4 Betriebsspannungen: +3,3V, +5V, +12V und -12V.
Eigentlich war ein vorhandenes altes LCD-Modul ohne Beleuchtung geplant. Das war leider defekt und so musste ein
anderes Modul mit Beleuchtung bestellt werden. Den Strom für die Beleuchtung habe ich mit R40 = 100R auf 10mA herunter
gesetzt weil der Trafo zu klein ist.
Eine sehr einfache RS232-Schnittstelle nur mit einen Optokoppler U14 = SFH611 sendet alle 600ms ungefragt einen String
mit allen vier Watt-Werten mit folgenden Format:
UUUU,1234,1234,1234,12345<CR>
Baudrate = 9600, ohne Parität, 2 Stopbits. Die Us sind nur zum Messen der Baudrate wegen der Bitfolge 01010101 davor gesetzt. Ein
Empfang von Daten ist nicht vorgesehen. Die Schnittstelle verwendet nicht den integrierten UART sondern wird zu Fuß an einen normalen Port
ausgegeben.
Die Stromtrafos werden mit einen Shunt von 0,5 Ohm belastet. Die daran abfallende Spannung muss für den Prozessor verstärkt und auf
Werte von 0 bis knapp unter 3,3V begrenzt werden. Der Prozessor misst positive Halbwellen in 1-Grad-Abständen, also etwa alle 55us.
Das wird mit 3 identischen Schaltungen für die drei Phasen quasi gleichzeitig erledigt. Die 3 Schaltungen sind identisch, beschrieben wird die
untere.
Am Shunt (R3,R6,R9) fallen pro 1W Leistung (= 4,35mAeff) eine Spitzenspannung von 3,83mVp ab. Verstärkt wird das mit U3 = OP07. Wegen
der geringen Spannung am Eingang ist ein OP mit niedriger Drift nötig. Am Ausgang des U3 darf nur eine Wechselspannung ohne
Gleichspannungsanteil auftreten, deshalb ein Nullabgleich mit RV3. Die Verstärkung wird mit U6 = H11F1 umgeschaltet um den geforderten
Messumfang zu bewältigen.
Wenn der Q3 stromlos ist beträgt die Verstärkung bis zum Ausgang U3.6 = 390fach. Wenn der Q3 den U6 aktiviert beträgt die Verstärkung 39.
Der Transistor Q6 begrenzt die Spannung auf 3,9V um den ADW im Prozessor nicht zu übersteuern. Der Spannungsteiler, bestehend aus R33
und R36 setzt die Spannung auf etwas unter 3,3V herunter.
Der U8A = LM358 killt über Diode D3 den negativen Teil der Wechselspannung. Die Spannung an dieser Stelle ist also sicher nur die positive
Halbwelle ohne negativen Anteil und geht nie über den Referenzwert von 3,3V des Prozessors.
Die Messbereiche des Wattmeters gehen von 0 bis 318W und nach Umschaltung durch den Prozessor von 10 bis 3180W. Darüber werden die
Werte begrenzt, also oben gekappt, und deren Wattwerte können nicht mehr stimmen. Die Anzeige geht noch bis 9000W wird aber über
3180W zu klein angezeigt. Das ist bei meiner geplanten Anwendung ohne Bedeutung, so hoch wird es in der Praxis nie.
Die Software
Das Wattmeter hat keine Bedienelemente. Die Software für den Prozessor ist deshalb sehr einfach.
Alle 3 Phasen werden nacheinander gemessen. Dieser Zyklus dauert 54us und wird permanent wiederholt. Nach 600ms wird der Vorgang
beendet. Bis dahin wurden über 11000 Messungen für jede Phase erledigt. Das Ergebnis sind 3 Daten:
1.) der maximale Messwert, wenn der im niedrigsten Messbereich 960 überschreitet, schaltet der Prozessor auf den höheren Bereich um. Liegt
der Messwert im oberen Bereich unter 96 wird auf den unteren geschaltet. Damit wird ein Übersteuern des ADW verhindert.
2.) alle Messwerte sind in 32bit aufaddiert, wird für die Berechnung des arithmetischen Mittelwertes benötigt.
3.) ein Zähler der Messzyklen, ist der Divisor für den Mittelwert.
Dann werden die Messwerte nach ASCII konvertiert und zur LCD-Routine übergeben.
Wenn die fertig ist werden die Daten über die Schnittstelle ausgegeben.
Wenn die Schnittstelle fertig ist, wiederholt sich der komplette Ablauf.
Sourcecode-Dateien:
12
Sprache:
Assembler
Durchlaufzeit:
4,7us über alles
Nachbau
Wie alle meine Berichte ist auch dieser keine reine Bauanleitung. Hier mal ein paar Tipps.
Die Bauteile sind beschaffbar, nur der H11F1 wird selten angeboten. Im Netz gibt es aber trotzdem einige Angebote.
Damit die Anzeige stimmt, muss der selbe Strom wie in diesen Beispiel durch den 0,5Ohm-Shunt fließen. Abweichungen kann man mit
anderen Shunt-Widerständen korregieren.
Der Abgleich kann mit AC oder einfach mit einen Labornetzteil mit DC erfolgen.
1.) Zuerst muss mit RV1(2,3) der Nullabgleich (0,000V am Ausgang der OPs) ohne Eingangssignal erfolgen.
2.) Mit 163 mA AC oder 73 mA DC am Eingang auf eine Anzeige = 3000W mit RV4(5,6) einstellen
3.) Mit 16,3 mAeff AC oder 7,3 mA DC am Eingang auf eine Anzeige = 300W mit RV7(8,9) einstellen
Der Text im Display kann nur in der Software geändert werden. Ich stelle deshalb den Sourcecode im Download bereit.
Wer sich mit den PICs nicht auskennt: ich habe in meiner “kleinen Homepage” etwas drüber geschrieben.
Ich verwende zum Debuggen und Programmieren einen PICkit3 mit der MPLAB IDE v8.91. Die neue mit X ist mir zu umständlich bedienbar.
Downloads:
Schaltplan und Layout wurden mit KiCAD V5 gezeichnet (160kB).
Korregierte Version: Die Software Hex und Sourcecode (31kB)
Februar 2021 Erweiterung: 50Hz-Messung
Einen direkten Nutzen hat die Messung der Netzfrequenz nicht. Ich will nur mal aus Interesse die Änderungen beobachten. Die Daten
werden nicht gespeichert, ich könnte das nur mit
einer Software auf einen PC über die RS232
machen. Wird auf später verschoben.
Der RS232-String ist mit den 50Hz-Wert
verlängert:
UUUU,1234,1234,1234,12345,+1234<CR>
Der interne Oszillator der CPU ist für dieses
Vorhaben nicht genau genug, deshalb wird ein
8MHz-Quarz verwendet. Der ist im Layout nicht
vorgesehen und wurde direkt an den CPU-Pins 9
und 10 angelötet.
Auf welcher Frequenz der Quarz schwingt ist
nicht garantiert. Ich habe die Frequenz mit einen
genauen Frequenzzähler gemessen:
f = 8,00205MHz!
Das wird in der Software berücksichtigt. Die
Anzeige soll eine Auflösung von 1 mHz haben
und entsprechend genau sein.
Die Schaltung
Die originale Platine wird nicht geändert. Die Schaltung ist auf einer kleine Platine getrennt untergebracht. Die Verbindung zur CPU-
Platine erfolgt über 5 Leitungen:
P1 ist der AC-Eingang, kommt an Pin 5 des Netztrafos (15VAC)
P2 ist der Ausgang, kommt an Pin14 (RB5) der CPU.
P3 kommt an +3,3V
P4 kommt an GND
P5 kommt an +12V
Und die Schaltung mit den 8MHz-Quarz muss direkt an den Pins 9 und 10 der CPU gelötet werden.
Die 15VAC werden über ein RC-Filter gereinigt und am Komparator U1 mit etwa 0,4V verglichen. Diese 0,4V sollen ungewolltes kippen
bei kleinen Störspannungen am Nulldurchgang verhindern.
Die Software
Die Messung der Zeiten erfolgt mit einen 32bit-Timer. Gezählt wird der CPU-Takt (16MHz) 100 Perioden lang, also 2 Sekunden. Der
Eingangspin an der CPU ist als INT1-Eingang initiiert. Hier werden die einhundert 50Hz-Perioden gezählt.
Dann wird der Inhalt des 32bit-Timers an die Berechnung der Abweichung von 50Hz übergeben. Zuerst wird der Wert für exakt 50Hz
abgezogen, das Ergebnis durch 320 geteilt und man hat die Abweichung in 1 mHz mit Vorzeichen zwecks Anzeige. Wenn das Ergebnis
negativ ist, war die Netzfrequenz über 50Hz usw.
Falls das einer nachbauen will:
Für ein genaues Ergebnis ist die genaue Frequenz des Quarze nötig. Bei genau 8MHz beträgt der Inhalt des Timers 32000000. Bei
mein Exemplar sind es 32008200. Dieser Wert ist in der Software eingetragen, auf zwei 16bit-Register W4,W5 in der Datei “Monitor.s”,
Zeile 150 ,falls jemand das ändern möchte.
Downloads
Die hex-Datei und der komplette Sourcecode (32kB)
Die KiCAD-Dateien (147kB)
Das Ergebnis
Wie genau die Messung ist, kann ich nicht genau überprüfen. Die Software kann eigentlich keine
Ungenauigkeit verursachen. Die Perioden werden im Interrupt mit höchster Priorität gezählt.
Die Schaltung mit den Komparator könnte eine Ursache sein. Die Netzfrequenz genau zu
erfassen ist etwas schwieriger als es scheint.
Vormittags schwankt die Anzeige maximal um +/-50mHz. Später ist ein Trend zu negativen
Werten erkennbar. Nachts sind positive Werte bis +80mHz sichtbar.
Es scheint als ob die Kraftwerke die höhere Last am Tag nachts wieder aufholen.
Die Frequenzanzeige ist in der untersten Zeile links, rechts ist wie vorher die Summe der drei
Lasten zu sehen.