Forum: Mikrocontroller und Digitale Elektronik Temperaturreglung für einen Brutschrank


von Jörg B. (joerg-sh)


Lesenswert?

Ich baue mir gerade einen Brutschrank mit einer Steuerung auf Basis 
einen STM32F429 disc. Boards.

Temperaturerfassung usw. ist nicht das Problem aber die Temperatur genau 
zu regeln leider schon.
Ich habe jetzt diverse Sachen im Netz zu PID Reglern gelesen. Werde 
daraus aber nicht so wirklich schlau.

Zum Test habe ich einfach mal eine 1 Punkt Regelung gemacht.  Daraus 
ergibt sich aus der Trägheit der Heizsystems eine Überheizung von ca 3 
Grad nach ca 15 Min. und ca 1 Grad Untertemperatur von 1 Grad was auch 
so ca 15 Minuten dauert.

Wie stelle ich es also am besten an die Temperatur möglichst auf 1/10 
Grad zu regeln?

von MaWin (Gast)


Lesenswert?

Es gibt selbst die 15 min erlernende PID Fertigmodule zur 
Temperaturregelung bei eBay für wenig Geld, was willst du da entwickeln 
und dann noch mit dem überkandidelten Board?

http://m.ebay.de/itm/261332797403

Ja, dein PID muss so langsam sein, dass er die 15min nicht in Hektik 
überrollt, je näher er an die Solltemperatur kommt um so weniger 
Heizleistung gibt er, und der Integrator lässt ihn dann exakt einregeln. 
Die Brutschranktemperatur ist ja im Prinzip konstant. Wobei das die 
brütenden Vögel in Wirklichkeit auch nicht so genau können.

von Eumel (Gast)


Lesenswert?

Jörg B. schrieb:
> 1/10
> Grad zu regeln?

Vergiss das, erstens kannst du eh nicht so genau messen und zweitens ist 
das System räumlich viel zu inhomogen als das das Sinn machen würde.

von Anja (Gast)


Lesenswert?

Jörg B. schrieb:
> Wie stelle ich es also am besten an die Temperatur möglichst auf 1/10
> Grad zu regeln?

Das Problem sind die riesigen Zeitkonstanten.
Für meine Referenzen habe ich folgenden Ansatz:

2 Temperaturfühler einer direkt an der Alu-Platte mit der Heizfolie.
Einer auf der Leiterplatte mit den Referenzen.

Der Temperaturfühler auf der Alu-Platte wird als P-Regler eingestellt.
Der Set-Point des P-Reglers hat einen Offset zum tatsächlichen Setpoint.

Der Offset ergibt sich als Ausgang des I-Reglers des Temperaturfühlers 
auf der Leiterplatte zum Setpoint. Der I-Regler wird nur dann (jede 
Minute) aktualisiert wenn der P-Regler stabil ist. (< 0.2K / Minute)

Gruß Anja

von Jörg B. (joerg-sh)


Lesenswert?

Eumel schrieb:
> Jörg B. schrieb:
>> 1/10
>> Grad zu regeln?
>
> Vergiss das, erstens kannst du eh nicht so genau messen und zweitens ist
> das System räumlich viel zu inhomogen als das das Sinn machen würde.

Es geht nicht darum genau sagen wir 37,8 zu regeln aber möglichst genau 
auf den selben Punkt.

von Jörg B. (joerg-sh)


Lesenswert?

MaWin schrieb:
> Es gibt selbst die 15 min erlernende PID Fertigmodule zur
> Temperaturregelung bei eBay für wenig Geld, was willst du da entwickeln
> und dann noch mit dem überkandidelten Board?
>
> http://m.ebay.de/itm/261332797403

Das Board regelt ja nicht nur die Temperatur, sondern die tägliche 
Kühlung, Luftfeuchte und Wendung. Von daher finde ich das Board ideal 
dazu.

Der Regler würde vielleicht Funktionieren, dann könnte ich aber auch 
weiterhin meine Vorhandenen Brüter nutzen ;)

von Jörg B. (joerg-sh)


Lesenswert?

