Für regelungstechnische Probleme wie eine Schubvektorsteuerung muss man das Verhalten von Servos etwas genauer kennen als die Angabe "0,07 s/60°" des Verkäufers ...
Ich habe also eine kleine Halterung für einen Stabmagneten gedruckt und auf ein Servohorn geklemmt. Der Servo hängt kopfüber über einem AMS AS5048B Sensor. Das ist ein Absolut-Magnetencoder mit 14 bit Auflösung, den ich mal als Sample bestellt hatte. Ich kann also (theoretisch) die Lage des Magneten auf 360°/16384 = 0,022° genau bestimmen, in der Praxis rauschen die unteren 2–3 bit allerdings.
Den Sensor lese ich alle 4 ms aus und schreibe den Messwert (2 Byte) fortlaufend in einen Flash-Speicherchip (bzw. einen Buffer, und wenn de voll ist wird er komplett in den Speicher geschrieben). Schneller geht leider nicht, weil der Arduino und/oder der Flash mit dem Speichern nicht hinterherkommen. Es gibt da bestimmt cleverere Lösungen, aber 4 ms sollen erstmal ausreichen. Erst wenn das Versuchsprogramm abgelaufen ist, werden die Messwerte stumpf als Ganzzahlen über die serielle Schnittstelle an den PC ausgegeben, und dort mit Excel weiterverarbeitet.
Ich habe stufenweise Bewegungen in etwa um die Mittellage definiert, und alle 100 ms bekommt der Servo einen neuen Zielwert. So kann man beobachten, wie schnell der Servo sich bewegt und ob er auf unterschiedliche Eingabeänderungen unterschiedlich reagiert.
So sieht zum Beispiel eine Messreihe mit zehn 2°-Schritten aus (x-Achse Zeit in Millisekunden, y-Achse Messwert wie vom Sensor ausgegeben):
Man sieht ganz gut, dass ein Schritt etwas größer zu sein scheint als 2°, denn die ca. 130 auf der Y-Achse für einen 2°-Sprung entsprechen eher 2,8°. Allerdings ist unklar, ob ich dem Servo oder dem Sensor eher trauen soll. Da man auch gut erkennt, dass es immer wieder ca. 1° große Sprünge gibt (das eigentliche Rauschen des Sensors kann man in den annähernd konstanten Bereichen erkennen), traue ich eher dem Sensor als dem Servo. Oder ich habe mich verrechnet, da der Faktor für alle Schrittweiten zwischen 1,3 und 1,4 liegt.
Auch sieht man gut, dass die Bewegung um 1° immer etwa 40 ms dauert. Also deutlich länger als wenn man einfach nur 0,07 s durch 60° teilt.
Das ganze habe ich für mehrere Schrittgrößen bis 8° gemacht und über mehrere Messreihen gemittelt.
Hier sieht man die Kurven für die Schrittweiten 1° bis 4° und die entsprechenden Näherungen durch ein sogenanntes PT2-Glied. Der Servo muss sich erstmal in Bewegung setzen, und dann auch bald wieder abbremsen um den Zielwert nicht zu überschwingen.
Interessant ist, dass die Verstellzeit zumindest für die Schrittweiten 1°, 2° und 3° annähernd gleich ist, und die Verstellgeschwindigkeit somit direkt proportional zum Eingabewert. Es versteckt sich also offenbar ein klassischer lineare Regler irgendwo im Servo.
Für die größeren Schritteweiten sieht man im folgenden Diagramm, dass die Steigung der Kurve einen bestimmten Wert nicht überschreitet und die Verstellung somit langsamer verläuft.
In diesen Bereichen konstanter Steigung ist wohl die Maximaldrehzahl des Motors im Servo erreicht. Da man es in der Praxis wohl kaum mit abrupten Soll-Winkeländerungen von mehr als 3° zu tun haben wird, kann man den Servo also gut linear annähern.
Ich habe auch schon ein einfaches Modell des Regelkreises für die Schubvektorsteuerung erstellt, und so weit kann der Servo die Rakete gut regeln. Leider kann ich mit dem jetzigen Aufbau die Trägheit der Motorhalterung mit dem Treibsatz nicht berücksichtigen, die sicher dazu führt, dass die Verstellgeschwindigkeit abnimmt.
Oliver