mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PID-Regler selbstoptimierend


Autor: Stefan K. (stefan_k)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...
unter "Closed Loop Method"

Gruß

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

Autor: Stefan K. (stefan_k)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Stefan Seegel (phunky)
Datum:

Bewertung
0 lesenswert
nicht 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:
e=get_heizung_soll() - get_fuehler(NTC_HEIZUNG_VORLAUF);
new_counter = abs((70 * e) + (60 * (e-e_old))); //Stellgröße =
Regelverstärkung * Regelabweichung
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

Autor: Dieter Werner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan K. (stefan_k)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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-860...

Autor: Pieter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Thomas

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

Schon einmal danke im vorraus !
Thorsten

Autor: Stefan K. (stefan_k)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.