Forum: Analoge Elektronik und Schaltungstechnik Mit PID Regler schlechteres Ergebnis als mit PI?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von DDay (domtom97)


Angehängte Dateien:

Lesenswert?

Hallo erstmal,
vorneweg, ich bin neu hier im Forum. Daher hoffe ich dass ihr darüber 
hinweg schauen könnt, falls ich übliche Gegebenheiten verletze.

Nun aber genug zu mir und kommen wir zu meinem Problem:

Ich versuche eine Temperatur Regelung mithilfe eines Peltierelementes zu 
entwickeln. Das ganze läuft mithilfe eines ATSAM4SA. Der 
Regelalgorithmus wird durch eine ISR mit der Frequenz (100Hz) 
aufgerufen. Das PWM Signal wird an eine H-Brücke gesendet, welche daraus 
eine konstante Spannung formt und an das Peltierelement übergibt.
1
TEC_I_REG+=(TEC_Diff)*TEC_I_VAL*TEC_Ta;  // BerechneI-Anteil        
2
TEC_D_REG = (TEC_D_VAL/TEC_Ta) * (TEC_Ist-TEC_Ist_old); // Berechne D-Anteil
3
    
4
if (TEC_I_REG < 2*PWM_MIN) {TEC_I_REG = 2*PWM_MIN;} // Anti-windup 
5
if (TEC_I_REG > 2*PWM_MAX) {TEC_I_REG = 2*PWM_MAX;} // Anti-windup
6
    
7
TEC_OUT=(TEC_P_VAL*(TEC_Diff)+TEC_I_REG+TEC_D_REG); //Berechne Stellgröße
8
TEC_Ist_old = TEC_Ist;

mit TEC_Ta = 0.01 und TEC_Ist=Aktuelle Temperatur

Zu Beginn wollte ich die erstmal die Strecke identifizieren. Da das 
Mathematisch nur sehr schwer realisierbar ist, habe ich die 
Sprungantwort der Strecke aufgenommen. D. h. ich habe die Stellgröße auf 
ein konstantes Signal gesetzt und die Simulation gestartet. (Anhang1)
Es handelt sich um eine PT1 strecke.
Mithilfe der 63% Methode habe die Zeitkonstante bestimmt. Die Stationäre 
Verstärkung indem ich Temperaturunterschied/Am TEC anliegende Spannung 
gerecht habe.
Hierzu meine erste Frage, ist dieses Vorgehen korrekt? Mithilfe der 
Polkompensation kam ich leider auf ein Instabiles Verhalten. Entweder 
lag es an der Berechnung oder daran die Strecke falsch bestimmt zu 
haben...

Da ich aber nicht direkt den Kopf in den Sand stecken wollte, habe ich 
die Methode des Stabilitätsrandes nach ZieglerNichols verwendet. 
(Anhang2)
Mit KKrit=10 und Tkrit=1 kam ich auf die Werte: Kp=4,5 und Ki=5.29 bei 
einem PI Regler. Die Regelung war "Bilderbuchmäßig". Nun wollte ich aber 
einen PID Regler nach der Tabelle entwerfen. Mit den Werten Kp=6, Ki=12, 
KD=0.72 bekomme ich aber ein instabiles Verhalten. Kann mir jemand 
erklären was falsch gelaufen ist? Meine Annahme war das beide Regler für 
die Regelstrecke geeignet sein sollten.

Viele Grüße und Gute Zeit

DomTom

Beitrag #7199580 wurde von einem Moderator gelöscht.
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Dominik E. schrieb:
> Annahme war das beide Regler für die Regelstrecke geeignet sein sollten.
Was hast du denn da für eine Regelstrecke? Welche Zeitkonstante hat die 
denn? Ich lese da irgendwas um 100 Sekunden ab. Passt das?

Und weil man den Sprung nicht sieht, sondern nur die Antwort: hat die 
Strecke evtl. sogar eine Totzeit?

: Bearbeitet durch Moderator
von Hermann S. (diphtong)


Lesenswert?

Sieht so aus als wäre der D-Anteil zu groß oder der I-Anteil zu klein:

https://www.belektronig.de/web/content/1292?unique=dce691b6283fa7a3c9bce3b0347aeab35a8f4049

