Abstimmung einer PID-Schleife für ein Heizelement

Ich habe eine Steuerung für einen Lötkolben (speziell JBC C245 / C210) gebaut, die dem Bügeleisen bis zu 60 W Leistung zuführen kann. Ich habe einen Temperaturregelkreis, der mit 10 Hz läuft, den ich versuche, richtig abzustimmen. Daher loop_duration = 0.1 s(unten verwendet). Innerhalb der Temperaturschleife gibt es eine Stromregelschleife, die 20 Mal pro Temperaturschleifen-Iteration läuft. Diese Stromschleife soll nicht Gegenstand meiner Frage sein.

Bisher verwende ich nur P- und I-Anteil, mein D-Anteil ist auf Null gesetzt. Der Temperaturregelkreis sieht so aus und erzeugt einen Ausgangswert für den Heizstrom:

void temperatureControlLoop(){
    // Calculation of new temperature error
    temp_error = temp_set - temp_is;

    // Only integrate error, if output current is within limits 
    if ((current_set < current_max) && (current_set >= 0))
    {
        // anti windup protection and integration of temperature error
        temp_integrated_error += temp_error * loop_duration;
    }

    // calculate change in temperature error
    diff_temp_error = temp_error - temp_error_last;
    
    // Control equation, calculates new output current value
    current_set = D * diff_temp_error + P * temp_error + I * temp_integrated_error;

    // remember last temperature error for D-component
    temp_error_last = temp_error ;

    // Clamp to available power supply current
    if (current_set > current_max)
    {
        current_set = current_max;
    }
    else if (current_set < 0)
    {
        current_set = 0;
    }
}

Es funktioniert soweit gut, aber ich würde es gerne weiter optimieren. Anbei zwei Messbilder: oben jeweils die Temperatur (in °C), unten die Heizleistung (in W). Bitte achten Sie nicht auf die Zeitskala auf der Leistungskurve, sie ist falsch. Die Zeitskala der Temperatur ist zuverlässig, wobei ein Wert von 10 1 Sekunde entspricht.

Das erste Bild zeigt die Bügeleisentemperatur von kalt bis zum Zielwert (350 °C). Ich habe das Gefühl, es könnte länger mit voller Leistung heizen. Wird die Heizungsleistung abgeschaltet, gibt es keinen Temperaturanstieg mehr, daher denke ich, dass es keine nennenswerte Verzögerung gibt. Es sollte möglich sein, mit voller Leistung nahe an die Zieltemperatur zu heizen und dann einfach zu stoppen.

Aufwärmen durch Kälte

Das zweite Bild zeigt die Reaktion auf Störungen. Bei t=100 kontaktiere ich eine Kupferebene und entferne das Eisen bei t=190 wieder. Ich denke, dass die Reaktion viel schneller sein könnte, da ich viel Heizleistung übrig habe. Außerdem ist das Überschwingen nach dem Entfernen der Störung zu groß.

Meine Frage ist: Wie kann ich die Parameter optimieren? Soll ich die Sprungantwort aufzeichnen und offline optimieren oder gibt es eine geeignete praktische Tuning-Methode? Ich möchte einen minimalen Temperaturabfall haben, wenn eine Störung auftritt. Das Überschwingen ist nicht so kritisch.

Reaktion der Heizung, wenn ich bei t=100 eine große Kupferfläche berühre und bei t=190 das Eisen entferne

EDIT: Hier ist die Sprungantwort auf 1/3 oder maximale Heizleistung (20 W). Sie können den Heizleistungsschritt und die dadurch ansteigende Temperatur sehen. Ich habe die Zeitskala repariert, die jetzt die tatsächlichen Sekunden korrekt anzeigt. Ich sehe keine merkliche Verzögerung der Temperaturänderung bei der Anwendung der Heizleistung.

Dies ist die vollständige Sprungantwort, die bei 380 ° C abschneidet, da dies eine Sicherheitsgrenze in meinem Design ist

Sprungantwort

Dies wird in einen kleineren Zeitabschnitt hineingezoomt

Gezoomte Sprungantwort

Und noch mehr Zoom.

Mehr Zoom

