Forum: PC-Programmierung PID mit starker Verzögerung


von Andreas J. (ajbln)


Lesenswert?

Hallo Zusammen,

es geht mir hier nur um den Algorithmus.
Also die Frage, wie man per PID große Verzögerungen mit einberechnen 
kann.
Konkret für einen Reflow Ofen. Der besteht aus einem Ceranfeld und einer 
10mm Aluplatte, in der ein Thermosensor eingebaut wurde.
Die Konsequenzen sind klar.

a) Braucht die Aluplatte lange, bis die Wärme tatsächlich am 
Thermosensor ankommt (nach dem Einschalten des SSRs z.B.).

b) Hat der Thermosensor die Temperatur erreicht, schaltet die PID zwar 
ab, aber die Temperatur schießt durch die Verzögerung weit über das Ziel 
hinaus.

Die Standard PID-Berechnung scheint das überhaupt nicht zu 
berücksichtigen.
Oder gibt es da eine Möglichkeit?

Ich hab mir jetzt folgendes überlegt:
Ich habe ein Reflow-Profil, im Prinzip eine Liste von structs, die 
jeweils eine Soll-Temperatur und einen Zeitraum festlegen.

Ungefähr so:

struct Zone
{
    temperature_t EndTemperature;
    seconds_t TimeSpan;
};

Die "Zonen" erzeugen dann beim Abfahren lineare Anstiege der Temperatur 
innerhalb eines bestimmten Zeitraumes.
Die Idee ist jetzt, dass die erste Zone eine "Spezialaufgabe" bekommt 
(TimeSpan==0). Hier wird nämlich in zwei Schritten (mit einer internen 
Statemaschine) folgendes gemacht.

1.) Schalte das SSR an und warte bis die Soll-Temperatur erreicht wurde. 
=> jetzt habe ich das Delay in ms

2.) Schalte das SSR aus und bestimme solange die Maximaltemperatur, bis 
wieder der Sollwert erreicht wird. => jetzt habe ich den Overshoot in 
°C.
Dann mache ich mit der PID und den anderen Zonen weiter.

Die Frage ist, wie ich die beiden ermittelten Werte in die PID mit 
einbaue.
Ich könnte folgendes machen:
Ich schaue in die Zukunft, also nehme nicht den aktuellen Sollwert von 
t(now), sondern t(now) + t(delay).
Und dann nehme ich den Sollwert und ziehe den Overshoot ab, also sp(now) 
= sp(soll(t(now) + t(delay)) - overshoot

Macht das Sinn?
Oder kennt jemand die Lösung?

von MaWin (Gast)


Lesenswert?

Andreas J. schrieb:
> ) Hat der Thermosensor die Temperatur erreicht, schaltet die PID zwar
> ab, aber die Temperatur schießt durch die Verzögerung weit über das Ziel
> hinaus.
> Die Standard PID-Berechnung scheint das überhaupt nicht zu
> berücksichtigen

PID schon, 2-Punkt-Regelung nicht.

Dein PID ist kein PID.

Sondern so falsch parametrisiert, dass er wie ein 2-Punkt-Regler 
arbeitet.

Kauf dir halt einen Autotune-Regler.

von S.E. (Gast)


Lesenswert?

Du hast die Sprungantwort schon aufgezeichnet. Ein erster Ansatz könnte 
Ziegler/Nichols sein um die PID Parameter abzuschätzen. Wenn das nicht 
ausreicht, lies dich ins Thema "Totzeit" (auch wenn deine Strecke 
mathematisch gesehen keine ist sondern eher PTn), da gibt es einige 
Ansätze. Alternativ ein Beobachter+Zustandsregler.

von Pandur S. (jetztnicht)


Lesenswert?

Ich wuerde erst mal eine Vorwaertssteuerung bauen. Also welcher 
Steuerwert ergibt welche Temperatur im Endwert.

von Kolja L. (kolja82)


Lesenswert?

Andreas J. schrieb:
> Also die Frage, wie man per PID große Verzögerungen mit einberechnen
> kann.

Muss es den überhaupt ein Regler sein?
Sind deine Störgrößen nicht denkbar klein,

von Andreas J. (ajbln)


Lesenswert?

S.E. schrieb:
> Du hast die Sprungantwort schon aufgezeichnet. Ein erster Ansatz könnte
> Ziegler/Nichols sein um die PID Parameter abzuschätzen. Wenn das nicht
> ausreicht, lies dich ins Thema "Totzeit" (auch wenn deine Strecke
> mathematisch gesehen keine ist sondern eher PTn), da gibt es einige
> Ansätze. Alternativ ein Beobachter+Zustandsregler.
Ok, Danke Dir! Da werde ich mich erst mal einlesen müssen...

