Lehre.ThemaServoReglung (Struktur)


Programmierung einer Servoregelung

Im Rahmen der Neuentwicklung der Elektronik und Software für die digitalen Servos unserer HuBoTuc-Roboter (humanoide Edutainment-Roboter) ist auch die Servo-Regelung neu zu programmieren. Als Test-Hardware sind die in der Veranstaltung "Informatikwerkstatt -- Gruppe MR" eingesetzten Baugruppen mit geringfügigen Erweiterungen zu verwenden. Eine erprobte Testumgebung für Regler mit einer Schnittstelle nach Python zur Untersuchung des Reglerverhalten kann gleichfalls mit geringem Anpassungsaufwand aus dieser Veranstaltung übernommen werden.

Es ist wieder ein PI-bzw- PID-Regleralgorithmus zu implementieren. Die künftigen Servos sollen nicht nur geregelte Drehbewegungen mit konstanter Winkelgeschwindigkeit, sondern auch gleichmäßig beschleunigte Bewegungen ausführen können. Der Zeit-Winkel-Sollverlauf ist der Servosteuerung als Datenstruktur zu übergeben. Wenn der Servo eine vorgegebene Bahn nicht abfahren kann, weil entweder die Winkelpositionen oder Winkelgeschwindigkeiten oder die Winkelschleunigungen nicht erreichbar sind, soll möglichst umgehend eine Fehlermeldung an die Steuerung gesendet werden. Wenn die Steuerung nach einer solchen Meldung die Soll-Bahn nicht innerhalb einer kurzen, als Konstante definierten Zeit (max. 1 s) korrigiert, soll der Antriebsmotor stromlos geschaltet und die übergeordnete Steuerung darüber informiert werden.

Arbeitsschritte

  • Inbetriebnahme und Test der bis Foliensatz F8 in der Veranstaltung Informatikwerkstatt-MR beschriebenen Vorbildlösung: Zusammenstecken der Baugruppen wie beschrieben, Anschluss der orgiginalen Antriebsmotoren, Ausprobieren mit den Programmbausteinen auf der Web-Seite, Vereinfachung dahingehend, dass nur ein Motor geregelt wird. Suche geeigneter Reglerparameter.
  • Umstellung auf Servos: Bei den Servos wird der Drehwinkel statt über Hallsensorpulse mit einem Potentiometer, das an der Servo-Achse befestigt ist, gemessen. Die Messgröße ist eine Spannung, die im Mikrokontroller in eine Zahl umzuwandeln ist. Der Programmteil für die Winkelbestimmung aus den phasenversetzten Pulsen A und B ist durch eine ADC-Wandlung in einer zusätzlichen Interrupt-Routine vor der Reglerberechnung zu ersetzen. Dabei ist programmtechnisch sicherzustellen, dass sich der Servo nicht über seine Endlagen hinausbewegt. Der Servomotor darf erst angeschlossen werden, wenn die Endlagenabschaltung zuverlässig funktioniert.
  • Reglerparameter festlegen: Wenn die Winkelmessung, die Motoransteuerung und die Endlagenabschaltung zuverlässig funktionieren, sind unter Nutzung des Pythonprogramms, dass den Ist-Winkel-Zeit-Verlauf visualisiert, Wertebereiche und Default-Werte für die Reglerparameter zu suchen. Eine gute Beschreibung für eine heuristische Dimensionierung von PID-Reglern ist in "Tietze, Schenk: Halbleiter-Schaltungstechnik. Kapitel 22 (Elektronische Regler), Springer-Verlag" zu finden.
  • Bewegungsbeschreibung: Die Servo-Steuerung soll intern eine Liste von Bewegungssegmenten abarbeiten, in der sich gleichmäßig beschleunigte (bzw. gebremste) Winkelbewegungen mit gleichförmigen Winkelbewegungen abwechseln. Eine gleichförmige Bewegung wird durch ihren Anfangs- und Endwinkel und die Bewegungsdauer beschrieben. Die Winkelgeschwindigkeit ist die Winkeldifferenz geteilt durch die Zeit. Die gleichmäßig beschleunigten Bewegungssegmente dazwischen haben als Anfangsgeschwindigkeit die des Segments davor und als Endgeschwinigkeit die des Segments danach. Ein Vorschlag für eine geeignete Datenstruktur für eine komplette Bewegung könnte eine Liste sein, in der für jeden Zeitpunkt zwischen zwei Bewegungssegmenten Zeit und Winkel sowie, ob die nachfolgende Bewegung gleichförmig oder beschleunigt ist, steht. Für die beschleunigten und gebremsten Bewegungssegmente ergibt sich dabei die Winkeländerung aus den Geschwindigkeiten der benachbarten gleichmäßigen Bewegungssegmente und der Bewegungsdauer.
  • Fehlerbehandlung: Sowohl in der Bewegungsbeschreibung als auch bei der Bewegungsauführung können Fehler auftreten, z.B. unzulässige Positionen, Geschwindigkeiten oder Beschleunigungen, Abweichungen zwischen der berechneten und der vorgegebenen Soll-Positionen, Motorblockierungen, Unterspannung, ... auf die die übergeordnete Steuerung reagieren muss. Das erfordert ein wohldurchdachtes Konzept von Fehlermeldungen und Fehlerreaktionen.
  • Prototypentwicklung: Der zu entwickelnde Prototyp soll zwei serielle Ports haben. Den ersten für die Kommunikation mit der Steuerung (Empfang von Bewegungsvorgaben und Rücksenden von Fehler- und Statusnachrichten) und den zweiten zur Ausgabe der Soll- und Ist-Position (sowie optional des Stell- und des Integralwertes) für jeden Reglerschritt. Das PC-Programm am ersten Port soll in Datein gespeicherte Bewegungsbeschreibungen an die Servo-Steuerung senden und die Fehlerbehandlung der übergeordneten Steuerung nachbilden. Das PC-Programm am anderen Port soll nur aufzeichnen, z.B. zur nachträglichen Visualisierung des Reglerverhaltens mit Python.
  • Gyro-Bewegungsstabilisierung: Damit die Roboter sich nicht aufschwingen, soll ein Teil der Servos mit Gyro-Sensoren zur Messung der Winkelgeschwindigkeit um die Bewegungsachse ausgestattet werden. Aus der gemessenen Winkelgeschwindigkeit soll ein Überlagerungswert für die Sollposition berechnet werden, die den Roboter insgesamt stabilisiert. In diesem Projekt soll nur der Gyro-Sensor angeschlossen (als PMOD an die Mikrorechner-Baugruppe angesteckt) und eine Reaktion des Servos auf eine Lageänderung des Gyros nachgewiesen werden.
  • Überlastschutz: Wenn der Motor bei angelegter Spannung blockiert, fließt ein hoher Strom der nach einer zu langen Zeit zu einer termischen Zerstörung führt. Es ist zu untersuchen, ob eine solche Überlastung bereits an den reglerinternen Größen, z.B. der Soll-Ist-Abweichung, dem Stellwert, der Soll-Geschwindigkeit, dem Integralwert, ... zuverlässig ablesbar ist, oder ob die Servosteuerung einen Stromsensor benötigt.
Der hier skizzierte Lösungsweg ist als Vorschlag zu betrachten. Alternative Lösungsansätze und weitere Anregungen sowie übernehmbare Code-Bausteine bietet das OpenServo-Projekt.


Autor: gkemnitz, Letzte Änderung: 12.03.2024 11:05:28


 TU Clausthal 2020  Impressum