Temperatur (in °C) wird oben angezeigt - ich sehe es nicht und wenn Ihre Diagramme falsch sind, korrigieren Sie sie bitte. Niemand arbeitet gerne mit schlechten Daten.
Ich bin mir nicht sicher, was Sie meinen, es gibt zwei Diagramme pro Bild: Das obere ist immer die Temperatur.
OK, ich folge dir, ich dachte, du beschreibst die Achsen. Die Achsen müssen Einheiten haben. Sparen Sie nicht daran, weil es eine unklare Frage klarer macht.
Ja das stimmt. Ich werde es in meiner Protokollierungssoftware ändern, bevor ich neue Bilder poste.
Ohne Ihren PID-Algorithmus zu kennen, kann ich nichts sagen, schließlich ist die Reaktion nicht so schlecht. Ich habe das Gefühl, dass Ihr I-Teil einfach aufhört zu integrieren und kein Tracking-Feedback (Astrom, Wittenmark) hat, daher hinterlässt es einen Offset / Drift. das wird nach ein paar Überschwingzyklen eliminiert. Sehen Sie, dass Sie ein sich irgendwie wiederholendes Muster haben, das ein Artefakt der Sättigung ist.
Ok, ich denke, ich muss Informationen hinzufügen. Ich werde später nützlichere Grafiken erstellen, wie z. B. eine Sprungantwort für eine feste Leistung. Grundsätzlich möchte ich wissen, wie man generell vorgeht, um eine PID für ein System mit geringer Verzögerung einzustellen. Das war nur Versuch und Irrtum.
@MarkoBuršič Ich habe den Code für die PID-Schleife hinzugefügt, falls das hilft.
Wenn Sie schnell auf Änderungen reagieren möchten, benötigen Sie einen „D“-Term, andernfalls erhalten Sie einen proportionalen Abfall, bis der Integrator hochfährt.
Lesen Sie dies: lucris.lub.lu.se/ws/files/6377599/8627775.pdf Sie können die D-Komponente verbessern, indem Sie eine Verzögerung 1. Ordnung hinzufügen und einen Tracking-Integrator implementieren, der sich nicht so sehr von Ihrem Algorithmus unterscheidet.
@MarkoBuršič Danke, das sieht hilfreich aus! Ich werde versuchen, die Methode zu übernehmen. Ich habe jetzt auch Schrittantworten hinzugefügt.
Eine Sache, auf die Sie achten sollten, ist "Integrator-Windup", dies kann zu einem starken Überschwingen führen. Kommerzielle PID-Systeme haben eine Vielzahl von Methoden, um dies zu bekämpfen, z . Obwohl Ihre Daten ziemlich gut aussehen, gab es einige grobe Faustregeln, wie das Messen der Systemverzögerungszeit und das Setzen von D-Term auf 1/6 davon und I-Term auf 6x (oder so ähnlich, seit Jahrzehnten, seit ich damit gearbeitet habe). dieses Zeug.

Antworten (1)

Ich denke, der Grund, warum noch niemand darauf geantwortet hat, ist, dass viele von uns von Zeit zu Zeit mit PIDs herumspielen. Aber das ist es auch schon, wir spielen mit ihnen, bis sie für uns funktionieren, und geraten nicht in eine rigorose, mathematische Ableitung der einzelnen PID-Koeffizienten. Die richtige Antwort auf Ihre Frage, was die optimalen Koeffizienten für Ihr System sind, ist also nicht möglich, ohne direkten Zugriff auf Ihre spezifische Hardware zu haben, und was die effizienteste Methode ist, um sie selbst zu optimieren, indem Sie die Systemreaktion auf mehrere Diagnosen analysieren Eingabemuster wären, Sie auf einen fortgeschrittenen Text zu verweisen oder einen Kurs zu belegen, der sich auf PID-Regler und -Tuning konzentriert.