Pandur S. schrieb:
> Ich wuerde erst mal eine Vorwaertssteuerung bauen. Also welcher
> Steuerwert ergibt welche Temperatur im Endwert.
Ich hab noch nichts zum Thema Vorwärtssteuerung gefunden, aber Danke für 
den Hinweis. Das Problem ist eben, dass der Steuerwert (hier ein/aus bei 
einem Relais) zu einer extremen Verzögerung führt, und diese wiederum zu 
einer Übersteuerung. Das Problem ist also, dass der Algorithmus 
frühzeitig "erkennen" muss abzuschalten, obwohl die Solltemperatur noch 
lange nicht erreicht ist. Also hier gibt es keinen bestimmte Temperatur 
bei einem Steuerwert.

Kolja L. schrieb:
> Muss es den überhaupt ein Regler sein?
> Sind deine Störgrößen nicht denkbar klein,
PID bringt tatsächlich nicht viel (gerade wenn es nur um ein/aus geht), 
ist aber einfach schon fertig implementiert und funktioniert (ohne 
Aluplatte) auch gut. Ich habe noch einen zweiten Usecase, bei dem ich 
den selben Regler verwenden will. Und zwar verwende ich hier einen 
großen Glasbecher plus Galden, also Dampfphasenlöten. Ohne die Aluplatte 
dann. Hier gibt es so gut wie keine Verzögerungen, aber ein anderes 
Problem (Dampfphase führt zu einem sprunghaften Temperaturanstieg). 
Natürlich könnte ich dann einfach auch zwei Modi vorsehen, aber "noch" 
suche ich nach einer eleganten Lösung, die das "Antwortverhalten" 
automatisch erkennt und trotzdem das Reflowprofil gut abfährt. Zumindest 
ist das jetzt meine sportliche Herausforderung. ;-)

Ich guck mal, dass ich Soll/Ist in ein Diagramm bekomme, die Daten 
bekomme ich per MQTT...

von Kolja L. (kolja82)


Lesenswert?

Mit der Aluplatte machst du aber die Regelstrecke kaputt. Du könntest 
versuchen das P ganz klein und das AbtastIntervall ganz groß zu machen. 
Musst halt lange warten bis es warm wird...

von Maxe (Gast)


Lesenswert?

Der D-Anteil verhindert bei richtiger Auslegung die Überschwinger. Bei 
starker Änderung der Eingangs wirkt er dagegen, insbesondere wenn man 
schon in der Nähe des Sollwertes ist, wo der Proportionalanteil nur noch 
einen kleinen Beitrag liefert. Den I-Anteil würde ich erstmal weglassen, 
der arbeitet da eher dagegen.

Für einen PID brauchts aber einen analogen Ausgang, also zumindest 
eine PWM. Eine reine 1/0-Vorgabe durch den Regler wird nicht 
funktionieren.

von Andreas J. (ajbln)


Lesenswert?

MaWin hat es schon gesagt: ich habe quasi nur eine Zweipunktregelung und 
daher kann PID nichts gegen das Überschwingen bewirken.
PID berechnet alles vollkommen richtig und gibt mir einen "negativen" 
Wert aus (der bei mir auf Control-Min=0 (aus) überschrieben wird), 
sobald der Sollwert überschritten ist.
Es gibt bei mir aber eben nichts, was die Regelung schnell genug bremst, 
wie bei einem Lüfter mit PWM z.B.. Ich müsste quasi ein Kühlaggregat 
benutzen.
Und das schlimmste (bei einer fetten Aluplatte) ist eben, dass die bis 
zum Abschalten des SSRs gespeicherte Energie noch nicht mal beim 
Thermosensor angekommen ist.

Wie S.E. (Gast) schon gesagt hat: ich brauche eine Art von Heuristik, 
die hier den Überschwinger (als Fehler) herausrechnet.
Also mal angenommen, mein Überschwinger beträgt 30°C nach dem 
Abschalten.

Würde ich Soll(temp) einfach nur um 30°C reduzieren funktioniert das gut 
bis zum Erreichen der 230°C. Statt 230°C sage ich einfach: regle bis 
200°C. Die PID schaltet korrekt ab. Die bis dato gespeicherte 
Wärmeenergie kommt zeitverzögert an und bringt die Temp auf 230°C.

Nur leider kann die PID die 230°C nicht halten.
Sie würde das SSR erst bei unter 200°C wieder einschalten, was zu einer 
langsamen Schwingung führt.

Ich brauche neben P-I-D noch einen Faktor X, der am Anfang den Sollwert 
abbremst auf 200°C, dann aber unter Berücksichtigung meiner Trägheit - 
rein zeitgesteuert - den Faktor kleiner werden lässt, so dass eben doch 
wieder nach ein paar Sekunden die vollen 230°C per PID geregelt werden.
Ich schreibe mir gerade die Lösung herbei: ;-)
Dieser X-Faktor ist also eigentlich nur abhängig vom Control-Wert.
Ich brauche das Verhältnis 30°C (Overshoot) zu Delay (Trägheit). Also 
Overshoot/Delay. Ist Control="an" wird dieser Wert dekrementiert (bis 
-Overshoot) und bei "aus" inkrementiert (bis 0).
Ist das SSR also lange genug "an", regle ich also Soll von 230° auf 
200°C runter und schalte rechtzeitig ab. Ist das SSR aus, erhöhe ich den 
Wert wieder auf die vollen 230°, so dass ich bei 229°C wieder einschalte 
u.s.w..
Wahrscheinlich brauche ich dann noch einen Faktor kX.
Ich probier's aus...

