Ich versuche, einen Roboter mit einem Differentialantrieb zu bauen, der von zwei Gleichstrommotoren angetrieben wird. Zuerst implementierte ich einen PID-Controller, um die Geschwindigkeit jedes Motors unabhängig zu steuern. Geschätzte TF unter Verwendung der System Identification Toolbox von MATLAB des Open-Loop-Systems durch Erfassen der Geschwindigkeit jedes Rad-Encoders in Funktion des PWM-Signals, das von einem Arduino-Mikrocontroller angelegt wird. Alles lief gut und ich habe die PID-Verstärkungen für diesen Regler erfolgreich dimensioniert.
Was ich jetzt versuche zu erreichen, ist, die genaue (Winkel-) Position des Gleichstrommotors zu steuern. Ich dachte an die Kaskadierung eines PID-Reglers im Eingang des anderen bereits implementiert. Auf diese Weise kann ich dem ersten Controller eine Position geben, die in der Lage ist, eine Ausgangsreferenz für den zweiten (Geschwindigkeits-) Controller zu erzeugen, damit er das entsprechende PWM-Wertsignal erzeugt, um den Gleichstrommotor entsprechend anzutreiben.
Wird es funktionieren? Ist das ein guter Ansatz? Oder sollte ich versuchen, einen anderen Controller zu implementieren, der das PWM-Signal als Reaktion auf ein Positionsreferenzsignal ausgibt?
Dein Ansatz sollte funktionieren. Es ist auch der einfachste Weg, um das Problem zu lösen.
Sie könnten immer einen Positionsregler ausarbeiten, der die Motoren direkt steuert, aber es wäre weniger einfach zu verstehen, wie man ihn abstimmt. Und ich verstehe, dass Sie sowohl Positions- als auch Geschwindigkeitsmessungen haben, warum also nicht zwei Schleifen verwenden?
Wie die Kommentare der Leute zu Ihrer Frage hervorheben, hätten Sie jetzt offensichtlich eher einen Positionsregler als eine Geschwindigkeit. Aber es macht Sinn, da es für einen Roboter ist.
Dabei müssen Sie auf einige Details achten:
Extra-Tipp: Da es sich um einen Roboter handelt, würde ich eine Positionsreferenz-Feed-Forward in Betracht ziehen .
Wenn Sie die Position kontrollieren wollen, kontrollieren Sie die Position. Ich sehe keinen Sinn darin, einen mittleren Geschwindigkeitsregler zu haben. Das macht die Sache komplizierter und schwieriger abzustimmen.
Da Sie anscheinend Positionsdecoder haben, sollte Ihr Regelkreis die Position direkt steuern. Dieser Regelkreis kann dann den Motor weit von der gewünschten Position stärker antreiben und weniger, wenn er nahe ist. Wenn es richtig gemacht wird, führt dies implizit zu einem guten Geschwindigkeitsprofil, um von einer Position zur anderen zu gelangen.
Wenn das übergeordnete System möchte, dass die Motoren mit einer bestimmten Geschwindigkeit laufen, sollte es die gewünschte Position an den Positionsregler rampenförmig ansteuern.
Andi aka
David Tweed
rflmota
Benutzer120030