Aber das wird Ihnen wahrscheinlich nicht viel helfen, also werde ich eine vereinfachte Technik demonstrieren, die fast genauso gut sein sollte. Es ist wichtig, sich daran zu erinnern, dass jedes System, sei es ein Heizungsregler, ein Motordrehzahlregler, eine Aufzugssteuerung, ein zentrales Heiz- und Kühlsystem oder eines der vielen anderen PID-gesteuerten Systeme, jedes einzelne einzigartige Eigenschaften hat, die was verändern Koeffizienten sind am besten. Die besten Koeffizienten auf einem System zu entwickeln und sie auf ein anderes, scheinbar identisches System zu übertragen, wird dort wahrscheinlich nicht optimal sein.

Da ich keinen Zugriff auf Ihre Hardware habe, habe ich Ihre Beschreibung und die von Ihnen bereitgestellten Grafiken verwendet, um ein Tabellenkalkulationsmodell des Lötkolbens zu erstellen, um das Testen von Koeffizienten zu üben. Es ist keine exakte Übereinstimmung mit Ihrem Lötkolben, es kann nicht sein. Aber es sollte nah genug sein, um informativ zu sein. Es hat den Vorteil, dass jeder Koeffiziententest viel schneller als in Echtzeit abläuft und nach jedem Durchlauf perfekt auf Null zurückgesetzt wird. Aber wenn Sie die Ergebnisse zurück auf die Hardware bringen, müssen Sie akzeptieren, dass sie in der neuen Umgebung noch eine weitere Optimierung benötigen.

Ich gehe davon aus, dass Ihr Kommentar zu 10 Schritten pro Sekunde bedeutet, dass die X-Achse für jedes Diagramm 1/10 Sekunde für jeden Tick beträgt, sodass es ungefähr 16 Sekunden dauert, bis die volle Temperatur erreicht ist. Wenn ich mir die Diagramme ansehe, kann ich sehen, dass sich bei einer Leistungsgrenze von 60 Watt die Wärmeentwicklung mit einer Rate von 0,48 Grad C pro Sekunde pro Watt entwickelt. Sobald die Gleichgewichtstemperatur erreicht ist, werden nur 9 Watt benötigt, um die Temperatur zu halten. Die Sprungfunktion des Stromeingangs zeigt eine Verzögerung von etwa 200 ms zwischen der ansteigenden Flanke der Eingangsleistung und der Änderung der gemessenen Eisentemperatur.

Die Verzögerung von 200 ms ist bei dieser Aufgabe sehr wichtig. Das bedeutet, dass selbst bei einem geraden, proportionalen Ansprechverhalten Schwingungen auftreten können, wenn es zu hoch aufgedreht wird. Normalerweise erfordert dies einen zeitvariablen Koeffizienten. Das bedeutet auch, dass bei der Simulation einer Belastung des Bügeleisens, z. B. beim Berühren eines kalten Abschnitts einer Leiterplatte, der anfängliche Temperaturabfall unvermeidlich ist, denn egal, welche Koeffizienten Sie verwenden, oder selbst wenn es sofort auf die volle Leistung von 60 Watt geht , für 200 ms, die es dauert, bis eine Änderung der Heizleistung die gemessene Spitzentemperatur beeinflusst. Die Wahl eines guten Koeffizienten kann den Abfall leicht verringern und die Zeit verkürzen, die benötigt wird, um auf die Temperatur zurückzukehren, aber egal wie gut Sie ihn nicht vollständig eliminieren können. Die meisten realen Systeme haben eine gewisse Phasenverzögerung, sodass sie ein ähnliches Verhalten zeigen.

Für meine Simulation habe ich sehr einfache Einheiten und Skalierungsfaktoren von 1 verwendet. Der Ausgabewert ist in Grad C angegeben und folgt dem Diagramm des OP, das bei 45 ° C beginnt. Der P-Koeffizient ist Watt/Grad C mit einem Skalierungsfaktor von 1 (1 Grad C Unterschied multipliziert mit einem P-Wert von 1 ergibt 1 Watt Heizleistung). Das Integral für den I-Term ist Grad C-Sekunden und ist die Summe aller vorherigen Differenzen multipliziert mit Delta T, wobei die Einheiten des I-Koeffizienten Watt/Grad C- Sekunden sind. Die Differenz ist neue Temperatur minus alte geteilt durch Delta T, wobei die Einheiten Watt sindSekunden/Grad C. Ich habe ein Delta T von 0,02 Sekunden verwendet, um mehrere Zeitschritte innerhalb des Temperaturregelkreises von 0,1 Sekunden pro Schritt zu haben, auf den er sich bezieht. Um das Windup des Integrators aufgrund des Kaltstarts zu minimieren, habe ich auch verhindert, dass die Integration erfolgt, wenn der PID-Ausgang die maximale Ausgangsleistung überschreitet. Die Endwerte von P = 8, I = 18 D = -1,4 sind wahrscheinlich nicht korrekt für die Steuergleichung des OP, aber möglicherweise kein schlechter Ausgangspunkt.

