Hallo zusammen,
ich habe einen PI-Regler auf einem ATMEGA1280 programmiert. Geregelt
werden soll ein kleines Heizelement über eine PWM. Der Istwert wird über
einen Temperatursensor eingelesen.
Die PWM hat einen Wertebereich vom 0 bis 399, währen 399 "Volllast"
bedeutet.
Der Istwert bewegt sich in einem Bereich von 0 bis 30 Grad. Die
Sollbgröße wird mit 25 vorgegeben. Zur Zeit gibt es keine
Nachkommastellen. Ta ist 1sec. Die Funktion also einmal pro sec
aufgerufen.
Mein Problem ist das Ermitteln von Ki und Kp. Zur Zeit wird die PWM sehr
schnell auf 399 gesetzt. Erst nachdem die Solltemperatur überschritten
wurde, wird die PWM langsam wieder runtergesetzt.
Ich wüßte auch gerne wie groß die Begrenzung des I-Anteils gesetzt
werden sollte. Jetzt ist sie ja -50 bis 50.
Zur Zeit schwankt die Temperatur zwischen 32 Grad und 24 Grad!
Danke für eure Hilfe.
Hallo zurück, Bene, Du einer :-),
> Mein Problem ist das Ermitteln von Ki und Kp.
Klar. Weil alle drei Werte (Kp, Ki, (Kd für den PID-Regler) und
Abtastrate) angepasst sein müssen an die Realität von Heizung und dem
Antwortverhalten des Geheizten.
Banale Weisheit mit anderen Worten: Die Regelung eines Hochrades
benötigt zwingend andere Werte als die Regelung eines Tretrollers,
andernfalls gibt's mindestens Schürfwunden.
Die Datei im Anhang soll anregen, mit Ihr wirst Du Deiner Lösung schon
näher kommen.
Ansonsten suche nach "Autotuning", "Ziegler", "Nichols" und mit den
Links wirst Du mehr Ansätze zur Lösung Deiner Aufgabe finden, als Du in
einem Semester auch nur lesen kannst.
Ich bestaune die Regeltechniker, welche die kleinen
Raumheizungssteuerungen entwickelt haben (z.B. Rhondostat) - denn kleine
Räume müssen mit anderen Parametern geregelt werden als Turnhallen.
Geschickte und kluge Kollegen hier haben sich damit näher befasst, schau
mal deren Thread.
Ciao
Wolfgang Horn
Ok, ich gucke mir die Ziegler Methode heute Abend mal an, wenn ich nach
Hause komme. (Bin zur Zeit in Kanada, also wirds erst so 22-23h in
Deutschland werden)
Gibt es für sowas nicht kostenlose Simulationssoftware? Oder
Demosoftware. Mit LabVIEW könnte man das ja machen, aber das habe ich
hier nicht auf meinem Rechner...
Kann man diese Werte wirklich nur empirisch ermitteln?
Hi, Bene,
> Gibt es für sowas nicht kostenlose Simulationssoftware? Oder> Demosoftware. Mit LabVIEW könnte man das ja machen, aber das habe ich> hier nicht auf meinem Rechner...> Kann man diese Werte wirklich nur empirisch ermitteln?
Für meine bescheidenen Zwecke hat mir die Zweipunktregelung bisher
genügt.
Ich mag nicht schwindeln - für Deine weiteren Fragen bitte ich die
Könner in dieser Sache hier um Rat.
Ciao
Wolfgang Horn
Wolfgang Horn schrieb:> Ach Du liebes Lieschen.
Danke. Ich hatte es nicht so verstanden dass du dich mit "deren Thread"
auf dieses Forum bezogen hast. Deshalb meine Frage nach einem Link.
Bei meiner Regelung habe ich auch noch folgendes Problem:
Ich habe zwei int8_t Variablen, die mir die Temeratur liefern, jetzt mal
egal wo die herkommen.
Die erste Variable enthält die Zahlen vor dem Komma und die zweite
Variable 4 Nachkommastellen. Wie bekomme ich jetzt aus zb. 20 und 2521
den Wert 202521 raus? Das wären dann quasi meine "milli Grad Celsius"
Oder soll ich da anders vorgehen? Lieber mit Kommastelle und float
rechnen?!
Hi, Bene,
> Die erste Variable enthält die Zahlen vor dem Komma und die zweite> Variable 4 Nachkommastellen. Wie bekomme ich jetzt aus zb. 20 und 2521> den Wert 202521 raus?
Guckst Du hier: Beitrag "Re: Alarme und Positionsvariablen durchlaufen lassen"> Das wären dann quasi meine "milli Grad Celsius"
Ja. Diese Änderungen über die Zeit brauchst Du aber nicht wesentlich
schneller ausgeben, als der Mensch gucken kann ;-).
> Oder...Lieber mit Kommastelle und float rechnen?!
Ich hasse das Bevormunden. Ich hasse die Abhängigkeit vom Bevormunder,
in die gerät, wer das Selberdenken der Bequemlichkeit opfert.
Beide Wege sind machbar.
„Die Natur wählt den kürzesten möglichen Weg.“(Aristoteles)
Welcher ermöglicht letzten Endes ein Minimum an Kosten? Welcher ist
einfacher, schneller geschrieben, dokumentiert und getestet, hat sich
der Wartungstechniker schneller eingelesen?
Ciao
Nachteule
Bene Jan schrieb:> Die erste Variable enthält die Zahlen vor dem Komma und die zweite> Variable 4 Nachkommastellen.
Tu Dir selbst einen gefallen und platziere in eine Variable den Wert in
z.B.
Zehntelcelsius. Das ist ohnehin schon genauer, als Du messen kansst und
sicher vollkommen ausreichend.
citb
Bene Jan schrieb:> Bei meiner Regelung habe ich auch noch folgendes Problem:> Ich habe zwei int8_t Variablen, die mir die Temeratur liefern, jetzt mal> egal wo die herkommen.> Die erste Variable enthält die Zahlen vor dem Komma und die zweite> Variable 4 Nachkommastellen. Wie bekomme ich jetzt aus zb. 20 und 2521> den Wert 202521 raus? Das wären dann quasi meine "milli Grad Celsius"> Oder soll ich da anders vorgehen? Lieber mit Kommastelle und float> rechnen?!
citeb hat grundsätzlich recht.
Aber um auf das Problem zurückzukommen:
Wenn du in 2 Variablen ein Gewicht gespeichert hast, in der einen zb 5
Tonnen und in der anderen 674 Kilogramm, wie errechnet sich dann das
Gesamtgewicht in Kilogramm?
Deine 'Basiseinheit' ist nicht Kilogramm, sondern Milligrad Celsius. In
der einen Variablen ist die Tausendereinheit (als das was beim Gewicht
die Tonnen waren, quasi die Kilo-Milligrad) und in der anderen die
Basiseinheit, also die Kilogramm, bei dir eben Milligrad.
Wie errechnet sich dann aus diesen beiden Angaben die Gesamtzahl der
Milligrad Celsius?
Ist schon erstaunlich, dass die Leute alles was sie in der Grundschule
gelernt haben vergessen, sobald sie es programmieren sollen.