Ich versuche, ein Mikrocontroller-Programm zum Steuern der Temperatur in einem System mit den folgenden Eigenschaften zu schreiben:
- Ausgang kann nur mit festen Taktfrequenzen (~ 2-10 pro Stunde) ein- oder ausgeschaltet werden
- Die Anlage reagiert nur langsam (messbare Temperaturänderungen dauern lange> 10 Minuten).
- Die Anlage verliert aufgrund der Umgebungsbedingungen an Temperatur.
- Der Sollwert kann je nach Benutzeranforderung in großen Schritten variieren.
Ich schreibe eine Steuerung, die darauf abzielt, Fehler zu minimieren und die als Eingabe bereitgestellte Zyklusrate einzuhalten.
Dies kann problemlos mit einem PI-Regler erfolgen, dessen Ausgang auf das Tastverhältnis umgerechnet wird. Das Problem ist, dass das Programm die richtigen Kp- und Ki-Konstanten automatisch einstellen und auswählen und sich an unterschiedliche Umgebungsbedingungen und Änderungen der Heizleistung anpassen muss. Daher ist es nicht sinnvoll, den PI-Regler im Voraus abzustimmen.
Die Verwendung eines tatsächlichen PI oder PID ist nicht erforderlich. Ich bin offen für die Verwendung von Fuzzy-Logic, wenn es hilft. Außerdem habe ich einen Algorithmus zum maschinellen Lernen auf dem Chip, der die Systemreaktion und den Wärmeverlust (ungefähr linear) modelliert und Informationen über die gemessene Sprungantwort vorschlägt . Ich weiß nur nicht, was ich mit diesen Informationen anfangen soll.
Ein paar Beiträge schlage ich vor, die Modellierungsdaten zum Abstimmen des PI on-line als auch das nutzen könnten Labor-View - Handbuch , das ich Fuzzy-Logic abzustimmen schlägt die PI verwenden könnte.
Meine Frage ist, was der beste Ansatz für diese Art von Szenario ist (z. B. PID, Fuzzy-PID, Faltung usw.) und wie ich es tatsächlich in Software / Praxis implementieren würde.
Ich bin kein EE, also wäre jeder Input sehr dankbar.
quelle
Antworten:
Ich würde nicht so weit gehen, PID als veraltet zu bezeichnen. Es gibt aber durchaus Verbesserungspotential. Eine Möglichkeit, PID-Regelkreise automatisch abzustimmen, ist die Verwendung der Nelder-Mead-Methode , einer Form des Hill Climbing Simplex-Algorithmus . Es hat den Vorteil, dass es in der Lage ist, an einem sich über die Zeit bewegenden Zielparameter zu konvergieren und wieder zu konvergieren.
Aus diesem Papier :
Meine besondere Anwendung war die Motorsteuerung. Wir hatten zwei Regelkreise, einen PID-Stromregelkreis und einen PI-Geschwindigkeitsregelkreis. Wir setzen unsere Eckpunkte auf P, I und D und führen Statistiken über die Ausgabe der Schleife durch. Wir haben dann die Reflexion, Expansion, Kontraktion und Reduktion immer wieder durchgeführt, bis die erzeugten Strom- oder Geschwindigkeitsregelungsziele innerhalb einiger Standardabweichungen lagen.
Bei unserem Produkt war der VP sehr besorgt darüber, wie der Motor "klang". Und wie sich herausstellte, "klang" es besser, wenn das aktuelle Ziel etwas mehr abprallte als mathematisch optimal war. Unser Tuning wurde also "live" durchgeführt, indem wir den Algorithmus suchen ließen, während der Motor lief, sodass auch die Wahrnehmung des Motors durch den Benutzer berücksichtigt wurde. Nachdem wir die gewünschten Parameter gefunden hatten, wurden sie fest codiert und nicht geändert.
Dies wäre wahrscheinlich nicht ideal für Sie, da Sie angeben, "das System in Schwingung zu versetzen, selbst wenn es Teil der automatischen Abstimmung ist, ist für die Benutzer nicht akzeptabel". Unser System würde höchstwahrscheinlich oszillieren und andere schreckliche Dinge tun, während es automatisch abstimmt.
Sie können jedoch zwei Kopien des PID-Reglers ausführen. Eine, die "live" war und den Prozess tatsächlich kontrollierte. Und eine Sekunde, die ständig automatisch abgestimmt wurde, während dieselben Eingänge wie der "Live" -Controller gespeist wurden. Wenn der Ausgang des automatisch eingestellten Reglers "besser" oder stabiler wird, können Sie die Koeffizienten in den "Live" -Regler tauschen. Die Steuerung würde dann Korrekturen an dem Prozess durchführen, bis die gewünschte Leistung erreicht wurde. Dies würde Schwingungen verhindern, die vom Benutzer während der automatischen Abstimmung wahrgenommen werden können. Wenn sich die Eingänge jedoch drastisch ändern und der PID-Regler nicht mehr optimal ist, kann die automatische Abstimmung neue Koeffizienten eintauschen, sobald diese verfügbar sind.
quelle
Ein PID-Regler ist in Situationen nützlich, in denen das Verhalten des zu steuernden Systems vernünftigerweise als eine Summe des Steuerreizes, des Integrals des Steuerreizes und des Integrals dieses ersten Integrals angenähert werden kann. Einige Temperaturregelungssysteme können ein solches Kriterium erfüllen, wenn es ein Objekt gibt, das durch den Reiz gleichmäßig erwärmt wird, und wenn dieses Objekt Wärme gleichmäßig mit einer Rate proportional zu der Temperaturdifferenz zwischen ihnen auf ein anderes Objekt überträgt. Beispielsweise kann das erste Objekt ein Heizelement sein, und das zweite Objekt kann die Luft sein, die in einem Raum zirkuliert, wenn eine ausreichende Luftzirkulation vorliegt, damit die Luft eine einzige gleichmäßige Temperatur aufweist. Für kompliziertere Wärmemodelle (z. B. solche, die Wärmegradienten innerhalb eines festen Mediums beinhalten können)
Ich würde vorschlagen, dass ein guter Ansatz darin besteht, dass der Regler bei eingeschalteter Heizung kontinuierlich abschätzt, wie heiß das zu regelnde Gerät werden würde, wenn der Ausgang sofort abgeschaltet würde, und die Temperatur, auf die es am Ende abkühlen würde, wenn Die Heizung wurde so schnell wie möglich eingeschaltet. Schätzen Sie auch, was diese Werte wären, wenn die Heizung noch eine Sekunde, zwei Sekunden, drei Sekunden usw. eingeschaltet bleiben würde. Schalten Sie die Heizung aus, wenn diese Werte so gut wie möglich sind. Sobald die Heizung ausgeschaltet ist, beginnen Sie mit ähnlichen Berechnungen, tauschen jedoch die Rollen Ein / Aus, Heiß / Kalt usw. aus, um zu entscheiden, wann die Heizung wieder eingeschaltet werden soll. Abhängig vom thermischen Verhalten des Systems kann es erforderlich sein, eine Min / Max-Vorausschau-Strategie zu verwenden, um ein oder zwei Schritte vorauszusehen.
quelle
Die Möglichkeit, den Status der Steuerung (ein oder aus) 2-10 Mal pro Stunde zu ändern, bietet sich nicht für die Steuerung des Arbeitszyklus an. Der Ausgang eines PI-Regelkreises wird ein Steuersignal sein, dessen Größe in Abhängigkeit vom Fehler variiert, und Ihre Anlage kann (realistisch) nur einen Binäreingang (aus oder ein) akzeptieren, da die 'Frequenz' der Steuerung Einschaltdauer, die akzeptiert werden kann, ist ein Bruchteil von Hertz.
Vielleicht möchten Sie die Dinge vereinfachen und hysteretisch kontrollieren:
quelle
Ein typischer (wenn auch zugegebenermaßen vereinfachter) Weg, dies zu tun, wird als Verstärkungsplanung bezeichnet. Es ist ein klassischer Ansatz zur nichtlinearen Steuerung, wenn Sie eine beobachtbare Variable (oder Variablen) haben, mit der sich Ihr System ändert (Planungsparameter). In Ihrem System wäre diese Variable höchstwahrscheinlich die Temperatur. Die Idee ist, dass Sie eine Liste der Reglergewinne bei verschiedenen Werten des Planungsparameters (Temperatur) erstellen und diese Gewinne in Ihrem Regler verwenden, wenn sich der Planungsparameter ändert (sei es PI, PID, Zustandsrückmeldung oder was auch immer). Wenn das wirklich einfach klingt, liegt es daran, dass es so ist. Es funktioniert jedoch und wird in einigen sehr komplizierten Systemen verwendet.
Wenn Sie Lust haben, können Sie einen Algorithmus für maschinelles Lernen implementieren, um Ihre Verstärkungsmatrix zu generieren. Dies würde zu dem sich entwickelnden und lernenden Controller führen, den Sie zu beschreiben scheinen. Es könnte jedoch übertrieben sein, wenn das System vollständig charakterisiert werden kann.
Edit: Sorry, ich habe ein wenig falsch gelesen. Sie versuchen, die Temperatur zu regeln, sodass die von Ihnen angesprochenen "Umgebungsbedingungen" Ihr Planungsparameter sind.
quelle
Sie könnten rekursive Least-Squares-Controller werden, siehe Astrom und Wittenmark , Adaptive Control, aber ich weiß nicht, ob der Mikrocontroller genug Power hat, um dies zu tun.
quelle