Magnetooptischer Rotationssensor

 

(Holger Wolfmayr, Institut für Industrielle Elektronik und Materialwissenschaften an der TU-Wien)

 

An der Technischen Universität Wien wurde im Rahmen einer Diplomarbeit ein Rotationssensor entwickelt, der einen C167 als Signalaus-werteeinheit benutzt.

                Das Prinzip des Rotatiossensors ist wie in Bild 1 dargestellt.


Bild 1: Prinzip des Rotationssensors

 

Auf einer Scheibe, deren Rotationsgeschwindigkeit gemessen werden soll,  werden Permanentmagnete befestigt. Mit einem Magnetfeldsensor, der einen transparenten Ferromagneten als magnetooptischen Sensor benutzt, wird das Feld gemessen. Die dadurch entstehende Kurvenform ist in Bild 2 gezeigt.


 

Bild 2: Ausgangssignal des Magnetfeldsensors

 

Man sieht gleich, dass das Ausgangssignal nicht konstante Amplitude hat, sich aber nach 6 Perioden wiederholt. Das ist auf die Ungleichheit der Permanentmagnete zurückzuführen, die gleich herzustellen sehr schwierig ist. Die Toleranz der Magnete wurde mit 20% vom Hersteller angegeben.

                Die einfachste Möglichkeit der Rotations-geschwindigkeitsbestimmung wäre einfach die Impulse zu zählen. Dadurch verliert man aber viel an Information und daher an Auflösung. Daher wurde der folgende Weg gewählt, der mit dem C167 implementiert wurde.

In einer Setup-Phase wird das Signal aufgezeichnet, wobei sichergestellt werden musste, dass die Rotationsgeschwindigkeit während der Aufzeichnung konstant bleibt. Für diese Aufzeichnung musste zuerst eine geeignete Abtastrate bestimmt werden. Dazu braucht man allerdings einen Wert der aktuellen Rotationsgeschwindigkeit. Dieser wurde durch einfaches Impulse-zählen ermittelt. Die Abtastrate wurde dann so berechnet, dass 3/2 Umdrehungen der Scheibe gerade ein Feld mit maximal 500 x 3/2 Integer Werten füllt, wenn man 500 Schritte pro Umdrehung als Auflösung haben möchte. Diese Aufzeichnung wird zweimal hintereinander durchgeführt, um die beiden Felder dann ver-gleichen zu können. Verglichen werden einerseits die Periodenlängen der Felder und der maximale Unterschied. Sind die Perioden nicht auf  +/- 3 Abtastwerte gleich, so muss der Vorgang wiederholt werden. Ist der Unterschied zweier zusammengehörigen Werte größer als ein bestimmter Schwellwert (hier: 0x4F) sind die Felder wahrscheinlich auch nicht gleich.

                Verläuft der Test auf Gleichheit der Felder positiv, kann ein Feld berechnet werden, das für den Messagorithmus verwendet wird. Will man nämlich eine Auflösung des Rotationssenors von z.B. 500 pro Umdrehung, muss das Feld für die Messung genau 500 Werte beinhalten. Das kann aber bei der Abtastung nicht gewährleistet werden, da die Bestimmung der Abtastrate fehlerbehaftet ist. Allerdings kennt man die Abtastrate genau und kann dann mittels linearer Interpolation relativ genau aus einem aufgezeichenten Feld, dessen Periode beispielsweise 532 Werte ist, ein Feld berechnen, das eine Periode von genau 500 hat. Diese Berechnung wurde mit Gleitkommaoperationen durchgeführt, da sie nicht zeitkritisch ist.

                Ist das Feld nun berechnet, kann mit der Messung begonnen werden. Dabei wird das Eingangssignal so schnell wie möglich (ca. 50kHz)  abgetastet. Ein Zeiger I zeigt auf die Position im Feld, die der aktuellen Scheibenposition entspricht. Der aktuelle Eingangsspannungs-Messwert muss zwischen dem Wert an der Position I und I-1 liegen. Ist das nicht der Fall, kann angenommen werden, dass sich die Scheibe weiterbegwegt hat und der Zeiger wird erhöht. Bild 3 zeigt das Ergebnis einer solchen Messung.

 

Bild 3: Eingangs und Ausgangssignal der Signalauswerteeinheit

 

Da sich das Ausgangssignal des  Magnetfeldsensors mit der Zeit langsam ändern kann (Temperaturdrift...) war es ebenfalls notwändig, das Feld für die Messung kontinuierlich zu aktualisieren. Dafür wurden die zwei oben beschriebenen Felder auch während der Messung neu aufgezeichnet, die Überprüfung der Felder auf Gleichheit und die Berechnung des Feldes für die Messung werden im Hintergrund durchgeführt und dann die Felder einfach vertauscht. Der Mess-algorithmus wird dabei natürlich nicht angehalten, somit merkt der Benutzer nichts vom Update des Feldes.

                Ein zusätzlicher Mechanismus, der den Mess-Algorithmus überprüft wurde implementiert, um sicherzustellen, dass nicht durch Rauschen die Nachverfolgung der Kurvenform total schiefgeht. Dazu wurde zuerst ein Schmitt-Trigger im Messalgorithmus implementiert. Die Indexwerte im Feld für die Messung, an denen die Werte, die den Schwellwerten des Schmitt-Triggers am nächsten kommen, stehen, werden in der Setup-Phase bestimmt und gespeichert. Erreicht nun das Eingangssignal einen Schwellwert, so wird im Messalgorithmus geprüft, ob der Indexwert des Feldes den richtigen Wert hat. Ist dies nicht der Fall, so wird der Wert korrigiert und eine Warnung angezeigt. So wird sichergestellt, dass nicht über lange Zeit der Indexzähler des Feldes, der ja der Position der Scheibe entspricht, einen falschen Wert hat, der mit der Zeit nur noch falscher werden kann.

                Die verschienden Aufgaben des C167 waren also zusammengefasst:

 

·         Aufzeichnung des Eingangssignals, ILVL=10;

·         Auswertung der Aufzeichnung, ILVL=1;

·         Messung (ILVL=9) und Berechnung (ILVL=3) der Rotationsgeschwindigkeit aus den Zählerwerten;

·         Ansteuerung des LCD-Displays, ILVL=2.

 

Alle Aufgaben wurden mit den internen Timern gesteuert. Um diese Aufgaben möglichst so auszuführen, dass sie die Messung so wenig wie möglich beeinflussen, wurden Interrupt-Prioritäten, wie mit ILVL angegeben, gewählt. Die Priorität der Aufzeichnung war deswegen die höchste, da der Task sehr kurz ist (Wert in Feld abspeichern und Zähler erhöhen) und daher die Messung kaum beeinflusst.

                Die Hardware der Signalauswerteeinheit ist relativ einfach aufgebaut. Ein Phytec-Board wurde verwendet, an das an einem Port des C167 noch eine 16-stellige LCD-Anzeige angeschlossen wurde. Ansonsten ließ der C167 in Punkto Hardware keine Wünsche übrig.

 

Als C Compiler wurde das Embedded Development Environment 2.0 von Tasking verwendet.