Fehler im stationären Zustand des PID-Reglers

Ich arbeite mit einem PI-Controller, der die Temperatur über ein PWM-Tastverhältnis regelt.

Es lässt sich im Allgemeinen gut steuern. Das System benötigt jedoch eine gewisse Mindesteinschaltdauer, um den Wärmeverlust auszugleichen. Wenn der PI endlich richtig liegt, das heißt, wenn der Proportionalfehler Null und der Integralfehler Null ist, geht der Ausgang ebenfalls auf Null und wirft das System ab. Dann beginnt der PI hart daran zu arbeiten, den Fehler zu minimieren und wiederholt.

Gibt es dafür eine Lösung?

Weitere Informationen

Die Heizung darf nur maximal 3 Mal pro Zeiteinheit von 0 auf 1 gehen (strenge Anforderung). Dies verursacht die Sägezahnwelle mit fester Frequenz, die Sie sehen.

Hier die Übersicht:

Übersicht Temperatur.  Die rosa Linie ist die Außentemperatur des Gefäßes

Hier ist der Problembereich vergrößert und markiert. Das Integral kreuzt Null und führt zu einem Wimmern, das dann einen großen Fehler verursacht und das Muster wiederholt:

Temperatur Vergrößert, mit markiertem Problembereich

PID-Ausgang. Gelb: Integral, Magenta: Proportional, Cyan: Fehler, Rot: Ausgabe.

Sie können sehen, dass das Wimmern auftritt, wenn Proportional und Integral nahe Null sind.

Der PI-Ausgang wird durch einen Tastgradbegrenzer und einen Vorzeichenfilter geleitet, was nur zu 0- oder 1-Ausgängen führt. Es wird dann an den Frequenzregler weitergeleitet, der nicht mehr als einen 0->1-Übergang in demselben 1/3 der Zeiteinheit zulässt. Dies bedeutet, dass für einen Teil des Zyklus der Ausgang des Pi-Controllers ausgesondert wird. Der Integralanteil wird jedoch weiter aufgebaut und in der nächsten Periode kompensiert.

PID-Ausgang.  Gelb: Integral, Magenta: Proportional, Cyan: Fehler, Rot: Ausgabe

Ja, es heißt "tunen". Sie haben offensichtlich nicht optimale Koeffizienten für P und I.
@OlinLathrop Vielleicht könntest du den Prozess ein wenig erklären?
@OlinLathrop: Kp * E + Ki * IntE. Für welche (fein abgestimmten) Kp und Ki wird die Summe genau ungleich Null, wenn E und IntE Null sind? Bei allem Respekt, ich habe Ihre anderen Beiträge genossen, obwohl die Herablassung hier nicht produktiv ist.
@MandoMando Geht der Integralfehler wirklich auf Null? Normalerweise wächst er auf einen konstanten Wert ungleich Null, bis die integrale Fehlerverstärkung ausreicht, um die Ursache des Fehlers auszugleichen.
@PhilFrost ja. Es geht schließlich über Null. In diesem Moment wird die Ausgabe fallen gelassen. Wir möchten, dass das System einen mittleren Fehler von Null hat, was bedeutet, dass der integrale Fehler auf Null getrieben werden muss. Es ist gut darin, Pfaden, Sprungantwort und Störungsunterdrückung zu folgen, es ist nur nicht gut darin, ein Regler zu sein.
@MandoMando das klingt nicht richtig. Ich weiß nicht, ob wir vom selben reden. Ich denke, um eine gute Antwort zu erhalten, müssen Sie mehr Details darüber angeben, was passiert. Einige Diagramme, die das Ziel, die Reaktion und die PI- und D-Terme im Laufe der Zeit zeigen, wären gut.
@PhilFrost sicher, Grafiken und weitere Informationen hinzugefügt.
Wenn ich Ihre Fragenbeschreibung verstehe, kann Ihre Heizung nur ein- oder ausgeschaltet werden, und Sie dürfen sie nicht sehr oft ein- oder ausschalten. Dies wird in der Tat die Kontrolle erschweren.
Ich wundere mich auch über das Ein / Aus, wie gbarry ist. Über den Duty-Limiter - meinst du, der PWM-Ausgang kann nur Full Duty oder Zero Duty sein?
@gbarry, du hast recht. In jeder Periode ist der Ausgang des PI-Reglers über Null, daher schaltet sich die Heizung ein. Irgendwann während des Zyklus geht der Ausgang auf Null oder darunter und die Heizung schaltet sich aus. An diesem Punkt bleibt es ausgeschaltet, bis eine neue Periode beginnt. Technisch gesehen kann die PWM-Leistung einen beliebigen Wert zwischen 0 und 100 % haben.

