Wattmeter mit RS232-Interface für elektronischen Drehstromzähler

mit PIC12F629


zurück zu Projekte , PIC-Prozessoren , Elektronik , Homepage


Allgemeines
Messbereich: 10 W ... 34460 W
Auflösung des Messwertes: 10 W
interner Messfehler P > 300 W:   < 2 %
P < 300 W:   <10 W
Stromzählertyp: Smartmeter mit 600 Impulsen pro 1 kWh oder
Smartmeter mit 1000 Impulsen pro 1 kWh
Eingangsspannung digitaler Eingang GP2:
absolute Limits: 0 V ... 30 V
low pegel: < 0,2 Vdd (< 1 V)
high Pegel: > 0,8 Vdd (> 4 V)
Eingangsspannung analoger Eingang GP1:
(bei Vdd = 5 V)
absolute Limits: 0 V ... 5 V (Vdd)
low Pegel: <  2,20 V
high Pegel: > 2,35 V
Stromversorgung (Vdd):
absolutes Limit: 5,5 V
Normalwert: 5 V
Mindestwert > 3,3 V(abhängig vom nötigen RS232-Pegel)
Stromaufnahme: < 4 mA

In einem anderen Projekt habe ich ein Wattmeterzusatz mit RS232-Schnittstelle und abgesetzter LED-Anzeige für althergebrachte Ferraris-Drehstromzähler beschrieben. Nach und nach werden die elektromechanischen Stromzähler aber durch elektronische Stromzähler ersetzt.
Einige haben einen Impulsausgang (elektrisches Signal oder blinkende LED), der sich zum Anschluss eines Wattmeters mit RS232-Interface eignet. Meine Schaltung überwacht die Ausgangspulse eines Stromzählers, ermittelt daraus den momentanen Stromverbrauch des Haushaltes und gibt diesen als Textstring per RS232 aus.



Wandler Stromlaufplan
GP3-Vdd:  Eingang GP2 wird benutzt
GP3-Vss:   Eingang GP1 wird benutzt

GP0 offen : 600 Pulse pro 1 kWh
GP0-Vss:   1000 Pulse pro 1 kWh

Es gibt natürlich diverse unterschiedliche sogenannte Smartmeter. Manche haben ein Webinterface und benötigen deshalb gar keine RS232-Schnittstelle. Andere verwenden andere Pulszahlen als mein Beispiel. Ich betrachte meinen Entwurf deshalb nicht als Universallösung, sondern als Vorschlag für den grundlegenden Aufbau einer RS232-Schittstelle. Im PIC-Programmspeicher ist noch Platz.

Auch möchte ich ausdrücklich feststellen, dass ich kein Freund der sogenannten Smartmeter bin. Sie bringen dem Stromkunden in der Praxis oft keinerlei Vorteile, sind aber mit höheren Folgekosten verbunden und stellen eine ernsthafte Gefahr für die Privatsphäre der Stromkunden dar.



Aufbau


Berechnungen im Wandler -Modul:

Erkennung des Pulses
Das Modul hat einen analogen und einen digitalen Eingang, die sich nur im Detail unterscheiden. Der Pegel am Pin GP3 im Einschaltzeitpunkt entscheidet darüber, welcher Eingang benutzt wird. Ist GP3 mit Vdd verbunden dann wird der digitale Eingang GP2 verwendet. Ist GP3 aber beim Einschalten mit Vss verbunden, dann wird der alanoge Eingang GP1 verwendet. GP3 darf nicht offen gelassen werden!

digitaler Eingang GP2
Der Ausgangspuls des Smartmeters (S0-Schnittstelle) ist ein einfaches (im Idealfall) entprelltes elektrisches Signal. Das Signal ist im Ruhezustand high und wird von low-Pulsen unterbrochen, die mindestens 30 ms lang sind. Im Vergleich zum optischen Ablesen des herkömmlichen Drehrades ist die Pulserkennung geradezu trivial, die einzige Herausforderung ist die mögliche geringe Pulsbreite von 30 ms.
Am einfachsten ist die Erkennung mittels Interrupt an GP2/INT. Deshalb wird GP2 mit dem Pulseingang verbunden und ein Interrupt bei High-Low-Flanken an GP2 erlaubt. Die vorgeschaltete Shottky-Diode zusammen mit den internen pull-up-Widerständen des PIC erlaubt Eingangspulse mit Pegeln von weit mehr als Vpp.