60 Watt Bügeleisenheizgeschwindigkeit, P, PI, PID

Das obige Diagramm zeigt die Reaktion des von mir erstellten Simulationsmodells auf eine optimierte Nur-P-Regelung, eine P-plus-I-Regelung und eine P-, I- und D-Regelung. Beachten Sie, dass selbst bei vollständiger PID-Regelung die Zeit bis zum ersten Erreichen von 355 °C innerhalb einer Sekunde der Zeit liegt, die ein P benötigt, um den Sollwert zu überschreiten Tiefe des anfänglichen Temperaturabfalls bei Belastung und verringert die Zeit, die benötigt wird, um alle Schwingungen zu unterdrücken.

Die blaue Linie ist unter der grünen kaum zu erkennen. Es zeigt die Simulation nur mit dem proportionalen Term, so hoch wie möglich aufgedreht mit nur minimalen Schwingungen. Die rote Linie zeigt das Simulationsäquivalent der beiden Terme P- und I-Regler. Die grüne Linie über allen anderen zeigt die vollständige PID mit drei Begriffen. Die letzte Hälfte des Diagramms enthält eine rechteckige Funktion. Dies ist ein simulierter Wärmeverlust durch das Platzieren der Spitze gegen eine kalte Spur auf einer Leiterplatte. Bei 15 Watt abgeführter Wärme zusammen mit den 9 Watt Luftkühlungslast ergeben sich insgesamt 24 Watt, fast die Hälfte eines Heizstroms mit voller Leistung, so dass dies eine ziemlich starke thermische Belastung simulieren sollte. In dieser Grafik sind kaum Unterschiede zwischen den drei Kontrollebenen zu erkennen. In dieser Größenordnung ist sogar die einfache P-Steuerung ziemlich gut.

Geben Sie hier die Bildbeschreibung ein

Um die Unterschiede vergrößert zu sehen und den Vergleich verschiedener Sätze von Koeffizientenwerten zu erleichtern, ist oben eine Nahaufnahme des Wärmebelastungsbereichs dargestellt. Jetzt können wir sehen, dass sich die blaue Linie etwa ein Grad unter dem gewünschten Sollwert einpendelt. Dies sind die inhärenten Einschränkungen einer rein proportionalen Steuerung, sie stabilisiert sich immer kurz vor dem befohlenen Sollwert. Wir können auch sehen, dass es den stärksten Abfall hat, wenn die Last aufgebracht wird, und auch einen großen Rücklauf, wenn die Last entfernt wird, und schwingt, sich aber nach Beginn der Last und wieder nach Ende der Last wieder auf 354 einpendelt. Die P&I-Kurve in Rot hat sich auf den gewünschten Sollwert eingependelt, da der integrierende Term einen ausreichend großen Integrationswert bildet, um den vollen 355C-Befehl bereitzustellen, wenn der proportionale Term auf Null gegangen ist. Die Tiefe des anfänglichen Temperaturabfalls beginnt ein Grad höher, macht aber etwa so viel Abfall wie nur der P-Term. Dies liegt daran, dass der I-Term nicht schnell reagiert und die Korrektur alle vom P-Term kommt und dann zurück zum I-Term übergeht.

In der grünen Linie sehen wir das gleiche Einschwingen auf den Sollwert, aber der Ableitungsterm hilft, den plötzlichen Temperaturabfall zu korrigieren, sodass die volle PID einen etwas kleineren Abfall und eine schnellere Erholungszeit hat. In dieser Simulation wird die Tiefe des Abfalls um etwa 1/2 Grad verringert, und es sieht so aus, als wäre auch das Integral zwischen dem Abfall und der Sollwertlinie kleiner. Aber es braucht den hochkonzentrierten Blick dieser Grafik, um die Unterschiede überhaupt klar zu erkennen. Fast genauso gut schnitt der P&I Controller ab.

