Hallo Leute,
Ich habe gelesen, dass der integralwirkende Regler den Vorteil hat, die
Abweichung vollständig zu eliminieren, wenn auch langsam.
Bei meinem Regler passiert es aber andersherum. Will sagen, mit integral
Anteil bleibt immer ein Abweichung.
Wenn ich den Code richtig deute ist das auch logisch. Denn wenn Soll =
Ist dann Abweichung gleich null und Abweichung_Sum bleibt gleich.
Wie kann dann die Abweichung (Stellgröße) zu null werden?
Oder habe ich das Prinzip im Code nicht richtig umgesetzt?
Carsten M. schrieb:> Hallo Leute,>> Bei meinem Regler passiert es aber andersherum. Will sagen, mit integral> Anteil bleibt immer ein Abweichung.
Das war Aussage 1
> Wenn ich den Code richtig deute ist das auch logisch. Denn wenn Soll => Ist dann Abweichung gleich null
Das ist Aussage 2.
Hier sagst du, die Abweichung wäre 0. In der vorhergehenden Aussage,
sagtest du aber, du hättest eine Abweichung ungleich 0. Da kann also was
nicht stimmen. Solange du eine Abweichung hast, tut sich auch was im
Regler.
> und Abweichung_Sum bleibt gleich.> Wie kann dann die Abweichung (Stellgröße) zu null werden?
Die Abweichung kann durchaus 0 sein. Aber kein Mensch sagt, dass im
ausgeregelten Zustand die Summe (das Integral) 0 sein muss. Ganz im
Gegenteil, die kann nicht 0 sein. Denn letzten Endes ist es diese Summe,
die dir den Stellwert ungleich 0 erzeugt.
Ich denke dein Problem besteht darin, dass du der Summe (dem Integral)
eine falsche Bedeutung zumisst. Ausgeregelt bedeutet nicht, dass die
Summe aller jemals aufgetretenenn Regelabweichungen 0 sein muss.
Genausowenig wie 'am Ziel angekommen' auch nicht bedeutet, dass das
Integral aller vergangenen Geschwindigkeiten 0 sein muss. Denn das
Integral über alle vergangenen Geschwindigkeiten ist der zurückgelegte
Weg und hat damit, dass du am Ziel angelangt sinnvollerweise wieder auf
0 Geschwindigkeit zurückschaltest physikalisch nicht viel zu tun.
Stell Dir vor du sitzt im Auto und willst gleichmäßig 100km/h fahren.
Nimmst du dann den Fuß vom Gas (=Stellgröße auf 0) sobald die 100km/h
erreicht sind? Nein, und genauso ist es bei deinem Regler.
Carsten M. schrieb:>>Will sagen, mit integral Anteil bleibt immer eine Abweichung.>> Muß richtig heißen - bleibt immer eine Stellgröße ungleich null
Die Abweichung soll doch 0 werden, nicht die Stellgröße. Das ist also
richtig!
Carsten M. schrieb:>>Will sagen, mit integral Anteil bleibt immer eine Abweichung.>> Muß richtig heißen - bleibt immer eine Stellgröße ungleich null.
Und was stört dich jetzt daran? Wenn diese Stellgröße notwendig ist,
damit das System den ausgeregelten Zustand halten kann, dann passt das
doch.
Wenn du mit dem Auto unterwegs bist und die vorgegebenen 100km/h
erreicht hast, kannst du ja auch nicht das Gas komplett wegnehmen und
dann 2 Stunden lang mit 100km/h dahinbrausen. Du wirst ein wenig Gas
geben müssen, um den Luftwiderstand zu überwinden, der dich bremsen
will.
Irgendwo in deinem System wird es wahrscheinlich so sein, dass etwas
Energie verloren geht und daher die Stellgröße eben nicht 0 sein darf,
damit das System ausgeregelt bleibt. Auch beim bestisolierten Ofen muss
man ein wenig heizen, um die 180°C halten zu können.
Ich versuche eine Neigung (Winkel) zu regeln.
Wenn Winkel null - Abweichung gleich Null - Stellgröße auch null.
Aber Abweichung_Sum ist dann nicht null und bewirkt ein Offset auf die
Stellgröße!?
Wenn es einen "Offset" gibt, dann kann die Abweichung ja nicht mehr 0
sein... Dann müsste der Integralanteil abintegriert werden und ggf. in
die andere "Richtung" regeln.
Beschreib mal den Aufbau genauer und was ist deine Stelleinrichtung, ein
Motor?
Carsten M. schrieb:> Aber Abweichung_Sum ist dann nicht null und bewirkt ein Offset auf die> Stellgröße!?
Richtig.
Weil der Regler "gelernt" hat, mit welcher Stellgröße er den Winkel
halten kann.
>Wenn es einen "Offset" gibt, dann kann die Abweichung ja nicht mehr 0
sein...
Weiß nicht ... die Stellgröße geht ja erst einmal nicht in die
Berechnung der Abweichung ein Abweichung = Soll - Ist (ok später, wenn
sie gewirkt hat, und den Ist verändert hat, wenn!)
>Beschreib mal den Aufbau genauer und was ist deine Stelleinrichtung, ein
Motor?
Es ist (soll mal werden) ein Quattrokopter. Also sind zwei Motoren meine
Stelleinrichtung (eine Achse).
Carsten M. schrieb:> Es ist (soll mal werden) ein Quattrokopter. Also sind zwei Motoren meine> Stelleinrichtung (eine Achse).
Und wenn dein Quattrokopter den richtigen Winkel erreicht hat, dann
möchtest du die Motore einfach abschalten?
Hallo,
@Carsten M.:
Wie kbuchegg in Beitrag "Re: PID controller"
schon geschrieben hat, es im ausgeregeltem Zustand allein der
Integralanteil für Stellgröße verantwortlich, Proportional- und
Differentialanteil sind dann nämlich zu 0 geworden.
Es könnte jetzt natürlich sein, dass Dein Ki_XYZ zu klein ist und die
Summe ewig lange gebildet werden muss.
Hallo Horst,
aber wie kann sich die Summe verändern, wenn die Abweichung null ist.
Also ich beziehe mich immer auf meinen Code von oben (vielleicht kann ja
mal jemand bestätigen, dass der prinzipiell richtig ist?)
Wenn Abweichung null ist bleibt Summe immer gleich und der integrale
Teil kann nie verschwinden. (so verstehe ich das zumindest im Moment)
Danke für Eure Gedult
Hi,
ich würd mal langsam machen, ein kleines almodisches Flussdiagramm
zeichnen und online stellen damit wir mal alle vom gleichen Regelkreis
und von den gleichen Größen reden.
Carsten M. schrieb:> @Power:> Natürlich nicht! Aber dann können die Drehzahlen konstant bleiben.> Also Stellgröße null!
Das stimmt im Allgemeinen nicht. Die Stellgröße muss im ausgeregelten
(das heißt Soll = Ist) Zustand nicht Null sein. Insbesondere der
I-Anteil eines Reglers auch beim PID-Regler wie du ihn hast, ist nie
Null da alle Abweichungen (also Soll - Ist) aufsummiert werden und dann
die Stellgröße bilden. Gerade das mach den I-Anteil aus.
Also ich beziehe mich immer auf meinen Code von oben (vielleicht kann ja
mal jemand bestätigen, dass der prinzipiell richtig ist?)
Normalerweise wirkt sich bei einem PID-Regler die Verstärkung Kp auf
alle drei Anteile aus, das ist bei dir nicht der Fall. Ansonsten handelt
es sich um die ÜF eines PID-Reglers.
Gruß lowlevel
lowlevel schrieb:> Also ich beziehe mich immer auf meinen Code von oben (vielleicht kann ja> mal jemand bestätigen, dass der prinzipiell richtig ist?)
Sorry das wollte ich zitieren.
Hallo,
dass ist doch das Wunder des Integralanteiles ;-)
Wie oben mit dem 100 km/h Auto beschrieben, muß man für die Überwindung
der Fahrtwiderstände ein wenig Gas geben.Ein Tempomat würde jetzt bei
Eerreichen der Zielgeschwindigkeit eben genau passend Gas geben und dass
nur durch den Integralanteil.
Auch der Quadrokopter soll ja nicht abstürzen der Integralanteil
gewährleistet den Schwebeflug.
Ok mir schwant Schlimmes ... :-) Vielleicht ist ja mein Ansatz falsch.
Das System ist im Moment so aufgebaut, dass die Veränderungen der
Motordrehzahlen die Stellgrößen sind.
Deswegen benötige und erwarte ich im ausgeregeltem Zustand eine null als
Stellgröße.
D.h. wenn Winkel null Drehzahlen konstant.
Aber im Moment haut mir der I Anteil da immer dazwischen.
(Nur als PD-Regler scheint es besser zu gehen.)
Carsten M. schrieb:> @Power:> Natürlich nicht! Aber dann können die Drehzahlen konstant bleiben.> Also Stellgröße null!
Kommt natürlich auf deinen genauen Aufbau an (den du hier anscheinend
nicht veröffentlichen möchtest).
Aber wie schon weiter oben mit dem Autobeispiel gezeigt: wenn du
Drehzahl willst (schreibst du ja: "Drehzahlen konstant", aber nicht
Null), dann musst du natürlich "Gas geben" (also Stellgröße > 0!).
Genau dafür hast du ja deinen I-Anteil! Wenn du den nicht hättest, dann
würde dir dein PD-Regler die Motoren abstellen (Stellgröße = 0), sobald
die Abweichung Null ist (was du ja nicht willst).
Carsten M. schrieb:> Das System ist im Moment so aufgebaut, dass die Veränderungen der> Motordrehzahlen die Stellgrößen sind.
Muss das sein. Du könntest dem PID-Regler ein D-Glied nachschalten.
Inwieweit dein System dann aber noch regelt: ???
Carsten M. schrieb:> Das System ist im Moment so aufgebaut, dass die Veränderungen der> Motordrehzahlen die Stellgrößen sind.> Deswegen benötige und erwarte ich im ausgeregeltem Zustand eine null als> Stellgröße.
Dann ist dein Aufbau eigentlich schon ein Integrator (z.B. IT1?). Wenn
du jetzt im Regler auch noch einen Integrator hast, dann ergibt das
einen Doppelintegrator --> ganz schlecht.
Carsten M. schrieb:> Aber dann können die Drehzahlen konstant bleiben.> Also Stellgröße null!
Das hört sich so an, als hätte die zu regelende (offene) Strecke bereits
integrierenden Charakter. In so einem Fall reicht ein P-Regler aus, um
eine bleibende Regelabweichung auszugleichen. Der geschlossene
Regelkreis verhält sich dann wie eine Verzögerung 1. Ordnung (PT1).
Christian
Carsten M. schrieb:> Ok mir schwant Schlimmes ... :-) Vielleicht ist ja mein Ansatz falsch.>> Das System ist im Moment so aufgebaut, dass die Veränderungen der> Motordrehzahlen die Stellgrößen sind.> Deswegen benötige und erwarte ich im ausgeregeltem Zustand eine null als> Stellgröße.>> Aber im Moment haut mir der I Anteil da immer dazwischen.
Dann stimmen aber deine Konstanten nicht.
Denn wenn deine Stellgröße nicht 0 ist, bedeutet das ja bei dir, das der
Kopter sich um die Längsachse drehen wird. Dadurch kriegst du erst mal
wieder eine Abweichung zustande, die die Summe in Richtung 0 treiben
wird. Der Regler wird dann die Stellgröße etwas unterschreiten, worauf
hin sich dein Kopter etwas in die andere Richtung neigt und die jetzt
negative Summe wieder in positive Richtung verändert.
Die Kunst besteht jetzt darin, die Konstanten so zu finden, dass diese
Schwingungen so winzig werden, dass man sie nicht mehr bemerkt bzw. die
Amplitude der Schwingungen immer weiter abnimmt, bis sie de facto 0
sind.
Ich hatte auch mal einen Regler, mit dem ich nicht klar gekommen bin,
bis ich bemerkt habe, dass das Vorzeichen des I-Anteils genau falsch rum
war. Anstatt die Regelabweichung zu korrigieren, hat der I-Anteil dann
dafür gesorgt, dass sie wieder größer wurde.
> D.h. wenn Winkel null Drehzahlen konstant.
Wenn ich das richtig interpretiere, dann steckt da aber versteckt noch
ein Integrator drinnen. Denn eigentlich müsste die Aussage heißen:
Wenn Winkel 0, dann soll der rechte Motor dieselbe Drehzahl haben wie
der linke. Es geht also nicht um Drehzahl konstant oder nicht, sondern
darum, dass beide Motoren dieselbe Drehzahl haben. Welche auch immer das
dann sein mag. (Eigentlichg auch das nicht. Es geht darum, dass beide
Motoren denselben Schub erzeugen. Dazu müssen sie nicht notwendigerweise
gleich schnell drehen. Und schon gar nicht bedeutet das, dass beide vom
Fahrtregler dieselbe Spannung zugeschanzt bekommen. 2 Motoren + 2
Luftschrauben sind nie in allen Paramtern exakt gleich)
Wie genau ist dein System aufgebaut? Wie geht es nach dem PID Regler
weiter? Worauf wirkt der Regler?
Und auch nicht zu vergessen:
Wie zuverlässig ist deine Winkelermittlung?
Arbeitet deine Inertial Unit auch dann zuverlässig, wenn das System
beschleunigt wird?
>Genau dafür hast du ja deinen I-Anteil! Wenn du den nicht hättest, dann>würde dir dein PD-Regler die Motoren abstellen (Stellgröße = 0), sobald>die Abweichung Null ist (was du ja nicht willst).
Das deckt sich mit meinen Tests. Und ist genau was ich will - Abweichung
null - Stellgröße (Drehzahländerung) null
>Dann ist dein Aufbau eigentlich schon ein Integrator
Ja das ist mir so gar nicht bewusst gewesen - ich lass den Integrator
einfach weg.
>Muss das sein.
Nichts muss ... hat sich aber so ergeben! ;-)
>Normalerweise wirkt sich bei einem PID-Regler die Verstärkung Kp auf>alle drei Anteile aus,
Also auch, wenn ich nur einen PD Regler habe?
>(den du hier anscheinend nicht veröffentlichen möchtest).
Wenn ich was zu Papier gebracht habe kann ich es gerne noch anhängen.
Aber im Moment ist alles nur im Kopf.
>Wie genau ist dein System aufgebaut? Wie geht es nach dem PID Regler>weiter? Worauf wirkt der Regler?
Ich sammle Winkelgeschwindigkeit und Beschleunigung von allen drei
Achsen (zwei sind jetzt nur von Interesse). Die errechneten Winkel jage
ich durch einen komplementär Filter dann vergleicht der Regler Soll- und
Ist und schickt ein Delta RPM zu den Motorkontrollern. Auf einer Seite
eine positive und auf der anderen Seite die gleiche negative Änderung.
Ein Problem was ich im Moment auch nicht überschaue ist, dass ich vier
verschiedene Motoren aufgebaut habe (hat sich halt so ergeben ;-).
Das sollte dem Regler doch eigentlich egal sein? Der müsste
registrieren, dass der eine Motor aus Delta RPM mehr Schub erzeugt als
ein anderer und müßte das ausgleichen. Hoffe ich.
Bin aber bereit noch drei andere zu kaufen, damit wird es einfacher.
>Aeh... Stellgroesse null bedeutet die Motoren laufen nicht.
Nee bedeutet Drehzahl konstant.
Carsten M. schrieb:> Ist und schickt ein Delta RPM zu den Motorkontrollern. Auf einer Seite> eine positive und auf der anderen Seite die gleiche negative Änderung.
Das halte ich ehrlich gesagt für keine so gute Idee.
Das Problem ist nämlich, dass du davon ausgehst, dass alle Motoren, alle
Luftschrauben, alle Motorsteller absolut gleich sind.
Was ich tun würde:
Ich würde einen Motor als den Master definieren. Dessen Drehzahl wird
direkt vom Benutzer vorgegeben. Der Regler hat jetzt die Aufgabe, das
Signal für einen 2.ten Motor zu generieren (bzw. so auszuregeln), dass
sich ein bestimmter Flug-Winkel ergibt.
Vorteil: Die Motoren müssen nicht 100%-gen Gleichlauf haben. Der Regler
gleicht das aus. Ist ein Motor ein wenig schwächer, dann gibt ihm der
Regler ein bischen mehr Gas, so dass das gesamte Gefährt insgesamt
wieder einen 0-Winkel behält. Der Regler hat also die technologischen
Unterschiede der Antriebskomponenten ausgeglichen.
> Das sollte dem Regler doch eigentlich egal sein? Der müsste> registrieren, dass der eine Motor aus Delta RPM mehr Schub erzeugt als> ein anderer und müßte das ausgleichen. Hoffe ich.
Wie soll er das denn tun, wenn dein Stellsignal für den einen Motor
einen Aufschlag und für den anderen Motor einen Abschlag bedeutet?
Bei deinem Konzept lautet die Grundannahme: Wenn ich in der waagrechten
bin und beide Motorkontroller mit identischem Signal ansteuere, dann
bleibe ich auch in der Waagrechten. Stellsignal 0 == waagrecht.
Das kann so sein, muss aber nicht.
>>Aeh... Stellgroesse null bedeutet die Motoren laufen nicht.> Nee bedeutet Drehzahl konstant.
Was hast du nur immer damit.
Entweder versteh ich nicht, was du da wie verschalten willst. Aber
Stellgröße 0 kann nicht bedeuten, dass die Drehzahl konstant sein soll.
Denn der Regler weiß nicht, wie hoch die Drehzahl eigentlich wirklich
ist. Was er aber weiß ist: Bei einem 0 Winkel will ich von beiden
Motoren den gleichen Schub haben. Stellgröße 0 kann daher bei dir nicht
Drehzahl konstant heißen sondern 'beide Motoren auf gleicher Drehzahl'
Aber wie schon ausgeführt, würde ich das nicht so machen. Ich würde die
Stellgröße definieren als: Drehzahl vom Motor B. Der Regler hat dann die
Aufgabe die so anzupassen, dass sich eine waagrechte Fluglage ergibt,
wenn ich mit Motor A das Teil in die Höhe ziehe.
Die Übliche Vorgehensweise bei Quadrokoptern ist, dass der Ausgang der
Lageregler auf einen Mischer gegeben wird. Sodass aus
Nick/Rollwinkel/Yaw und Gas das Signal auf vier einzelne (absolute)
Motorwerte aufgeteilt wird.
Throttle ist der Gaswert vom Knüppel,
Nick, Roll und Yaw sind die Ausgänge der Regler.
EDIT: Das ändert natürlich nichts am Problem. Auch bei mir sind die
Stellwerte für Nick, Yaw und Roll nicht 0, wenn der Quadrokopter in
Schwebe war. Das konnte mich mittels BTM222 feststellen.
>Stellgröße 0 kann nicht bedeuten, dass die Drehzahl konstant sein soll.>Denn der Regler weiß nicht, wie hoch die Drehzahl eigentlich wirklich>ist.
Bestimmt übersehe ich was ...
Aber Stellgröße null bedeutet Ist-Winkel = Soll. Also kein Grund zu
regeln - egal welche Drehzahlen die Motoren haben!? Deswegen kein delta
RPM.
Eigentlich kümmere ich mich gar nicht um Drehzahlen.
Es heißt bloss mehr oder weniger Schub (links oder rechts).
@Simon
Für mich sieht es so aus, als ob Du damit nur Steigen und Sinken kannst.
Wie leitest Du denn fliegen nach links oder rechts ein?
Ich dachte das geht über einen Anstellwinkel?
Oder ist der geforderte Winkel schon in den Reglerwerten enthalten?
Carsten M. schrieb:> @Simon> Für mich sieht es so aus, als ob Du damit nur Steigen und Sinken kannst.> Wie leitest Du denn fliegen nach links oder rechts ein?> Ich dachte das geht über einen Anstellwinkel?> Oder ist der geforderte Winkel schon in den Reglerwerten enthalten?
Der geforderte Winkel geht zusammen mit der Regelabweichung der IMU
(Inertial Measurement Unit) in den Lageregler ein. Der Ausgang
(Stellgröße) geht dann auf den Mixer.