von Walter T. (nicolas)


Lesenswert?

Andreas J. schrieb:
> Die Standard PID-Berechnung scheint das überhaupt nicht zu
> berücksichtigen.

Sicher kann die das berücksichtigen. Die Vorhalt- und Nachhaltzeit 
müsste dann so gewählt sein, dass man trotz des langsamen Regelkreises 
(bedingt durch den Feedback) immer noch im aperiodischen Grenzfall 
bleibt. Die Berechnungsregeln sind immer noch die gleichen.

Allerdings wird das System dann eben so langsam, wie man es nicht haben 
will.

Die Berechnungsregeln sind eben auf Stabilität, nicht auf 
Geschwindigkeit bedacht.

von Georg (Gast)


Lesenswert?

Andreas J. schrieb:
> Also die Frage, wie man per PID große Verzögerungen mit einberechnen
> kann.

Ich hatte diese Aufgabe bei einer ähnlichen Konfiguration: Wasser in 
einem Behandlungsbecken wird im Kreislauf durch einen Durchlauferhitzer 
gepumpt, der die Temperatur regeln soll, natürlich dauert es eine Weile 
bis das erhitzte Wasser wieder im Becken ankommt.

Ich habe das mit einer "Zukunftsregelung" gelöst, was gut funktioniert 
hat: ein Algorithmus extrapoliert den Temperaturverlauf um x Sekunden in 
die Zukunft, der PID-Algorithmus arbeitet mit Soll- und Istwerten die in 
x Sekunden erwartet werden. Natürlich muss auch der zukünftige Sollwert 
vorausberechnet werden, was in dem Fall trivial war, weil der zeitliche 
Verlauf durch die Behandlungsmethode bzw. den Arzt vorgegeben war.

Leider ist das keine Lösung nach akademischen Grundlagen und kann daher 
nicht als korrekte Regelung anerkannt werden, das war dem Wasser im 
Becken aber egal.

Georg

von Johannes S. (Gast)


Lesenswert?

ich habe so eine Uyue 946C Heizplatte mit PID Regler, die schaltet sehr 
früh ab und erreicht die Zieltemperatur dann nur sehr langsam, dafür 
ohne großen Overshoot.
Damit hatte ich genauso Dampfphasenlöten getestet. Es ging, hat aber 
sehr lange gedauert. Schneller ging es mit einer konventionellen 
Heizplatte mit Zweipunktregler und 1000 Watt. So sprunghaft steigt die 
Temperatur da aber nicht, ich habe allerdings ein Alu Streckmetall als 
Träger, da kondensierte erstmal einiges und die Erwärmung geht dadurch 
langsamer.
Alternativ macht man das wohl durch langsames Eintauchen in den Dampf, 
was aber afaik patentiert ist und nicht alle so machen.

von Olaf (Gast)


Lesenswert?

Ich gebes ja zu, meine Regelungstechnikvorlesung ist auch schon was 
zurueck,
aber war es nicht so das PID ausschliesslich fuer LTI-Systeme ohne Delay 
sinnvoll waren?

Nach meinen Erfahrungen ist es sogar so das man in der Praxis selbst 
dann wenn man sich bemueht ein System gut auszulegen immer noch irgendwo 
eine kleine Nichtlinearitaet drin hat die einem das leben schwer machen 
kann. Und bei Heizungsregelung sogar ganz besonders gerne, so das man da 
gelegentlich zu interessanten tricks greifen muss. Du scheinst dich aber 
zu bemuehen dein System maximal schlecht und unregelbar zu bauen um es 
dann mit einem PID zu regeln. Viel Glueck. .-)

Olaf

von MaWin (Gast)


Lesenswert?

Andreas J. schrieb:
> PID berechnet alles vollkommen richtig und gibt mir einen "negativen"
> Wert aus (der bei mir auf Control-Min=0 (aus) überschrieben wird),
> sobald der Sollwert überschritten ist

Niemand zwingt dich, es so falsch zu machen.

Du kannst den PID Output wie Andere es tun verwenden um im üblichen 
(Flickergrenze) 4-Sekunden Intervall festzulegen wie lange prozentual 
die Heizung an sein soll, also PWM bzw. Impulspaketsteuerung. Da 
klappert das Relais vielleicht, aber thermisch träge genug wird die 
Aluplatte sein um daraus einen mittleren Warmeeintrag zu machen.

von Andreas J. (ajbln)


