PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Servo 3 Phasen synchron Motor, Regelungsproblem



Feratu
13.02.2013, 22:01
Hallo,
ich bin gerade dabei für ein größeres Projekt die Ansteuerung für den verbauten Torque Servomotor zu bauen und zu Programmieren.
Folgende Komponenten werden verwendet:
Motor: 20 Pol 44Watt 3 Phasen Synchronmotor
Endstufe: DRV3801 (Mosfet treiber)
Controller: STM32L152 Cortex M3 mit 32MHz
Positionsgeber: 2000 Pulse pro Umdrehung, Position wird von einem FPGA über SPI ausgelesen

Funktion:
Positionierungssystem das die Position auf einen Teilstrich (Position) genau anfahren und halten soll.

Problem:
Also zunächst mal, die Positionierung funktioniert an sich wirklich gut, nur in der Endposition schwingt es zwischen 2.. 4 Pulsen hin und her.
Ein Schwingen in der Endposition möchte ich natürlich vermeiden. Jeddoch habe ich nun keine Idee mehr wie ich das Anstellen könnte.

Meine aktuelle Regelung:
Da dieses System im normalen Betrieb niemals mehr als eine ganze Umdrehung macht erspare ich mir hier jegliche Transformation oder Vector Controller.
Auch den Strom stelle ich über die Breite der PWM ein, das funktioniert da die PWM mit 21Khz und einer auflösung von 1500 Schritten arbeitet.
Ich versuche das Ganze möglichst einfach und überschaubar zu halten.
Mein Regelansatz sieht folgendermaßen aus:

Lösung 1: Reiner Positionsregler mit digitaler Geschwindigkeit
Ein PID Regler kümmert sich um den Abstand zwischen einem Digitalen Zeiger und der tatsächlichen Motor Position. Ist der Abstand größer als 90° (im Bezug auf die Polpaarzahl) so dreht sich der digitale Zeiger mit in die Richtung des Motor.
Es wird also nur ein kleiner Bereich abgedeckt.
Der überliegende PID Regler, regelt mittels der Geschwindigkeit des digitalen Zeigers den Abstand zwischen dem digitalen Zeiger und der Sollposition.

Steller: Mittels des Stellers wird der synchronmotor zu einem Gleichstrommotor umfunktioniert. Ich gebe lediglich eine Zahl zwischen -100..0..100 an und der Motor fängt an in eine Richtung zu beschleunigen. Diese Zahl ist vergleichbar mit der SPannung an einem DC Motor.

Problem: Der PID der sich um den kleinen Bereich kümmert schwingt. Das liegt hauptsächlich daran das ich sowas von an der Genauigkeitsschwelle des Dekoders hänge.
Da es sich bei dem Motor um eine I Strecke handelt benutze ich lediglich den PD Anteil des Reglers.


Lösung 2: Positionsregler mit Feldgeschwindigkeit

Es gibt nur ein P Regler welcher ganz einfach eine feste Geschwindigkeit auf das Drehfeld gibt.
Der Motor bewegt sich nun mit dem Feld mit, wird dieser gebremmst so bewegt sich das Feld schneller. Bei einem maximalabstand von 90% (im Bezug auf die Polpaarzahl) wir das Feld nciht weiter gedreht da der Motor nicht hinterher kommt.
Problem: Der Motor bleibt in der Endposition zwar stehen jedoch nicht immer, und auch nur wenn ich den P-Regler wirklich sehr langsam einstelle.

Lösung 3: Geschwindigkeitsregler

Ähnlicher Aufbau wie Lösung 1, allerdings wird der digitale Zeiger durch die Berechnung der echten Geschwindigkeit des Motors ersetzt.
Das geht solange gut wie sich der Motor dreht, sobald er stehen bleibt wackelt er ständig hin und her, liegt wieder an der knappen Anzahl an Pulsen die von Dekoder kommen.


Das klingtnun nach viel Programmieraufwand usw aber ich habe alles in so in Module aufgeteilt das ich nur ein paar Zeilen ändern muss und schon funktoniert das das Regelsystem komplett anders.

Also schon mal danke fürs lesen ;), über Lösungsvorschläge und Ideen würde ich mich sehr freuen.

Gruß
Feratu

ranke
14.02.2013, 19:33
nur in der Endposition schwingt es zwischen 2.. 4 Pulsen hin und her.

Die Frage ist, wie genau man das tatsächlich machen kann. Ein Beharren auf der Sollposition ist offensichtlich vom besten Regler nicht zu erwarten. Jeder Regler braucht eine Regeldifferenz um regeln zu können. Es wäre interessant ob ein Positionsgeber mit höherer Auflösung die Winkelabweichung noch verringern könnte. Dass sich die Schwingneigung beim Herausnehmen des D-Anteils und Verkleinern des P-Anteils verringert, konnte man erwarten. Man bezahlt das mit einer längeren Einstellzeit. Ob man da mit dem vorhandenen Setup wirklich noch wesentlich bessere Ergebnisse erzielen kann?

Zu den drei vorgeschlagenen Regelkonzepten:
Das erste scheint mir wegen der zwei gestaffelten Reglern etwas umständlich. Wenn man einen glatten Übergang bei einem Sprung des Zeigers haben will, dann legen die Regelparameter des einen Reglers gleichzeitig die Parameter des zweiten Reglers fest. Mathematisch gesehen sollte es sich in diesem Fall auf einen Regler reduzieren lassen. Ob man die Geschwindigkeit oder die Position innerhalb des Reglers verrechnet ist wahrscheinlich auch völlig gleich, was man anfangs differenziert muss man eben hinterher wieder integrieren, letztlich kommt doch wieder das selbe heraus (so zumindest meine bescheidene Ahnung von Regelungstechnik).

[QUOTE]Da es sich bei dem Motor um eine I Strecke handelt benutze ich lediglich den PD Anteil des Reglers[QUOTE]

Ich bin jetzt nicht ganz sicher ob ich das ganz verstanden habe. Du misst einen Ist-Winkel, der Regler gibt einen Stellwinkel aus. Ich sehe die I-Strecke jetzt nicht.

PICture
15.02.2013, 10:08
Problem: Also zunächst mal, die Positionierung funktioniert an sich wirklich gut, nur in der Endposition schwingt es zwischen 2.. 4 Pulsen hin und her.

Problem: Der PID der sich um den kleinen Bereich kümmert schwingt. Das liegt hauptsächlich daran das ich sowas von an der Genauigkeitsschwelle des Dekoders hänge. Da es sich bei dem Motor um eine I Strecke handelt benutze ich lediglich den PD Anteil des Reglers.

Problem: Der Motor bleibt in der Endposition zwar stehen jedoch nicht immer, und auch nur wenn ich den P-Regler wirklich sehr langsam einstelle.

Das klingtnun nach viel Programmieraufwand usw aber ich habe alles in so in Module aufgeteilt das ich nur ein paar Zeilen ändern muss und schon funktoniert das das Regelsystem komplett anders.

Das ist richtig und man kann theoretisch, falls überhaupt möglich, auch ohne lernen durch zufällige Änderungen das gewünschte erreichen. ;)