Samstag, März 17, 2007

Fehlerhaftes Signal

Bei der Entwicklung meines zweiten Encoders ist mir ein Fehler unterlaufen, den ich nicht leicht finden konnte.

Mein Roboter ist mit zwei Motoren ausgestattet, die je einen neuen Encoder bekommen haben. Über eine serielle Verbindung lasse ich mir die Drehzahlen der Motoren am PC ausgeben.

Diese Daten habe ich in eine Exceltabelle gebracht und musste leider feststellen, dass ein Encoder schlechte Signale liefert.

Auf den Bildern ist so eine Messreihe zu sehen, bei der die Motoren mit konstanter Geschwindikeit drehen. Eigentlich sollte dann der Encoderwert nur +/- 1 springen.



Nachdem ich die Schaltung noch einmal intensiv nach Fehler durchsucht hatte und ich keinen Fehler feststellen konnte habe ich mir die Signale an einem Oszi angesehen. Das obere Bild zeigt den heilen Encoder mit zwei um 90° phasenverschobenen Signalen. Ein Highlevel bedeutet, dass der Transistor Licht bekommen hat. Ein Lowlevel bedeutet, er wurde abgeschattet.
Das untere Bild zeigt die Signale des defekten Encoder.
Es ist deutlich zu sehen, dass die Abschattung nur sehr kurz ist und beim oberen Signal sogar manchmal ausfällt.
Dies führt dazu, dass die Auswertung kurzzeitig ein Rückwärtsdrehen erkennt und so die Signale stark schwanken.

Der Grund dafür war, dass ich zwei IR Leuchten verwendet habe. Sie erzeugten so viel Licht, dass die Transistoren nur einen kurzen Moment aus gingen. Wenn die Lochscheibe dazu noch etwas eierte, wurden Signale ganz ausgelassen. Ich habe eine IR-LED ausgelöten und nun funktioniert auch mein zweiter Encoder tadellos. Mir war beim Messen am Oszi schon aufgefallen, dass der erste Encoder weniger Strom verbrauchte. Ich denke bei dem war zufälligerweise schon eine IR-LED defekt, weshalb er von anfang an so gut funktionierte :-).

zur Animation klick -->

Drehzahl Encoder für RB40 Motoren

Viele kennen sicher das Problem, dass man irgendwie die Drehzahl der Räder/ Motoren messen möchte.

Häufig habe ich gesehen, dass dies über eine Hell- /Dunkelerkennung am Antriebsrad gemacht wird. Teure Motoren hingegen haben einen Encoder direkt hinten bei den Anschlüssen. Ich habe mich mal daran versucht, auch einen Drehzahlmesser direkt an den Motoren zu bauen.

Als erstes habe ich mir zwei Platinen in Form der Motoren ausgeschnitten und in die eine Platine Löcher für das Motorlager und die Anschlüsse gebohrt. Anschließend habe ich zwei Aussparungen für Infrarottransistoren (LPT80) gefräst.



Auf der zweiten Platine habe ich an der gleichen Stelle auch eine Aussparung gefräst, dieses mal für die IR-Leds. Die Platinenverbinder bestehenen aus einzelnen IC-Sockestiften.






Nach einigen Versuchen und ein paar kaputten IR-Transistoren habe ich dann eine geeignete Schaltung gefunden und auf die Platinen gelötet. Sie besteht aus ein paar Vorwiderständen und einem Schmitttrigger. Auf dem vierpoligen Stecker befinden sich die Versorgungsspannung und zwei Phasensignale. Sie liefern mir zwei um 90° phasenverschobene Encodersignale.

Da die IR-Transitoren nicht durch Schlitzblenden abgedeckt sind, musste ich die Lochscheibe recht grob bemessen (vier Einteilungen).

Die Motoren lassen nicht gerade viel Platz zur Befestigung (gerade mal 14mm), also habe ich die Lochscheiben einfach auf das Wellenende geklebt.


Schafft der µC noch die Auswertung?
Die Motoren drehen mit maximal 6000 UPM und erzeugen pro Umdrehung 16 Flanken (je Sensor und je Hell- /Dukenwechsel); macht max. 96000 Flanken pro Minute, also 1600 Flanken pro Sekunde.
Die Abtastung der Signale sollte vom µC mindestens doppelt so schnell sein wie 3,2 kHz, am besten gleich 5kHz. Auf diese Frequenz habe ich mein Programm eingestellt und bin sehr zufrieden.