Die Technik, die ich für jede der drei Kontrollfunktionen verwendete, bestand darin, „anzupassen, erneut zu testen und zu vergleichen, zu wiederholen“. Mit der Nur-P-Steuerungsfunktion war es einfach, den Koeffizientenwert nach oben und unten laufen zu lassen und mit jedem neuen Koeffizientenwert erneut zu laufen. Die Entscheidung, welcher Wert das bessere Ergebnis lieferte, war schwieriger, da viele Merkmale zu bewerten waren, von denen sich einige im Gegensatz zu anderen veränderten. Wie nahe der Einschwingpunkt dem gewünschten Wert kam, wie lange bis der Ausgang den gewünschten Wert zum ersten Mal kreuzte, wie hoch das Überschwingen, falls vorhanden, wie lange, um die Schwingungen auszugleichen. Um den besten Wert auszuwählen, musste also abgewogen werden, welche Eigenschaften schlechter und welche besser wurden. In den beiden anderen Formen findet der gleiche Ausgleich der Faktoren statt. Erhöhen Sie normalerweise den P-Koeffizienten, bis er schwingt. dann reduzieren, bis die Schwingungen schnell abklingen. Es ist nicht ungewöhnlich, dass der P-Koeffizient weiter reduziert werden muss, wenn die I- und D-Terme hinzugefügt werden.

Da das gleichzeitige Anpassen von zwei Koeffizienten im Grunde eine Teilmenge von drei ist, werde ich direkt mit der vollständigen PID fortfahren. Es ist schwierig, Änderungen in drei Koeffizienten gleichzeitig zu verfolgen, insbesondere wenn die Testergebnisse aus mehreren Werten bestehen, von denen sich einige nach einer Änderung verbessern, während andere sich verschlechtern. Um die Aufgabe zu vereinfachen, verändere ich jeweils nur einen Koeffizienten und suche ein lokales Minimum, einen Wert, bei dem das Gleichgewicht der Ergebniswerte am besten erscheint, und durchlaufe dann die anderen beiden Koeffizienten. Falls erwünscht, kann der Vorgang ein zweites Mal wiederholt werden, da die Koeffizienten etwas voneinander abhängig sind. Der beste Wert für jeden Koeffizienten wird gefunden, wenn die anderen beiden ebenfalls nahe an ihren besten Werten liegen.

Da ich vor dem Hinzufügen des D-Terms einen guten Koeffizientensatz für das P&I-Formular gefunden hatte, begann ich mit der Anpassung des D-Koeffizienten. Um deutlich zu machen, welche Änderungen durch die Änderung des D-Terms verursacht werden, beginnen Sie mit einem sehr kleinen Wert für D, möglicherweise 1/100 der Größe der P- oder I-Koeffizienten, und wiederholen Sie den Test. Dies hat wahrscheinlich die gleichen Ergebnisse wie kein D-Term und ermöglicht Ihnen, den D-Term schrittweise einzuführen, indem Sie den Koeffizientenwert um Faktoren von 2, 5 oder sogar 10 erhöhen, je nachdem, wie viel oder wie wenig Effekt er bisher gezeigt hat und wie lange Sie warten müssen, bis die nächste Ergebnisrunde erscheint. Für lange Testzyklen oder geringe sichtbare Auswirkungen multiplizieren Sie den D-Koeffizienten mit 10, für kurze Testzyklen oder erhebliche Änderungen erhöhen Sie D nur um den Faktor 2. Sobald die Ergebnisse mit zunehmendem D schlechter werden, versuchen Sie es mit einem Wert, der in der Mitte zwischen den beiden vorherigen Werten liegt. Außerdem ist er in einigen Ableitungen des Ableitungsterms im Vergleich zu den anderen beiden negativ. Wenn also die Ergebnisse für immer kleinere Werte von D besser aussehen, versuchen Sie, das Vorzeichen von Plus auf Minus zu ändern. In diesem Beispiel subtrahiert meine PID-Gleichung den D-Term von den P- und I-Termen, und ich habe einen negativen D-Koeffizienten erhalten, was dem Hinzufügen eines positiven Koeffizienten entspricht, aber die Möglichkeit deutlich macht, dass D besser negativ sein könnte.

