Hallo zusammen,
ich möchte einen DC Motor in der Position regeln und die Reglerparameter
automatisch bestimmen.
Adaptiv während der Laufzeit muss nicht sein, in einem extra
"Einstellbetrieb" reicht aus.
Daten:
24V Dunker Motor 3600U/min
Inkrementalgeber 500 Imp/U(4x Auswertung -> 2000 Imp/U)
Pwm gesteuerte H Brücke
ATmega328P @ 20MHz
Die Streckenparameter(I-T1) T1 und Ki nehme ich durch eine Sprungantwort
am ungeregelten Kreis auf. Sie sind: T1 = 120ms und Ki = 110 Ink/ms
Meine Sollposition möchte ich möglichst schnell, also ohne
Drehzahlbegrenzung/regelung anfahren. Also z.B. Soll = 10 Ink
Als Regler habe ich einen PID implementiert. Der Regler läuft im 0.1 ms
Raster. Leider bin ich mit der bisherigen Parameterwahl nicht zufrieden.
Je nach Einstellung Überschwinger, bleibende Abweichung,
Dauerschwingung,...
Für einen reinen P-Regler habe ich die Verstärkung auch schon von Hand
berechnet( Gw(s) --> Kp = 1/(4*D²*Ki*T1) ) und in Simulink simuliert.
In beiden Fällen erhalte ich etwas im Bereich 10^-5
Dieser Wert ist in der Praxis aber total unbrauchbar. Der reine P-Regler
arbeitet nur im Bereich zwischen 0.1(sehr lahm) < Kp <
15(Dauerschwingung)
Theorie und Praxis passen also um mehrere 10er Potenzen nicht
zusammen...
Von der automatischen Parameterbestimmung erhoffe ich mir, mir das
mühselige ausprobieren "per Hand" zu ersparen. Außerdem ändert sich
immer mal wieder die Last am Motor, sodass die Parameter neu eingestellt
werden müssen.
Hat jemand von euch eine Idee woher die Abweichung zwischen Theorie und
Praxis kommen kann oder hat jemand schonmal so eine automatische
Parameterwahl programmiert?
Sollte ich vllt. einen anderen Regleransatz(z.B. digitale Regelung:
Deadbeat,...) verfolgen?
Bin über alle Tips dankbar,
Vielen Dank und Grüße Jan
fuer einen normalen regler muss alles erst mal linear sein. Ist es das?
Wie linear ist der Motor? Linear in bezug Drehzahl zu spannung, linear
in bezug drehmoment zu strom. Und bis auf Null hinunter messen..
mach mal...
Danke, das war schonmal ein guter Tipp.
Drehzahl über Spannung nehm ich gleich mal auf.
Das Drehmoment kann ich mit Hausmitteln eher nicht messen, oder gibt es
da einen Trick?
Viele Grüße, Jan
Das im Anhang ist die Kennlinie der Drehzahl über der Spannung.
Wie üblich, läuft der Motor natürlich erst ab einer bestimmten Spannung
richtig los(hier 4).
Heißt das jetzt für meine Regelung, dass ich generell zu meiner
errechneten Ausgangsspannung den Offset(4) dazuaddiere?
Viele Grüße, Jan
Wie wurde die Sprungantwort aufgenommen? Welche Eingangsgröße? Sicher
das die Einheiten stimmen?
Am besten mal die Kurve posten und die Versuchsbedingungen nennen.
Hallo Kleinkind,
ich denke, dass toto durch den Hinweis auf das Losbrechmoment eines
Motors schonmal voll ins Schwarze getroffen hat.
Ich habe eine deutliche Nichtlinearität in meiner Regelstrecke.
Unklar ist mir aber gerade noch, wie ich damit umzugehen habe...
Natürlich hänge ich euch die Sprungantwort des offenen Kreises noch an.
Sprung wurde bei 100% Spannung mit 1ms abgetastet.
Das sollte schon so stimmen.
Viele Grüße, Jan
Hallo Jan,
dieses Losbrechmoment hat jeder Motor und die meisten Regler kommen
damit ganz gut klar. Hast du nur eine Regelschleife? Eingang ist
Position, Ausgang ist PWM? Hast du schonmal darüber nachgedacht, dem
Positionsregler einen separaten Stromregler zu unterlagern? Dann kannst
du den Positionsregler etwas langsamer machen, z.B. 1kHz.
Achte auch darauf, ob du irgendwo an die physikalisch möglichen Grenzen
kommst. Wenn der Regler eine Solldrehzahl von 6000 U/min vorgibt, obwohl
der Motor nur 3000 U/min schafft, kann er natürlich den Sollwerten nicht
folgen.
Das Motordrehmoment misst man meistens nicht direkt, sondern berechnet
es aus dem (vom Stromregler) gemessenen Iststrom. Dabei wird ein
linearer Zusammenhang zwischen Strom und Drehmoment unterstellt, d.h.
Sättigungseffekte werden vernachlässigt.
Mit freundlichen Grüßen
Thorsten Ostermann
Jan M. schrieb:> Ich habe eine deutliche Nichtlinearität in meiner Regelstrecke.
das ein System linear ist, bedeutet nicht, dass da bei allen Messungen
nur geraden raus fallen.
Linear ist es dann, wenn man es in die Form der ABCD Matrizen bringen
kann.
>Das Motordrehmoment misst man meistens nicht direkt, sondern berechnet
es aus dem (vom Stromregler) gemessenen Iststrom. Dabei wird ein
linearer Zusammenhang zwischen Strom und Drehmoment unterstellt, d.h.
Sättigungseffekte werden vernachlässigt.
Ausser um Null. Dort kann Strom fliessen, ohne ein Drehmoment zu
bringen.
Und ja, die nichtlinearitaet der spannung von 4V offset kann man
kompensieren. imdem man einfach 4V hinzuzaehlt. Wenn man auf Position
regelt muss man da etwas aufpassen, dass der Regler nicht dauernd die
richtung umschaltet.
Du könntest probieren, ob mit (drastisch) niedrigerer PWM Frequenz das
Losbrechmoment des Motors schon bei geringerer effektiver Motorspannung
überwunden wird.
Also die Simulation spuckt für den Sprung von 0 auf 100 Inkremente in
der Lage, eine maximale Spannung von 0,2% nach deiner Skala aus. Das
könnte durchaus viel zu wenig sein.
Es könnte vielleicht von Vorteil sein die statische Kennlinie
aufzunehmen.
Hallo Jan,
alle mir im industriellen Umfeld untergekommenen Servoregler arbeiten
mit drei Reglerschalen:
1. innere Schale: Stromregler, Führungsgröße ist das Sollmoment,
Regelgröße die Spannung (also in Deinem Fall der PWM-Wert). Meist ein
PD-Regler
2. mittlere Schale: Drehzahlregler, Führungsgröße ist die Solldrehzahl,
Stellgröße ist das Sollmoment (für Reglerschale 1). Meist ein PI-Regler
3. äußere Schale: Lageregelung, Führungsgröße ist Sollposition,
Stellgröße ist die Solldrehzahl (für Reglerschale 2). Üblicherweise ein
reiner P-Regler
Vorteilhaft ist: Man kann von "innen" nach "außen" optimieren.
Wichtig ist noch: Die Sollposition für die äußere Schale darf natürlich
nicht einfach hart aufgeschaltet werden (also z.B. von 0° auf 100°),
sondern es ist ein Interpolator vorzuschalten, der fortlaufend
Sollpositionen gemäß der Anfahr/Bremsrampen erzeugt.
Klingt kompliziert, ist aber am Ende der einfachere Weg, als zu
versuchen, das Ganze mit nur einem PID-Regler in den Griff zu bekommen.
Dieses Vorgehen ermöglicht auch optimale Reglereinstellungen, da z.B.
die Zeitkonstanten des Stromreglers bedeutend kleiner sind als die des
Drehzahlreglers.
Elm Chan hat meiner Erinnerung nach sowas mal komplett in einem AVR
gelöst, suche doch mal auf seiner Website.
Jörg
@Alle
Vielen Dank für die vielen Denkanstöße
@Kleinkind
Meinst du eine Kennlinie von mir?
Ich verstehe leider nicht was du mir sagen möchtest...
Was meinst du mit statischer Kennlinie?
@Jörg
Die Sollgröße wird nicht hart aufgeschalten sondern als Rampe
angefahren.
Dennoch soll die Position immer mit der maximalen Geschwindigkeit
angefahren werden. Der dabei auftretende Strom interressiert mich
eigentlich auch nicht. Soll heißen, wenn der Motor Strom will, darf er
ihn ruhig ziehen. Warum soll es also Sinn machen den Strom und die
Geschwindigkeit zu regeln?
Wenn ich sagen würde der Motor soll mit einer bestimmten Geschwindigkeit
an die Position fahren, würde ich es verstehen können, aber in meinem
Fall wären der Strom und Drehzahlregler ohnehin immer voll
durchgesteuert, oder nicht?
Diese Kaskadenregelung für die Position habe ich schon öfter gesehen,
aber dort wird dann immer auch eine Drehzahl für die Positionierung mit
vorgegeben.
Viele Grüße Jan
@Jan M. (jan_m59)
>eigentlich auch nicht. Soll heißen, wenn der Motor Strom will, darf er>ihn ruhig ziehen.
Schon, aber das Porblem liegt woanders.
> Warum soll es also Sinn machen den Strom und die>Geschwindigkeit zu regeln?
Eben WEIL diese Größen physikalisch bedingt DEUTLICH schneller regelbar
sind. Man hat hier deutlich bessere Möglichkeiten, den Motor optimal zu
reglen. Klingt komisch, ist aber so. Denn die Relativ großen
Zeitkonstanten der Lageregelung schlagen bei einer einstufigen Regelung
voll auf die Stromregleung durch, mit dem Ergebnis, dass man den
Regelkreis insgesamt deutlich langsamer dimensionieren muss, obwohl das
bei einem kaskadierten Regler nicht nötig wäre.
>Wenn ich sagen würde der Motor soll mit einer bestimmten Geschwindigkeit>an die Position fahren, würde ich es verstehen können, aber in meinem>Fall wären der Strom und Drehzahlregler ohnehin immer voll>durchgesteuert, oder nicht?
Oder nicht. Die schnellen Strom und Drehzahlregler verhindern u.a. auch
ein Überschwingen der Stellgröße, eben weil sie schnell hoch aber auch
wieder runter regeln können!
>Diese Kaskadenregelung für die Position habe ich schon öfter gesehen,>aber dort wird dann immer auch eine Drehzahl für die Positionierung mit>vorgegeben.
Siehst du.
Hier das Projekt vom Meister.
http://elm-chan.org/works/smc/report_e.html
Falk Brunner schrieb:> Siehst du.>> Hier das Projekt vom Meister.>> http://elm-chan.org/works/smc/report_e.html
Dem bleibt nichts hinzuzufügen.
Aber man kann es natürlich auch einfach machen und sich dann genau über
die Probleme "Überschwingen" bzw. "Endposition wird angeschlichen"
ärgern und irgendwann feststellen, daß die gewünschte Performance nicht
erreicht wird.
Aber manchmal ist auch der Weg das Ziel...
Jörg
PS: Danke nochmal für den Link, hatte ihn nicht mehr parat
Wow, jetzt bin ich aber schwer beeindruckt. Der Link zeigt im Endeffekt
genau mein Ziel, bzw. was ich mir so vorgestellt zu erreichen habe...
Mein Projekt ist dazu da, die Studieninhalte einmal zu vertiefen. Ich
habe in unterschiedlichsten Bereichen viel gelernt.
In der Regelungstechnik lässt sich das im Studium alles so toll
rechnen(oder auch nicht ;-) ) wenn der Prof eine Aufgabe stellt. In der
Praxis bemerkt man dann ganz andere Probleme. Vom Losbrechmoment eines
Motors z.B. habe ich in keiner Vorlesung jemals etwas gehört. Nach dem
freundlichen Hinweis war es mir natürlich auch klar...
Die Totzone in meinem Stellglied habe ich nun noch kompensiert und den
Regler neu eingestellt. Der nächste Schritt wäre jetzt der kaskadierte
Regelkreis. Mit meinem Ergebnis bin ich jetzt aber erstmal zufrieden.
Mit dem Wissen nach dem Projekt würde ich jetzt doch vieles anders
machen.
Als Erkenntnis zum Eingangsproblem bleibt:
Wenn der Regler solide eingestellt ist, ist eine adaptive Parametrierung
erstmal gar nicht notwendig.
Ich bedanke mich recht herzlich für eure vielen hilfreichen Beiträge
Viele Grüße,
Jan
Eine adaptive Regelung umsetzen kostet viel Zeit und Aufwand. Der erste
Schritt eines besseren Reglergebnisses, wäre die Umsetzung einer
robusten Regelung. Nur falls du dich dahingehend weiter bilden willst.
Jan M. schrieb:> In der Regelungstechnik lässt sich das im Studium alles so toll> rechnen(oder auch nicht ;-) ) wenn der Prof eine Aufgabe stellt. In der> Praxis bemerkt man dann ganz andere Probleme. Vom Losbrechmoment eines> Motors z.B. habe ich in keiner Vorlesung jemals etwas gehört. Nach dem> freundlichen Hinweis war es mir natürlich auch klar...
Leider ist das in der Hochschulregelungstechnik schon immer so gewesen:
Lineare Strecke, keine "Gefahrengrenzen", die man auch bei der
Reglereinstellung im Interesse der Schadensvermeidung beachten muß und
so weiter. Solch unangenehme Dinge wie Nicht-Stetigkeit gibt es in der
Vorlesung natürlich auch nicht.
Aber dafür gibt es dann ja später die Praxis...
Jörg
Gibt es da vielleicht eine Webseite oder auch ein Buch,
welches auf solche Fälle dann explizit eingeht?
Damit die Theorie und Praxis etwas näher zusammen kommt...
Reddi schrieb:> Gibt es da vielleicht eine Webseite oder auch ein Buch,> welches auf solche Fälle dann explizit eingeht?> Damit die Theorie und Praxis etwas näher zusammen kommt...
So ein Buch habe ich mir immer gewünscht, aber genau diesen Bereich
scheint keiner ansprechen zu wollen/können.
Alle mir bekannten Bücher, die sich der "praktischen Regelungstechnik"
widmen, waren entweder doch ohne wirklichen Praxisbezug oder auf
einfachstem Niveau.
Kennt jemand was passendes? Würde mich auch (immer noch) interessieren.
Jörg