Forum: Mikrocontroller und Digitale Elektronik PID-Regler selbstoptimierend


von Stefan K. (stefan_k)


Lesenswert?

Hallo erstmal.

Hat von Euch schon einmal jemand einen selbstoptimierenden Regler
implementiert und kann mir ein Codebeispiel oder ähnliches zeigen oder
hat mir einen weiterführenden Link?

Mein PID-Algorithmus funktioniert einwandfrei, die PID-Parameter habe
ich über die Sprungantwort mit einem Schreiber ermittelt. Wie kann man
das jetzt in Software im Controller machen? Bei den Standardverfahren
muß man ja immer die Sprungantwort aufzeichen und dann die
Wendetangente anlegen. Bei einer langsamen Temperaturregelstrecke
kommen da ja einiges an Werte zusammen un der Wendepunkt ist auch nicht
immer einwandfrei zu erkennen. Wie machen die das bei Industriereglern?

Ich hoffe, jemand kann weiterhelfen, danke vorab.

Gruß Stefan

von Thomas (Gast)


Lesenswert?

Vergiss Ziegler Nichols und ähnliche Verfahren, die liefern gerade mal
eine stabile Regelung, mehr aber auch nicht.
Wenn du sowiso nen digitalen Regeler entwirfst solltest du dich mit
Online-Identifizierungsverfahren auseinandersetzen. Stichwörter: RLS
Filter, Kalman Filter.
Auch PID ist in ner digitalen Regelung nicht unbedingt erste Wahl,
kommt aber auf die Strecke an.
Was für nen Controller und welche Programmiersprache benutzt denn du?

von Wolfgang (Gast)


Lesenswert?

Hallo,

da gibts ein Verfahren nach Ziegler Nichols. Man Stellt den D und
I-Anteil auf 0. Der P-Anteil wird solange erhöht, bis sich auf einen
Sprung eine Schwingung einstellt. P hat dann den Wert Kschwing.

Die Periodendauer Tschwing der Schwinging muß gemessen werden. Dann
wird der PID-Anteil wie folgt eingestellt:

P-Anteil: K = 0.6*Kschwing
D-Anteil: Tn = 0.5*Tschwing
I-Anteil: Tv= 0.12*Tschwing

s. auch
http://www.inf.fh-dortmund.de/personen/professoren/roehrig/SS05/pi/pi18.pdf
unter "Closed Loop Method"

Gruß

Wolfgang
--
www.ibweinmann.de
Brushless Development Kit - für den Brushlessinteressierten

von Stefan K. (stefan_k)


Lesenswert?

Habe das ganze bis jetzt mit Pascal51 auf einem AT89C51ED2 ausprobiert.
Das ganze war ein Board aus einem anderen Projekt, es hatte schon
AD-Wandler und Display drauf und hatte als Ausgang eine funktionierende
Phasenabschnittsteuerung.

Geregelt werden sollen Temperaturreglestrecken(2. Ordnung)

von Stefan S. (phunky)


Lesenswert?

@Wolfgang

Klingt sehr interessant!
Aber welche Einheit muss Tschwing haben ? Sekunden, Minuten... ?

Bei meinem Regler (Mischermotoransteuerung für die Vorlauftemperatur
einer Heizungsanlage) würde ich so vom Gefühl her auf folgende Werte
kommen:

Kschwing = 150
Tschwing = 120s

Daraus ergäben sich folgende Werte:
Kp = 90
Ki = 14,4
Kd = 60

Ist das realistisch ?

Meine Regler implementierung sieht im moment folgendermaßen aus:
1
e=get_heizung_soll() - get_fuehler(NTC_HEIZUNG_VORLAUF);
2
new_counter = abs((70 * e) + (60 * (e-e_old))); //Stellgröße =
3
Regelverstärkung * Regelabweichung
4
e_old=e;

Je nach vorzeichen von e wird die Motorrichtung nach auf oder zu
geschaltet, und der Motor so lange entsprechend new_counter aktiviert.
Wie man sieht handelt es sich dabei "nur" um einen PD-Regler mit
Kp=70 und Kd=60, weil ich nicht wusste wie man einen I-Anteil
implementiert. Vielleicht weiß das hier gerade jemand.

Noch was:
Für Werte new_counter < 100 starte ich den Motor garnicht, im ein
ständiges nervöses Takten zu unterdrücken. Sollte ich in so einem Fall
dann e_old (und ggf. noch die Hilfsvariable für den I-Anteil?) setzen
?

Gruß
Stefan

von Dieter Werner (Gast)


Lesenswert?

Hallo Stefan,

ein I-Anteil ist für diesen Regler nicht erforderlich da der bereits
durch das Motor-Stellventil realisiert wird.

Vielleicht mal nach Dreipunkt-Schrittregler suchen, so nennt sich die
Variante Regler für diese Anwendung.

Dieter

von Stefan K. (stefan_k)


Lesenswert?