Anja schrieb:
> 2 Temperaturfühler einer direkt an der Alu-Platte mit der Heizfolie.
> Einer auf der Leiterplatte mit den Referenzen.
>
> Der Temperaturfühler auf der Alu-Platte wird als P-Regler eingestellt.
> Der Set-Point des P-Reglers hat einen Offset zum tatsächlichen Setpoint.
>
> Der Offset ergibt sich als Ausgang des I-Reglers des Temperaturfühlers
> auf der Leiterplatte zum Setpoint. Der I-Regler wird nur dann (jede
> Minute) aktualisiert wenn der P-Regler stabil ist. (< 0.2K / Minute)
>
> Gruß Anja

Hallo Anja,
bevor ich gestern ins Bett ging kam mir eine ähnliche Idee.
In habe den Thermofühler in den Raum des Heizelementes verlegt und 
diesen Raum "geregelt"  Diese Temperatur muss jetzt nur noch ins 
Verhältnis zu der Temperatur im Brutraum gebracht werden.

Hättest du evtl. Beispiel Code für deine Regler?

Grüße

Jörg

von Karl H. (kbuchegg)


Lesenswert?

Eumel schrieb:

> das System räumlich viel zu inhomogen als das das Sinn machen würde.

Da würde ich als erstes ansetzen. Luftumwälzung mit Ventilator.

von Ingo (Gast)


Lesenswert?

Warum hast du dich für einen M4 entschieden? Finde die Dinger auch 
klasse, aber is der nicht n bissel Overkill, für so ne triviale Aufgabe? 
mal abgesehen von der Temp.-Messung. Aber das erfordert ja keine 
Rechenleistung...

von Jörg B. (joerg-sh)


Lesenswert?

Ingo schrieb:
> Warum hast du dich für einen M4 entschieden? Finde die Dinger auch
> klasse, aber is der nicht n bissel Overkill, für so ne triviale Aufgabe?
> mal abgesehen von der Temp.-Messung. Aber das erfordert ja keine
> Rechenleistung...

Der Preis des Boards macht es. Ich wüsste nichts mit Display und Touch 
zu einem ähnlichen Preis.

von Jörg B. (joerg-sh)


Angehängte Dateien:

Lesenswert?

Karl Heinz schrieb:
> Da würde ich als erstes ansetzen. Luftumwälzung mit Ventilator.

Natürlich wird die Luft umgewälzt.

Zum besseren Verständnis mal ein Bild

Oben in dem Alu Kasten befindet sich die Heizschlange.
An der Rückwand in den Kabelkanälen wird die erwärmte Luft nach unten 
geführt.

Die extreme Überheizung kommt durch die Masse des Heizelementes und des 
erwärmten Raumes in Bereich des Heizelementes.

Ich denke diesen Raum zu regeln ist der richtige Ansatz...

von Anja (Gast)


Lesenswert?

Jörg B. schrieb:
> Hättest du evtl. Beispiel Code für deine Regler?

Ist nichts besonderes:

Bei mir läuft der Regler auf einem PC. Der uC macht nur 
Messwerterfassung, Sicherheitsabschaltungen bei Fühlerbruch/Kurzschluß 
sowie die PWM-Ausgabe an 2 Heizfolien a 12W (in Reihe an 24V mit 
Übertemperaturschalter).
1
if ((SecondAct != SecondOld2) && ((SecondAct % 10) == 1))
2
{
3
    SecondOld2 = SecondAct;
4
    if (m_bACTIVE)
5
    {
6
        if ((TempPcb >= (TSet + 0.5)) || ((TempHTR >= (TSet + TOffs)) && (TempPcb >= (TSet - 1.0))))
7
        {
8
            strcat(stl, cr);
9
            strcat(stl, "P0000");
10
            strcat(stl, cr);
11
            sprintf(sthex2, "P0000");
12
            PWMOut = 0;
13
            EnableInt = false;
14
        }
15
        else
16
        {
17
            if (TempPcb < (TSet - 1.0))
18
            {
19
                XDiff = 9216;
20
                EnableInt = false;
21
            }
22
            else
23
            {
24
                TDiff  = ((TSet + TOffs - TempHTR));
25
                XDiff  = (DWORD)floor(TDiff * 9216.0 * m_P / 1000.0);
26
                XDiff  = max(XDiff, 0);
27
                XDiff  = min(XDiff, 9216);
28
                if (U24 >= 23000.0) 
29
                {
30
                    EnableInt = true;
31
                }
32
                else
33
                {
34
                    EnableInt = false;
35
                }
36
            }
37
            PWMOut = XDiff;
38
            sprintf(sthex2, "P%04x", XDiff);
39
            strcat(stl, cr);
40
            strcat(stl, sthex2); /* 039A = 10% */
41
            strcat(stl, cr);
42
        }
43
        m_stPWM.Format("%s", sthex2);
44
    }
45
}
46
47
if ((MinuteAct != MinuteOld) && (SecondAct >= 1))
48
{
49
    MinuteOld = MinuteAct;
50
51
    if ((!m_bACTIVE) || (!EnableInt))
52
    {
53
        TempOld = 0.0;
54
    }
55
    if (m_bACTIVE)
56
    {
57
        if ((fabs(TempOld - TempHTR) < 0.2) && (EnableInt))
58
        {
59
            TOffs = TOffs + ((0.01 * m_I) * (TSet - TempPcb));
60
            TOffs = min(TOffs, 2.0);
61
            TOffs = max(TOffs, -10.0);
62
        }
63
        TempOld = TempHTR;
64
    }
65
}

