Forum: Mikrocontroller und Digitale Elektronik Reglerinduzierte Schwingungen


von Walter T. (nicolas)


Angehängte Dateien:

Lesenswert?

Guten Abend zusammen,

ich habe einen generell ziemlich einfach gestrickten Regelkreis, der 
stabil ist, wenn er quasi-kontinuierlich gerechnet wird. Sobald ich auf 
Integer-Werte gehe, was notwendig ist, weil der reale Aktuator nur eine 
endliche Auflösung bietet (Schrittmotor), bekomme ich selbstinduzierte 
Regelschwingungen, wie im Plot im Anhang dargestellt. Die Frequenz 
entspricht der halben oder einem Drittel der Abtastfrequenz, die 
Amplitude entspricht dem Maximum, was systembedingt bei begrenzer 
Beschleunigung möglich ist.

 a) Gibt es einen Fachbegriff für diese Art von Regelschwingungen, die 
durch Diskretisierungseffekte entstehen?

 b) Kennt jemand Fachliteratur mit einer Lösung?

: Bearbeitet durch User
von Benjamin S. (recycler)


Lesenswert?

Ohne den Code zu gesehen zu haben, scheint es so, dass ein Integer bei 
deiner Regelung überläuft, entweder als Ausgang oder eine deiner 
internen Variabelen.
Deswegen wäre der Code interessant. Vlt kannst du ein Minimalbeispiel 
posten oder selbst anstatt mit int8 mit int32 rechnen.

Andere Möglichkeit ist, in float zu rechnen und dann in int zu wandeln. 
Damit sind deine internen Variablen genauer. Vorher prüfen ob der float 
auch in den int passt.

von Walter T. (nicolas)


Lesenswert?

Benjamin S. schrieb:
> Ohne den Code zu gesehen zu haben, scheint es so, dass ein Integer bei
> deiner Regelung überläuft

Das Diagramm ist aus einem Matlab-Modell meiner Regelung. Der Effekt 
tritt auf, sobald meine Regelung nicht mehr nur Zeitdiskret ist, sondern 
der Reglerausgang Wertediskret berechnet wird - Stellgröße und 
Regelfehler also nicht mehr beliebig klein werden können.

von Wolfgang (Gast)


Lesenswert?

Walter T. schrieb:
> Der Effekt tritt auf, sobald meine Regelung nicht mehr nur Zeitdiskret
> ist, sondern der Reglerausgang Wertediskret berechnet wird - Stellgröße
> und Regelfehler also nicht mehr beliebig klein werden können.

Dann hast du wohl ein Problem mit deiner Diskretisierung.
Integer-Werten können sehr wohl beliebig klein werden, nämlich genau 0. 
;-)

von Christian F. (funke4ever)


Lesenswert?

Hi,

So etwas kenne ich von der Reglerimplementierung auf einfachen 
Mikrocontrollern (8-Bit). Ich tippe auf einen hohen Kp-Wert welcher 
diese "Sprünge" verursacht, ein Überlauf eines Variableninhalts wäre 
auch denkbar. Wenn in der Praxis so etwas aufgrund von Rauschen o.ä. 
auftritt behilft man sich mit einem Noise-Gate am Eingang des 
Messsignals.

Was spricht gegen die Verwendung von float-Variablen?

von Walter T. (nicolas)


Lesenswert?

Wolfgang schrieb:
> nämlich genau 0

0 ist zwar klein, aber nicht beliebig.

Christian F. schrieb:
> Was spricht gegen die Verwendung von float-Variablen?

Intern wird float genutzt. Der Aktuator und das Meßsystem verstehen aber 
nur Integer.

Christian F. schrieb:
> Ich tippe auf einen hohen Kp-Wert welcher
> diese "Sprünge" verursacht

Genau. Bei einer niedrigen Schleifenverstärkung bleibt das System 
stabil. Nur langsam. Also habe ich ein Matlab-Modell vom System gemacht. 
Da habe ich herausbekommen: Im zeitdiskreten, Werte-kontinuierlichen 
Fall hält die Regelschleife deutlich höhere Schleifenverstärkungen aus, 
wenn ich den D-Anteil entsprechend einstelle. Gehe ich zum zeit- und 
wertediskreten Bereich über, ist die "Großsignalantwort" auch noch in 
Ordnung, aber es entstehen hochfrequente Regelschwingungen mit kleiner 
Amplitude.

Egal. Ich suche keine direkte Problemlösung. Ich suche Literatur.

von Christian F. (funke4ever)


Lesenswert?

Praxis:
Werden die berechneten Werte vom Meßsystem und/oder die Stellgröße auf 
den Aktuator richtig gewandelt bzw. eingelesen/ausgegeben? Nur um einen 
Fehler im Modell auszuschließen und man irgendwelchen Geistern nachjagt.

Theorie:
Mir fällt dazu nur der Begriff Quantisierungsfehler ein, Bücher oder 
Fachaufsätze sind mir im speziellen Bezug zur Regelungstechnik dazu 
nicht bekannt.

von Al3ko -. (al3ko)


Lesenswert?

Walter T. schrieb:
> wenn er quasi-kontinuierlich gerechnet

Was ist quasi kontinuierlich?

von Bastler (Gast)


Lesenswert?

Durch die Zeitdiskretisierung bekommst Du eine weitere Verzögerungszeit, 
die die Schwigneigung verstärkt. Je nach Lage der Zeitkonstanten 
verstärkt das die reale Schwingneigung oder geht im Rauschen unter.

