Hey Leute!
Ich hab ein System bei dem die Temperatur möglichst konstant bei 30,
max.31 Grad sein soll. Die Daten der Temp. werden über einen Arduino auf
dem PC gespeichert. Das ganze wird über einen Dreipunktregler geregelt.
Also bei Temp. über 31Grad wird gekühlt, unter 30Grad wird geheizt und
zwischen 30 und 31 Grad passiert nichts. Die Temp. ist abhängig vom
Strom auf dem System. Der Strom könnte schlagartig von 0 auf 10A
geändert werden. Alle Werte dazwischen gehen auch. Jetzt ist es so, dass
das System sehr spät erfährt, ob es kühlen oder heizen soll. Dadurch
können große Schwankungen entstehen.
Ich habe informationen darüber, wie hoch meine Temp. bei entsprechenden
Strom ist. Vielleicht kann ich dadurch irgendeinen nutzen ziehen für
eine bessere Temperaturregelung?!
Ziel ist es die Temp. möglichst schnell zu erreichen und hohe
Temperaturschwankungen zu vermeiden
Danke über jeden Tipp!
Identifikation der Regelstrecke, Überlegungen zur Identifikation der
richtigen Regelgröße sind nicht verkehrt. Ein paar Details zu deinem
System wären auch nicht schlecht
Was du suchst ist ein PID-Regler. Der ist an und für sich nicht sehr
schwer (gibt es auch für deinen Arduino fertig). Den muss man nur noch
parametrisieren (die drei Parameter P, I und D an deine Anwendung
anpassen). Die Ermittelung dieser Parameter ist das wirklich knifflige
an der Regelung. Dafür kann man beliebigen Aufwand treiben. Man kann das
auch einfach ausprobieren:
https://de.wikipedia.org/wiki/Faustformelverfahren_(Automatisierungstechnik)#Empirische_Dimensionierung
Tim schrieb:> zwischen 30 und 31 Grad passiert nichts.
Damit kannst Du unmöglich auf 1° regeln.
Die Sensoren sollten mindestens auf 1/10 besser auflösen, als Du regeln
willst, d.h. besser 0,1°.
Nimm die klassische PID-Regelung und rechne in float.
Eine digitale Regelung hat noch einen 4. Parameter, die Abtastzeit.
Diese wählt man so, daß sie gleich oder etwas kleiner als die Totzeit
des Regelkreises ist.
Tim schrieb:> Ich hab ein System bei dem die Temperatur möglichst konstant bei 30,> max.31 Grad sein soll. Die Daten der Temp. werden über einen Arduino auf> dem PC gespeichert. Das ganze wird über einen Dreipunktregler geregelt.> Also bei Temp. über 31Grad wird gekühlt, unter 30Grad wird geheizt und> zwischen 30 und 31 Grad passiert nichts.
Tja, das Verfahren taugt also nicht, man braucht einen PID Regler.
Das macht jeder billige Temperaturregler aus der Bucht
Ebay-Artikel Nr. 162464877620
wenn die Temperatur abhängig vom Strom ist - warum regelst du dann nicht
über den Strom (und ggf. verknüpft mit der aktuellen Temperatur ) ?
dürfte deutlich schneller reagieren als deine bisherige Strom -
Temperatur-Wandlung und dann Temperaturregelung
Gruß Ben
Benjamin M. schrieb:> warum regelst du dann nicht> über den Strom
Ich nehme mal an daß der Strom durch Umstände von aussen bestimmt wird,
also eher eine Störgröße ist.
Man könnte aber als Regelgröße mit der zu- bzw. abzuführenden Leistung
rechnen, und nach dem Ausgang des PID Reglers die Leistung die durch den
Strom in das System eingebracht wird von der Regelgröße abziehen.
Das wäre streng genommen ein "modellbasierter prädiktiver Ansatz" wenn
ich das noch richtig im Kopf habe, allerdings eher als praktischer
Ansatz ohne Theorie. :-)
Danke für die Antworten. Ich werde mir den PID Regler genauer ansehen
und mich ggf. nochmals melden!
Benjamin M. schrieb:> wenn die Temperatur abhängig vom Strom ist - warum regelst du dann> nicht> über den Strom (und ggf. verknüpft mit der aktuellen Temperatur ) ?> dürfte deutlich schneller reagieren als deine bisherige Strom -> Temperatur-Wandlung und dann Temperaturregelung>> Gruß Ben
Das ist so, dass der Strom per Hand eingestellt wird, je nachdem wie ich
mein System gerade haben möchte. Ich könnte also mein System vorher
schon bescheid geben, welche Temp. diese erreichen würden ohne Regelung.
Der Andere schrieb:> Benjamin M. schrieb:>> warum regelst du dann nicht>> über den Strom>> Ich nehme mal an daß der Strom durch Umstände von aussen bestimmt wird,> also eher eine Störgröße ist.>> Man könnte aber als Regelgröße mit der zu- bzw. abzuführenden Leistung> rechnen, und nach dem Ausgang des PID Reglers die Leistung die durch den> Strom in das System eingebracht wird von der Regelgröße abziehen.>> Das wäre streng genommen ein "modellbasierter prädiktiver Ansatz" wenn> ich das noch richtig im Kopf habe, allerdings eher als praktischer> Ansatz ohne Theorie. :-)
Wäre super wenn du es genauer erklären könntest. Das könnte genau das
sein, was ich mir erhofft habe?!
Ein PID Regler wäre schon mal eine gute Basis. Weil man die wesentliche
Störgröße wohl kennt, kann man den Einfluss noch einmal zusätzlich
kompensieren - das wäre eine Form des feed forward. Der PID Regler, etwa
für Änderungen der Raumtemperatur, oder die Fehler die man bei der
Kompensation des Stromes macht bleibt aber in der Regel erhalten.
Allenfalls die Leistungen reduzieren... Anstelle mit 10A, mit 0.5A
drauf, was auch immer das bedeutet.
Ich wuerd aber auch auf einen PID gehen. Allenfalls ohne Kuehlung. Dh
gegenueber Raumtemperatur, welche dann tiefer sein muss.
Heizung und Kühlung separat behandeln.
z.B.:
Heizung:
<30.0°C einschalten
>30.6°C ausschalten (etwaiges Überschwingen muss natürlich vorher mal ermittelt
werden so das die 30,0°C nicht überschritten werden).
Kühlung:
>31.0°C einschalten
<30.7°C ausschalten (halt so das es noch knapp oberhalb von 30,6°C
bleibt)
Hart von Heizung auf Kühlung umschalten gibt bestenfalls einen Lustigen
Schwingkreis.
Danke erstmal für die Antworten. Eine PID Regelung zu erstellen und über
einen Mikrocontroller zu steuern ist nicht so einfach. Zumindest als
laie nicht.
Wer könnte da helfen, wie ich vorgehen muss? Wie man die Parameter P,I,D
bestimmen kann?
Was habe ich?
-Sollwert
-Istwert wird über einen Temperatursensor angezeigt. Ist bereits
implementiert und läuft über einen Arduino
-Das Heizen funktioniert wie bei einer Heizung(Könnte verschiedene Werte
einstellen) Einfacher ist es natürlich nur ein- und auszuschalten(max.
Temp.)
-Kühlung geht nur ein oder aus (max. Kühlung, keine Werte dazwischen)
Kühlung ist der Hauptpunkt. Ist es bei einer zweipunktkühlung überhaupt
möglich?
Habe aus einem anderen Forum folgendes gefunden:
Für P-Anteil: Istwert-Sollwert
Für I-Anteil: (Istwert-Sollwert)*Zeitdifferenz
Für D-Anteil habe ich das hier gefunden: ((Änderung des istwertes seit
letzter Berechnung)/zeitdifferenz)
Wie ist das zu verstehen? Die Messung findet doch kontinuierlich statt?!
bzw. wie könnte ich das herausfinden?
Temperatursensor: DS18B20
Tim schrieb:> Eine PID Regelung zu erstellen und über> einen Mikrocontroller zu steuern ist nicht so einfach. Zumindest als> laie nicht.
Das ist das einfachste. Den kauft man fertig bei ebay.
> Wer könnte da helfen, wie ich vorgehen muss? Wie man die Parameter P,I,D> bestimmen kann?
Das ist das eigentliche Problem. Dazu brauchst Du wenigstens ein
Grundlagenwissen in Regelungstechnik.
> Was habe ich?> -Sollwert> -Istwert wird über einen Temperatursensor angezeigt. Ist bereits> implementiert und läuft über einen Arduino>> -Das Heizen funktioniert wie bei einer Heizung(Könnte verschiedene Werte> einstellen) Einfacher ist es natürlich nur ein- und auszuschalten(max.> Temp.)>> -Kühlung geht nur ein oder aus (max. Kühlung, keine Werte dazwischen)> Kühlung ist der Hauptpunkt. Ist es bei einer zweipunktkühlung überhaupt> möglich?
Sehr wichtig ist vor allen das Messen der sogenannten Sprungantworten
und das jeweilige Überschwingen. Daraus kann man dann schon einige
grobe Parameter berechnen. Ich hatte mal beruflich mit einem PI-Regler
für einen Abstandssensor zu tun. Da war das Einstellen des I-Anteils
recht einfach. Ich stellte den Anteil solange hoch, bis der Sensor
anfing zu schwingen. Dann ein Stückchen zurück und schon stimmte der
I-Anteil. :-)
Harald W. schrieb:> Ich stellte den Anteil solange hoch, bis der Sensor> anfing zu schwingen. Dann ein Stückchen zurück und schon stimmte der> I-Anteil. :-)
Nennt sich Ziegler Nichols.
Tim schrieb:> Wie ist das zu verstehen? Die Messung findet doch kontinuierlich statt?!
Nein, ein DS18B20 misst genau dann, wenn du ihm sagst, dass er messen
soll.
> Für I-Anteil: (Istwert-Sollwert)*Zeitdifferenz
Da fehlt noch die entscheidende Operation. Wenn du das "I" mal
ausschreibst, nähmlich als "Integral" wird schon klarer, was das für ein
Fehler ist, nähmlich der über die Zeit aufintegrierte Fehler bzw. bei
einem Abtastsystem mit festem Abtastintervall der aussummierte Fehler.
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