Hallo Leute,
brauche Eure Hilfe! Ich möchte eine Peltier-Element-Temperatursteuerung
programmieren. Allerdinngs verstehe ich nicht, wie ich die
unterschiedlichen Bedingungen für die Zustände setzen und differenzieren
soll. Beispiel: Wenn ich für den Zustand des klassischen Reglels mit
PID-Arduino die Bedingung gebe: if (Solltemperatur > Isttemperatur), so
tritt diese Bedingung auch auf, wenn geregelt wird, und zwar, wenn es
einen Unterschwinger gibt. Könntet Ihr mir Vorschläge geben, wie man
sowas allgemein programmiert, habe da recht wenig Erfahrung.
Die Zustände habe ich mal folgendermaßen zusammengefasst:
1. Temperatur über Raumtemperatur:
> PI-Regelung klassisch, Controller-Direction: direct
2. Temperaturen unter Raumtemperatur:
> PI-Regelung klassisch aber bei reversem Betrieb.> Umpolung des Peltier-Elemente
1.1 Temperatur-Differenzen oberhalb der Raumtemperatur überbrücken: z.
B. 90° C auf 50° C
> PI-Regelung, reverser Betrieb> Umpolung
2.1 Temperatur-Differenzen unterhalb der Raumtemperatur überbrücken: z.
B. 0° C auf 10° C
> PI-Regelung klassisch, direct> Umpolung für den Direct-Betrieb
Auch möglich: weiterhin klassisch im Reverse-Betrieb, ab Aufnahme von
Umgebungwärme, um auf 10° C zu gelangen.
3. Nach längerem Betrieb, hohes thermisches Gesamtniveau des Blocks:
Einstellung auf Raumtemperatur
> PI-Regelung reverser Betrieb> Umpolung des Peltier-Elementes
Gruß
Fourier
Stefan Hackbusch schrieb:> Die Zustände habe ich mal folgendermaßen zusammengefasst:
Viel zu kompliziert. Das brauchst du alles nicht.
Letzten Endes kommt aus deinem PID Regler ein Stellwert raus. Der kann
zb Werte von -100 bis +100 annehmen. Ist der Stellwert positiv, dann
soll geheizt werden, ist er negativ, dann muss gekühlt werden. Deine
ganzen Unterscheidungen mit reverse Betrieb und sonstigem Schickschnack
brauchst du alles nicht. Und ob du überhaupt einen D Anteil brauchst,
wage ich auch mal zu bezweifeln. Temperaturen ändern sich üblicherweise
nicht so schlagartig, dass es notwendig wäre, mit einem D Anteil in
Sekundenbruchteilen zu reagieren. Vor allen Dingen dann nicht, wenn der
Regelkreis bestehend aus Heizung und thermisch träger Masse da sowieso
nicht mitkommt.
Je nach genauer Aufgabenstellung reicht auch ein ganz einfacher
klassischer Zweipunkt Regler:
1
while( 1 ) {
2
3
temperatur messen
4
5
if( Temperatur < Solltemperatur - Hysterese )
6
Kühlung ausschalten
7
Heizung einschalten
8
9
10
if( Temperatur > Solltemperatur + Hysterese )
11
Kühlung einschalten
12
Heizung ausschalten
13
14
Zeit vergehen lassen
15
}
Für eine Raumtemperatur reicht das völlig aus. Ev. könnte man noch je
nach Größe der Abweichung von der Solltemperatur unterschiedliche Heiz-
bzw. Kühlstufen vorsehen. Aber abgesehen davon, tut es das in vielen
Fällen.
Hi,
den reversen Reglerbetrieb benötige ich, um bei Umpolung mit den Werten
0 und 10 logisch arbeiten zu können. Er steuert dann wie gehabt und
kühlt herunter. Funktioniert auch alles. Ich habe aber doch diese
verschiedenen Anforderungszustände, die ich abdecken muss. Aber die
Bedingung Temperatur < Solltemperatur springt doch auch an, wenn
geregelt wird, eben durch den Unterschwinger? Wie soll das sonst gehen
programmtechnisch?
Gruß
Fourier
Stefan Hackbusch schrieb:> Hi,> den reversen Reglerbetrieb benötige ich,
vielleicht hab ich ja auch falsch verstanden, was du mit 'reverse
Reglerbetrieb' meinst.
> verschiedenen Anforderungszustände, die ich abdecken muss. Wie soll das> sonst gehen programmtechnisch?
1
IstTemperatur = ..... Temperatur feststellen ....
2
Stellwert = ..... PID Reglergleichung basierend auf IstTemperatur ....
3
4
if( Stellwert > 0 )
5
// Peltier als Heizung ansteuern, wobei der Stellwert die Heizstufe angibt
6
7
else if( Stellwert < 0 )
8
// Peltier als Kühlung ansteuern, wobei -Stellwert die Kühlstufe angibt
Für die reine Regelung muss man nicht nach Heizen und Kühlen
unterscheiden. Da reicht also im Prinzip eine Regler aus, der die
benötigt Heiz- (positiv) oder Kühl-(negantiv) Leistung als eine Zahl
bestimmt.
Wie das dann am Peltierelement umgesetzt wird (umpolen, Strom) ist ein
2. Schritt. Dabei lohnt es sich ggf. zu berücksichtigen dass der
Zusammenhang nicht linear ist.
Dazu kommen dann noch Schutzfunktionen für das Peltierlement, denn ein
radikales Umpolen bei hohem Strom ist nicht gut für die Lebensdauer, und
auch der Maximale Strom ist begrenzt.
Beim Peltierelement lohnt es sich ggf. noch die Temperatur auf der
anderen Seite als zusätzliche Messgröße zu berücksichtigen. Das ist ggf.
auch schon als Schutz vor einer zu hohen Temperatur nötig (oft hat man
da eine aktive Kühlung (Kühlwasser oder Lüfter), die ggf. ausfallen
könnte).
Ob man ein D Glieb braucht hängt nicht vom absoluten Wert der
Zeitkonstantes des Systems ab, sondern davon wie schnell das geregelte
System sein soll im Vergleich zu den Zeitkonstanten des ungeregelten
Systems. Gerade weil ein thermisches System oft Träge ist, kommt man da
leicht in den Bereich wo man das D-Glied benötigt.
Danke,
aber wie sieht das programmtechnisch aus? Die if-Bedingung für den
Zustand des normalen Heizens if(Solltemperatur > Isttemperatur) ist zu
grob, da er ebenfalls in diesen Zustand geht, wenn beim Kühlen oder
Heizen ein Unterschwinger auftritt.
Gruß
Fourier
Moment
Hast du jetzt einen PID Regler im Einsatz oder nicht?
Wenn da ein PID Regler arbeitet, dann interessiert dich die Temperatur
hinten nach nicht mehr. Der PID Regler sagt dir mit seinem Ausgangswert
(dem Stellwert) ob du heizen oder kühlen sollst. Pfusch dem nicht ins
Handwerk, indem du selber noch mal etwas mit den Temperaturen machst!
Entweder der PID Regler hat die Kontrolle oder er hat sie nicht. Aber
wenn er sie hat, dann hat er sie vollständig.
Und natürlich müssen die Reglerparameter entsprechend eingestellt sein.
Welchen Regler benutzt du eigentlich? Es könnte natürlich sein, dass
dieser spezielle PID Regler gar nicht geeignet ist, weil der mit den
Stellwerten nicht vernünftig umgehen kann. Der anscheinend
Standard-Arduino Regler
http://playground.arduino.cc/Code/PIDLibrary
ist jedenfalls so nicht geeignet, weil er davon ausgeht, dass er eine
PWM einstellen soll. Und die kann natürlich keine negativen Stellwerte.