Forum: Mikrocontroller und Digitale Elektronik Digitaler PID-Regler für elektromotorisches Heizkörperventil


von Wolle G. (wolleg)


Lesenswert?

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
von Thomas (kosmos)


Lesenswert?

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.

von M. K. (sylaina)


Lesenswert?

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.

von SegelschiffHeizer (Gast)


Lesenswert?

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.

von Wolle G. (wolleg)


Angehängte Dateien:

Lesenswert?

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.

von B. P. (skorpionx)


Angehängte Dateien:

Lesenswert?

Steuerung wie beim Mischer... Bei mir läuft das noch im Assembler
(vor Jahren geschrieben).Das neue in „C“ noch nicht getestet.

von svensson (Gast)


Lesenswert?

Insbesondere der D-Teil sollte weggelassen werden, denn sprunghafte 
Änderungen können wohl kaum auftreten. PI oder vermutlich sogar rein P 
dürfte ausreichen.

von 1N 4. (1n4148)


Lesenswert?

Was spricht gegen einen Dreipunktregler mit Hysterese und entsprechender 
PT1-Rückführung?

von batman (Gast)


Lesenswert?

So wirds wahrscheinlich gemacht. Ein Zweipunktregler scheidet wohl aus, 
weil er nie zum Stillstand kommt und die Batterien in Tagen verbraucht.

von Dieter W. (dds5)


Lesenswert?

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.

von M. K. (sylaina)


Lesenswert?

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 ;)

von Falk B. (falk)


Lesenswert?

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.

von 1N 4. (1n4148)


Lesenswert?

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.

von M. K. (sylaina)


Lesenswert?

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.

von Toasterchef (Gast)


Lesenswert?

Bei einer Heizung wird gewöhnlich eine Störgrößenaufschaltung der 
Außentemperatur vorgenommen...

von batman (Gast)


Lesenswert?

..aber nicht am Heizkörperventil.

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
Noch kein Account? Hier anmelden.