m_P proportionalanteil (0..100 %) wird alle 10 sek berechnet
m_I integralanteil     (0..100 %) wird alle minute berechnet
EnableInt gibt den Integrator frei
9216 ist der maximale PWM-Wert

Es gibt dann noch diverse Sonderbehandlungen für schnelle Aufheizphase, 
zu niedrige Versorgungsspannung (< 23000 mV) limitierung Integrator usw.

Gruß Anja

von Anja (Gast)


Angehängte Dateien:

Lesenswert?

Jörg B. schrieb:
> Oben in dem Alu Kasten befindet sich die Heizschlange.

Mhm Wärme steigt nach oben. Bei mir sitzt die Heizfolie unten.

Jörg B. schrieb:
> Ich denke diesen Raum zu regeln ist der richtige Ansatz...

Heizschlange kling für mich nach Punktstrahler. Und nach viel zu viel 
Leistung. Ich habe 24W für ca 2-3 Liter Volumen wobei ich nur ca 15% im 
Dauerbetrieb brauche. Der Rest ist für eine schnelle Aufheizphase.

Eine gleichmäßig beheizte Fläche wäre für mich der bessere Ansatz.
Ich regle in erster Näherung die Temperatur einer ALU-Platte mit 
entsprechenden Heizfolien.

Gruß Anja

von Jörg B. (joerg-sh)


Lesenswert?

Hallo Anja,
danke erst mal für deinen Code. Ich gehe nachher mal an die Umsetzung.

Anja schrieb:
> Heizschlange kling für mich nach Punktstrahler. Und nach viel zu viel
> Leistung. Ich habe 24W für ca 2-3 Liter Volumen wobei ich nur ca 15% im
> Dauerbetrieb brauche. Der Rest ist für eine schnelle Aufheizphase.

Mein Schrank hat ca 150 l rechne es selber mal hoch, da liege ich mit 
250 Watt ganz gut denke ich. Bei voller Last braucht es ca 20 min von 20 
auf 40 Grad.

Die Position im Schrank ist durch die Umluft eher unerheblich.

Problematisch ist bei mir der Luftdurchsatz, bei einem neuen Schrank 
würde ich die Kanäle die nach unten führen noch größer ausführen. 
Jetztzustand 4x 25x55 mm lichte Weite in den Kanälen.  Vielleicht baue 
ich da noch eine andere Version aus Alu.

Grüße

Jörg

von Jörg B. (joerg-sh)


Lesenswert?

Ich habe fürs erste eine ganz simple Formel errechnet.


vortemp = (solltemp-isttemp)+(3.2*korrektur/100)+solltemp;


Korrektur habe ich auf 50


Das klappt eigentlich ganz gut.
Vor allem erspart mir das evtl. Anheizphasen. Das macht die Formel von 
selbst.


Jetzt könnte man den Korrekturwert per PID regeln oder?

von Ulrich (Gast)


Lesenswert?

Ein Temperaturfühler am Heizelement ist schon nicht schlecht, allerdings 
nur zusätzlich um schneller Regeln zu können und große Überschwinger zu 
vermeiden. Die Messung irgendwo in der Mitte im eigentlich interessanten 
Raum kann das eher nicht ersetzen. Die Messung am Heizer muss auch nicht 
besonders genau sein - der Fühler ist mehr für die schnelle Dynamik, den 
Absolutwert bestimmt der Fühler weiter unten.

