LED-Wattmeter und
RS232-Interface für Ferraris-Drehstromzähler
mit PIC12F675 & PIC16F628
zurück zu Projekte , PIC-Prozessoren , Elektronik , Homepage
Allgemeines
| Messbereich: |
Anzeigemodul: 1 W ... 7999 W
Sensormodul: 1 W ... 91910W
|
| Auflösung des Messwertes: |
Anzeigemodul: 1 W
Sensormodul: 10 W
|
| interner Messfehler |
Anzeigemodul: < 10 % (mit Quarz: < 2%)
Sensormodul : < 2%
|
| Stromzählertyp: |
Drehscheibe mit 75 U/kWh |
Viele Haushalte haben noch herkömmliche Stromzähler
mit einer Drehscheibe. Aus Sicht des Datenschutzes sind diese
herkömmlichen Ferraris-Stromzähler den modernen "Smartmetern"
haushoch überlegen. Aber manchmal interessiert einen doch der
momentane Stromverbrauch des eigenen Haushaltes.
Da hilft diese einfache Leistungsanzeige.
(Wer bereits ein Smartmeter hat
mag sich hierfür interessieren.)
|
 |
Aufbau
- Das Wattmeter besteht aus einem IR-Sensor-Modul (mit PIC12F675) und einem
Leistungsanzeige-Modul (mit PIC16F628),
die untereinander mit einem dreiadrigen Kabel verbunden werden. Das
Sensor-Modul wird auf der Sichtscheibe des Stromzählers montiert,
während das Anzeigemodul an einer gut sichtbaren Stelle
(außerhalb des Zählerkastens) angebaut wird.
- Als Sensor dient ein optischer IR-Reflexsensor, der auf dem
Sichtglas des Stromzählers direkt vor der Drehscheibe platziert
wird. Er wird weiter unten im Detail besprochen.
- Falls man das Ergebnis per PC auswerten will, und die LED-Anzeige
nicht benötigt, dann kann auf das Anzeigemodul komplett verzichtet
werden. Man verwendet dann den RS232-Ausgang des Sensormoduls.
Sensor-Modul
- tastet die Drehscheibe des Stromzählers mit IR-Licht ab, und
erkennt die vorbeilaufende rote Markierung
- verwendet eine IR-LED und einen Fototransistor mit kleinem
Öffnungswinkel
- schaltet die IR-LED nur für kurze IR-Pulse ein, um Strom zu
sparen
- verwendet den ADC des PIC um die Ausgangsspannung des
Fototransistors auszuwerten
- entprellt das Fototransistorsignal mit einem
Software-Schmitttrigger und gibt es an das Anzeigemodul weiter
- errechnet die momentane Leistungsaufnahme des Haushaltes und gibt
sie per RS232 aus
- zählt die Scheibendrehungen des Zählers und gibt deren
Gesamtzahl per RS232 aus
Leistungsanzeige-Modul
- Ist hardwaremäßig mit der LED-Ziffernanzeige identisch. Der
Stromlaufplan ist oben wiedergegeben. Als Controller dient ein PIC16F628(A).
- Der PIC des Leistungsanzeige-Moduls nimmt das Sensorsignal am
Schmitt-Trigger-Pin RA4 entgegen, entprellt es und misst die Zeit
für eine Scheibendrehung.
- errechnet die momentane Leistungsaufnahme des Haushaltes und
zeigt sie per 7-Segment-LED-Anzeige an
- Der Wert der Widerstände R9..R12 ist unkritisch und darf im
Bereich von 1k bis 4,7k liegen.
- R1..R8 bestimmen die Helligkeit der Anzeige. Sie sind so zu
wählen, dass der Strom durch einen dieser Widerstände 25 mA
nicht übersteigt. Mir genügt die Helligkeit mit 220 Ohm, aber
ein Absenken auf 180 Ohm ist mit einer roten LED-Anzeige möglich.
Bei grünen Anzeigen (mit höherer Flussspannung) sind auch
kleinere Widerstandswerte denkbar.
- Als LED-Anzeige kann jede 7-Segment-LED-Anzeige mit gemeinsamer
Anode verwendet werden. Die Zuordnung der Segmente zu den Buchstaben
A..H (und damit zu den PIC-Pins) ist im Assemblerquelltext
beschrieben.
- Als Treibertransistoren kommen alle pnp-Typen in Frage, die 200
mA treiben können, z.B. der preiswerte BC328.
- An die Stabilität der Betriebsspannungen werden keine
großen Ansprüche gestellt (+5V, +/- 20%).
Eine Siebung der Betriebsspannung mit einem Elko (ca. 22 µF) und
einem Keramikkondensator (100 nF) ist selbstverständlich..
Die Stromaufnahme der Schaltung wird durch den Stromverbrauch des
Optokopplers und der LED-Anzeige bestimmt, und schwankt zwischen 40 mA
und 200 mA.
Der optische Sensor / Sensor-Modul
Das Problem
Da jegliche Eingriffe in den geeichten Stromzähler unzulässig
sind, bleibt nur ein Weg an den momentanen Stromverbrauchsmesswert zu
kommen: die optische Ablesung.
Die einfachste Umsetzung ist ein einfacher Reflexkoppler, mit der auf
die silberfarbene Drehscheibe des Stromzählers ausgerichtet ist,
und darauf die rote Markierung erkennt, wenn sie im Laufe der
Scheibendrehung das Sichtfenster passiert. Was erst mal einfach klingt,
erweist sich im Detail als kompliziert. Die Drehscheibe liegt ca 10..15
mm hinter der Oberfläche des Sichtglases, und ist nur ca. 2 mm
dick. Sie sitzt in einem wenige Millimeter breiten Schlitz der
metallenen Frontblende des Stromzählers. Sowohl das Sichtglas
(transparentes Plastik) wie auch die Frontblende (dunkelgrau lackiertes
Blech) erweisen sich als Störfaktoren, da sie permanent Licht
reflektieren.
Irrwege
Handelsübliche Reflexkoppler bestehend aus einer IR-LED und einem
IR-Fototransistor in einem gemeinsamen Gehäuse (zB. ADPS-9102).
Diese sind im Plastikgehäuse so angeordnet, dass sich ihre
optischen Achsen etwa 3 mm vor dem Kopplergehäuse kreuzen. Man
kommt mit dem Koppler also nicht dicht genug an das Drehrad heran, um
ein optimales Ergebnis zu erhalten. Durch die Schrägstellung von
IR-Diode und IR-Transistor kommt es obendrein zu einer direkten
Übertragung des IR-Lichtes durch das Deckglas des
Stromzählers. Der IR-Transistor wird also schon durch das
Streulicht im Deckglas geblendet. Dieser Effekt lässt sich
vermindern, wenn man dafür sorgt, dass zwischen
Reflexkoppleroberfläche und Deckglasoberfläche kein Luftspalt
bleibt. Trotzdem habe ich am Ausgang des IR-Transistors beim Vorbeilauf
der roten Markierung der Drehscheibe maximal eine
Spannungsänderung von 10% beobachten können. Das erfordert
eine Signalverarbeitung mit OPV und erscheint auch nicht sehr
zuverlässig.Aus diesem Grunde setze ich keinen fertigen
Reflexkoppler ein.
Anstelle fertiger Reflexkoppler sollte man also seine separate
"Lichtquelle" und einen separaten Lichtsensor verwenden, und dabei
für den Zweck optimale Teile auswählen.
Eine rote Markierung ließe sich eigentlich mit grünem Licht
am besten (und mit rotem Licht am schlechtesten) erkennen. Es gibt aber
kaum Bauteile, die intensives grünes Licht gebündelt
abstrahlen und empfangen können.
(Eine mögliche Alternative ist Laserlicht. Die Lasereinheit eines
billigen Laserpointers fokussiert ihr Licht so gut, dass es nur die
Drehscheibe trifft. Das rote Licht hat zwar die falsche Farbe,
kompensiert das aber mit seiner Intensität.)

