Hi,
Das verstehe ich nicht ganz. Wieso hältst Du nicht einfach in einer Variable die Position vor, auf die das System einregeln soll. Das System kümmert sich dann darum, dass es gegen äußere Störungen auf der Position bleibt. Neue Sollpositionen kannst Du dann asynchron, d. h. zu beliebigen Zeitpunkten an das System übergeben. Oder übersehe ich da etwas?Derzeit ist es leider so, dass der Regler im Interrupt der UART läuft, da ich nicht weiß, wie ich das Ganze sonst synchron zum Rechner halten soll. Eigentlich wäre es besser, wenn der Regler mit einem eigenen Timer läuft und den Rechner nach neuen Werten fragt anstatt umgekehrt. Was passiert dann aber, wenn der Rechner dann nix von sich hören lässt?
Ich habe das alles ja nie systematisch gelernt. Bei meinen robolink Armen kamen Schrittmotoren zum Einsatz. Die kann man ja leicht open loop auf Drehzahl halten. Insofern habe ich das System so aufgebaut, dass innen quasi eine Drehzahlsteuerung (keine Regelung) war, die sich auch um Anfahrrampen u.ä. gekümmert hat. Die übergeordnete Positionsregelung hat dann als Stellwert die Drehzahl für den entprechenden DOF ausgegeben. Die Positionsregelung wurde dadurch sehr einfach, im Prinzip funktionierte schon ein reiner P-Regler ganz ordentlich (hier zu sehen). Natürlich kann man einen Schrittmotor nicht mit einem DC Motor vergleichen, aus der Erfahrung würde ich aber auf jeden Fall dazu neigen, zuerst eine Drehzahlregelung aufzubauen und dann die Positionsregelung obendrauf zu setzen.Ansonsten ist es sicher auch nicht verkehrt, eine kaskadierte Regelung aufzubauen (on innen nach außen Stromregler, Geschwindigkeitsregler und Positionsregler). Das soll auch ganz gut zu implementieren gehen, da man sich von innen nach außen vorarbeiten kann. Dann kann man jeden einzelnen Regler so einstellen, dass er das gewünschte Verhalten zeigt und er dann mit der zugehörigen Strecke als Blackbox behandelt werden kann.
Gruß
Malte
Lesezeichen