Forum: Mikrocontroller und Digitale Elektronik Temperatursteuerung, Programmierung


von Stefan H. (fourier)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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
von Stefan H. (fourier)


Lesenswert?

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
von Karl H. (kbuchegg)


Lesenswert?

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
von Ulrich H. (lurchi)


Lesenswert?

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.

von Fourier (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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