Die Lösung
In der Praxis hat sich infrarotes Licht bewährt. Aber nur
bestimmte Einzelbauteile versprechen einen Erfolg.
Typische IR-Leuchtdioden haben
eine Plastiklinse, die das abgestrahlte Licht in einen Lichtkegel
konzentrieren. Auf Grund der großen Entfernung zwischen
Lichtquelle und Drehscheibe, füllt die Drehscheibe nur einen Teil
ihres Lichtkegels. Der Rest des Lichtes verfehlt die Drehscheibe und
geht ihm verloren. Da der Querschnitt des Lichtkegels mit dem Abstand
zur Lichtquelle quadratisch ansteigt, kann man davon ausgehen, dass bei
einer Verdopplung des Abstandes zwischen IR-LED und Drehscheibe die
Menge des nutzbaren Lichtes auf 1/4 sinkt. Dem lässt sich
entgegenwirken, wenn man eine IR-LED mit möglichst gut
gebündeltem Lichtkegel verwendet.Dadurch bleibt die Leuchtdichte
auf dem Drehrad hoch. Außerdem vermindert sich der Lichtanteil ,
der von der Frontblende des Stromzählers permanent zum
IR-Transistor reflektiert wird und diesen blendet. Eine gutes
Nutzsignal entsteht also dann, wenn der IR-Lichtkegel möglichst so
schmal ist, dass er in den Schlitz der Frontblende passt. (SFH484;
± 8 Grad)
Die gewählte IR-Diode SFH484 verträgt 100 mA Dauerstrom. Im
Pulsbetrieb sind aber auch höhere Ströme und damit eine
höhere Helligkeit möglich. Allerdings bewirkt ein zu
großer Strom auch eine Blendung des Fototransistors durch
Reflektionen im Deckglas und an der Frontblende. Deshalb verwende ich
einen 100 Ohm Vorwiderstand, der
den Strom auf etwa 35 mA begrenzt. Der 16 Grad breite Lichtkegel hat
bei 15 mm
Abstand zum Drehrad etwa 4 mm Durchmesser. Bei exakter Ausrichtung
trifft nur wenig Licht auf die Frontblende des Stromzählers. Die
Leuchtdiode wird nur für die Zeit der Messung ca. 200 us lang
eingeschaltet. Messungen erfolgen alle 20..50 ms. C1 sorgt dafür,
dass durch den LED-Strom, die Betriebsspannung des PIC um nicht mehr
als 10 mV zusammenbricht. Wenn man R1 verkleinert, sollte man C1
vergrößern.
Hinweis:
Nach dem Wechsel auf einen anderen
Stromzähler mit schmalerer Drehscheibe musste ich R1 auf 100 Ohm
erhöhen (ursprünglich 27 Ohm) um die Blendung des
Fototransistors zu verringern. Ich vermute daher, dass ein Wert von 100
Ohm generell die bessere Wahl ist.
Das gilt entsprechend auch für den Fototransistor. Die Drehscheibe
füllt nur einen Teil seines Sichtfeldes. Andere Teile des
Stromzählers, insbesondere die Frontblende, werfen permanent Licht
zum IR-Transistor zurück und versuchen ihn zu blenden. Auch
IR-Transistoren haben Plastiklinsen, die die Größe ihres
Sichtfeldes bestimmen. Ein Typ mit möglichst schmalem Sichtfeld
ist hier zu bevorzugen. (BPW17; ± 12 Grad)
Das 24 Grad breite Sichtfeld des gewählten Transistors BPW-17 hat
auf 15 mm Abstand etwa einen Durchmesser von 6mm.
Da am Ausgang des Fototransistors kein digitales Signal zu erwarten
ist, messe ich die dortige Signalspannung mit dem ADC des PIC12F675.
Das erlaubt es, auch vergleichsweise kleine Pegeländerungen sicher
zu erkennen.
Mechanischer Aufbau
IR-Diode und Fototransistor habe ich direkt über der Mitte des
Drehrades auf dem Deckglas nebeneinander so angebracht, dass sie
senkrecht auf das Drehrad "schauen" und beide auf dem Glas aufliegen.
Aufgrund der kleineren
Gehäusebauform
hat
der Fototransistor dabei deutlich mehr von der Länge seiner
Anschlusspins behalten dürfen. Über beide Bauteile habe ich
einzeln schwarzen Isolierschlauch gesteckt, der erst auf dem Deckglas
endet. Das dient der optischen Isolation der Bauteile voneinander.
Befindet sich bei eingeschalteter LED der reflektierende Teil der
Drehscheibe unter dem Sensor, so liegt die
Spannung an GP0 bei etwa 0V. Befindet sich aber der rote Teil der
Drehscheibe unter dem Sensor, so steigt die
Spannung an GP0 auf etwa 1..2 V. (Jeweils während der 200 us
langen Leuchtzeit der LED gemessen.
Ich möchte noch einmal betonen, dass die optischen Bauteile mit
dem offenen Ende des schwarzen Isolierschlauchs auf dem Deckglas
aufliegen müssen. Ich drücke deshalb die Trägerplatine
mit einem Gummiband gegen das Deckglas. Ein Luftspalt zwischen dem Ende
des Isolierschlauchs und dem Glas führt zu einem "optischen
Kurzschluss" der den Fototransistor blendet. Eine Prüfung der
optischen Funktion kann mit einem Oszilloskop erfolgen, das an Pin 7
des PIC angeschlossen wird. Dort liegt ein 5V-Pegel
an, der alle 20..50 ms durch einen ca. 200 us langen Low-Puls (etwa 0 V)
unterbrochen wird. Befindet sich die rote Markierung unter dem Sensor,
dann darf der low-Puls nur noch bis etwa 3..4V
herabgehen.
Die Justage erfordert Geduld. Hier kommt es wirklich auf den Millimeter
an. Schon bei 2mm Abweichung von der Idealposition ist am Oszilloskop
die rote Marke praktisch nicht mehr zu erkennen.
Berechnung
im Sensor-Modul:
Erkennung der roten Marke
In regelmäßigen Abständen von 20..50 ms wird mit GP1
die IR-LED eingeschaltet. Nach einer Wartezeit von >100 us (acquisition time für den
ADC) wird die Spannung an GP0 mit dem ADC in einen 10-Bit Wert
gewandelt und die IR-LED wieder abgeschaltet. Das Ergebnis heißt P. Es wird dann der bisherige
Durchschnitt der Messergebnisse DP aus
dem Speicher gelesen, und ein neuer DP-Wert
nach folgender Formel errechnet:
DP = DP*63/64 + P/64
Dadurch folgt der DP Wert nur
langsam den Änderungen des P-Wertes.
Springt z.B. P um 2 V nach
oben, dann beginnt auch DP zu
steigen. allerdings nur mit anfangs etwa 1 V/s.
Liegt P um mehr als 250 mV
über DP, dann gilt die
rote Marke als erkannt, und an GP2 wird High ausgegeben. Sinkt dann P auf einen Wert, der weniger als
125 mV über DP liegt,
dann wird GP2 wieder auf low geschaltet. Die 125 mV Differenz
zwischen der Einschaltschwelle und der Ausschaltschwelle dienen der
Rauschunterdrückung (Schmitttrigger). Das GP2-Signal wird an das
Anzeigemodul weitergegeben.
Wattmeter
Mit Hilfe des Timer1 und einer Interruptroutine ist im Sensor ein
32-Bit-Zähler aufgebaut, dessen Zählerstand alle 8 us um 1
erhöht wird. Dieser Zähler dient als Stoppuhr, um die Dauer
einer Scheibendrehung zu messen. Bei Beginn der roten Marke 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 Sensor 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.
Leistung
[Watt] = (2 343 750/ Zählwert) x 10
Der Hintergrund dieser Berechnung ist weiter unten (Anzeigemodul)
erläutert. Das Ergebnis wird in eine 5-stellige Dezimalzahl
gewandelt, und zyklisch via RS232 ausgegeben ("W=00820W")
Energiezähler
Jedes mal wenn der Beginn der roten Marke erkannt wird, wird ein
6-stelliger Dezimalzähler um 1 erhöht. Die Gesamtanzahl der
Drehungen wird zyklisch via RS232 ausgegeben ("Ro:000075"). Jeweils
nach 100 Scheibendrehungen werden die oberen 4 Stellen des Zählers
im EEPROM gesichert. Sollte der Strom ausfallen, oder der Sensor
vorübergehend abgeschaltet werden, dann wird beim Neustart dieser
gespeicherte Wert als Startwert genommen. Es gehen also maximal 99
Umdrehungen verloren.
Eine Drehung entspricht 13,33Wh. Wird der Sensor 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 Sensor besitzt den Pulsausgang (den nur das Anzeigemodul nutzen
kann) und einen RS232-Ausgang. Letzterer ist eine Softwareemulation, da der PIC12F675 keine RS232-Hardware besitzt.
Das RS232-TX-Signal des Sensors 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 Sensor gibt zyklisch (etwa alle 20ms ... 50ms) einen Textstring mit
der momentanen Leistung und mit der Zahl der Scheibendrehungen aus: "W=00820W Ro:000075"
Betrachtungen zur Messgenauigkeit
Wert am Anzeigemodul
Ich verwende den internen PIC-Takt von 4 MHz, dieser kann beim 16F628
einen Fehler von bis zu 8,75% aufweisen. Dieser Frequenzfehler geht
voll in das Messergebnis ein. Wem das zu viel ist, der sollte im
Anzeigemodul einen 4-MHz-Resonator oder einen 4-MHz-Quarz einsetzen.
(Das brachte bei meinem PIC16F628A eine Messwertkorrektur um 3%, aber
jeder PIC ist anders.)
Die Messung der Drehzeit erfolgt mit einer Auflösung von 20,48 ms.
Das entspricht bei 800 W einer Auflösung von 0,3 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 1,8 W (0,19 %). (Das entspricht einem Fehler
von <0,1%.)
Der Fehler ist völlig zu vernachlässigen, da der
Ferraris-Stromzähler selber auch schon einen Fehler von 2% haben
kann.
RS232-Werte des Sensor-Moduls
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 Ferraris-Stromzähler.
Die Messung der Drehzeit erfolgt mit einer Auflösung von 2,048 ms.
Das entspricht bei 800 W einer Auflösung von 0,03 W bzw. 0,003 %
(also einem Fehler von <0,0015%). Diese Auflösungsungenauigkeit
steigt mit der Leistung linear an. Bei 5 kW beträgt sie 0,18 W
(0,019 %). (Das entspricht einem Fehler von <0,01%.)
Allerdings erfolgt dann die Berechnung mit einer Auflösung von nur
10W! Das entspricht bei 800W einem Fehler von 0,625%. Dieser
Auflösefehler wiederum sinkt mit steigender Leistung und
beträgt bei 5kW nur noch 0,1%
Wie auch immer, der Fehler ist völlig zu vernachlässigen, da
der Ferraris-Stromzähler selber auch schon einen Fehler von 2%
haben kann.
Leistungs-Messung / Berechnung
Die Drehscheibe macht pro verbrauchter Kilowattstunde genau 75
Umdrehungen, eine Umdrehung entspricht also 13,3 Wh. Benötigt die
Scheibe genau 1 Minute für eine Umdrehung, dann beträgt der
Verbrauch gerade 800W. Benötigt die Scheibe genau 1 Sekunde
für eine Umdrehung, dann beträgt der Verbrauch gerade 48 kW.
Es genügt, die Zeit für eine Scheibenumdrehung zu messen,
dann kann man daraus die Momentanleistung wie folgt berechnen
Leistung [Watt] =
48 000 / Drehzeit [Sekunde]
Der PIC des Anzeigemoduls hat
einen 24-Bit-Softwarezähler, der alle 20,48 Millisekunden
inkrementiert wird. Am Ende einer Scheibendrehung wird dessen
Zählwert ausgelesen und der Zähler auf Null
zurückgesetzt. Der Zählwert entspricht also der Zeit für
eine Scheibendrehung in 20,48-ms-Schritten. Daraus ergibt sich folgende
Formel für die Leistungsberechnung: (48000 x 1s/20,48ms = 2 343
750 = 0x23 C3 46)
Leistung [Watt] = 2
343 750/ Zählwert
Ich benutze die Ganzzahldivision aus der Microchip-Bibliothek AN617.
Die benötigt für eine Division weniger als 1000 Zyklen, was
bei einem 4-MHz-Takt knapp 1 ms entspricht.
Beispiel:
Die Dauer einer Rotation der Drehscheibe sei 60 Sekunden. Der
Zähler zählt in dieser Zeit bis 2929 (2929 x 20,48ms = 59,98
s).
Die Berechnung ergibt 2343750/ 2929 = 800.
Dieser Zahlenwert wird in eine vierstellige Dezimalzahl gewandelt und
am LED-Display multiplex angezeigt.
Der PIC des Sensormoduls
verwendet einen 24-Bit-Softwarezähler, der alle 2,048
Millisekunden inkrementiert wird. Am Ende einer Scheibendrehung wird
dessen Zählwert ausgelesen und der Zähler auf Null
zurückgesetzt. Der Zählwert entspricht also der Zeit für
eine Scheibendrehung in 2,048-ms-Schritten. Daraus ergibt sich folgende
Formel für die Leistungsberechnung: (48000 x 1s/2,048ms = 23 437
500)
Leistung [Watt] =
23 437 500/ Zählwert
Da komme ich aber mit 24-Bit-Berechnungen nicht mehr aus. Aus
Speicherplatz- und Rechenzeitgründen berechne ich deshalb die
Leistung in nicht in 1W sondern in 10W-Auflösung
Leistung
[10Watt] = 2 343 750/ Zählwert
An das Ergebnis hänge ich dann noch eine Null an, und bekomme
ein Ergebnis in Watt.
Beispiel:
Die Dauer einer Rotation der Drehscheibe sei 60 Sekunden. Der
Zähler zählt in dieser Zeit bis 29296 (29296 x 2,048ms =
59,998 s).
Die Berechnung ergibt 2343750/ 29296 = 80.
Dieser Zahlenwert wird in eine vierstellige Dezimalzahl (0080)
gewandelt und mit einer angehangenen Null über RS232
ausgegeben: W=00800W.
Anzeige
Die Anzeige mit 7-Segment LEDs wurde schon an anderer Stelle beschrieben. Ich
benutze zwei 2-stellige LED-Displays mit gemeinsamen Anoden. Zur
Ansteuerung werden 12 Port-Pins, 4 Transistoren und 12 Widerstände
benötigt.
Der Segmentstrom wird durch die Widerstände R1..R8 auf ca. 15 mA
begrenzt. Dadurch bleibt die Gesamtstromaufnahme des PortB (15mA x
8=120 mA) sicher im Rahmen der Spezifikation des PIC (max. 200 mA). Wem
die Helligkeit nicht genügt, der kann den Segmentstrom auf 25 mA
erhöhen. (R1..R8: 120 Ohm) Auch größere
Ströme stellen auf Grund des Multiplexbetriebs für das
Display kein Problem dar, allerdings kommt dann der PIC an seine
Grenzen.
Die Anzeige erfolgt multiplex mit 5 Takten (4 Anzeigetakte und 1
Rechentakt). Jeder Takt ist 4,096 ms lang, um eine flimmerfreie Anzeige
zu gewährleisten (48Hz). Das Umschalten von Takt zu Takt wird mit
einem Timer realisiert. Dazu wird der Timer0 mit dem PIC-Zyklustakt
(4MHz / 4 = 1MHz) über den internen 16:1 Vorteiler gespeist. Immer
nach 256 x 16 Zyklen (4,096 ms) läuft der Timer0 über, und
löst einen Interrupt aus.
Bei einem Interrupt wird zur nächsten Displaystelle weiter
geschaltet. Nach 4 Anzeigetakten (für die vier Stellen) wird in
einem 5. Takt die Leistung neu berechnet, falls inzwischen die
Drehscheibe eine Umdrehung beendet hat.
Kalibrierung / Funktionstest
Eine Kalibrierung ist eigentlich nicht nötig, aber einen
Funktionstest sollte man schon durchführen.
Anfangs sollte das Sensormodul noch nicht am Zähler montiert
werden.
Bei der Inbetriebnahme sollte man die Stromaufnahme der Module
prüfen. Das Sensormodul nimmt nur etwa 1 mA Strom auf. Das
Anzeigemodul benötigt etwa 150mA. Der Wert schwankt je nach
angezeigtem Zahlenwert und natürlich je nach verwendetem
Displaytyp. Bei deutlich höheren Stromwerten ist die
Betriebsspannung sofort zu trennen, und der Fehler zu suchen.
Nach dem Einschalten zeigt das Display "1234" an. Das ist nur eine
Testausgabe, die die Funktion des Displays demonstriert. Die
Dezimalpunkt der letzten beiden LED-Stellen leuchten auf, wenn die vom
Sensormodul kommende Puls-Leitung aktiv ist (High). Wenn man ein Objekt
(z.B. die Hand) ein paar Sekunden lang in kurzem Abstabnd vor den
Sensor hält, und diese dann entfernt, dann sollte die Puls-Leitung
aktiv werden und die beiden Dezimalpunkte sollten aufleuchten.
Hält man dann die Hand wieder in kurzem Abstand vor den Sensor,
dann sollten die beiden Dezimalpunkte verlöschen.
Der vordere der beiden Dezimalpunkte stellt direkt den Pegel der
Puls-Leitung dar. Dieses Signal wird im Anzeigemodul aber noch per
Software entprellt. Das Ergebnis der Entprellung ist der hintere
Dezimalpunkt. Er reagiert deshalb Sekundenbruchteile (ca. 100 ms)
später.
Verdeckt man den Sensor nun rhythmisch, und simuliert damit
Zähler-Drehscheiben-Drehungen, dann zeigt das Display die
errechnete Leistung an. Eine zu hohe "Pulsfrequenz" führt zur
Überlaufanzeige "----".
Am RS232-Anschluss kann man mit einem Terminalprogramm (9600 Baud) die
vom Sensormodul 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 jeder Sensorbedeckung
wird die Leistung neu berechnet und Umdrehungsanzahl erhöht.
Beträgt die errechnete Leistung mehr als 91 kW , dann wird als
Leistung "W=****0W" ausgegeben.
Die Leistungsangaben auf dem LED-Display und vom RS232-Interface
können um wenige Prozentpunkte abweichen, das ist eine folge der
Taktabweichungen der beiden Mikrocontroller.
Download
Hier liegen
Praktische Erfahrungen
Das LED-Display ist praktisch, wenn sich der Zähler z.B. im Flur
der Wohnung befindet, also dort, wo man öfters mal vorbei kommt.
Mein Stromzähler ist aber im Keller. Deshalb benutze ich das
LED-Display nicht mehr. Der IR-Sensor ist aber mit dem RS232-Anschluss
eines Linux-PCs verbunden, der zufälligerweise seinen Dienst in
Zählernähe versieht. Mit crontab
wird alle 15 Minuten ein Perl-Script aufgerufen, dass den
aktuellen Text-String vom Sensor ausliest und an ein Textfile
anhängt. Ein weiteres Script erstellt daraus gegen Mitternacht
Text-Files, die jeweils die Daten eines Tages enthalten.
Der Apache-Web-Server des PCs stellt eine Liste diese Textdateien zum
Abruf durch beliebige Browser innerhalb des Hausnetzwerkes bereit. Ein
Klick auf einen Listeneintrag erzeugt und präsentiert eine
Verbrauchsgrafik dieses Tages. Das ist im wesentlichen mit PHP
realisiert.
mögliche Erweiterungen
Die Erkennung der roten Marke verwendet feste Offsetspannungen von 250
mV. Weicht die Spannung am Fototransistor um +250mV vom
Spannungsdurchschnitt ab, dann gilt die rote Marke als erkannt.
Ursprünglich plante ich, diese Offsetspannung automatisch anhand
des Messwertrauschens zu bestimmen, und einige Routinen zur Bestimmung
des Durchschnittsrauschens sind im Quellcode noch enthalten. Man
könnte anstelle der festen 250 mV den zehnfachen Wert des
Durchschnittsrauschens als Spannungsoffset verwenden. In der Praxis
genügte bei mir aber der feste Wert.
Die Justage der Sensorposition vor der Drehscheibe ist unkomfortabel
und erfordert ein Oszilloskop. Wer keines besitzt, kann die vom ADC
gemessene Fototransistorspannung kontinuierlich via RS232 ausgeben
lassen. Dazu ist in der Hauptprogrammschleife (Mainloop) der
Sensorsoftware die Zeile "call RsP" zu entkommentieren. Dann wird
nach jeder ADC-Messung per RS232 das ADC-Resultat ausgegeben. Das ist
ein 16-Bit-Wert, der hexadezimal (also 4-stellig) mit dem Präfix
"P:" ausgegeben wird.
Der Maximalwert "P:FFFF" steht für 5V. Kleinere Spannungen ergeben
proportional kleinere Hexadezimalzahlen. Solange sich die rote
Markierung nicht unter dem Sensor befindet, sollte der Zahlenwert
deutlich unter "P:1980" liegen (< 0,5 V). Die rote Markierung sollte
dagegen Werte über "P:3300" ergeben (> 1 V).
Der zeitliche Abstand zwischen dem Einschalten der IR-LED und der
Spannungsmessung durch den ADC des 12F675 kann noch optimiert werden.
Eine Halbierung der Zeitverzögerung von 100 us auf 50 us sollte
die Erkennung der roten Marke deutlich vereinfachen.
Entwicklung / Updates
19.05.2011
- Urversion ist online
22.05.2011
- Bugfix: Speicherung des Energiezählers im EEPROM des Sensormoduls
04.12.2011
- im Sensormodul R1 auf 100 Ohm vergrößert
zurück zu Projekte
, PIC-Prozessoren , Elektronik , Homepage
Autor: sprut
erstellt: 05.05.2011
letzte Änderung:: 05.12.2011