Lesenswert?

Walter T. schrieb:
> Die Berechnungsregeln sind eben auf Stabilität, nicht auf
> Geschwindigkeit bedacht.

Das ist der eine entscheidende Punkt! Der zweite, dass PID ein Overshoot 
nur "nachträglich" behandelt. Wenn es schon zu spät ist.
Und eben nicht vorausschauend behandeln kann. Und das versuche ich zu 
ändern.
Und wie es Georg in seinem Versuchsaufbau schon gezeigt hat: das 
Ergebnis zählt. ;-)

Olaf schrieb:
> Ich gebes ja zu, meine Regelungstechnikvorlesung ist auch schon was
> zurueck,
> aber war es nicht so das PID ausschliesslich fuer LTI-Systeme ohne Delay
> sinnvoll waren?
Ja, das macht Sinn!

Olaf schrieb:
> Du scheinst dich aber
> zu bemuehen dein System maximal schlecht und unregelbar zu bauen um es
> dann mit einem PID zu regeln.
Da ist leider auch was dran. Die Idee mit der dicken Aluplatte kam durch 
die Pfannen/-Lötvariante (irgendwo im Netz) auf. Da wurde eben eine 
dicke Aluplatte empfohlen, weil man dort leicht einen Temperatursensor 
in der Seite befestigen kann, in dem man einfach ein Loch reinbohrt. Ist 
aber leider eben kontraproduktiv für eine PID.
Wie gesagt, ist jetzt meine Herausforderung, dass trotzdem zu lösen.
Wenn ich scheitere, kann ich mir ja immer noch eine dünnere Aluplatte 
kaufen und mir dann überlegen, wie ich den Sensor da befestige...

von Andreas J. (ajbln)


Lesenswert?

MaWin schrieb:
> Du kannst den PID Output wie Andere es tun verwenden um im üblichen
> (Flickergrenze) 4-Sekunden Intervall festzulegen wie lange prozentual
> die Heizung an sein soll, also PWM bzw. Impulspaketsteuerung. Da
> klappert das Relais vielleicht, aber thermisch träge genug wird die
> Aluplatte sein um daraus einen mittleren Warmeeintrag zu machen.

Ok, das wäre natürlich auch eine Lösung!
Aber wie gesagt, das soll für ein Reflow Ofen verwendet werden und die 
einzelnen Zonen sind da 90s, 120s und 60s lang.
Meine Befürchtung ist ein bisschen, dass das mit der viel zu fetten 
Alu-Platte trotzdem zu träge wird. Aber das wird definitiv Plan b)...

von Olaf (Gast)


Lesenswert?

> Meine Befürchtung ist ein bisschen, dass das mit der viel zu fetten
> Alu-Platte trotzdem zu träge wird.

Ich stimme dieser Befuerchtung zu. :-)
Zumal du ja vermutlich Anforderungen an deine Heizgeschwindigkeit hast 
und wenn du die mit einem dicken Heizelement loest wird dein System noch 
schwerer zu regeln.

Olaf

von Johannes S. (Gast)


Lesenswert?

Auch für Abkühlphase hat eine dicke Platte Nachteile, die Platinen im 
heißen Zustand zu bewegen ist auch nicht gut. Die Sensormontage kann da 
kein Argument sein. Die Sensoren bekommt man in sehr klein, siehe 
Temperaturmessung beim 3D-Drucker am Hotend oder Heizbett.

von Georg (Gast)


Lesenswert?

Andreas J. schrieb:
> Und wie es Georg in seinem Versuchsaufbau schon gezeigt hat

Ein Versuch war das nicht, die Geräte waren an verschiedenen 
Uni-Kliniken im Einsatz, und die waren auch zufrieden damit.

Georg

von Andreas J. (ajbln)


Lesenswert?

Johannes S. schrieb:
> Auch für Abkühlphase hat eine dicke Platte Nachteile

Definitiv. Da habe ich in meinem Dampfphasen-Glas die Platine angehoben 
(Rastpunkt oberhalb der Dampfphase und dort abkühlen lassen) und beim 
"Pfannenlöten" liegt die Platine auf einer Glasfasermatte. Da soll man 
dann langsam die Platine anheben und woanders abkühlen lassen 
(potentiell etwas zu schnell).

Hier ist mein Plan (später) tatsächlich, einen PWM-Lüfter einzusetzen.
Der über die Aluplatte (bzw. das Becherglas) pustet.
Nur den kann ich vorher nicht benutzen, da dieser zu viel 
Material-Stress erzeugen würde. Mal abgesehen von potentiell 
wegfliegenden SMD-Bauteilen ;-).

Zur Info noch: das Dampfphasenlöten nehme ich weiterhin zu 
wahrscheinlich 90%. Ohne Aluplatte direkt auf dem Ceranfeld (mit 2KW).
Die Aluplatten-Variante will ich nur für das ESP32-Modul nehmen, da 
dieser ein Metallgehäuse mit einem Loch oben hat. Meine Sorge ist, dass 
dort im Gehäuse Galden kondensieren könnte.