analoger Eingang GP1
Der digitale Eingang erfordert recht hohe High-Pegel (>4V) und niedrige Low-Pegel (<1V). Steht ein echter elektrische Pulsausgang am Smartmeter zur Verfügung, dann ist das kein Problem. Muss man aber z.B. Das Leuchten einer blinkenden LED mit einem Fototransistor auswerten, dann sind so saubere Pegel nicht trivial. Dafür dient dann der analoge Eingang. Es handelt sich um einen Komparatoreingang mit softwareunterstütztem Schmittrigger. Der PIC überwacht den Spannungspegel an GP1. Fällt die Spannung unter 2,2V, dann wird der Pulsanfang erkannt. Das Pulsende wird erkannt, wenn der Pegel wieder über 2,35V steigt. Die 0,15V Differenz zwischen den beiden Pegeln dient der Rauschunterdrückung.

Das analoge Eingangspin sollte mit einem Fototransistor nach Vss verbunden werden. Ein Pull-up-Widerstand geeigneter Größe (z.B. 22-49 kOhm) verbindet GP1 mit Vdd. Der genaue Wert des Widerstandes ist auszuprobieren. Er hängt vom verwendeten Fototransistor sowie der LED am Smartmeter ab.
LED-Eingang

Wattmeter
Mit Hilfe des Timer1 und einer Interruptroutine ist im Wandler ein 32-Bit-Zähler aufgebaut, dessen Zählerstand alle 8 us um 1 erhöht wird. Dieser Zähler dient als Stoppuhr, um den zeitlichen Abstand zweier Impulse zu messen. Beim Eintreffen eines Pulses wird der Zählerstand gespeichert und der Zähler auf Null zurückgesetzt.
Die oberen 24 Bit des Zählwertes werden benutzt, um die momentane Leistungsaufnahme zu errechnen. Da im Wandler der Arbeitsspeicher sehr begrenzt ist, und aufgrund der zeitintensiven RS232-Emulation auch kaum Rechenzeit zur Verfügung steht, benutze ich eine vereinfachte Routine, die die Leistung nur auf 10W genau bestimmt. Ist das Pin GP0 offen (oder mit Vdd verbunden), dann geht das Modul von 600 Pulsen pro 1 kWh aus und berechnet:
Leistung [Watt] = (292 969/ Zählwert) x 10

Ist das Pin GP0 aber mit Vss verbunden, dann geht das Modul von 1000 Pulsen pro 1 kWh aus und berechnet:
Leistung [Watt] = (175 781/ Zählwert) x 10

Der Hintergrund dieser Berechnung ist weiter unten erläutert. Das Ergebnis wird in eine 5-stellige Dezimalzahl gewandelt, und zyklisch via RS232 ausgegeben ("W=00820W")

Überlast
Überschreitet die gemessene Leistung einen bestimmten Maximalwert, dann wird anstelle des Messwertes der String '****0W' ausgegeben. Im Quelltext ist als Maximalleistung 34 kW festgelegt (3x50A x 230V), dass kann aber leicht geändert werden.

Energiezähler
Jedes mal wenn ein Impuls erkannt wird, wird ein 6-stelliger Dezimalzähler um 1 erhöht. Die Gesamtanzahl der Pulse wird zyklisch via RS232 ausgegeben ("Ro:000075"). Jeweils nach 100 Impulsen werden die oberen 4 Stellen des Zählers im EEPROM gesichert. Sollte der Strom ausfallen, oder der Wandler vorübergehend abgeschaltet werden, dann wird beim Neustart dieser gespeicherte Wert als Startwert genommen. Es gehen also maximal 99 Impulse verloren.
Ein Impuls entspricht (je nach Smartmetertyp) 1000/600 W = 1,67 Wh bzw. 1000/100 W = 1 Wh. Wird der Wandler z.B. stündlich via RS232 ausgelesen, dann kann man anhand des veränderten Zählerstandes die während dieser Stunde verbrauchte Energie ausrechnen.

RS232-Emulation
Der Wandler besitzt einen RS232-Ausgang. Letzterer ist eine Softwareemulation, da der PIC12F629 keine RS232-Hardware besitzt. Das RS232-TX-Signal des Wandlers kann direkt (ohne Treiber) mit dem RS232-Eingang eines Computers verbunden werden.  Der erzeugte Signalpegel entspricht zwar nicht der RS232-Spezifikation, aber moderne Computer kommen damit erfahrungsgemäß problemlos zurecht (9600 Baud, 8 Bit, 1 Startbit, 1 Stopbit, keine Flusskontrolle).
Der Wandler gibt zyklisch (etwa alle 50ms) einen Textstring mit der momentanen Leistung und mit der Zahl der gezählten Impulse aus: "W=00820W Ro:000075"



Betrachtungen zur Messgenauigkeit

Ich verwende den internen PIC-Takt von 4 MHz, dieser kann beim 12F675 einen Fehler von bis zu 2% aufweisen. Dieser Frequenzfehler geht voll in das Messergebnis ein, er ist aber nicht größer als der Fehler des Stromzähler.

