PID Heizungs-regelung (Tuning) Probleme

Hallo Leute,

wie der Betreff schon andeutet habe ich Probleme beim regeln mit der PID Library und erhoffe mir Hilfe und evtl Tipps :slight_smile:

Zu meinem Aufbau: Arduino Mega2560. Heizplatte aus Kupfer ca 505020 mm (darin ist noch eine Luftk√ľhlung integriert, die f√ľr jetzt aber irrelevant ist). Geheizt mit 4 * 200W Heizpatronen und √úberwachung mit einem PT100 Thermof√ľhler. Direkt gesteuert wir ein Manson HCS3602 0-32VDC/0-30A , wobei die Spannung auf 24V gelegt wird und der Strom analog √ľber einen MCP4725 DAC gesteuert wird.

Soweit so gut. Der Arduino liest die Temperatur genau aus (zurzeit von 0-100¬įC ‚Üí sp√§ter wahrscheinlich 0-250¬įC). Netzteil l√§sst sich auch relativ einwandfrei steuern und Platte hab ich auch bis auf 100¬įC aufgeheizt bis jetz. (also linear: Steck 20A rein bis 60¬įC erreicht sind und stell dann den Strom auf 0A ‚Üí cirka 90-100¬įC Endtemperatur)

Zu meinem jetzigen Problem. Ich habe die PID Library implementiert und steuere mittels dieser das Netzteil. das Problem ist das er gewaltig √ľberschwingt (je nach Kp und Ki) teils ist die Ausgangstemperatur ca 28¬įC, Sollwert ist 40¬įC und er schwingt bis zu 90¬įC √ľber.

Hab bereits einige Tests gefahren mit unterschiedlichen P und I werten aber bin zurzeit noch nicht schlau geworden daraus, vorallem weil es ewig dauert bis die Platte wieder unter 30¬įC ist (logischerweise).

Was mir aufgefallen ist, ist das er erst bei der Solltemperatur anf√§ngt gegenzusteuern‚Ķ also bei 41¬į langsam den Strom runterdreht und je gr√∂√üer die Temperatur und somit der Fehler desto schneller. aber eben nicht so wie ich es will, das er das bereits deutlich unter der Solltemperatur macht.

Hier kurz mein Code, ich werde später noch versuchen Beispielbilder der Messungen in einen Post anzuhängen. (Sind auf Excel aufgezeichnet, mit den unterschiedlichen PID konstanten)

#include <Wire.h>
#include <Adafruit_MCP4725.h>
#include <Adafruit_ADS1015.h>
#include <PID_v1.h>

Adafruit_MCP4725 DAC_strom;
Adafruit_MCP4725 DAC_spannung;
Adafruit_ADS1115 ADC_PT100(0x48);

//PID Objekt erzeugen
double Setpoint = 40, Input, Output, Kp = 2, Ki = 5, Kd = 0;
PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd,P_ON_M, DIRECT);

double temp = 0;

void setup() {
  Serial.begin(9600);
  Serial.println("ClearRange,A,1,D,50000");
  Serial.println("LABEL,Zeit,Temperatur");
  
  ADC_PT100.begin();
  DAC_strom.begin(0x60);
  DAC_spannung.begin(0x61);

  DAC_spannung.setVoltage(2730, false);                       //Setzen der Spannung des Netzteils auf 24V (äquivalten 2730Bit / 3.333V)
  DAC_strom.setVoltage(0, false);

  //PID setzen
  
  Input = Temp_auslesen();
  myPID.SetOutputLimits(0, 3500);                             //PID Limits setzen, SetOutputLimits(min,max)

¬† //PID SetTunings(Kp, Ki, Kd, POn), wenn die tuning paramter sich ver√§ndern.. evtl f√ľr verschiedene Temperturbereiche, schnellere Anfahrtszeiten
¬† //PID SetSampleTime(int>0 in ms), wie oft der alkorithmus ausgef√ľhrt wird. Default ist 200ms.
  //PID SetCOntrollerDirection(Direction:Direct/Reverse) sollte direct passen, ist default

  myPID.SetMode(AUTOMATIC);                                   //PID SetMode() eingeschaltet
}