von Johannes S. (Gast)


Lesenswert?

bei der Auye Platte kann ich eine Aluplatte auf gleicher Höhe 
danebenstellen, und die Platine auf eine Alufolie legen und rüberziehen.
Ich möchte aber auch lieber mit dem Galden löten und noch einen Lift mit 
Schrittmotor bauen der dann die Platine rauf/runterfahren kann.
Zum Heizen wollte ich noch eine Induktionsplatte testen mit Eisenplatte 
im Glas mit dem Galden, sollte auch gehen. Die einfache Platte die ich 
habe hat aber eine schlechte Regelung, das ist auch Aufwand die zu 
verbessern.

von Andreas J. (ajbln)


Angehängte Dateien:

Lesenswert?

Johannes S. schrieb:
> Ich möchte aber auch lieber mit dem Galden löten und noch einen Lift mit
> Schrittmotor bauen der dann die Platine rauf/runterfahren kann.

Hier mal ein Bild von meiner "Anlage" ;-).

Ach die Aluplatte da nehme ich bei Galden natürlich nicht. Ich hab zwei 
Temperatursensoren im Gestell festgemacht. Der eine hängt im Galden, der 
andere ist auf Platinenhöhe.

Das mit dem Schrittmotor war exakt auch mein erster Plan ;-), hab ich 
irgendwo gelesen, dass das jemand genauso umgesetzt hat.
Nur mit meinem Klappergestell da ist das nicht ganz so einfach.
Für was besseres bräuchte ich eine CNC oder so, die ich nicht habe.
Muss ja irgendwie stabil hochzuziehen sein.
Andere haben ein Kupferrohr um das Glas gewickelt und fluten dass dann 
zum Abkühlen mit Wasser. Nimmt einem aber die Sicht.

Ich hab aber selbst die Erfahrung gemacht, dass ein Lüfter vollkommen 
ausreicht. Dauert länger, klar, aber es geht - hoffe ich - ausreichend 
schnell genug. Also sobald Zieltemperatur (am oberen Sensor) erreicht 
ist, Kochfeld aus und Lüfter an - volle Pulle. Wie schnell das geht habe 
ich aber noch nicht nachgemessen. Werde ich dann sehen. Wenn zu schnell 
=> PID, bei zu langsam bleibe ich (nach Alarm) wohl doch bei meinem 
zweiten Einrastpunkt (der Knick da in der Mitte bleibt am oberen 
Glasrand hängen).

: Bearbeitet durch User
von Andreas J. (ajbln)


Lesenswert?

Ach, und die Platte hat 8mm nicht 10mm. Der Sensor 4mm.
6mm müsste ich mit meinem Bohrständer auch hinbekommen.

von Johannes S. (Gast)


Angehängte Dateien:

Lesenswert?

hier sind meine Platinenhalter. Links die erste Version mit dem 
Streckmetall, das ist aber sehr dicht und es dauert bis der Dampf da 
durch kommt. Das könnte man höher als Dampfsperre einsetzen.
Rechts habe ich einen Ring aus einer Ronde neu gemacht, da möchte ich 
nur einen Rahmen aus Alu Winkelprofil drauflegen.
Aufgehängt an dünnem Stahlseil (Angelschnur), die ist sehr flexibel und 
das lässt sich gut damit hochziehen.
Schön das hier auch mal jemand in diese Richtung weiterforscht :)

von Andreas J. (ajbln)


Lesenswert?

Das mit der Angelschnur behagt mir nicht so ganz.
Man könnte natürlich wie bei einem SLA-Drucker eine Plattform 
hochfahren. Das wäre dann die Luxusvariante ;-)
Einen 3D-Drucker zum Ausschlachten hätte ich sogar da.
Aber Schritt für Schritt, erst mal teste ich die Lüfter-Variante... :-)

von MaWin (Gast)


Lesenswert?

War da nicht was mit Galden was kein Alu mag.

Und ein teurer Klimakiller war er auch  bei der Konstruktion hat man ja 
jedesmal die Hälfte verloren.

Eine sehr hohe Wanne, ben gekühlt, Galden heizen, der Dampf bleibt 
unten, und dann die Platine je nach Wärmeprofil über einen Schrittmotor 
einfahren und rausheben, bei geschlossenem Kochtopfdeckel.

von Andreas J. (ajbln)


Lesenswert?

MaWin schrieb:
> War da nicht was mit Galden was kein Alu mag.

Quelle? Hab ich noch nichts von gehört.

MaWin schrieb:
> Und ein teurer Klimakiller war er auch  bei der Konstruktion hat man ja
> jedesmal die Hälfte verloren.