Antworten (4)

Ich weiß genau, woher du kommst. Der Fehler, den Sie machen, besteht darin, anzunehmen, dass der Integralterm im stationären Zustand auf Null fällt. Dies ist nicht der Fall und hängt in der Tat stark von Implementierungsdetails ab.

Verstehen Sie zunächst, dass der Integralterm in einer mathematischen PID das Integral vom Beginn der Zeit (oder, nun, des Systems) und nicht der "Fehler über die letzten paar Zyklen" ist. Ihre Implementierung von PID oder PI sollte nicht dazu führen, dass die älteren Mitwirkenden des Integralterms an relativer Gewichtung des I-Terms verlieren. Lassen Sie mich erklären. Beim Schreiben des Codes des I-Terms ist der erste Instinkt anzunehmen, dass der Term divergieren, die variable Größe überschreiten und überlaufen wird, und die Leute versuchen, dies zu beheben, indem sie gleitende Durchschnitte verwenden, die Gewichtung der älteren Werte herabsetzen und alle möglichen seltsamen Gimmicks verwenden . Dies sollte in einem ordnungsgemäß implementierten PI- oder PID-System nicht passieren. Stattdessen sollten Sie I einfach als I = I + Ki*Error berechnen.

Das von Ihnen in Ihrer Frage erwähnte Basisniveau zur Aufrechterhaltung des Systems muss durch den I-Term bereitgestellt werden. Da Sie a priori nicht wissen, wie viel das ist, müssen Sie dem Controller erlauben, diesen Wert selbst zu ermitteln. Das ist in der Tat die Aufgabe des I-Terms. Der Ki-Wert sollte klein genug sein, damit der Controller konvergiert, bevor er überläuft. Einige Gedanken darüber, wie dies auf dem Papier funktioniert, werden helfen. Versuchen Sie, den Prozess zu visualisieren, nicht spezifische Randbedingungen. Eine Sache, die Sie beachten sollten, ist, dass der I-Term nicht aus dem absoluten Wert des Fehlers konstruiert wird. Es enthält sowohl positive als auch negative Fehlerwerte.

Stellen Sie sich außerdem den Zustand vor, in dem der Controller gerade den stationären Zustand erreicht. Sie werden erkennen, dass I an diesem Punkt nicht unbedingt Null ist. Tatsächlich bin ich tatsächlich die Basiskontrollkraft, die Sie in der Frage erwähnen. Bleibt der Zustand tatsächlich stabil, und ist der Fehler von nun an durchgehend Null (oder im zeitlichen Mittel Null), so bleibt der Wert von I so wie er ist.

Nun, wenn es um reale Implementierungen geht, werden Sie mit dem Problem konfrontiert, dass Ihr System selbst bei einem kleinen I gesättigt sein kann, wenn es den Sollwert erreicht. Das System muss dann lange Zeit in die entgegengesetzte Richtung irren, um sich von dem I-Term zu befreien, den es angesammelt hat, während es noch den Sollwert erreicht hat. Tatsächlich habe ich festgestellt, dass PI und PID am besten für einen einzelnen Sollwert funktionieren und sich verschlechtern, wenn Sie diesen Punkt ständig um einen großen Wert ändern müssen. Ein großer Beitrag dazu ist die Tatsache, dass ich eine hohe Trägheit habe. Es ist möglich, den Wert von I abzustimmen, um den Controller funktionsfähig zu halten, aber wenn das System selbst langsam auf einen Stimulus reagiert (z. B. wenn Sie einen Metallblock erhitzen), ist die Abstimmung oft schwierig. Stattdessen kann es helfen, I nur dann zu aktivieren, wenn. Das System befindet sich innerhalb einer bestimmten Schwelle des Sollwerts. Wenn Sie den Sollwert um etwas mehr als diesen Schwellenwert ändern, löschen Sie I und deaktivieren Sie ihn (verwenden Sie nur die P/PD-Regelung), bis Sie nahe am neuen Sollwert sind. Dadurch fügen Sie einen weiteren abstimmbaren Parameter (den Schwellenwert) hinzu, aber es macht es einfacher, sowohl Ki als auch den Schwellenwert einzustellen, als Ki allein so einzustellen, dass er für beide Situationen optimal ist.