void loop() {
  Input = Temp_auslesen();
  myPID.Compute();
  DAC_strom.setVoltage(Output, false);

¬† Temp_ausgabe(Temp_auslesen(), 300);¬† ¬† ¬† ¬† ¬† ¬† ¬† ¬† ¬† ¬† ¬† ¬†  //Temperaturausgabe √ľber Funktion Temp_ausgabe mit float von Temp_auslesen alle 300ms

}


//----------------------Unterfunktionen-------------------------------

double Temp_auslesen() {
  int16_t Messwandler_spg_bit = 0;
  double Temperatur = 0 ;

  Messwandler_spg_bit = ADC_PT100.readADC_SingleEnded(1);
  Temperatur = Messwandler_spg_bit * (0.000187 * 20);

  return Temperatur;
}

void Temp_ausgabe(double temperatur, int Ausgabeintervall) {
  static long letzteAusgabe;

  if (millis() - letzteAusgabe >= Ausgabeintervall) {
    Serial.print("DATA,"); Serial.print(millis()/1000); Serial.print(","); Serial.println(temperatur);
    letzteAusgabe = millis();
  }
}

//---------------------------------------------------------------------

Hierbei ist noch wichtig zu sagen, dass die Heizkurven alle mit einer Solltemperatur von 40¬įC gefahren wurden (naja nicht mal ann√§hernd erreicht) und mit Proportional on Measurement, wo ich erhofft habe bessere Ergebnisse zu bekommen

Kp=20,Ki=5.PNG

Kp=2,Ki=5.PNG

Kp=10,Ki=5.PNG

Kp=10,Ki=10.PNG

Kp=10,Ki=1.PNG

Kp=10,Ki=1.PNG

Kp=10,Ki=10.PNG

Kp=10,Ki=5.PNG

Kp=2,Ki=5.PNG

Kp=20,Ki=5.PNG

Es gibt mehrere Verfahren um Regler ohne ein detailliertes mathematisches Modell zu dimensionieren

Wenn du nach den Namen der Verfahren suchst findest du auch noch mehr Details dazu. Da gibt es sehr viele Ausarbeitungen

Hallo Serenifly, ich habe wohl schon eines gegoogled und gesucht, aber nichts wirklich gefunden das es mir ermöglicht, dass effizienter zu nutzen (vielleicht aber auch nur nicht aussreichend verstanden).

Gibt es irgendwelche √Ąnderungen/Vorschl√§ge die ich bei der Wahl der Konstanten nutzen k√∂nnte wenn ich die PID Library nutze? Oder allgemein vorschl√§ge wie ich in die richtige Richtung meines Sollwertes komme, also deutlich geringeres √úberschwingen und vorallem, dass der PID viel fr√ľher gegenregelt?

Beste Gr√ľ√üe,
Wosche

Was ich mich gefragt habe ist, ob der PID Regler mit den √úbergabewerten Probleme hat, also:

PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd,...)

Input und Setpoint sind klarerweise die Temperatur werte, wobei Ist ständig aktualisiert wird aus dem PT100 und Setpoint fix ist.

Output jedoch ist das Bitäquivalent zu dem Strom der Ausgegeben werden soll und liegt im Bereich 0-4095bit -> beim DAC 0-5V -> Beim Netzteil 0-30A

Könnte es sein das es dabei Probleme gibt da es rein gar nichts mit der Temperatur zu tun hat, oder hängt es wirklich nur von den Variablen ab?

Wie kurz ist deine TI konstante.
Ich w√ľrde es erstmal Versuchen mit einem reinen PD-Regler ohne I Anteil. Das der Regler erst bei Soll=Ist reagiert kann man auf einen "vollgelaufenen" I-Anteil zur√ľckf√ľhren. Wenn das Rechnen zu komliziert ist. Die Kp und Td so anpassen das du den Wert kaum erreichst und die letzte Differenz √ľber den I-Anteil nutzt. Das macht das Aufheizen zwar recht tr√§ge aber es schwingt nicht wie die Sau. Du k√∂nntest auch den I-Anteil erst ab einer gewissen schwelle Freigeben. Das ist eine Try and Error Variante mit der ich extrem viel gute Erfahrungen in Drehmoment Regelungen gemacht habe auf FUs. Entgegen der Landl√§ufigen Meinung.
Gruß
DerDani

Hallo Dani,

