Im Beitrag Beitrag "Re: PID-Regler mit anti-Windup" wird die Reglergleichung: y = (Kp*e)+(I*Ta*esum)+(D*((e-ealt))/Ta); // Reglergleichung verwendet. Die Stellgöße Y wäre m.E. doch der Hub des Ventils. Die Regelabweichung e wird durch Messen der Raumtemperatur bestimmt. Nun mein Problem: Bei einem Thermostatventil mit Dehnungskörper ändert sich der Hub (y) stetig mit der Temperatur und bleibt in der Stellung stehen, bei der die zugeführte Wärme gleich der abgegebenen Wärme ist. Ein Motorventil fährt aber nur schrittweise AUF bzw. ZU. Die Stellwegänderung führt hier nicht zu einem sich stetig ändernden Stellweg. Hauptfrage: Wie löst man das Problem programmiertechnisch? Eine Art Zweipunktregelung läuft bei mir schon. Das spätere Ziel besteht u.a. darin, die Ventilkennlinie Durchfluss = (f) des Hubes und die Kennlinie eines Heizkörpers zusammen zu fassen. Beide Kennlinien sind nicht linear und passen insbesondere bei den heutigen Konstruktionen des Ventilunterteils nicht zusammen. Hoffentlich habe ich mich verständlich ausgedrückt.
:
Verschoben durch User
falls es keine Schulaufgabe ist du also keine rechnerische Lösung brauchst, würde ich erstmal aufzeichnen wie schnell die Temperatursprunge draußen und wie schnell sie drinnen vonstatten gehen. Wie lange heizt der Heizkörper nach dem abschalten noch nach. Man kann klar nicht vorrausschauen, aber es ist anzunehmen das die Temperaturen nachts fallen und am Tag wieder steigen, deswegen sollte man hier etwas Analyse betreiben, so das sich die Heizung nicht erst bei erreichen der Raumtemperatur abschaltet sonder bereits einige Stunden früher wenn man weiß die Temperatur wird in 2 Stunden eh steigen und das Raumsolltemp wird dann von selbst erreichen. Eine Heizung ist nun mal sehr träge da finde ich es mit P, I und D schon extrem übertrieben.
wolle g. schrieb: > Im Beitrag Beitrag "Re: PID-Regler mit anti-Windup" wird die > Reglergleichung: Achtung: Diese Gleichung ist so wie in diesem Beitrag gezeigt nicht Anti-Windup. wolle g. schrieb: > Die Stellgöße Y wäre m.E. doch der Hub des Ventils. Das ist völlig egal, das kann auch eine PWM sein, eine Motordrehzahl, ein Servo-Winkel usw. wolle g. schrieb: > Die Regelabweichung e wird durch Messen der Raumtemperatur bestimmt. Richtig wolle g. schrieb: > Bei einem Thermostatventil mit Dehnungskörper ändert sich der Hub (y) > stetig mit der Temperatur und bleibt in der Stellung stehen, bei der die > zugeführte Wärme gleich der abgegebenen Wärme ist. Ja, sowas nennt man auch Regelung wolle g. schrieb: > Ein Motorventil fährt aber nur schrittweise AUF bzw. ZU. Kommt auf den Motor an aber ja. wolle g. schrieb: > Die Stellwegänderung führt hier nicht zu einem sich stetig ändernden > Stellweg. Das würde auch beim Motor etwas verwundern. wolle g. schrieb: > Hauptfrage: Wie löst man das Problem programmiertechnisch? Abstrahieren. Dein PID-Regler braucht weder zu wissen, dass er eine Heizung regelt noch dass ein Motor sein Stellglied ist. IMO ist das der Hauptknackpunkt bei den Reglern: Man muss sich drüber im Klaren sein, dass es einem Regler egal ist, was er womit regeln soll. wolle g. schrieb: > Eine Art Zweipunktregelung läuft bei mir schon. Wie hast du das genau gelöst? Schau mal, so wie im Anhang sieht mein PID-Regler an, mein PID wusste nicht, dass er die Ausgangsspannung eines Tiefpasses regelte: Beitrag "PID-Regler: Wie schnell ist schnell genug?" Wenn gewünscht kann ich mein aktuelle Lib dazu hier noch hochladen.
M. K. schrieb: > IMO ist das der > Hauptknackpunkt bei den Reglern: Man muss sich drüber im Klaren sein, > dass es einem Regler egal ist, was er womit regeln soll. > Absolut nicht. Es hängt immer von der Totzeit der Regelstrecke ab, wie schnell ein Regler arbeiten muß und ob es dabei überhaupt eines PID-Reglers bedarf. Bei einer Regelung der Raumtemperatur wirken nämlich das Luftvolumen im Raum, die Möbel und vor Allem der Heizkörper selbst integrierend.
M. K. schrieb: > wolle g. schrieb: >> Hauptfrage: Wie löst man das Problem programmiertechnisch? > > Abstrahieren. Dein PID-Regler braucht weder zu wissen, dass er eine > Heizung regelt noch dass ein Motor sein Stellglied ist. Mir geht es, wie schon gesagt, hauptsächlich um die programmiertechnische Lösung. Als einen evtl. Lösungsansatz würde ich sehen, ein brauchbares Verhältnis von Motorlaufzeit zu Wartezeit zu finden. Oder evtl. macht man es auch ganz anders und deshalb besser? Ich nehme an, dass es bestimmt schon so was gibt und ich das Fahrrad nicht noch einmal erfinden muss, denn Motorventile auch als Regelventile gibt es schon eine Ewigkeit. Im Anhang mein Programmschnipsel der oben genannten Zweipunktregelung, wobei die eigentliche Regelung unter void regler (void) und interrupt (TIMERA0_VECTOR) Timer_A(void) zu finden ist. Der "Rest" gehört zu meinem Datenspeicher.
Steuerung wie beim Mischer... Bei mir läuft das noch im Assembler (vor Jahren geschrieben).Das neue in „C“ noch nicht getestet.
Insbesondere der D-Teil sollte weggelassen werden, denn sprunghafte Änderungen können wohl kaum auftreten. PI oder vermutlich sogar rein P dürfte ausreichen.
Was spricht gegen einen Dreipunktregler mit Hysterese und entsprechender PT1-Rückführung?
So wirds wahrscheinlich gemacht. Ein Zweipunktregler scheidet wohl aus, weil er nie zum Stillstand kommt und die Batterien in Tagen verbraucht.
Eine Regelung mit Motorventil als Stellglied erfordert einen Dreipunkt-Schrittregler. Um ein PID Verhalten zu erreichen darf der Regler nur eine PD Struktur haben, da das Motorventil selbst den I Anteil beisteuert.
wolle g. schrieb: > Als einen evtl. Lösungsansatz würde ich sehen, ein brauchbares > Verhältnis von Motorlaufzeit zu Wartezeit zu finden. Die Streckeneigenschaft musst du selbst herausfinden. Am einfachsten geht das, indem du wartest bis sich die Temperatur auf einen beliebigen Wert stabilisiert hat, z.B. Ventil komplett zu. Dann gibst du einen anderen Stellwert vor (z.B. Ventil zwei Umdrehungen auf) und zeichnest den Verlauf der Temperatur auf bis sie sich wieder stabilisiert. Dann hast du praktisch die Sprungantwort deines Systems, das geregelt werden soll, und kannst z.B. einen PID-Regler nach Ziegler-Nichols einstellen. wolle g. schrieb: > Ich nehme an, dass es bestimmt schon so was gibt und ich das Fahrrad > nicht noch einmal erfinden muss, denn Motorventile auch als Regelventile > gibt es schon eine Ewigkeit. Natürlich. Du musst dir nur erst klar darüber werden, welchen Regler du genau benutzen willst. Dafür musst du deine Strecke kennen, die du regeln willst. Auch hier kommen wir wieder dazu: Sprungantwort der Strecke aufnehmen. wolle g. schrieb: > Im Anhang mein Programmschnipsel der oben genannten Zweipunktregelung, > wobei die eigentliche Regelung unter void regler (void) und interrupt > (TIMERA0_VECTOR) Timer_A(void) zu finden ist. Der "Rest" gehört zu > meinem Datenspeicher. Das sieht IMO gar nicht schlecht aus, für ne Raumheizung würde ich ohne äußeren Drang (z.B. Kundenwunsch) einen Zweipunktregler nach genau diesem Schema verwenden. Bei so einem Regler muss man nicht zwingend erst die Sprungantwort der Strecke aufnehmen: gesparte Arbeit ;)
M. K. schrieb: > Die Streckeneigenschaft musst du selbst herausfinden. Am einfachsten > geht das, indem du wartest bis sich die Temperatur auf einen beliebigen > Wert stabilisiert hat, z.B. Ventil komplett zu. Dann gibst du einen > anderen Stellwert vor (z.B. Ventil zwei Umdrehungen auf) und zeichnest > den Verlauf der Temperatur auf bis sie sich wieder stabilisiert. > Dann hast du praktisch die Sprungantwort deines Systems, das geregelt > werden soll, und kannst z.B. einen PID-Regler nach Ziegler-Nichols > einstellen. Schöne Theorie. Schon mal praktisch gemacht? Denn bei so einer Regelung hat man verdammt große Zeitkonstanten. Und oft auch nichtkonstante Parameter, je nach Lüftungssituation des Raums und Außentemperatur. > Das sieht IMO gar nicht schlecht aus, für ne Raumheizung würde ich ohne > äußeren Drang (z.B. Kundenwunsch) einen Zweipunktregler nach genau > diesem Schema verwenden. Bei so einem Regler muss man nicht zwingend > erst die Sprungantwort der Strecke aufnehmen: gesparte Arbeit ;) Ich meine, eine große Herausforderung der Regelung ist es, das Ventil möglichst wenig zu verstellen, um die Batterielaufzeit zu maximieren. Und genau dafür braucht man in Summe ein PI-Verhalten, mit welchem das Ventil letztendlich still steht.
Falk B. schrieb: > Ich meine, eine große Herausforderung der Regelung ist es, das Ventil > möglichst wenig zu verstellen, um die Batterielaufzeit zu maximieren. > Und genau dafür braucht man in Summe ein PI-Verhalten, mit welchem das > Ventil letztendlich still steht. Und einen, möglichst langsamen Regler. Bei den Zeitkonstanten sowieso.
Falk B. schrieb: > Schöne Theorie. Schon mal praktisch gemacht? Denn bei so einer Regelung > hat man verdammt große Zeitkonstanten. Und oft auch nichtkonstante > Parameter, je nach Lüftungssituation des Raums und Außentemperatur. Nö, simpler Zwei-/Dreipunktregler mit Hysterese genügte mir dabei bisher immer. Ist das denn wichtig? Ich denke nicht. Falk B. schrieb: > Ich meine, eine große Herausforderung der Regelung ist es, das Ventil > möglichst wenig zu verstellen, um die Batterielaufzeit zu maximieren. Wenn eine Batterie im Spiel ist kann man das System entsprechend auslegen, dass die Batterielaufzeit maximal wird. Dazu hat aber der TE noch nix gesagt, es macht also keinen Sinn hierüber zu spekulieren.
Bei einer Heizung wird gewöhnlich eine Störgrößenaufschaltung der Außentemperatur vorgenommen...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.