Mir gefällt dein Umgang mit Ich versus „Schwelle“, aber hast du keine Angst davor, einen weiteren „seltsamen Kniff“ erfunden zu haben?
Um fair zu sein, habe ich. Und sobald Sie das eingeführt haben, ist es nicht mehr PID (oder PI) und stattdessen eine zeitgemultiplexte Kombination aus PD (oder P) und PID (oder PI). Dieses chaotische Schema funktioniert nur, wenn das System eine lächerlich hohe Trägheit hat, und meiner Meinung nach ist es einfach eine ausdrückliche Anerkennung der Tatsache, dass der Übergangszustand nicht ideal für eine vollständige PID-Steuerung ist. Dies ist natürlich nicht erforderlich, wenn Ihr System schnell reagiert oder es Ihnen nichts ausmacht, die Zeitspanne abzuwarten, die Sie benötigt haben, um von 0 auf den Sollwert zu gelangen, damit es sich stabilisiert.
@ChintalagiriShashank danke für den Beitrag. Was gut zu funktionieren scheint, ist, I auf eine kleine Sättigung zu beschränken, so dass es nur die Droop ausgleichen kann und nicht mehr. Obwohl diese Schwellenidee ähnlich ist.

Sie scheinen nicht zu verstehen, wie das System funktionieren soll. Wenn die Fehler Null sind, bedeutet dies, dass die Temperatur auf dem Sollwert liegt und der Ausgang ausgeschaltet sein sollte . Wenn sich die Temperatur ändert (vermutlich fällt), dann gibt es entsprechende Fehler und es sollte eine Ausgabe geben, um das zu korrigieren.

Ein System wie dieses, das nur P verwendet, kann ein Gleichgewicht erreichen, erreicht jedoch nicht die eingestellte Temperatur. Mit hinzugefügtem I kann das System ein Gleichgewicht erreichen und die eingestellte Temperatur erreichen, aber es gibt einen konstanten Offset vom I-Term, um ihn dort zu halten. Dieser Offset stellt die Wärme dar, die das System ständig verliert.

Es scheint, dass Ihr System wie vorgesehen funktioniert. Obwohl Sie vielleicht ein anderes Ergebnis wünschen. Tuning ist auf jeden Fall angebracht, wie alle Kommentare fordern.

Für diejenigen, die kein gutes Verständnis für PID-Systeme haben, ist der Artikel "PID ohne PHD" sehr zu empfehlen. Suchen Sie nach dem Titel. Das Original, das in Embedded Systems Programming erschien, hatte Links zu den Illustrationen. Für eine bequemere Lektüre mit eingebetteten Illustrationen finden Sie stattdessen eines der PDFs.

Danke @gbarry. Ich kenne die Arbeit von Tim Wescott. Ich habe weitere Informationen hinzugefügt, hoffentlich wird es die Dinge klären. Die Abstimmung ist hier NICHT das Problem, die Wirkung des Frequenzbegrenzers ist das Problem.

Es klingt nicht so, als würde es sich im Allgemeinen gut steuern lassen. Eine Schleifensteuerung vom PI-Typ sollte zu einem PWM-Tastverhältnis (im stationären Zustand) führen, das im Grunde ein konstanter Wert ist. Es sollte nicht von Null auf einen großen Wert wechseln. Da es sich um eine thermische Schleife handelt, sind Ihre Zeitkonstanten lang und die Schwingungen zehn Sekunden lang. Auch bei thermischen Systemen variiert die Verstärkung im offenen Regelkreis möglicherweise um eine Größenordnung als Funktion der Umgebungsbedingungen. Einige Dinge, die Sie bei einem System mit Last beachten sollten:

  • Der Ausgang des proportionalen Teils der Schleife wird niemals Null sein.
  • Der Gesamtfehler wird nach der Korrektur durch den Proportionalteil der Schleife ebenfalls nicht Null sein. Da der Proportionalteil eine endliche Verstärkung hat, wird er den Fehler nicht vollständig korrigieren.
  • Der Integratorteil kann eine unendliche Verstärkung haben, aber es dauert unendlich lange, ihn zu erreichen. Der Integrator wird also verwendet, um den Fehler zu korrigieren, der durch den Proportionalteil übrig bleibt, aber nur für niedrige Frequenzen. Das bedeutet, dass der Integratorausgang auch im stationären Betrieb nie Null sein wird.