@Thomas: Vielen Dank, habe mal kurz nach Deinen Stichworten gegoogelt,
muß mich erst durch die Fülle an Theorie durcharbeiten.

@Wolfgang: Das Ziegler-Nichols-Verfahren kenne ich, so habe ich bisher
die Parameter der Reglestrecke ermittelt. Der Regelalgorithmus hat
damit auch ganz gut funktioniert. Ich wollte eigentlich, daß der Regler
die Parameter aus der Sprungantwort bzw. aus der Schwingungsdauer selbst
ermittelt, so wie es die käuflichen Regler auch tun. Man kommt aber
schnell auf so gróße Datenmengen, daß ein Controller die nicht mehr
schluckt.

Stefan

von Thomas (Gast)


Lesenswert?

Hallo Stefan,

der AT89C51ED2 könnte für RLS und co. ein wenig schwachbrüstig sein,
weil unter anderem auch eine inverse Matrix gebildet werden muss.
Andererseits müssen Temperaturregelungen eh nicht besonders schnell
sein.
Arbeitest du mit MATLAB? Wenn ja dann kann ich dir mal ein paar
Beispiele schicken, in meiner Diplomarbeit habe ich unter anderem einen
adaptiven und einen selbstoptimierenden Regler erstellt. Die Ergebnisse
wahren echt beeindruckend, allerdings hatte ich auch deutlich
leistungsfähigere Hardware zur Verfügung.

Zu dem Schwingungsverfahren nach Ziegler Nichols:
In der Praxis ist es eigentlich selten eine gute Idee so ein System in
Schwingung zu versetzen, kommt halt immer auf die Strecke an.

Als gute Lektüre kann ich empfehlen:
http://www.amazon.de/gp/product/0201175452/028-8609858-7679704?v=glance&n=52044011

von Pieter (Gast)


Lesenswert?

moin moin,

@Stefan K.

> Habe das ganze bis jetzt mit Pascal51 auf einem AT89C51ED2

welches Pascal51 und woher bekommt man das?


Mit Gruß
Pieter

von Thorsten (Gast)


Lesenswert?

@Thomas

wenns ok ist, dann wäre ich interessiert an den Beispielen.(Hab
Matlab).Email s.o.

Schon einmal danke im vorraus !
Thorsten

von Stefan K. (stefan_k)


Lesenswert?

@Thomas: Leider habe ich kein Matlab, habe bisher immer Scilab benutzt,
inwieweit die sich ähnlich sind, kann ich nicht sagen.
Klar ist das Ziegler-Nichols-Verfahren in der Praxis meist untauglich -
insbesondere bei Temperaturregelprozessen. Ich habe meistens mit der
Sprungantwort und einem Schreiber gearbeitet.
Deinen Buchtipp muß ich mir mal genauers anschauen.

@Pieter: http://www.ksc-softsys.com/

Stefan

von Spilo (Gast)


Lesenswert?

Hallo,
es sind zwar einige Jahre rum, aber das Thema rundum adaptive Regelung 
ist weit nicht abgeschlossen :)

Auch ich bin gerade an meiner Masterarbeit dran.
Das Thema beschäftigt sich ebenfalls mit Optimierung von (PID)  Reglern. 
Ich habe historische Messdaten/ Prozessdaten wie Führungsgröße, 
Regelgröße etc. vom geschlossenen Regelkreis. Bekannt sind auch die 
derzeit eingestellte Reglerparameter.
Ich habe mehrere Lösungsansätze bereits probiert, doch sie liefern nicht 
immer optimale Eigenschaften.
1.Wendetangete auf die Sprungantwort des geschlossenen Regelkreises
2.T-Summen-Regel auch aufs geschlossene Regelkreis
3.Zeit-Prozentkennwert auch
All diese Verfahren sind für die Anwendung auf die Sprungantwort der 
reinen Strecke ausgelegt.
4.Integralkriterium auf Basis eines Modells
5.Bode-Verfshren aud Basis des Modells
Diese beiden Funktionieren nur dann wenn ich ein Modell bestimme, dies 
erfolft mittels arx, ls bzw. iv Ansätze.

Nun bin ich am ende meiner Latein... vlt. kann mir jemand weiterhelfen.

von Trollfinder (Gast)


Lesenswert?

Man sollte sich vor Augen halten, dass der PID, das Arbeitspferd der 
Regelfreunde, das Breitschwert fuer alles ist, speziell wenn sich 
niemand richtig interessiert, und einfach eine Loesung her muss. WEnn's 
halbwegs stabil ist Deckel drauf und fertig. Dabei sind die meisten 
Strecken nichtlinear, oder sogar nicht-kontinuierlich. zB Heizung. Mit 
dem Stellglied wird's nur Warm. Abkuehlung ist eine Sache der Umgebung.
Adaptive Regelung bedeutet man moecht fuer alle Zeiten den Deckel drauf 
schrauben. Natuerlich, ohne sich mit der Strecke und dem Stellglied 
auseinander setzen zu wollen.

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.