: Bearbeitet durch User
von DDay (domtom97)


Lesenswert?

Hallo Lothar, den Plot mit der Strecke muss ich leider noch ein wenig 
überarbeiten, tut mir Leid. Nach der 63% Methode komme ich auf eine 
Zeitkonstante von 53 Sekunden. Das ganze System ist leider sehr Träge. 
Allerdings liegt das am Aufbau, an dem ich nichts ändern kann.

Die Simulation startet mit Beginn des Sprunges. Eine Totzeit ist wenn im 
Millisekunden-Bereich vorhanden, bzw ist kaum erkennbar.

von DDay (domtom97)


Lesenswert?

@Lollopop
Das ganze System reagiert sehr träge, was aber leider des Aufbaus 
geschuldet ist, an dem es nichts zu rütteln gibt. Es ist nicht direkt 
ausschlaggebend wie "schnell" es einregelt sondern vielmehr wie "genau".

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Jeder PID Regler wird zum PI Regler, wenn man D auf 0 dreht. Ein so 
träges System kann übrigens auch langsam abgetastet werden.
Es reicht dicke, wenn du 10 Messungen hast pro 1 mal regeln.

von Kevin M. (arduinolover)


Lesenswert?

Wozu willst du überhaupt den D-Anteil, was versprichst du dir für einen 
Mehrwert? D-Anteile können schnell zu Instabilitäten führen und sind 
deutlich komplexer einzustellen.

von Olaf (Gast)


Lesenswert?

> Das PWM Signal wird an eine H-Brücke gesendet, welche daraus
> eine konstante Spannung formt und an das Peltierelement übergibt.

Du weisst doch das Peltierelemente nicht mit einem PWM Signal klarkommen 
oder?
Das verschlechtert ihren eh schon beschissenen Wirkungsgrad nochmal 
erheblich. Und ausserdem noch nichtlinear. Es ist ein grosser 
Unterschied ob du gerade bei 90% oder bei 10% regelst.

Du koenntest natuerlich die Spannung linearisieren. Aber du willst doch 
eigentlich die Leistung deines Peltiers einstellen oder nicht? Klingt 
dann eine lineare Spannungsaenderung sehr klug?

Ich glaube so ziemlich der erste Satz in der Regelungstechnikvorlesung 
ist das alles folgende nur fuer LTI Systeme gilt. .-)
Im Extremfalle kann man davon abweichen und sein System um mehrere 
Arbeitspunkte linearisieren, also die Regelparameter umschalten. Fuer 
den Anfang wuerde ich dir aber empfehlen das du dein System 
linearisierst. Zum beispiel ueber eine Ausgangskennlinie.

Olaf

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Wenn du dir eine serielle Konsole gönnst und damit 5 Befehle 
implementierst, hat die Rumstocherei ein Ende.
1. Print P,I und D
2.-4. Setze P, I oder D
5. Schreibe PID in EEPROM

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Dominik E. schrieb:
> Es ist nicht direkt ausschlaggebend wie "schnell" es einregelt sondern
> vielmehr wie "genau".
Es bringt aber eben nichts, wenn du da mit 100 Hz also 5000 mal 
schneller als deine Strecke dran herumregelst...

Welche Datentypen haben die Rechenwerte?
Dir ist klar, dass 32-Bit Float-Zahlen nur 6-7 signifikante Stellen 
haben? Wenn du auf 1000,000 den Wert 0,005 draufaddierst, dann kann es 
gut sein, dass hinterher wieder 1000,000 herauskommt.

Ich kann mir gut vorstellen, dass du da mit den Zahlen in diesem Bereich 
unterwegs bist.

https://www.c-plusplus.net/forum/topic/81490/verst%C3%A4ndnisfrage-zu-genauigkeit-von-float-und-double

Beitrag "Frage zu Float"

Dort ist das Rechnen mit float recht nett beschrieben:
Beitrag "Re: C -1.#IND00 nach mehreren Schleifendurchläufen"

von Olaf (Gast)


Lesenswert?

> Es bringt aber eben nichts, wenn du da mit 100 Hz also 5000 mal
> schneller als deine Strecke dran herumregelst...