Also oben habe ich einen "Aluhut" (nach innen gewölbt) und mein Verlust 
beträgt nach ca. 30 Platinen ca. 30%. Und das meiste - vermute ich - 
geht eher durch Rückstände auf der Platine selbst verloren. Man müsste 
sie eigentlich schräg stellen in der Kondensationsphase. Kann sein, dass 
ich da auch etwas nach oben verliere, aber gering, hoffe ich. Ein 
richtiger (ggf. sogar gekühlter) Deckel wäre definitiv eine 
Verbesserung, keine Frage.

von Johannes S. (Gast)


Lesenswert?

Zur Klimafrage habe ich bei Solvay immer nur gefunden das Galden kein 
FCKW ist. In den 80er Jahren wurde auf die Dampfphase ein FCKW Deckel 
gesetzt um die Galdenverluste zu minimieren. Diese Anlage gibt es aber 
seit dem FCKW Verbot nicht mehr. Im Medium dürfen keine Brom- und 
Chlorverbindungen sein, das ist bei Galden auch nicht drin.
Bei Überhitzung >100°K über Siedpunkt entstehen Crackprodukte, die sind 
giftig. Deshalb müssen Heizelemente immer mit Galden überdeckt sein 
damit die nicht zu heiß werden können.
Für Großserien ist das einfach zu teuer, und für kleine Sachen ist die 
IR Konvekttion auch nicht einfach.
Bei meinen ersten Versuchen sind 1,2 g verloren gegangen, auch noch ohne 
Kühler. Für eine Kühlung habe ich schon biegsames Kupferrohr besorgt, 
eine Kühlschlange im Glas wäre da sicher sehr effizient, dann passen 
aber auch nur noch kleine Platinen da rein.

von Andreas J. (ajbln)


Angehängte Dateien:

Lesenswert?

Reflow-Profil:

"Ramp-up", 150°C, 90s|
"Preheating", 200°C, 120s|
"Reflow", 240°C, 60s|
"Cooling", 0°C, 60s

Test: Alu8mm, PID (Kp = 0.3, Ki = 0.2, Kd = 0.1), ohne Lüfter

Die Ausreißer bei der Temperatur sind noch Fehler im Programm. Ich muss 
noch die Interrupts sperren, da mir MQTT (höhere Prio) die SPI-Abfragen 
des Temperatursensors unterbricht und dann Müll rauskommt.
Vielleicht kann ich auch direkt die SPI-Methoden vom ESP32 nehmen, 
probiere ich aus.

Problem 1) Overshoot(max): ca. 10°C (konnte ich noch etwas drücken)

Problem 2) Extreme Verzögerung (besonders am Anfang)

Problem 3) Abkühlungsrate extrem niedrig

Die Abkühlungsrate ignoriere ich erst mal.
Erst mal kommen Optimierungen per Software...

von Andreas J. (ajbln)


Lesenswert?

Johannes S. schrieb:
> Deshalb müssen Heizelemente immer mit Galden überdeckt sein
> damit die nicht zu heiß werden können.

Die Heizspiralen direkt in das Galden einzubauen würde ich auch nicht 
machen.
So ein Cerankochfeld kostet 20€ oder so und ist sicher.
Ich hab im Kochfeld ein SSR und ein Mininetzteil 3,3V eingebaut.
Das Silikonkabel da rechts hat 3 Leitungen (Gnd, +3.3V und SSR- für mein 
Mosfet, SSR+ ist intern mit 3.3V verbunden).

Mein Temperaturregler im Galden regelt rechtzeitig ab.
Die kritische Temperatur von 290°C erreiche ich also nie.

von c-hater (Gast)


Lesenswert?

Andreas J. schrieb:

> Der zweite, dass PID ein Overshoot
> nur "nachträglich" behandelt. Wenn es schon zu spät ist.
> Und eben nicht vorausschauend behandeln kann.

Unsinn. Genau dafür gibt es die differentielle Komponente.

Deine Probleme ist sind nur:

