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.
:
Bearbeitet durch User
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
:
Bearbeitet durch User
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 |
machs nicht so kompliziert.
:
Bearbeitet durch User
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.
:
Bearbeitet durch User
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.