www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Heizungsregelung mit PID (mal wieder)


Autor: oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

erst mal eine kurze Vorgeschichte worum es geht. Ich hab mir im 
Gartenhaus eine Fußbodenheizung gebaut. Das Wasser dafür wird in einem, 
mit Kohle beheizten, Boiler erwärmt. Zzt. wird das System durch einen 
Industrieregler, welcher die Wassertemperatur im Boiler regelt, 
gesteuert. Der Reglerausgang geht auf eine Schaltung mit einem MEGA8 
welche über einen Schrittmotor die Luftzufuhr am Boiler entsprechend dem 
Regelausgang öffnet und schließt.
Mit folgenden Parametern läuft die Regelung zzt. ganz gut Kp=12 Tn=3600s 
Tv=900s. Aufgrund des Wasserspeichers von ca. 100l ist das system recht 
träge.
Mein Ziel ist es jetzt den Industrieregler einzusparen und die Regelei 
dem AVR aufzudrücken. Der P- und I-Teil sind mir soweit klar. Der D-Teil 
macht mir allerdings noch etwas kopfzerbrechen. Für die 
Temperaturmessung nutze ich den eingebauten ADC des AVR. Damit erreiche 
ich eine Auflösung von 0,1°C. Die PID Routine würde ich einmal/sekunde 
ausführen. Nun ändert sich innerhalb dieser Sekunde die gemessene 
Temperatur nur unwesendlich. Der entscheidende part des D-Teils 
"e_alt-e" wird also in den meisten Fällen 0 und ab und zu mal 0,1 sein. 
So kann der D-Teil also nicht wirklich funktionieren. Ich hab schon 
recht viel im Netz gesucht, auf dieses Problem wurde allerdings nie 
eingegangen. Bei schnellen Strecken, wo zwischen e und e_alt eine 
genügend große differenz besteht, spielt es warscheinlich nur eine 
untergeordnete Rolle. Bei langsamen Strecken wie sie bei 
Temperaturregelungen auftreten, halte ich diese einfache Umsetzung für 
problematisch.
Hatte schon mal jemand dieses problem und eine Idee für eine Lösung?

gruß oliver

Autor: Marc Donner (cosinus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Oliver,

wie waers die Regelschleife nur alle 5 minuten laufen zu lassen?

Gruss

Marc

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie wär's den D-Anteil einfach wegzulassen?
Extrem schnell wird er Dein träges System eh' nicht machen!

Autor: oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmm, stimmt. Vielleicht nicht mal unbedingt die ganze Regelschleife 
sondern nur den D-Teil in größeren Zeitabständen berechnen. Sinnvolle 
Zeitabstände könnte man dann direkt aus Tv ableiten. Je langsamer die 
Strecke, um so größer muss Tv eingestellt werden und um so größer werden 
die Zeitabstände zwischen den Berechnungen des D-Teils. Gute Idee. 
Danke!

gruß oliver

Autor: oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@stefan

Den D-Teil würd ich schon gern behalten. Wenn frische Kohle aufgelegt 
wird, fällt die Temperatur dadurch kurzzeitig. Darauf reagiert der 
D-Teil des Reglers recht schnell mit einem Öffnen der Luftzufuhr. 
Dadurch brennt die frische kohle gut an und die Störung wird schnell 
wieder ausgeregelt.

Autor: Dietmar (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1s Zykluszeit wäre die schnellstmögliche Zykluszeit, wenn man mit 1% 
Auflösung bei der Heizleistung (PID-Output) arbeiten will und mit 
SSR-Relais schaltet, die eine Zerocross-Schaltung enthalten - denn es 
gibt nur 100 Perioden pro Sekunde. Für eine träge Fussbodenheizung etwas 
übertrieben.

Also PID-Intervall grösser machen. Wenn ich mich richtig erinnere, ist 
die Daumenregel für die Zykluszeit = (maximal) 1/10 der gewünschten 
Ausregelzeit. Die erreichbare Ausregelzeit ergibt sich aus der Leistung 
der Heizung.

Bei trägen Strecken kann man D ganz weglassen. D wird nur in dynamischen 
Situationen wirksam. Man könnten den Differenzenquotient für den 
D-Anteil auch über mehr als einen PID-Zyklus berechnen.

Autor: Dietmar (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 100 Perioden pro Sekunde

Meine natürlich 100 Nulldurchgänge.

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Daß da sowohl die Eingangsgrösse als auch die Ausgangsgröße quantisiert 
ist, ist bei diskreten Systemen so. Du kannst halt nicht genauer regeln, 
als du messen kannst.

Wenn deine Temperaturänderungsgeschwindigkeit tatsächlich im Bereich von 
0.1K/s liegt, hast du Pech, da regelt der D-Anteil nicht mehr 
vernünftig. Aber wenn ich das richtig verstanden habe, geht es um einige 
Kelvin pro Sekunde, und da passt das dann wieder. Die Ausgabewerte des 
D-Anteils werden allerdings in 90er-Stufen quantisiert sein.

Wenn du die Abtastzeit des Reglers erhöhst, werden die Stufen kleiner, 
aber schneller wird der Regler dadurch auch nicht.

Oliver

Autor: oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Dietmar & Oliver

@Dietmar
da hast du mich falsch verstanden. Ich regel hier keine Elektroheizung 
mit einem SSR sondern einen Kohleofen. Da geht nur die Luftklappe auf 
und zu. Wobei es eine berechtigte Frage ist, ob das im sekundentakt 
geschehen muss. :)

@Oliver
also im Extremfall (Aufheizphase) rechnen wir hier mit 
änderungsgeschwindigkeiten von 0,01K/s im Normalfall ca. 1/4 davon also 
0.0025K/s. daher auch mein Problem mit dem D-Teil. "Schnell" ist hier 
auch wieder Ansichtssache. Wenn der Regler eine Störung (z.b. Kohle 
auflegen) in 30min ohne überschwingen ausregelt und die Temp. im Kessel 
nicht mehr als 1-1,5K vom soll abweicht bin ich schon zufrieden.

Alles in allem bringt uns (mich) das auf jeden fall zu der Erkenntniss, 
dass ein Regelzyklus von 1s bei der gegebenen Messauflösung und der 
langsamen Strecke schlicht und einfach nicht zweckmäßig ist. Zumindest 
nicht für den D-Teil.
Das bringt mich auf jeden Fall schon mal weiter. Danke für eure Hilfe.

gruß oliver

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

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