1) du hast keinen Aktor mit proportionalem Verhalten
2) du hast eigentlich sogar zwei völlig verschiedene Aktoren (nämlich: 
eine Heizung mit hohem Energieeintrag und eine "Kühlung", die pro 
Zeiteinheit wesentlich weniger Energie aus dem System ablassen kann, als 
die Heizung in derselben Zeit zuführen kann.

Das sind die tatsächlichen Probleme. Die sich aber mit einer 
modifizierten PID-Regelung durchaus lösen lassen. Im Wesentlichen muss 
sie nur insofern modifiziert werden, als dass es zwei Sätze von 
Komponenten-Faktoren gibt. Der eine gilt, wenn SOLL>IST, der andere, 
wenn SOLL<IST.

Und natürlich müssen die Faktoren mit Rücksicht auf die 
Zweipunkt-Eigenschaften der Aktoren gewählt werden. Die entsprechen 
einfach mal nur einer extremen Verstärkung im Regelkreis (eigentlich 
natürlich zweier, verschiedener). Damit liegt die Lösung natürlich so 
klar auf der Hand, wie ein Furz in der Sonne: die Faktoren müssen sehr 
klein gewählt werden, besonders für den Fall SOLL>IST.

Die Faktoren müssen so klein sein, dass die numerisches Auflösung zum 
Problem wird. Lösbar, wenn man weiß, was man tut.

von Pandur S. (jetztnicht)


Lesenswert?

Aha, sind wir schon beim Fluessigkeit Heizen. Dann braucht man sowieso 
keinen Temperaturfuehler zu Regeln. Die Temperatur geht bis zum 
Siedepunkt, dort will man die Fluessigkeit haben. Heisser geht eh nicht. 
Ich wuerd einfach die Heizleistug vorgeben. Mit zunehmender Heisleistung 
steigt der Pegel an Dampf im Topf.
Den Poster sollte man verprugeln, 30% Verlust nach 30 Platinen ist ein 
ganz, ganz uebles Ozonschwein. Man wuerde maximale Anstrengungen zum 
Vermeiden von Verlust erwarten. Kommerzielle Anlagen haben einen 
Kuehlkragen oben an der Anlage, und allenfalls sogar eine Gasabsaugung, 
welche auch durch einen Kuehler geht. Wir haben in einer kommerziellen 
Anlage wirklich nur minimalste Verluste.
Wegen solchen ueblen Ozonschweinen wie dem Poster hier werden diese 
Stoffe verboten...

Meine Selbstbauanlage verwendet ein Array 5W Keramikwiderstaende, welche 
ich mit bis zu 30W belaste. Insgesammt stelle ich meine Anlage auf 600W 
zum Aufheizen ein. Ich habe auch einen wassergekuehltern Kragen oben am 
Topf. Der Deckel ist eigentlich immer geschlossen.

: Bearbeitet durch User
von Andreas J. (ajbln)


Angehängte Dateien:

Lesenswert?

c-hater schrieb:
> Unsinn. Genau dafür gibt es die differentielle Komponente.

Du hast Recht. Gerade nachgelesen und versucht, im Code 
nachzuvollziehen. Und ja, der D-Anteil wird bei konstantem SOLL negativ. 
Dummerweise steigt bei mir der SOLL-Wert kontinuierlich, daher ist es 
mir nicht aufgefallen. Könnte trotzdem funktionieren, wenn man die 
Konstanten besser wählt vielleicht, keine Ahnung.

Kp, Ki und Kd habe ich aus irgendeinem Beispiel genommen.
Tatsächlich muss man die Werte aber an seine Bedingungen anpassen.
Und das ist irgendwie schwer ohne Simulation, zumindest bräuchte man 
sowas für die Ziegler/Nichols Faustformel, wenn ich das richtig 
verstanden habe.

Machen das 3D-Drucker beim PID-Tuning irgendwie automatisch?
Weiß da jemand was drüber? Vielleicht gucke ich mir mal die 
Marlin-Sourcen an bei Gelegenheit...

Ich gehe jedenfalls gerade weg von der PID und verfolge einen simpleren 
Ansatz (KISS wie man so schön sagt).
So wie auf dem Bild. Rot=Heizung an, sonst aus, Blau=Lüfter an.
Also im Prinzip so, wie ich es vorher schon beschrieben habe. Ich nutze 
bei einem Reflowprofil die Tatsache aus, dass ich sowieso mehrere Zonen 
habe, die die Temperatur in unterschiedlichen Schritten aber immer 
ansteigen lassen. Ich brauche also an keiner Stelle eine "Gegenregelung" 
(erst am Ende mit dem Lüfter).
In der "Ramp up"-Phase schalte ich das SSR an, bis ich die SOLL-Temp 
erreicht habe. Danach bestimme ich den Overshoot. Und sobald (nach einer 
Mittelwertsbestimmung) die Temp wieder fällt, schalte ich das SSR für 
eine bestimmte Zeit lang t(x) ein. Die Zeit berechne ich aus der 
Steigung der ersten Linie. So halte ich die Temp in der 
"Preheating"-Zone. In der "Reflow"-Zone gehe ich auf SOLL-Overshoot. Und 
halte hier ebenfalls die Temp  mit t(x). In der "Cooling"-Phase schalte 
ich SSR aus und den Lüfter ein. Den Lüfter dann vielleicht über PID, mal 
sehen.
t(x) zu bestimmen ist das einzige, was ein bisschen tricky ist. Für die 
Alu 8mm-Variante ist der Wert eh 0...

: Bearbeitet durch User
von regler (Gast)


Lesenswert?

Nun ist es doch ein obersimpler Zwei-Punkt-Regler geworden.
Bei dem Stellglied gehts ja fast nicht anders.

von Johannes S. (Gast)


Lesenswert?

das wird zum Löten dicke reichen.
Der PID braucht natürlich passende Werte für die jeweiligen Anteile, 
auch das Autotuning im Marlin braucht halbwegs passende Startwerte, 
eventuell macht man das 2 oder 3 mal wenn die Startwerte zu schlecht 
waren. Über den GCode gibt man eine max Temperatur vor und eine Anzahl 
Zyklen zum Lernen, man müsste sogar direkt Marlin verwenden können um 
das zu Testen.

von Nico T. (wurstnase)


Lesenswert?

In der Repetier-Firmware[1] gibt es einen Regler der sehr gut mit 
Totzeit umgehen kann. Super simpel und einfach einzustellen über die 
Sprungantwort und ablesen.

[1] https://www.repetier.com/dead-time-control/

von Andreas J. (ajbln)


Lesenswert?

Nico T. schrieb:
> In der Repetier-Firmware[1] gibt es einen Regler der sehr gut mit
> Totzeit umgehen kann...

Danke Dir! Die Totzeit zu berechnen versuche ich gerade per Software zu 
lösen.
Wenn ich mir in der RampUp-Zone (s.o.) bis zum Erreichen der 
Zieltemperatur R = max(temp((IST(aktuell)-IST(davor))/T) speichere, 
müsste ich doch die maximale Steigung bekommen (sorry, wenn ich hier 
nicht die korrekten Fachausdrücke verwende, bin nur Informatiker, kein 
Mathematiker ;-)).
Also quasi die Steigerung der Linie im Totzeitdiagram von Nico's Link 
[1].
Dann müsste ich mit R/2 doch ziemlich gut (nur näherungsweise natürlich) 
den Totzeitpunkt treffen, oder?
Die horizontale Linie ist ja 0.

: Bearbeitet durch User
von Einer (Gast)


Lesenswert?

Andreas J. schrieb:
> Dann müsste ich mit R/2 doch ziemlich gut (nur näherungsweise natürlich)
> den Totzeitpunkt treffen, oder?

Es gibt keinen "Totzeitpunkt". Die Totzeit ist eine Verzögerung. Die 
Verzögerung, die es benötigt wenn das Stellglied verändert wird 
(Heizleistung), bis der Prozesswert (Temperatur) anfängt sich zu 
verändern.

Dieser "Anfang" der Veränderung ist manchmal nicht so gut zu sehen, da 
behilft man sich eben mit einer Schätzung anhand einer Aufzeichnung des 
Stelllwerts und Prozesswert gegen die Zeit.

Bei dem Beispiel im Link wird die Totzeit mit der Tangente in der Regel 
zu groß geschätzt. Macht aber in diesem Zusammenhang nichts, da man 
besser die Totzeit überschätzen sollte als unterschätzen.

Mit der Totzeit und der Steigung der Temperatur (überwiegend 
integrierende Strecke), kann man ein PID-Regler wunderbar einstellen.

Um ihn schneller zu bekommen, muss man aber verstehen, dass Sollwert 
anfahren und Sollwert halten zwei Paar Stiefel sind. Wenn man Zeit hat, 
kann man einen PID-Regler auch zur Sollwertanfahrt benutzten.

Aber bei viele Temperaturregelungsaufgaben ist die Totzeit klein im 
Vergleich zur benötigten Aufheizzeit. Da kann man dann intelligenter 
Einschalten:

In der ersten Phase wird die Heizung zu 100% eingeschaltet. Mit Hilfe 
der Totzeit wird der Prozesswert in die Zukunft extrapoliert. Also das 
Prozess-Delta einer vergangen Totzeit auf den aktuellen Prozesswert 
addiert. So schätzt man den Prozesswert in der Zukunft in einer 
Totzeit-Einheit. Sobald man (mit etwas Sicherheitsabstand) den Sollwert 
in der Zukunft erreichen würde, wechselt man in Phase 2.

In Phase 2 legt man für die Dauer einer Totzeit einen festen Stellwert 
an den Prozess an, und zwar den wo man für den gewünschten Prozesswert 
erwartet. Den hat man vorher einfach ausprobiert, oder lernt ihn von der 
jeweils letzten, stabilen Regelphase oder rechnet ihn mit einem Modell 
aus. Nach Ablauf einer Totzeit kommt Phase 3.

In Phase 3 schaltet man endlich den PID-Regler auf, der den Prozesswert 
konstant hält. Dieser PID-Regler ist auf das zeitliche Verhalten der 
Strecke inkl. Totzeit und dominierender Zeitkonstante optimiert.

Wenn man bekannte Störer hat, z.B. einen Lüfter den man einschaltet, 
lässt man den natürlich per Feedforward auch in den Stellwert 
einfließen, gerade wenn man merklich Totzeiten hat die man gerne 
ausregeln möchte.

von B e r n d W. (smiley46)


Lesenswert?

Montier den Temperaturfühler möglichst dicht an der Heizung. Die Totzeit 
wird dadurch nahezu eliminiert. Eine reine PT2-Strecke läßt sich dann 
leicht regeln mit minimalem Überschwingen.

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.