kontinuierliche Servopositionsregelung

Mit einem Servo mit kontinuierlicher Drehung kann ich die Richtung und die Geschwindigkeit des Servos steuern, aber ich muss auch die Position steuern. Ich weiß, dass dies aufgrund fehlender Feedback-Steuerung in einem kontinuierlichen Servo nicht direkt möglich ist, aber ich habe einige Hinweise zum Hinzufügen eines Encoders gefunden, mit dem Sie die Position steuern können.

Ist es möglich, einem kontinuierlichen Servo einen Encoder hinzuzufügen, um seine Position zu steuern, und wenn ja, wie?

Kann ich auch etwas hinzufügen, um die Bewegung des Servos wie im Bild unten zu blockieren, oder würde ein solcher Stoppeffekt das Servo beschädigen?

http://i.stack.imgur.com/WguAS.png

Ich habe bereits einen Fehler gemacht und ein kontinuierliches Servo gekauft, also versuche ich, eine Lösung zu finden
Es hört sich so an, als ob Sie für diese Anwendung ein herkömmliches Servo und kein kontinuierliches Servo wünschen.
Man könnte sich auch überlegen, das interne Potentiometer des Servos umzustecken, da bei den meisten mir bekannten sogenannten "Dauerlauf"-Servos einfach das Poti abgeklemmt wird, alles andere bleibt wie es ist.
@AnindoGhosh: Ich glaube nicht, dass das interne Potentiometer in dem, das ich gekauft habe, vorhanden ist, aber ich werde versuchen, es zu öffnen, um das zu überprüfen.
Da Sie nach einem schnellen und kostengünstigen Hack suchen, um einen Fehler zu korrigieren, und nicht nach allgemeinen Richtlinien für gute Designpraktiken, muss diese Frage als "zu lokalisiert" für Ihre spezielle Situation geschlossen werden.

Antworten (2)

Ja, ein Drehgeber kann jedem Motor hinzugefügt werden, einschließlich eines Servos, der für kontinuierliche Drehung modifiziert wurde und zur Positionssteuerung verwendet wird.

Dies ist jedoch etwas kontraintuitiv, da die interne Schaltung des Servos bereits die Positionskontrolle bereitstellt und das integrierte Potentiometer als Drehsensor verwendet. Es erscheint unnötig, diesen Positionierungsmechanismus zu trennen und dann einen externen Positionsbestimmungssensor oder -codierer hinzuzufügen, um das gleiche Ergebnis zu erzielen.

Wie dem auch sei, das übliche Verfahren, um eine solche Positionssteuerung mit einem Drehgeber zu erhalten, besteht darin , den Drehgeber an die Welle des Motors zu kleben und dann die codierten Werte in einen Mikrocontroller zu übernehmen, wobei ein PID-Algorithmus im Mikrocontroller verwendet wird, der als a Funktion dieser Positionsinformationen, Spannung und Polarität des Motors zu steuern, um den Motor an der gewünschten Position zum Stillstand zu bringen.

Sehr vereinfacht ausgedrückt, wenn die vom Drehgeber erkannte Position des Servos im Uhrzeigersinn zur gewünschten Position ist, würde der PID-Algorithmus den Motor gegen den Uhrzeigersinn drehen, bis die beiden Positionen identisch sind. Umgekehrt, wenn die erkannte Position gegen den Uhrzeigersinn zur gewünschten Position ist. Wenn anschließend ein externes Drehmoment die Welle aus der Ruheposition bewegt, speist der Drehgeber neue Winkeldaten in den PID-Code ein, der dann die oben beschriebene Logik anwendet.


Hinsichtlich des Hinzufügens eines mechanischen Anschlags zu einem Servomotor ist dies im Allgemeinen ein praktikabler Ansatz – der Motor zieht seinen Blockierstrom, der höher ist als der normale Betriebsstrom. Sie müssen jedoch das Datenblatt des betreffenden Motors überprüfen, um festzustellen, wie lange er dem Stillstandsstrom standhalten kann. Nicht alle Motoren können mit Dauerstillstand fertig werden.

Die Lösung in einem solchen Fall kann eine der folgenden sein:

  • Verwenden Sie den Code im Mikrocontroller zusammen mit einer geeigneten Stromerfassungsschaltung, um zu erkennen, wann der Motorstrom einen kalibrierten Schwellenwert überschreitet, dh der Motor stoppt am mechanischen Anschlag. Stoppen Sie zu diesem Zeitpunkt die Stromversorgung des Motors. Dies ist komplex und auf der Schaltungsseite aufgrund von Leistungsverlusten im verwendeten Messwiderstand nicht trivial. Für große Strommotoren können Hall-Stromsensoren oder nicht-invasive Sensoren verwendet werden, wodurch der Leistungsverlust reduziert wird.
  • Verwenden Sie einen Endschalter anstelle eines mechanischen Festanschlags und verwenden Sie das Signal zum Schließen des Schalters als digitalen Eingang für Ihren Mikrocontroller und verwenden Sie einen Code, um die Stromversorgung des Motors zu stoppen, wenn die Grenze ausgelöst wird. Dies ist die einfachste und kostengünstigste Lösung und außerdem sicher für den Motor.

Die einzigen Servos, denen Bewegungs- oder Positionserkennung "fehlt", sind billige Hobby-Servos. Das ist die schlechteste Art, die für ein robustes System verwendet werden kann. Sie lesen nicht nur Feedback über einen Teilbogen (nicht 360 Grad), sondern geben auch überhaupt kein Feedback an den Kommandanten zurück.

Sie können hochwertigere Servos mit echten Positionsgebern, echten Stromsensoren, PID-Reglern für die Bewegungssteuerung, serieller RS-485-Kommunikation in beide Richtungen und vielem mehr kaufen. Diese Servos können "zu einem Punkt gehen" oder "mit einer Geschwindigkeit drehen" oder jede andere Art von Bewegung ausführen, die Sie möchten.

Zum Beispiel füge ich diesen Typen in mein aktuelles Projekt ein:

http://support.robotis.com/en/product/dynamixel/mx_series/mx-64.htm

Es ist immer noch ein Servo im "Hobby"-Stil, aber ziemlich leistungsfähig und bisher echt

Diese PID-Regler sind großartig und genau das, was ich brauche, aber wenn Sie sich ihren Preis bei Amazon ansehen, kosten sie ungefähr 219 $ und andere 499 $, also sind sie nicht billig. Aber @Anindo-Ghosh schlägt vor, ein Drehservo hinzuzufügen und es mit dem Drehgeber zu verbinden und einen PID-Algorithmus auf dem Mikrocontroller zu verwenden, um die Position zu steuern. Ich weiß, dass dies den Overhead erhöht, aber es ist eine billige Lösung
Im Allgemeinen bekommen Sie das, wofür Sie bezahlen.