Sie müssen die Werte für die Verstärkung des Proportionalteils und des Integralteils wählen, um den Regelkreis des geschlossenen Systems zu stabilisieren. Es hört sich so an, als ob die Verstärkung von einem oder beiden dieser Teile zu hoch ist. In der Geschichte der Schleifen im PI(D)-Stil war die Auswahl dieser Verstärkungen als "Tuning" bekannt, da die Leute sie empirisch iterativ an Ort und Stelle auswählen würden. Bei einer thermischen Schleife oder einem thermischen System ist die empirische Abstimmung der Schleife eine lange Plackerei.

Beginnen Sie nur mit dem proportionalen Teil der Schleife, deaktivieren Sie den Integrator. Beginnen Sie mit einem niedrigen Verstärkungswert für den proportionalen Teil, vielleicht Eins. Sie erhöhen langsam die Verstärkung, bis Sie nur einen Hauch von Oszillation sehen (verwenden Sie Umgebungsbedingungen, die zu einer maximalen Verstärkung für das Open-Loop-System führen). Wenn Sie Schwingungen sehen, reduzieren Sie die Verstärkung. Zum Beispiel ist eine Reduzierung der Verstärkung um die Hälfte eine Reduzierung um 3 dB, die Ihrer Schleife bei sorgfältiger Vorgehensweise eine Verstärkungsmarge von 3 dB verleihen würde ... bei weitem nicht genug. Sie sollten auf eine Verstärkungsspanne von 20 dB schießen.

In einigen Systemen mit geringer Leistung ist eine Proportionalschleife alles, was Sie brauchen. Es wird einen Fehler geben, der mit der Systemlast variiert, aber vielleicht ist es gut genug. Wenn es jedoch nicht gut genug ist, wird ein integraler Bestandteil benötigt. Da Sie jetzt ein stabiles System mit dem proportionalen Teil haben, können Sie damit beginnen, den integralen Teil zu verstärken. Befolgen Sie einen ähnlichen Prozess zum Hinzufügen einer Verstärkung zum Integrator (wie beim Proportionalteil), um die maximale stabile Verstärkung zu finden. Für ein thermisches System dauert dies Tage, und das ist, wenn Sie es gleich beim ersten Mal richtig machen.

Es ist möglich, dass Sie irgendwann feststellen, dass Sie für eine optimale Reaktion auch einen abgeleiteten Teil zur Schleife hinzufügen müssen ... obwohl dies bei thermischen Systemen normalerweise nicht erforderlich ist.

Wirklich, Leute, die es ernst meinen mit der Kompensation von Systemschleifenantworten, werden zuerst ein mathematisches Modell des Systems schreiben. Daraus können sie die Pole, Nullstellen und Verstärkungen erkennen, die im System vorhanden sind, sowie deren Empfindlichkeit gegenüber Änderungen der Umgebungsbedingungen und der Last. Dann können die erforderlichen kompensierenden Proportional- und Integralanteile berechnet werden, um optimale Werte zu erhalten. Dann würden numerische Simulationen in einer Monte-Carlo-Art durchgeführt, um die Systemvariabilität zu berücksichtigen. Dies ist der einzig praktikable Weg, um letztendlich fortzufahren. Es wird sehr wenig empirisches „Tuning“ mehr gemacht, und was gemacht wird, ist sehr viel nur Feintuning.

Lösung

Es stellt sich heraus, dass ich mich geirrt habe, dass die Ausgabe auf Null geht (und niemand sonst hat dies in den Diagrammen entdeckt?).

Das Knickproblem wurde nicht durch eine suboptimale Abstimmung von P und I verursacht, sondern durch eine zu niedrige Abtastrate ! Nachdem wir die Schleifenfrequenz verdoppelt hatten, wurde die Ausgabe ziemlich stabil. So oder so, danke für den Input.