www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Erfahrungsbericht: Schrittmotor als Rotary Encoder


Autor: Atter See (attersee)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Diesmal komme ich nicht mit einer Frage, sondern mit einem 
Erfahrungsbericht, der vielleicht jemand helfen kann, der so wie ich 
einen Schrittmotor als Rotary Encoder benutzen will.

Der Mix mit dem ich startete, bestand aus einem Schrittmotor von einem 5 
¼ Zoll Diskettenlaufwerk, der Schaltung vom Ingenierbüro Michael Schmidt 
(findet man im Internet) und den Encoder Routinen von Sprut (ebenfalls 
im Internet). Als uC verwende ich einen PIC P16F876A mit einem 10 MHz 
Takt. Der Code wurde mit MPLAB IDE V8.02 in Assembler erstellt.

Mir war vom Anfang an bewusst, dass bei einem elektromagnetischen Geber, 
der ja nur temporär Impulse generieren kann, bei der Drehrichtungsumkehr 
Irregularitäten auftreten. So war es dann auch. Während das Drehen in 
eine Richtung – ob langsam oder schnell – einwandfreie Ergebnisse 
lieferte, kam es bei der Drehrichtungsumkehr häufig zu ein oder mehreren 
Schritten in die falsche Richtung.

Nachdem die Schaltung gut abgeglichen war und damit bei Empfindlichkeit 
und Hysterese kaum eine Verbesserung möglich schien, überlegte ich nach 
einer Möglichkeit, diesen Mangel durch einen Eingriff in die Software zu 
beheben.

Und was ist bei einem induktiven Geber naheliegender, als dass er bei 
der Richtungsumkehr – je nachdem, welche Polposition der Rotor gerade 
einnimmt – Impulse verliert. Nun entspricht eine Richtungsumkehr einer 
Spiegelung der Impulse auf der Zeitachse. Nimmt man nun an, dass 
unmittelbar nach der Richtungsumkehr bei einem der Kanäle der erste 
Impuls völlig entfällt, so stellt man fest, dass der n-2 te und der n-te 
vom Encoder gelesene Wert identisch werden. Genau das führt aber auf 
eine Impulsfolge, die eine falsche Drehrichtung vortäuscht.

So ging ich her und speicherte nicht 2, sondern 3 aufeinanderfolgende 
Encoder-Daten. Dabei dient der n-te Wert als Vorlauf zur Detektion 
verlorengegangener Impulse. Die Werte bei n-2 und n-1 werden für die 
Richtungsermittlung herangezogen. Sind n und n-2 identisch, so werden 
die beiden zuvor gespeicherten Werte verworfen und der n-te Wert als 
erster Wert einer neuen Sequenz betrachtet.

Ich habe den Algorithmus noch dahingehend erweitert, dass ich bei n und 
n-2 nicht die Gleichheit abfrage, sondern deren Summe. Bei 
kontinuierlichem Durchlauf ist diese Summe immer 3. Kommt es zu 
Irregularitäten in der Sequenz – wie sie beim Umkehrpunkt mit induktivem 
Geber unvermeidlich sind –, so ergibt die Summe einen von 3 abweichende 
Wert. Bei dieser Methode wird wohl auch eine perfekte Richtungsumkehr 
(ohne Impulsverlust) als Irregularität detektiert, dies ist jedoch nicht 
störend, weil dieser Idealfall ohnedies nicht oder kaum eintritt.

War es vor dieser Änderung äußerst schwierig, einen Wert mit wenigen 
Drehvorgängen auf Anhieb einzustellen, so gelingt dies jetzt praktisch 
immer. Zuvor gab es beinahe immer nach der Richtungsumkehr ein paar 
Schritte in die falsche Richtung. Jetzt gibt es statt der falschen 
Richtung den einen oder anderen bei der Bedienung nicht störenden 
Leerschritt (natürlich nur nach einer Richtungsumkehr).

Der Algorithmus deckt wohl den Großteil der bislang aufgetretenen 
Irregularitäten ab, doch bilde ich mir ein, in Ausnahmefällen einen 
Schritt in die falsche Richtung beobachtet zu haben. Sicher bin ich mir 
aber nicht und messtechnisch kann ich es mit vertretbarem Aufwand nicht 
erfassen, weil ich über kein DSO verfüge.

Faktum ist jedenfalls, dass mit dem Encoder die Feineinstellung 
butterweich und haarscharf funktioniert. Das reicht mir.

Vielleicht ist diese Erfahrung für jemanden von Nutzen.

Grüße,

Johann

Autor: Holger S. (strabe)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Johann,

toller Beitrag, schön dass mal jemand ohne Frage auch von seinem 
Lernerfolg berichtet. Ist bestimmt noch nützlich !
Gruß Strabe

Autor: Ralf R. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe auch nach einer robusten Impulsgeberlösung gesucht und nutze seit 
einer Woche einen Schrittmotor mit dementsprechender Schaltung. Alles 
bestens bis auf das Problem, dass wenn der Schrittmotor eine 
Erschütterung erfährt (z.B. Klopfen mit Schraubenzieher) es ebenso zu 
Schritten kommt ohne dass die Welle gedreht wurde.

Hat dieses Problem auch jemand von euch und kann ich es umgehen??

Benutze einen bipolar Motor mit 4 Leitungen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.