Da hat Lothar recht. Stellt euch das so vor, um ein 1Mhz Signal auf dem 
Oszi brauchbar zu sehen braucht man ein 10Mhz Oszi. Es schadet aber 
nichts trotzdem ein 100Mhz zu verwenden. Es kostet nur mehr und man 
muesste mit mehr Daten rumhampeln.

> Wenn du auf 1000,000 den Wert 0,005 draufaddierst, dann kann es
> gut sein, dass hinterher wieder 1000,000 herauskommt.

Das ist dann der Moment wo etwas Basiswissen von Assembler sicher nett 
ist weil man da Datentypen automatisch gelernt hat .-)


> Wenn du dir eine serielle Konsole gönnst und damit 5 Befehle
> implementierst, hat die Rumstocherei ein Ende.

Sowas kann ich auch nur empfehlen. Immer im Hintergrund einen String 
ausgeben der alle relevanten Parameter ausgibt. Rumspielen mit Reglern 
ist leider einer der wenigen Dinge wo man mit einem Debugger nicht recht 
weiter kommt. Ausser man macht sich die Muehe und liesst ueber den 
Debugger die jeweiligen Variablen direkt aus ohne den Controller 
anzuhalten. Aber da ist eine serielle Ausgabe wohl einfacher.

Olaf

von DDay (domtom97)


Angehängte Dateien:

Lesenswert?

Olaf schrieb:
> Da hat Lothar recht. Stellt euch das so vor, um ein 1Mhz Signal auf dem
> Oszi brauchbar zu sehen braucht man ein 10Mhz Oszi. Es schadet aber
> nichts trotzdem ein 100Mhz zu verwenden. Es kostet nur mehr und man
> muesste mit mehr Daten rumhampeln.

Das habe ich mir auch gedacht. Eine höhere bzw geringere Abtastfrequenz 
sollte ja nichts am eigentlichem Regelverhalten verändern.
Ich könnte Sie herunter setzen, aber da ich für mehrere Systeme die 
Regelung entwerfe, denke ich dass ich so auf der sicheren Seite bin.

Das mit dem PWM Signal habe ich wohl ein wenig falsch erklärt. :S
Also... Mit dem TEC Out, verändere ich letztlich den Duty Cycle des PWM 
Signals, welches an einen IC übergeben wird. Dieser IC wandelt das PWM 
Signal in eine konstante Spannung zwischen 0 und VMax des 
Peltierelementes um. :)



Mit einer seriellen Konsole kann ich nicht direkt dienen. Allerdings 
lasse ich mir die Daten Plotten. Ich hoffe das hilft ein wenig weiter. 
Mir persönlich fehlt da schlicht weg noch ein wenig Erfahrung anhand der 
Regler Daten den Fehler heraus zu lesen. :)

Aber bestimme ich den letztlich die Regelstrecke richtig? Letztlich habe 
ich für verschiedene Stellgrößen die Sprungantwort aufgenommen, die 
Zeitkonstante und Streckenverstärkung wie oben bestimmt. Da sich alle 
Zeitkonstanten/Streckenverstärkungen im ca. gleichen Bereich befinden, 
gehe ich von einem LTI System aus.


Edit: In dem Plots steht eine sehr hohe "Ziel Temperatur", das stimmt 
allerdings nicht. Aus vorheriger Analyse habe ich mir da die Anzahl der 
Datenpunkte anzeigen lassen. Ich Regel zwar mit 100 Hz, lasse mir aber 
nur 3 mal in der Sekunde den Wert ausgeben. Da das alles so programmiert 
ist, das es mir Live die Datenausgibt, ist letztlich der letzte 
Datenpunkt ersichtlich

: Bearbeitet durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Dominik E. schrieb:
> Das habe ich mir auch gedacht. Eine höhere bzw geringere Abtastfrequenz
> sollte ja nichts am eigentlichem Regelverhalten verändern.
Das prinzipiell nicht, aber du brauchst andere Skalierungen und 
Zahlenwerte.

BTW: der P-Anteil des P-Reglers ist ziemlich hoch, der klingelt 
ordentlich.

Und der P-Anteil des PI-Reglers ist viel zu hoch. Der knallt ja bei der 
kleinsten Abweichung immer gleich an den Anschlag. Das ist eher ein 
Zweipunktregler mit winziger Hysterese.

