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
Hallo Johann, toller Beitrag, schön dass mal jemand ohne Frage auch von seinem Lernerfolg berichtet. Ist bestimmt noch nützlich ! Gruß Strabe
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.