Weiterhin gibt es bei der Wertediskretisierung Grenzzyklen um Null 
herum. Das könnte Dein Problem sein.
Besser runden oder den Quantisierungsfehler berücksichtigen
(Umgangssprachlich: wenn wegen der Rundung der Aktuator 0,5 zuviel 
bekommt dann ist es nicht verwunderlich wenn der Messwert auch über das 
Ziel hinausschiesst)
-> Nichtlinearer Regler: bei kleiner Abweichung die Verstärkung 
zurücknehmen
(Aber dann hat man das Problem, dass man die Stabilität über den ganzen 
Zustandsbereich prüfen muss - irgendwo könnte der Regler wieder 
schwingen ...)

Wenn Du schon ein Matlabmodell hast kannst Du ja mit Zeitdiskretisierung 
und Wertediskrtisierung und nichtlinearem Regler herumspielen.

Als Suchschlagworte:
Grenzzyklus
Quantisierungsfehler
digitaler Reglerentwurf
digitaler Zustandsregler
Dead Beat Regler
Nichtlineare Regler
Hysterese

von Walter T. (nicolas)


Lesenswert?

Bastler schrieb:
> Durch die Zeitdiskretisierung bekommst Du eine weitere Verzögerungszeit,
> die die Schwigneigung verstärkt.

Ja - aber die ist im zeitdiskreten Modell auch schon vorhanden.

Bastler schrieb:
> Weiterhin gibt es bei der Wertediskretisierung Grenzzyklen um Null
> herum. Das könnte Dein Problem sein.

Das ist mein Problem.

Bastler schrieb:
> Nichtlinearer Regler: bei kleiner Abweichung die Verstärkung
> zurücknehmen

Das ist mein erster, naiver Ansatz. Für den P-Anteil den Regelfehler 
erst dann berücksichtigen, wenn eine Toleranz überschritten wird. Das 
glättet die Sache zwar schön, bringt mich aber im Verständnis der 
Regelungstechnik nicht weiter.


Bastler schrieb:
> Dead Beat Regler

Das ist ja hervorragendes Googlefutter. Direkt der erste Treffer liefert 
eine nette Erklärung und Literaturhinweise.


Danke für Deinen Beitrag!

: Bearbeitet durch User
von Walter T. (nicolas)


Lesenswert?

Bastler schrieb:
> Nichtlinearer Regler: bei kleiner Abweichung die Verstärkung
> zurücknehmen

Wenn ich mir das heute morgen nochmal durchlese, geht der Vorschlag ja 
über meinen naiven Ansatz hinaus: Unterhalb des erlaubten Regelfehlers 
die proportionale Verstärkung nicht komplett auf Null setzen, sondern 
nur so weit herunter, daß die Regelschwingungen verschwinden. Das hat 
zwar dann einen weiteren Einstellparameter, aber den netten Nebeneffekt, 
daß der I-Anteil nicht mehr allein dafür verantwortlich ist, daß der 
Regelfehler auf Null kriecht.

Das Stichwort "Dead Beat Regler" hat mich übrigens auf "Digitale 
Regelungstechnik" Braun, Anton, 1997 gestoßen. Das ist hier in der 
lokalen Uni-Bibliothek verfügbar und das werde ich mir mal zu Gemüte 
führen. Zumindest die Vorschau ist sehr vielversprechend.

: Bearbeitet durch User
von Achim S. (Gast)


Lesenswert?

Walter T. schrieb:
> Wenn ich mir das heute morgen nochmal durchlese, geht der Vorschlag ja
> über meinen naiven Ansatz hinaus: Unterhalb des erlaubten Regelfehlers
> die proportionale Verstärkung nicht komplett auf Null setzen, sondern
> nur so weit herunter, daß die Regelschwingungen verschwinden. Das hat
> zwar dann einen weiteren Einstellparameter, aber den netten Nebeneffekt,
> daß der I-Anteil nicht mehr allein dafür verantwortlich ist, daß der
> Regelfehler auf Null kriecht.

dein Problem ist doch imho, dass du genauer regeln willst als dein 
Quantisierungsfehler es erlaubt. Selbst wenn du die Verstärkung 
reduzierst, wird der Schrittmotor weiter um die Sollposition herum 
pendeln müssen - weil er den exakten Wert der Sollposition einfach nicht 
trifft. Auch mit perfektem Regler kannst du dann nur im zeitlichen 
Mittel der Pendelbewegung der Sollposition möglichst nahe kommen.

Weniger als ein Pendeln um +-1 Schritt wird also kaum gehen können, wenn 
du nicht innerhalb des Toleranzbands die Nachregelung ganz abschaltest. 
(Dass es in deiner Messung teilweise um +-2 Schritte schwankt sollte 
sich noch etwas verbessern lassen.)

Ich nehme mal an, die "grobe" Quantisierung in deiner Messung (ca. "16" 
auf der y-Achse) entspricht der Schrittweite deines Steppers, und die 
überlagerte "feine" Quantisierung (ca. "2" auf deiner y-Achse) kommt vom 
Positionssensor, oder?

von Walter T. (nicolas)


Lesenswert?

Achim S. schrieb:
> dein Problem ist doch imho, dass du genauer regeln willst als dein
> Quantisierungsfehler es erlaubt.

Nö, eigentlich nicht. Die Regeltoleranz beträgt 2..4 Vollschritte, 
entsprechend 32 Mikroschritten im Diagramm. Wenn die Regelung 
ausreichend schnell ist und die Regelschwingungen verschwinden, bin ich 
glücklich.

Der Regler sollte irgendwann nur mit dem regeln aufhören, damit ich in 
den Stromsparmodus schalten kann.

: Bearbeitet durch User
von Walter T. (nicolas)


Lesenswert?

Ich pushe nochmal. Das Ursprungsproblem - die Grenzzyklen mit der halben 
Abtastfrequenz wurden durch den zweistufig-nichtlinearen P-Anteil zwar 
behoben, aber an Literatur bin ich immer noch interessiert.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.