Ich habe bereits an die M√∂glichkeit gedacht, das ich zum Anfang ca 75% von Soll-Ist hernehme und f√ľr diesen 3/4ten Weg eine konstante hohe Stromzufuhr ansteuere und danach erst den PID einschalte das der an den Sollwert heranf√§hrt. So wie die Diagramme jetz aber ausschauen, sieht es nicht gut aus wenn er nur noch 10¬įC nachsteuern muss und damit hoffnungslos √ľberfordert ist :smiley:

inwiefern meinst du das der I Anteil "vollläuft"?

D-Anteil habe ich bis jetzt gar nicht genutzt, da ich bei meinen Nachforschungen festgestellt habe das di meisten Heizungsspezifischen Anwendungn rein mit PI gemacht werden. Wäre der D Anteil hilfreich deiner Meinung nach?

Der D-Anteil w√ľrde dir dahingehen helfen wenn du eine spontane gro√üe Abnahme der W√§rme hast also da "kommt" was kaltes drauf das richtig W√§rme nimmt. Dann hast du eine Gro√üe Ist √Ąnderung in kleiner zeit darauf reagiert der D Regler also auf die Differenz(Error) zwischen zwei Zeitpunkten * Faktor.

Dann Probiere es mal mit einem reinen P-Anteil aus ich kenne deine Physiken nicht und ich w√ľrde auch nur "testen".
Der I-Anteil summiert sich ja bei jedem Aufruf auf oder ab je nach Abweichung. Ist die Zeit-konstante des I-Regler zu kurz dann ist der I-Anteil (die 100% des I-Anteils am Ausgangsignals schon auf 100% erst wenn der Ist>Soll ist subtrahiert (addiert -Werte) der Regler. Das heisst zum Zeitpunkt Soll=Ist ist der P-Anteil 0 % von seinem maximalen Anteil und der I-Anteil auf 100% von seinem maximalen Anteil und der sorgt f√ľr das √úberschwingen.
Du kannst jetzt Rechnen ab welchem Soll - Ist der P-Anteil volle Lotte geben soll. und mit einer Ann√§herung an Ist gegen√ľber Soll wird der P-Anteil kleiner er sollte aber nicht √ľber schwingen dann ist P noch zu gro√ü. Hast du den Punkt erreicht kommt der I-Anteil mit einer relativ langen Konstantenzeit dazu der den "Rest" ausb√ľgelt den der P nicht schafft.

Hoffe ein bisschen meine Herangehensweise darstellen zu können.
Sie ist bei weitem nicht Mathematisch korrekt und lässt sich auch nicht auf alle Regelstrecken runterbrechen aber bei Antrieben und Temperaturregelungen die "Träge" sind aber gut umzusetzen.

In der Lib gibt es auch ein Beispiel das sich Adaptive nennt wobei das nur eine Umschaltung zwischen zwei Reglersetzten ist und nur adaptiert und nicht selbst optimiert evtl kann man es mal damit Versuchen.

Ich sehe gerade du nutzt die Lib nicht im Standart Modus
Proportional on Error sondern mit Proportional on Measurement.
Versuche es bitte auch mal mit Ti weit unter 1.0 und mit einem Kp von 5. Denn dein letzter Chart sieht am vielversprechendsten aus.

Gruß
DerDani

Der D-Anteil w√ľrde dir dahingehen helfen wenn du eine spontane gro√üe Abnahme der W√§rme hast also da "kommt" was kaltes drauf das richtig W√§rme nimmt. Dann hast du eine Gro√üe Ist √Ąnderung in kleiner zeit darauf reagiert der D Regler also auf die Differenz(Error) zwischen zwei Zeitpunkten * Faktor.

Okeoke dann hab ich das eh richtig verstanden. Da nur eine Messprobe raufkommt die nicht drastisch viel W√§rme aufnimmt, ist das zur Zeit sowieso irrelevant. (bzw wird die Messprobe sowieso im vorhinein bereits aufgelegt, etwas kleines auf einer 250¬į Platte auszurichten w√§re sowieso schwachsinnig :D)

Der I-Anteil summiert sich ja bei jedem Aufruf auf oder ab je nach Abweichung. Ist die Zeit-konstante des I-Regler zu kurz dann ist der I-Anteil (die 100% des I-Anteils am Ausgangsignals schon auf 100% erst wenn der Ist>Soll ist subtrahiert (addiert -Werte) der Regler.

Inwiefern meinst du Zeitkonstante des I Reglers? das der I-Term aufsummiert wird nach "iTerm += error * iFraction". Wird dieser in Prozent angerechnet? Bzw wie kann ich den Wert einstellen das der Regler von Anfang an ziemlich Gas geben soll und dann langsam bzw immer schneller abregeln soll? also das ich nicht eine geschwungene Kurve wie jetzt erhalte sondern idealerweise eine steilansteigende und sich dann an den Grenzwert annähernde Kurver erhalte?

Also meine nächste Testreihenfolge (und korrigiere mich falls eine bessere Idee vorhanden ist) wäre Kp auf die nach der Reihe auf 0.5, 1, 5, 10, 20 zu setzen und die Ergebnisse zu vergleichen.
Eventuell danach mit den vielversprechensten Kp werten ergänzend Tests zu fahren mit unterschiedlichen Ki werten und wiederrum das Verhalten zu analysieren?
Das wird ausgesprochen langwierig, aber nagut :smiley:

Aber etwas noch. gibt es Maxwerte der Konstanten, oder hat jemand Vergleichswerte, bis wohin es maximal sinnvoll wäre zu testen?

Beste Gr√ľ√üe und Danke im Vorraus,
Wosche

Schaue mal auf die Seite hier PID das ist die Seite von den Lib Schreiber. In dem Code siehst du das intern
errSum √ľber die Zeit und Abweichung gebildet wird.

errSum += (error * timeChange);
ki * errSum

mit Ki und der Compute zeit gibst du die Zeitkonstante an also mit KI beeinflusst du sie.
Schaue mal>HIER<rein dann ist das vielleicht klarer.
Gruß
DerDani

Okee Anfängerfehler meinerseits, ich hab mir nicht den internen Code der PID Bibliothek angeschaut ::slight_smile:

Was mich aber zu einer Frage f√ľhrt. Bisher habe ich Kp und Ki werte genutzt. Durch errSum += (error * timeChange); erkl√§rt dies auch den langsamen und immer steiler werdenden Anstieg.

Mein Output soll einen Wert zwischen 0…4095 ergeben. Wenn ich Ki = 0 setze, muss ich nach dieser Formel:

Output = kp * error + ki * errSum + kd * dErr;

bei einem anf√§nglichen error von 9 (¬įC) einen dementsprechend hohen Wert von (nur versuchsweise) Kp = 150 setzen, um einen ordentlichen Output zu erhalten, der mit steigender Temperatur und dadurch kleiner werdenen Fehler immer kleiner wird.

Wenn ich das jedoch Versuche tut er aber rein gar nichts (wohlgemerkt dass der Regler vorher mit Ki = irgendeinem Wert sehr wohl etwas getan hat)

mit Ki und der Compute zeit gibst du die Zeitkonstante an also mit KI beeinflusst du sie.
Schaue mal>HIER<rein dann ist das vielleicht klarer.

Den Link zieh ich mir am Abend rein, danke!

Beste Gr√ľ√üe,
Wosche

Hallo
Regelungstechnik ist nicht ganz einfach von der Mathematik her.

Man kann aber ganz einfach vorgehen wenn man die Strecken Parameter nicht kennt, was ins der Regel bei komplexen Regelstrecken fast immer der Fall ist

Doof jetzt ist meine schöne Beschreibung weg

Mach ich dann später noch Mal neu sorry

bei einem anf√§nglichen error von 9 (¬įC) einen dementsprechend hohen Wert von (nur versuchsweise) Kp = 150 setzen, um einen ordentlichen Output zu erhalten, der mit steigender Temperatur und dadurch kleiner werdenen Fehler immer kleiner wird.

Das ist seltsam aber er sollte genau das machen was du erwartest. Also ohne I Anteil nur den reinen P-Anteil ausgeben. Ich habe gesehen du hast den Modus P_on_M aktiv der wurde erst neu implementiert gehe mal auf den Urspr√ľnglichen P_on_E Modus evtl. funkt der dazwischen. Ich habe mir die internas des neun Libs noch nicht angeschaut.
Gruß
DerDani
Evtl mal einen kleine PD-Reger aufgrund des Artikels mal vereinfacht nachbauen

@Rentner wenn mich nicht alles täuscht war es diese hier (hab sie als Emailbenachrichtigung bekommenI dass deine Beschreibung nicht nocheinmal posten musst:

Hallo
Regelungstechnik ist nicht ganz einfach von der Mathematik her.

Man kann aber ganz einfach vorgehen wenn man die Strecken Parameter nicht kennt, was ins der Regel bei komplexen Regelstrecken fast immer der Fall ist

oooke, er schneidet immer den gleichen Teil weg, wieso auch immer. Auf jeden fall ich habe deine Beschreibung danke!

Somit dein Tipp w√§re, dass ich stufen weise P-Anteil 1,2,5,10 etc erh√∂he bis zu einem theoretischen √úberschwingen von 7% (bei 50¬įC Sollwert cirka 55 zum testen) und danach den I-Anteil, von sagen wir 100 langsam runterschrauben?

Das ist seltsam aber er sollte genau das machen was du erwartest. Also ohne I Anteil nur den reinen P-Anteil ausgeben. Ich habe gesehen du hast den Modus P_on_M aktiv der wurde erst neu implementiert gehe mal auf den Urspr√ľnglichen P_on_E Modus evtl. funkt der dazwischen. Ich habe mir die internas des neun Libs noch nicht angeschaut.

@DerDani, das mit den PonM ist auch meine Vermutung, aufgrund der Beschreibung wollte ich testen ob es sich wirklich so gut anpassen lässt an meinen Grenzwert.
Ich werde es morgen auf jeden Fall ohne PonM probieren, zuerst P dann I Anteil. Danach schau ich mir den Code von PonM an.

Zusatzfrage: bei einem fixen Wert von P (wobei I=0ist) w√ľrde der Regler auf eine Temperatur einpendeln oder immer nur dar√ľberschie√üen und wieder dann unterschwingen und somit eine gleichbleibende Welle um den Sollwert induzieren??

Eigentlich kann ein P Regler die Temperatur nicht erreichen da irgendwann Soll-Ist mal Kp zu wenig Energie ist um die Temperatur zuhalten bzw zu erh√∂hen dann K√ľhlt er wieder ab und dann reicht es wieder. Annahme bei einem gut eingestellen Kp. Ist Kp zu hoch ballert der immer dr√ľber was bei einem Schwingen zu einem "mittelwert" f√ľhrt aber trotzdem nicht konstant ist.
Gruß
DerDani

Hallo

ich scheibe es noch mal neu damit das hier komplett ist. Die Vorgehensweise einen Regler einzustellen ist folgende.

  1. Regler als reinen P-regler betrieiben I und D Anteil ausgeschaltet.
    KP von kleinen Werten an erhöhen. Theotetisch ist bei einem Überschwinger von 7% der optimale dynamische Wert erreicht. Bei einem P-Regler wird sich allerdings eine bleibende Regelabweichung einstellen, der Sollwert wird also nie erreicht, der Istwert bleibt immer unter dem Sollwert. Bei zu kleinem KP wird der Sollwert zu langsam angeschlichen, bei zu grossem KP kommt es zum Überschwingen. In der Praxis kommt man mit einem jeweiligen verdoppeln von KP recht schnell zu einem Ergebniss.

2 I-Anteil einschalten und von grossen Ti Werten = langsam , die Ti Werte verringer, also schneller machen. ( KI=1/Ti.) Der I Anteil soll die bleibende Regeldifferenz beseitigen. Dabei wird der Sollwert bei grossen Ti Werten langsam von der bleibenden Regeldifferenz aus angeschlichen. Bei zu kleinem Ti kommt es wieder zu √úberschwingung bis hin zum Schwingen des gesamten Systems. Der I Anteil liegt letztlich in der Gr√∂ssenordnung der gr√∂ssten PT1 Verz√∂gerung der Regelstrecke. Wenn die Stellgr√∂sse (Y) erst abschaltet wenn der Istwert √ľberschritten ist liegt das daran das der I Anteil zu gross ist, also zu schnell , und bereits gegen den Anschlag gelaufen war. Wenn ich Deine Messwerte richtig interpretiere w√§re das etwa bei knapp 1 min. Wenn Du also 2-3 Minuten einstellst bist Du auf der sicheren Seite. Richtig eingestellt ist der I-Anteil wen der Istwert bis zum Sollwert steigt und es zu keinem wesentlichen √úberschwingen √ľber die 7 % hinaus kommt.

  1. D Anteil.Der D-Anteil dient dazu St√∂rgr√∂ssen ( Z ) schnellstm√∂glich auszugleichen. Das ist dann der Fall wenn Du einen Topf mit kaltem Wasser auf die warme Heizplatte stellst. Bei mech. Antriebssystemen sind das z.B Lastwechsel. D Anteile sind meist kritisch und t√∂dlich f√ľr Hyteresen und Lose oder Spiele bei mechanischen Regelstrecken. Wenn es also irgendwie geht ohne D-Anteil betreiben.

Nochmal zu Parametern von Regelstrecken. Wenn Du einen Topf mit Wasser auf die Heizplatte stellst um den mit aufzuheizen ist zu beachten das sich die Oberfl√§che √§ndert und damit die Verluste. Es ist also eine gr√∂ssere Stellgr√∂sse y erforderlich um die gleiche Temperatur einzustellen. Damit wird die P Verst√§rkung der Strecke also kleiner was eine gr√∂sseren P-Anteil des Reglers erfordert. Bedeutend wird das allerdings noch mehr beim I Anteil. Ein Topf mit Wasser wird die PT1 Verz√∂gerung der Stecke stark √§ndern, da ja nun das Wasser mit aufgeheizt werden muss. Der richtige I-Anteil , f√ľr den Lastfall , kann somit schnell um den Faktor 3-10 gr√∂sser werden, da die gesamte Stecke jetzt langsamer ist. Bei mechanischen Antriebssystemen spielt hier das GD^2 (Schwungmasse) eine entscheidene Rolle. Es gilt in dem Fall das GD^2 der Maschine soll nicht gr√∂sser sein als das des Antriebes. Richtig eingestellte Reglerparameter beziehen sich damit immer nur auf einen bestimmten Fall (Arbeitspunkt) der Regelstrecke. Man sollte also immer beachten was sich an der Regelstecke √§ndern kann.

Regelungstechnik f√§ngt also immer mit der gr√ľndlichen Analyse der Stecke an. Insebsondere wenn die Stecke nicht linear oder sogar nicht stetig ist oder sein k√∂nnte.

In der Praxis kann es bei Heizungen mit stark unterschiedlichen Steckenparametern sinvoller sein den I-Anteil nur dann einzuschalten wenn die Regeldifferenz klein ist, oder sogar ganz auf dem PI Regler zu verzichten und mittels der Differenz Soll-Istwer in 2-3 Stufen und √ľber Hysteresen zu und ab zu schalten.

Heinz

esum = esum + e y = Ki * Ta * esum

esum ist die Summe aller bisherigen Abweichungen e. Der Parameter des Software I-Reglers ist abhängig von der Rechenschrittweite Ta (Abtastzeit). Je öfter gerechnet wird, desto öfter wird auch hinzugezählt (aufintegriert). Eine kleine Abtastzeit erfordert also einen kleineren Faktor, dies wird durch die Multiplikation mit Ta verwirklicht.

ist von der der RN-Regleungstechnik.
Da der Ta bei 200ms im Standard steht musst du den Anteil auf weit unter 1 Stellen 1=100% einfluss der aufaddierten Abewichung/Fehlersumme also bei ca 2min wäre das Rechnerisch 0.0016 (1/(120000ms/200ms))

Gruß
DerDani

Da der Ta bei 200ms im Standard steht musst du den Anteil auf weit unter 1 Stellen 1=100% einfluss der aufaddierten Abewichung/Fehlersumme also bei ca 2min wäre das Rechnerisch 0.0016 (1/(120000ms/200ms))

guter Tipp, danke.

Ich befasse mich gerade mit dem P-Regler allein (ohne PonM), poste dann die aufgezeichneten Heizkurven mit den unterschiedlichen Intervallen.
ich werde mal versuchen auf ein ~7% Überschwingen zu kommen und dann den I Regler anpassen mit den Werten beginnend von 1 abwärts wie du es mir empfohlen hast, und schauen was passiert.

Rein theoretisch: Zurzeit teste ich ja nur bis 40¬įC, wenn ich die Temperatur aber auf √ľber 200 stelle, werde ich ja ander P und I Werte ben√∂tigen da ja ein anderes Verhalten erwartet wird, richtig?
Bzw da der Regler nicht immer auf die gleichen Werte eingestellt werden wird, sonder "programmierbar" sein wird auf verschiedene Intervall (150¬į, 200¬į, 220¬į, etc) werde ich doch dann veraussichtlich verschiedene P - I Werte mit einem switch case implementieren m√ľssen oder?

Danke an Dani und Heinz, ihr helft mir (und vorraussichtlich auch weiteren Forumnutzern) extrem weiter

Beste Gr√ľ√üe
Wosche

Hallo,

Ich kenne die PID Regler LIB nicht alles was ich hier schreibe bezieht sich ganz allgemein auf die Reglungstechnik

also ich denke f√ľr Deine Heizplatte ben√∂tigst Du keine unterscheidlichen KP Werte. Die Strecke sollte ja eigendlich fast linear sein. Kannst ja mal eine Kurve aufnehmen Temperatur als Funktion der zugef√ľhrten Heizleistung. Sicher wird die Kurve oben etwas flacher werden aber ich denke das ist nicht viel.

Dann kanst Du noch mal von z.B Raumtemperatur ausgehend , sagen wir mal 30% Heizleistung zuf√ľhren und den Temperaturverlauf aufnehmen. Damit bekommst Du dann die Steckenverst√§rung heraus und die Zeitverz√∂gerung der Strecke. nennt sich dann Sprungantwort der Strecke. Daraus kann man dann mit guter N√§herung die Reglerparameter P und I Anteil bestimmen.

Ja mit den Abtastzeiten ist das immer so eine Sache bei Digitalen Reglern. Regelungstechnisch ist die Integrationszeit Ti deffiniert als die Zeit in der der Reglerausgang bei 100% Abweichung von 0 auf 100% läuft.

Du musst nat√ľrlich die Eing√§nge Sollwert und Istwert f√ľr den Regler gleich skaliert haben, z.B beides auf GradC , aber ich denke das ist klar. Die Stellgr√∂sse Y kann eine andere Skala haben das spielt keine Roller , macht sich aber letzlich im KP bemerkbar. F√ľr den Regler und Panteil gilt ja

Yp=(Sollwert-Istwert)*KP

Wenn Du da Zahlen einsetzen willst gilt f√ľr den offene Regelkreis ( Tempf√ľhler nicht angeschlossen = Istwert immer 0) das als reiner Steller gefahren werden kann. Wenn Du jetzt aus der Sprungantwort oben ermittelt hast das Du um z.B 80Grad zu erreichen 30% Stellgr√∂sse ben√∂tigts und die 30% etsprechen einer digitalen Gr√∂sse von 1200 ( Nennbereich 100%= 4096) kannst Du nun das KP ausrechnen.

KP= 1200/(100-0) = 12

damit hast Du dann eine ungef√§hre Gr√∂sse zum anfangen, ich w√ľrde in dem Fall mit 6 anfangen und dann mal eine Sprungantwort bei geschlossenem Regelkreis aufnehmen.

wie man an Ti kommt hatte ich ja bereits geschrieben.

Heinz

Ich kenne die PID Regler LIB nicht alles was ich hier schreibe bezieht sich ganz allgemein auf die Reglungstechnik

Kein Problem, ist mir klar, das sich vieles auf allgemeine Regelungstechnik bezieht, hilft mir auch ausgesprochen viel f√ľr die Theorie dahinter weiter!

Hier sind ein paar weitere Tests.

Bei einem reinen P-Regler mit Kp=200 habe ich bisher die besten Werte (andere Versuche mit Kp=5,50,100,150) dabei habe ich immer von cirka 27¬įC aufgeheizt. Hier ist der Overshoot cirka 42.96¬įC

Kp=200.PNG

Danach habe ich die Ki Werte angepasst angefangen mit Ki = 1, dann rauf mit dern Werten auf 2 & 5 danach runter auf 0.25 und 0.05

Kp=200,Ki=1.PNG ‚Üź Ki=1
Kp=200,Ki=5.PNG ‚Üź Ki = 5
Kp=200,Ki=0.25.PNG ‚Üź Ki =0.25
Kp=200,Ki=0.05.PNG <-ki=0.05

Was mir dabei aufgefallen ist, ist das ich bei Ki = 1 noch den besten Endwert erzielt habe, von einem Overshoot auf 43.34¬įC.

Nun stellt sich die Frage bei mir, ob ich mit dem Ki-Wert runter auf meinen Sollwert komme oder nicht?? oder ob ich den Kp-Wert weiterverfeinern soll.

Es könnte auch sein, dass ich die Wirkungsweise des I-Reglers in diesem System falsch verstanden habe.

Beste Gr√ľ√üe,
Wosche