Implementieren eines selbstoptimierenden PID-ähnlichen Reglers

15

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.

MandoMando
quelle
1
Ich schrieb eine Antwort über die Verwendung eines Simplex-Algorithmus zur automatischen Abstimmung von PID-Reglern auf der Robotics SE , die von Interesse sein könnten.
embedded.kyle
@ embedded.kyle super, ich verstehe simplex / greatest-acent. Kannst du sagen, was er früher für x1, x2 getan hat? Ich habe Probleme, sie mit PID-Konstanten in Beziehung zu setzen.
MandoMando
1
Es ist schon eine Weile her, aber ich glaube, wir haben so etwas wie x1 = P, x2 = I, x3 = D verwendet. X0, der Schwerpunkt, ist das Maß der Stabilität, das für Sie am wichtigsten ist. In meiner Anwendung, Motorsteuerung, hatten wir zwei Schleifen. Das x0 von einem war Geschwindigkeit und das x0 für das andere war Strom. Sehen Sie hier für mehr.
embedded.kyle
@ embedded.kyle Macht es Ihnen etwas aus, Ihren Kommentar in eine Antwort zu verwandeln? Fügen Sie zusätzliche Informationen hinzu, wenn Sie dies wünschen. -thx
MandoMando
Ein Kopfgeld? Oh Junge! Gemacht und gemacht.
embedded.kyle

Antworten:

7

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.

Bergsteigen nach der Nelder-Mead-Methode

Aus diesem Papier :

Zum Beispiel ist in unserem Fall der PID-Parameterabstimmung {K P , K I , K D } ein Simplex ein Tetraeder. Nelder-Mead generiert eine neue Testposition für Simplex, indem das Verhalten der an jedem als Simplex angeordneten Testpunkt gemessenen Objektivfunktion extrapoliert wird. Der Algorithmus wählt dann aus, einen dieser Testpunkte durch den neuen Testpunkt zu ersetzen, sodass die Technik fortschreitet.

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.

embedded.kyle
quelle
Bei der NM-Methode müssen die Jokerpunkte für die Zielfunktion (dh die reale Welt des Benutzers) ausgeführt werden. Ich glaube jedoch, dass ein grobes Modell (Raumzustand?) Auf der Grundlage von Sensormessungen auf dem Mikrocontroller selbst aufgebaut werden kann. Es würde dann Ihren vorgeschlagenen 'Schatten'-PI-Regler bei der Optimierung ausführen. Ich bin mir nicht sicher, ob dies ein Over-Kill ist, da es möglicherweise möglich ist, einen PI auf eine bekannte Einstellung abzustimmen und dann Kp und Ki basierend auf den Sensorwerten und der Systemreaktion zu skalieren . Wie auch immer, gut gemacht, Sir.
MandoMando
@MandoMando Vielen Dank! Und ich mag den Begriff "Schatten" PI-Regler wirklich.
embedded.kyle
3

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.

Superkatze
quelle
1

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:

  • Das System wird eingeschaltet, wenn die Temperatur eine Untergrenze überschreitet
  • Das System schaltet sich aus, wenn die Temperatur eine Obergrenze überschreitet
  • Zwischen der oberen und unteren Grenze ist ein ausreichender Abstand vorhanden, um ein Abprallen des Steuerausgangs zu verhindern
Adam Lawrence
quelle
Die Idee dazu ist, die PI-Ausgabe auf 60% zu setzen und auf Einschaltdauer = 60% des Zyklus umzustellen -> 0,6 x 30 Minuten -> 18 Minuten ein und 12 Minuten aus während des 30-Minuten-Zyklus. Der von Ihnen vorgeschlagene Bang-Bang-Controller garantiert nicht, dass die erforderliche Taktrate (z. B. Einschalten, nicht mehr als n-mal pro Stunde) eingehalten wird und gleichzeitig ein geringer Fehler auftritt. Es kann erforderlich sein, dass das System für einen bestimmten Zeitraum vorübergehend übersteuert, um den Verlust während der Ausfallzeit auszugleichen.
MandoMando
1

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.

Matt
quelle
0

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.

Scott Seidman
quelle