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?
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.
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.
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
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.
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 ;)
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
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.
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...
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.
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...
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
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
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
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?
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.
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.
Brauchst du keine Feuchtigkeit? Was is mit einer Temp Anpassung nach X Tagen. Ich kenne das von Hühnereiern.
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
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 ;)
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; |
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
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
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
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...
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ß
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
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!
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
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.