Kaskadierende Positions- und Geschwindigkeitsregler für PID-DC-Motoren

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?

Welches Feedback verwenden Sie für die Motoren?
So wie es aussieht, macht die Frage nicht viel Sinn. Wie können Sie die Winkelposition des Motors bei einer anderen Geschwindigkeit als Null steuern? Wenn Sie möchten, dass sich ein Motor mit einem bestimmten Geschwindigkeitsprofil von einer Position zur anderen bewegt, wird dies normalerweise durch einen Positionsregelkreis implementiert, der mit einer zeitbasierten Reihe von Positionen gespeist wird, die von einem Profilgenerator generiert werden.
Hallo @Andyaka! Ich verwende inkrementelle Positions-Hall-Effekt-Encoder.
Ich bin vielleicht zu spät, aber Ihr Ansatz ist richtig. Sie können auch einen Drehmomentregler kaskadieren, um auf Laststörungen zu reagieren, und Sie können einen optimalen Ansatz verwenden, um die Verstärkungen der Regler zu berechnen

Antworten (2)

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:

  1. Wenn die beiden Gleichstrommotoren parallel arbeiten, müssen Sie einen Weg finden, damit sich die beiden nicht gegenseitig stören (wie z. B. Lastverteilung erzwingen ). Allerdings müssen Sie dieses Problem bereits in der Geschwindigkeitsschleife gehabt haben.
  2. Die externe Schleife (Lageregelung) ist zwangsläufig viel langsamer als die Geschwindigkeitsschleife. Wenn es mit der gleichen Geschwindigkeit oder schneller funktionierte, würde die Positionsschleife stark an der Geschwindigkeitsschleife ziehen, ohne ihr die Zeit zum Reagieren zu lassen, und Sie hätten starke Wechselwirkungen oder sogar Instabilitäten. Ich schlage vor, dass Sie die interne (Geschwindigkeit) so weit wie möglich beschleunigen und dann die externe abstimmen.
  3. Die externe Schleife soll hier Ihre 'genaue' sein. Der interne sollte eher schnell reagieren als präzise. Ich würde einen P- oder PD-Regler für den internen und PI oder PID für den externen vorschlagen.

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.