Sobald Sie den optimalen D-Wert mit einem kleinen Wert für einen Teil der Ergebnisse und einem zweiten zu großen Wert für den anderen Teil der Ergebnisse eingeklammert haben, versuchen Sie es mit einem Wert in der Mitte zwischen den beiden Enden. Es ist hilfreich, alle Ergebniswerte für jeden D-Koeffizienten aufzuschreiben, den Sie versuchen, um besser zu verfolgen, welche Werte Sie ausprobiert haben und was die Ergebnisse waren. Entscheiden Sie, ob der letzte Wert immer noch zu groß ist. Ersetzen Sie in diesem Fall den alten zu großen Wert und versuchen Sie es in der Mitte, oder wenn er zu klein ist, ersetzen Sie den vorherigen zu kleinen Wert und versuchen Sie es erneut. Hören Sie auf, wenn Sie nicht mehr erkennen können, ob der letzte Wert zu groß oder zu klein ist. Behalten Sie diesen Wert für den Koeffizienten von D bei und machen Sie dasselbe für den P-Term und dann den I-Term. Führen Sie alle drei ein zweites Mal durch, wenn Sie mit den Ergebniswerten noch nicht zufrieden sind.

Auf jeder Stufe der Koeffizientenverfeinerung können Sie eine Änderung vornehmen, die bewirkt, dass die Ausgangswerte ungedämpft schwingen. Reduzieren Sie zuerst den soeben geänderten Koeffizienten. Wenn es immer noch schwingt, versuchen Sie, den P-Term-Koeffizienten um 10 % zu reduzieren, und versuchen Sie es erneut. Wenn es nach dem Reduzieren von P um 50 % immer noch nicht ausreicht, versuchen Sie, den I-Term zu reduzieren.

In dieser Antwort habe ich alle Grafiken und Zahlen auf einer Simulation eines physikalischen Systems basiert. Es ist selten, dass eine Simulation das physikalische System gut genug dupliziert, um die Koeffizienten zu kopieren, aber es beschleunigt den Prozess und kann einige Erkenntnisse liefern, die sich übertragen lassen. Beispielsweise war in diesem System der anfängliche Temperaturabfall beim Anlegen der Last unter allen drei Steuergleichungen nahezu derselbe, was darauf hinweist, dass der Abfall eine Eigenschaft des Systems und kein Versagen der Steuerkreisgleichung ist. Tatsächlich scheint Ihr letztes Diagrammpaar einen plötzlichen Wärmeverlust (plötzliche Last) zu zeigen, der dann bei sinkender Temperatur freigegeben wird, bevor er sich wieder stabilisiert, und dann nach oben schießt, wenn der Wärmeverlust aufhört, bevor er sich wieder stabilisiert, und darunter die Stromspitzen vor dem Die Temperatur steigt wieder an, wie es bei einer Verzögerung von 200 ms zu erwarten wäre. Aber man kann auch davon ausgehen, dass jedes reale System noch komplizierter sein wird als die Simulation(en), die verwendet werden, um die Parameter der Steuergleichung aufzustellen. Und dass an der realen Hardware immer noch eine letzte Feinjustierung erforderlich sein wird.

Vielen Dank, dass Sie sich die Zeit genommen haben, ein Modell für mein Heizelement zu erstellen und es zu simulieren! Allerdings lassen sich die gefundenen Parameter nicht direkt auf mein System übertragen, da es hier zu Skalierungen kommt. Ich werde mich damit begnügen, die Parameter experimentell zu finden, bis ich zufrieden bin. Um die Komplexität zu erhöhen, stellte ich fest, dass jede Lötspitze ein deutlich unterschiedliches thermisches Ansprechverhalten aufweist, sodass ich einen sicheren Parametersatz wählen muss, der niemals Schwingungen verursacht. Danke noch einmal!