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.)

anklicken zum
                Vergrößern



Aufbau Sensor-Modul

Leistungsanzeige-Modul

Montage des TestaufbausDer 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.)
Sensor

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 PrototypGehä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