Ein einfacher PID Regler reicht für den Fall mit mehr Sensoren nicht 
mehr. Der Fühler am Heizer kann dabei ggf. den D Anteil ersetzen / 
ergänzen. Die Regelung könnte also etwa als Proportionalterme die beiden 
Temperaturen und dazu das Integral für die Temperatur unten nutzen. Ich 
glaube eher nicht dass man den Differentialanteil (oben oder unten) noch 
braucht - gibt dann halt einen Parameter mehr anzupassen und potentiell 
eine schnellere Regelung.

Die Bestimmung der Regelparameter ist leider bei so einer nicht mehr 
Standrad Regelung nicht mehr so einfach. Ggf. könnte man die Brute Force 
Lösung wählen: Die Pulsantwort messen und dann das System mit den Daten 
simulieren und an einer Beispielkurve optimieren lassen. Das habe ich 
vor längerer Zeit mal so gemacht und hat ganz gut funktioniert. Das 
Programm dazu müsste ich sogar noch irgendwo haben.

Wie stabil man die Temperatur bekommt hängt von der Messauflösung und 
den Störungen von außen ab. 0,1 K Stabilität ist da nicht so 
unrealistisch - brauchen wird man es eher nicht. Eine gute absolute 
Genauigkeit wäre bei Reptilien da schon wichtiger - ggf. auch 2 
Temperaturzonen.

von Jörg B. (joerg-sh)


Lesenswert?

Ich denke mal ich werde da gar nichts mehr großartig machen.  Evtl. noch 
eine automatische Korrektur des Korrekturwertes.  Seit einer Stunde wird 
jetzt stabil 37,8 Grad angezeigt und das stimmt auch mit meinem analogen 
Brutthermometer überein. Wenn der Schrank komplett durch geheizt ist 
muss evtl. nach unten korrigiert werden vermute ich.

Viele Brutmaschinen werden immer noch über mechanische Schalter 
geregelt.

Da schwingt die Temperatur sicherlich um einige  1/10 Grad denke ich.

von Jörg E. (jackfritt)


Lesenswert?

Brauchst du keine Feuchtigkeit? Was is mit einer Temp Anpassung nach X 
Tagen. Ich kenne das von Hühnereiern.

von Tom P. (booner)


Lesenswert?

Hei,

Bakterienkulturen werden z.B. auch in Brutschränke gelegt.
Da kenne ich auch noch die 37,8°C.
Brauchen Vögel nicht eine höhere Temperatur?
Aber was in den Brutschrank rein soll hat uns Jörg ja leider noch nicht 
verraten...  neugier


Grüße,

Tom

von Jörg B. (joerg-sh)


Lesenswert?

Ich züchte Hühner und Gänse.

37,8 kommt schon hin, das ganze ist ja einstellbar.

Ja auch die Feuchtigkeit wird geregelt. Das ist aber im Verhältnis zur 
Temperatur eine einfachere Sache.

Ein Anpassung der Temperatur nach X Tagen wäre möglich, aber nicht 
wirklich nötig, meist erhöht man zum Schlupf nur die Luftfeuchtigkeit.

Mehr antworten zum Brüten findet ihr durch google ;)

von Jörg B. (joerg-sh)


Lesenswert?

Das ganze sieht jetzt so aus:

1
          if (start == 0 && isttemp <= (solltemp - 1))
2
            start=1;
3
4
          if (start == 1 ){
5
          if(isttemp <= (solltemp - 0.3))
6
              korrektur=50;
7
              else {
8
              korrektur = 50 ;
9
              start = 0;
10
              mintik = 0;
11
                  }
12
                }
13
14
          if(start == 0){
15
          if(mintik >= 3){
16
            if(isttemp < solltemp)
17
              korrektur = korrektur + 5;
18
19
            if(isttemp > solltemp){
20
              korrektur = korrektur -5 ;
21
                 }
22
            mintik=0;
23
          }
24
          }
25
26
     vortemp = (solltemp-isttemp)+(3.2*korrektur/100)+solltemp;
27
28
          if(vortemp >= 41 && isttemp >=32)
29
            vortemp = 41;
30
          if(vortemp >= 44)
31
            vortemp = 44;

von Max B. (theeye)


Lesenswert?