: Bearbeitet durch Moderator
von DDay (domtom97)


Lesenswert?

Lothar M. schrieb:
> Das prinzipiell nicht, aber du brauchst andere Skalierungen und
> Zahlenwerte.

Wie meinst du das genau? Ich stehe da leider gerade etwas auf dem 
Schlauch.
Ich verstehe deine Bemerkung das sich eine Änderung von 0,005 bei einem 
wert von 500 nichts verändert. Allerdings sind die Messwerte der 
Stellgröße mit jedem Rechentick unterschiedlich. Oder wie würdest du das 
angehen?

> BTW: der P-Anteil des P-Reglers ist ziemlich hoch, der klingelt
> ordentlich.

Einen P-Regler habe ich nirgends verwendet. Anhang 3 ist die Regelung 
mittels PI und Anhang 4 ist der PID Regler.

von Niveau? (Gast)


Lesenswert?

Lothar meint deinen PID Regler. Der P Anteil ist zu hoch, denn der 
Regler hockt die ganze Zeit in der Stellgrößenbeschränkung. Du hast 
jetzt eher einen Zweipunktregler als linearen Regler.

von Kevin M. (arduinolover)


Lesenswert?

Dominik E. schrieb:
> Einen P-Regler habe ich nirgends verwendet.

Du hast einen PI dessen P-Anteil zu hoch ist.

Dominik E. schrieb:
> Anhang 4 ist der PID Regler

An deiner Stelle würde ich von dem PID abkommen, der bringt dir hier 
keinen wirklichen Mehrwert. Außerdem sind ungefilterte D-Anteile selten 
eine gute Idee.

von Hermann W. (hermannw)


Angehängte Dateien:

Lesenswert?

Dominik E. schrieb:
> Zu Beginn wollte ich die erstmal die Strecke identifizieren.

Das ist schon mal der richtige Start. Ich wundere mich allerdings über 
die gemessene Zeitkonstante von wenigen Sekunden. Wo wird die 
Ist-Temperatur gemessen? Es sieht so aus, als wird direkt das 
Petierelement gemessen. Ich habe einen Temperaturschrank (Inkubator) 
geregelt (IstTemp=InnenTemp) und komme auf eine Zeitkonstante von 
T1=2500sec. Im Anhang ist die gemessene Sprungantwort mit der Annäherung 
über ein PT2-Glied (T2=1 vernachlässigbar) gezeigt. Die Zeitkonstante 
ist abhängig von Lage und Größe des Sollwertsprungs.
Wenn ich mir Anhang 3 ansehe, ist sofort ein falsch eingestellter Regler 
zu erkennen. Wenn man die Reglereinstellung nach der Regelungstechnik 
macht und nicht nach Faustformeln, dann wird der I-Anteil Ti eines 
PI-Reglers auf den Wert der Streckenzeitkonstante T1 gesetzt. Dann 
kompensiert der Regler die Streckenzeitkonstante. Bei dir ist der Ti des 
Reglers viel zu klein und kommt sofort in die Begrenzung. In die 
Begrenzung darf kein Regelanteil kommen, sonst funktioniert der Regler 
nicht mehr. Wenn du Ti richtig dimensioniert hast, läßt sich bei einem 
PI-Regler über den P-Anteil die Dämpfung beliebig einstellen, dh. das 
Optimum zwischen schnell und wenig Überschwingen.

von DDay (domtom97)


Lesenswert?

Hermann W. schrieb:
> Das ist schon mal der richtige Start. Ich wundere mich allerdings über
> die gemessene Zeitkonstante von wenigen Sekunden. Wo wird die
> Ist-Temperatur gemessen? Es sieht so aus, als wird direkt das
> Petierelement gemessen.

Das Peltierelement sitzt bei mir zwischen 2 Metallplatten. Die 
Metallplatten haben ungefähr die Außmaße 1,5cm x 1,5cm, das 
Peltierelement 1cm x 1cm. Die Dicke der Metallplatten beträgt 5mm. Das 
ganze System ist also sehr klein. Die Temperatur wird über einen NTC 
gemessen welcher auf der einen Seite der Metallplatte verbaut ist. Die 
andere Metallplatte dient der Abwärme.