Die Messung des Pulsabstandes erfolgt mit einer Auflösung von 2,048 ms. Das entspricht bei 800 W einer Auflösung von 0,2 W bzw. 0,03 % (also einem Fehler von <0,015%). Diese Auflösungsungenauigkeit steigt mit der Leistung linear an. Bei 5 kW beträgt sie 8,5 W (0,17 %). (Das entspricht einem Fehler von <0,08%.)
Dieser Fehler ist völlig zu vernachlässigen, da der Stromzähler selber auch schon einen Fehler von 2% haben kann.




Leistungs-Messung
/ Berechnung (am Beispiel: 600 Pulsen pro kWh)
Das Smartmeter gibt pro verbrauchter Kilowattstunde genau 600 Impulse aus, ein Impuls entspricht also 1,667 Wh. Beträgt der Abstand zwischen zwei Impulsen genau 1 Sekunde, dann beträgt der Verbrauch gerade 6 kW.
Es genügt, die Zeit zwischen zwei Impulsen zu messen, dann kann man daraus die Momentanleistung wie folgt berechnen
Leistung [Watt] = 6 000 / Drehzeit [Sekunde]

Der PIC des Wandlermoduls verwendet einen 24-Bit-Softwarezähler, der alle 2,048 Millisekunden inkrementiert wird. Beim Eintreffen eines Impulses wird dessen Zählwert ausgelesen und der Zähler auf Null zurückgesetzt. Der Zählwert entspricht also dem Pulsabstand in 2,048-ms-Schritten. Daraus ergäbe sich folgende Formel für die Leistungsberechnung: (6000 x 1s/2,048ms = 2 929 687)
Leistung [Watt] = 2 929 687/ Zählwert

Die dafür nötige 24-Bit-Division ist aber problematisch, da sie zu viel Zeit verbraucht. Zeitsparender ist eine Berechnung der Leistung mit einer Auflösung von nur 10W.
Leistung [10 Watt] = 292 969/ Zählwert

An das Rechenergebnis muss dann noch eine Null angehängt werden, um ein korrektes Ergebnis zu erhalten.

Beispiel
:
Der Impulsabstand sei 10 Sekunden. Der Zähler zählt in dieser Zeit bis 4883 (4883 x 2,048ms = 10,0004 s).
Die Berechnung ergibt 292 969 / 4883 = 60.
Dieser Zahlenwert wird in eine vierstellige Dezimalzahl gewandelt und mit einer angehangenen Null über RS232 ausgegeben:  W=00600W.



Kalibrierung / Funktionstest
Eine Kalibrierung ist eigentlich nicht nötig, aber einen Funktionstest sollte man schon durchführen.

Anfangs sollte das Wandlermodul noch nicht am Zähler montiert werden.

Bei der Inbetriebnahme sollte man die Stromaufnahme des Moduls prüfen. Das Wandlermodul nimmt höchstens 4 mA Strom auf. Bei deutlich höheren Stromwerten ist die Betriebsspannung sofort zu trennen, und der Fehler zu suchen.

Am RS232-Anschluss kann man mit einem Terminalprogramm (9600 Baud) die vom Wandlermodul ausgegebenen Werte anschauen. Etwa alle 50 ms wird eine Zeile ausgegeben, die erst die Leistung in Watt und danach die Gesamtzahl der Scheibendrehungen anzeigt. Nach jedem Eingangspuls wird die Leistung neu berechnet und der Pulszähler erhöht. Beträgt die errechnete Leistung mehr als 34 kW , dann wird als Leistung "W=****0W" ausgegeben.

Der Ausgang GP5 dient dem Funktionstest. Er ändert seinen Pegel jedes mal, wenn ein Puls erkannt wurde.



bekannte Probleme
Bei dieser Erstversion der Software behindern sich sich Messroutine und RS232-Routine falls die Pulsabstände zu klein werden (<<300ms). Bei Leistungen von mehr als 22 kW erfolgt die RS232-Ausgabe nur noch sporadisch. Das entspricht etwa 33A auf allen drei Phasen der 230V, und kommt wohl nur vor, wenn man leistungsstarke Durchlauferhitzer betreibt. Trotzdem muss dieser Bug mittelfristig behoben werden.



Download
Hier liegen




Entwicklung / Updates

02.09.2011
- Urversion ist online

03.10.2011
- Version mit 600 oder 1000 Pulsen pro 1kWh
- wahlweise analoger oder digitaler Eingang


zurück zu Projekte , PIC-Prozessoren , Elektronik , Homepage
Autor: sprut
erstellt: 29.08.2011
letzte Änderung: 03.10.2011