Ich bin vor Kurzem auf eine Projektdokumentation zu einem PID-geregelten 
Reflow-Ofen gestoßen. Auch dort war die Temperaturproblem ein 
Knackpunkt. Hier der Link: 
http://projects.higaski.at/projects/PID_controlled_reflow_oven/PID_controlled_reflow_oven.html

Gruß Max

von Jörg B. (joerg-sh)


Lesenswert?

Max B. schrieb:
> 
http://projects.higaski.at/projects/PID_controlled_reflow_oven/PID_controlled_reflow_oven.html

Das wäre auch noch mal ein Projekt für das STM32F429 ;)

Die ganze Menü Geschichte ist mit dem Touch Display wesentlich einfacher 
zu lösen

: Bearbeitet durch User
von Max B. (theeye)


Lesenswert?

Jörg B. schrieb:
> Die ganze Menü Geschichte ist mit dem Touch Display wesentlich einfacher
> zu lösen

Da habe ich mich gerade erst durchgekämpft. Allerdings nicht für einen 
Reflow-Ofen. In meinem Gerät wird nun ein kleines 2x16 Display werkeln 
:)

Gruß Max

von Jörg B. (joerg-sh)


Lesenswert?

Max B. schrieb:
> In meinem Gerät wird nun ein kleines 2x16 Display werkeln
> :)

ein 10ner für das Display, einen für die Prozessorplatine und ein wenig 
dies und das damit es läuft und schon hast du die 25 für das stm32f429 
disc. ;) Gleich mit Debugger / programmer on board

Zugegeben bis man sich in die emWin Geschichte eingefuchst hat dauert es 
etwas...

von Wirehead (Gast)


Lesenswert?

Hi,
ich bastel gerade an einem ähnlichen Projekt, das heist es wird auch ein 
Brutschrank. Steuerung übernimmt bei mir allerdings eine kleine SPS mit 
KTP300. Lag halt rum, totaler Overkill.

Mein Problem ist grade die Feuchteerfassung und wie ich die Eierwendung 
(z.Z. auch Hühner) realisiere. Hab noch keinen passenden Antrieb 
gefunden.
Ich will ein Gitter auf halber Höhe hin und her fahren so das die Eier 
selbst auf einer Platte abrollen.
Das ganze soll sich in einer 30L EPS Box mit Umluft abspielen, die heizt 
in 30min mit 16W von 20 auf 40°C.

Ein paar Worte dazu wie ihr das mit dem Motor und der Feuchtemessung 
gelöst hast wären interessant.
Zu der Feuchtemessung hab ich über Messung der Feuchtkugeltemperatur mit 
einem Dochtthermometer nachgedacht...

Gruß

von Jörg B. (joerg-sh)


Lesenswert?

Feuchtemessung mach ich mit einem AM2301, da wirst du aber wohl nichts 
mit deiner SPS werden. 
http://mikrocontroller.bplaced.net/wordpress/?page_id=3236

Für die Wendung nehme ich einen Getriebemotor mit Spindel und Mutter, 
dazu noch eine Parallelführung 
http://www.pollin.de/shop/dt/MjM1OTg2OTk-/Motoren/DC_Getriebemotoren/DC_Getriebemotor_mit_Spindel_200680_12_V_rechts.html

Es wäre auch ein etwas größeres Servo aus dem Modellbau denkbar.

Die Führung ist Eigenbau.

: Bearbeitet durch User
von Torsten W. (wirehead)


Lesenswert?

MM ich hab mir jetzt mal nen AM2301 bestellt, ich versuch den mal 
auszuwerten und als PWM auszugeben. Hab da noch nen AtMega8, vieleicht 
wird das was mit Arduino...
Servo hört sich auch gut an, dein Motor wär warscheinlich ne Nummer zu 
dick für meine 15 Eier.

Aber danke für die Tips!

von Jörg B. (joerg-sh)


Lesenswert?

Für Arduino gibt es fertige libs dazu.
Damit kannst du auch den Servo steuern.

Damit kannst du dann aber auch gleich alles steuern ;)
es gibt glaub ich sogar eine PID lib

von Jörg B. (joerg-sh)


Angehängte Dateien:

Lesenswert?

Temperatur und Luftfeuchte laufen jetzt stabil

von Ernst B. (puravida)


Lesenswert?

Schaut cool aus!

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.