Bei der Stellwertbegrenzung sehe ich den Fehler nicht direkt. Der Regler 
nutzt die ihm zur Verfügung gestellte Maximale Leistung, solange er noch 
nicht bei seinem Ziel angelangt ist. Das der I-Anteil in seine 
Begrenzung läuft, ist sicherlich nicht Optimal.

Herrmann, das Verfahren wie du es beschrieben hast, habe ich zu Anfangs 
auch versucht. Allerdings kam ich da auf ein Instabiles verhalten aber 
vielleicht hatte ich einen Fehler.
Das Vorgehen ist doch:

Tn habe ich mit Ts gleich gesetzt also 53 Sekunden.
Daraus folgt ein Ki=Kp/Tn => Ki=Kp/53
mit
Kp=53/(Trk*31) mit Trk frei wählbar oder wo steckt mein fehler?
//31 ist meine Sreckenverstärkung

: Bearbeitet durch User
von Lollipopp (Gast)


Lesenswert?

Niveau? schrieb:
> Lothar meint deinen PID Regler. Der P Anteil ist zu hoch, denn der
> Regler hockt die ganze Zeit in der Stellgrößenbeschränkung. Du hast
> jetzt eher einen Zweipunktregler als linearen Regler.

Richtig, und das ist ein Riesenmurks!

Man kann mit einem 500 PS Auto auch eine durchschnittliche 
Geschwindigkeit von 20 km/h fahren und trotzdem mit voller Pulle das 
Gaspedal durchtreten und dann eine Pause machen um mit voller PACE 
weiter fahren. Sinnvoll? Nein! Aber das machst du mit deiner Regelung.

von Hermann W. (hermannw)


Angehängte Dateien:

Lesenswert?

DDay schrieb:
> Peltierelement 1cm x 1cm

Das ist wirklich sehr klein. Das Peltier hat aber keinen Selbstzweck. Du 
hast ja einen Prüfling, den du temperierst. Die Strecke geht bis zur 
Temp des Prüflings und dort musst du die Ist-Temp messen.

DDay schrieb:
> Stellwertbegrenzung sehe ich den Fehler nicht direkt

Weil du keinen PI-Regler hast. Der I-Anteil springt genau so schnell auf 
die Begrenzung wie der Sollwert. Er ist also nirgends im analogen 
Regelbereich. Damit wirkt nur der P-Anteil und der wird massiv vom 
I-Anschlag gestört.

DDay schrieb:
> vielleicht hatte ich einen Fehler.

Es gibt viele Fehlermöglichkeiten. Du musst alle Faktoren 
berücksichtigen:
Skalierung des Ist- und Sollwerts, Faktor Petier-Spg/Regler-Ausgang, 
Istwert/Messwert, Abtastzeit/Zeitkonstante und was real noch dazwischen 
hängt, z.B. dein PWM-Umsetzer. Im Anhang ist mit K1 und K2 nur 
Ustell/Uregler und die Skalierung des Messwerts auf den Sollwert 
gezeigt.

DDay schrieb:
> Das Vorgehen ist doch ...

Von diesen Schätzungen halte ich gar nichts. Ein PI-Regler läßt sich 
exakt mathematisch berechnen und das stimmt dann, solange man die 
Strecke richtig moduliert hat. Beim PI ist das besonders einfach: 
Tregler=Tstrecke und die Verstärkung kann man rechnen oder einfach so 
anpassen bis das Einschwingverhalten gefällt.

von Hermann W. (hermannw)


Lesenswert?

DDay schrieb:
> Nun wollte ich aber
> einen PID Regler

Zur Eingangsfrage: einen PID-Regler nimmt man eigentlich nur, wenn die 
Strecke mehr als 2 Zeitkonstanten hat. Die 2. und 3. Zeitkonstante ist 
messtechnisch schwer zu erfassen. Mit einem PI-Regler hat man 2 
Zeitkonstanten voll mathematisch im Griff. Mit dem D-Anteil kann man 
dynamisch vielleicht etwas verbessern, handelt sich aber 
Stabilitätsprobleme ein. Z.B. schlägt ein gestörter Istwert voll durch. 
Da reicht auch schon das Quantisierungsrauschen.

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]
  • [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.

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