PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit D-Anteil beim dig. PID-Regler



malthy
14.09.2010, 12:08
Hallo zusammen!

Ich habe ein Problem mit dem D-Anteil bei einem PID-Regler. Ich hatte vor einiger Zeit hier schonmal eine Frage dazu gestellt (https://www.roboternetz.de/phpBB2/viewtopic.php?t=54356), leider kam dabei nichts raus. Irgendwie lässt mich das Thema aber nicht so ganz los, deswegen will ich nun nochmal nachfragen, vielleicht (hoffentlich...) etwas besser formuliert.

Also: wenn ich einen digitalen PID-Regler implementiere, dann gilt für den D-Anteil ja, dass er proportional zur Differenz der Werte zweier benachbarter Samples ist. In diesem Sinne kümmert sich dieser Anteil also um die Änderngsgeschwindigkeit der Ist-Soll-Differenz. Wenn jetzt eine Wertänderung zwischen zwei benachbarten Samples s1 und s2 auftritt, dann wirkt der D-Anteil bei t(s2), wenn dann aber von s2 zu s3 keine Wertänderung stattfindet (was bei langsamen Signalen ja durchaus oft der Fall ist), ist der D-Anteil wieder Null. Er wirkt also immer nur sehr kurz im Moment der Änderung. Wenn der Takt des PID relativ hoch ist, kann es somit gut sein, dass er sich garnicht auswirkt, weil das System dieser schnellen und kurzen Stellwertänderung garnicht folgen kann.

Wie geht man mit diesem Problem um? Setzt man einfach die Abtastfreq. runter? Aber auf welchen Wert im Verhältnis zum Spektrum des Signals? Ich habe auch mal versucht, dem D-Anteil einen exponentiellen Abfall zu verpassen, ich bin mir dann aber überhaupt nicht im Klaren, ob die typischen Parametrisierungsverfahren noch funktionieren.

Ich hoffe das war jetzt nicht zu wirr... wenn jemand irgendwas dazu weiß, würde ich mich echt sehr freuen.

Danke!
Malte

RP6conrad
14.09.2010, 16:50
Das D-anteil is sehr sensibel für Rauschen. Mit kleine abtast Intervallen kan das rauschen schon starker sein dan der Signalaenderung. Dan hat ein D-Anteil naturlich kein Sinn mehr. Ein hohe D-factor kann auch eine Ursache von Instabilitäten sein.
Die Abtastrate darf darum nicht zu klein sein. Richtwert : eine schnelle Signal Aenderung muss in das Abtastinterval mindestens 5* starker sein dan das Rauschen von das stabiles Signal.

Besserwessi
14.09.2010, 17:20
Das Problem wird das Rauschen sein. In der realtiv kurzen Zeit zwischen 2 Abtastungen hat man halt oft nur kleine differenzen und entsprechend oft nur einige wenige diskrete Werte. Der Einfache Weg ist eine langsamere Druchlaufzeit für die Regelschleife, das geht aber nicht immer. Eine Alternative ist es die Steigung über mehr als die letzten beiden Werte zu berechen. Man kann z.B. einen Ringpuffer mit den letzten 4 oder 8 Werten anlegen und die Steigung dann aus mehr Werten berechen. Bei 4 Werten könnte man z.B. als Steigung so etwas wie (2 * Y1 +1*Y2- 1*Y3-2*Y4)/3 nutzen. Das ist dann weniger rauschempfindlich und auch nicht mehr so stark quantisiert.

So sehr schlimm ist etwas rauschen auf dem D Anteil oft auch noch nicht. Problematisch wird es vor allem, wenn man dadurch bis in die Begrenzung kommt. Bei sehr kurzer Abtastung und entsprechend starkem Rauschen des D Anteils hat man dann ggf. so eine Art Dithering beim Ausgang. Das muß nicht schlecht sein, wenn das zu regelnde System einigermaßen linear und langsam genug ist.

Siggi_White
15.09.2010, 07:11
Dazu hätte ich noch eine mögliche Vorgehensweise:

Meines Wissens dient der D-Anteil zur Beschleunigung des Reglers. Wie bereits beschrieben, erkauft man sich damit zusätzlich eine Verstärkung des Rauschens (-> RP6conrad, Besserwessi) und geht die Gefahr ein, bestimmte Systeme instabil zu machen (->RP6conrad).

Im obigen Fall (Regler viel schneller als System) hätte ich zuerst versucht, den D-Anteil weg zu lassen (-> PI-Regler). Warum die Nachteile, wenn er nichts bringt? Macht ja keinen Sinn, einen Regler zu beschleunigen, der bereits zu schnell ist. Wenn das System zu träge ist, wird auch ein "voraus schauen" des D-Anteils das System nicht viel schneller ausregeln.
Ist der Regler dann immer noch extrem viel schneller als das System, hätte ich die Abtastzeit verringert, damit ich die Eingangswerte vorher noch besser Filtern/mitteln kann.

Ich bin aber absoluter Laie auf dem Gebiet. Korrigiert mich bitte, wenn ich mich irre.

Martin.
15.09.2010, 07:32
Ein D-Anteil erhöht aber auch die Phasenreserven weswegen man ohne ihn P und I teilweise zurücknehmen muss.
Außerdem hilft er beim reagieren auf Sprungantworten. Soweit ich weis benötigt man bei einem recht trägen System wie einer Temperaturregelung keinen D-Regler weil es da keine sprunghaften Veränderungen gibt. Ansonsten, gerade bei einem System was schnell regelt empfiehlt er sich wieder, soweit ich weis.

malthy
15.09.2010, 09:47
Hallo,

danke für die Antworten. Ich denke es waren praktische Tipps für mich dabei, insbesonder den D-Anteil über mehr als nur zwei benachbarte Samples zu ermitteln, ist eine gute Idee.

Das Rauschen ist in meinem Falle eigentlich nicht das Problem. Es handelt sich um eine Temperaturregelung (die aber so schnell und genau wie möglich sein soll), bei der das Ist-Wert-Signal schon recht stabil ist. Der Punkt ist, dass zu irgendeinem Zeitpunkt eine Änderung um 0.1°C zwischen zwei benachbarten Samples auftritt, danach das Signal aber wieder lange stabil ist. Dann haut mir der D-Anteil einmal kurz für den Moment dieser Änderung rein - und das wars. Das schadet zwar nichts, aber ich denke, dieser kurze Effekt geht in den Zeitkonstanten des System völlig unter. Im Moment benutze ich in der Tat eine reine PI-Regelung.

Was mich aber dennoch wundert ist, dass es dann scheinbar ja nur so praktische "workarounds" gibt. Aber das Ganze ist doch ein grundlegendes und zentrales Problem von diskreten Reglern, deswegen hätte ich gedacht, dass es eine "etablierte Methode" gibt, um das in den Griff zu bekommen. Denn meine Votrstellung ist, dass, wenn ich mehr oder weniger beliebig den D-Anteil vor- oder nachbearbeite, die Parametrisierungsverfahren nicht mehr so richtig funktionieren werden.

Ich hatte mal irgendwo aufgeschnappt, dass man den D-Anteil besser durch einen DT1 Anteil ersetzt. Dabei ist mir aber wiederrum nicht klar, ob die Parametrisierungsverfahren noch funktionieren.

Nur noch der Nachsatz: mich interessiert das Problem auch grundsätzlich und losgelsöt von einer kokreten Anwendung, also ich würde gerne wissen, ob es eine "allgemeine Lösung" gibt.

Gruß
Malte

Besserwessi
15.09.2010, 15:10
Das Problem mit mehr Rauschen durch den D Anteil ist ein bekanntes und prinzipielles. Wenn es geht wählt man deshalb den D Anteil nur so groß wie es nötig ist damit der Regelkreis schnell genug reagiert. Auch bei der analogen realisierung braucht man in der Regel auch so etwas wie eine obere Bandbreitengrenze für den D Anteil. Oft ist das aber kein explizites Schaltungselement.

Beim Digitalen Regler kommt dann der Quatisierungseffekt dazu. Die benutzung von mehreren Samples sollte eigentlich schon Standart sein, denn das Problem ist ein Pronzipielles:
Die Abtastrate des AD wandlers sollte so schnell sein, dass sich ziwschen 2 Sampels nichts wesentliches ändert, einfach damit der AD wandler nichts wesentliches verpaßt. Dann sind die Samples aber eigentlich zu dicht um aus der einfachen Differenz die Steigung zu bestimmen.

Willa
16.09.2010, 07:42
Hi, ich hatte ein ähnliches Problem, und war auch erstaunt dass es keine Standardmethode gibt. Ich habe es mittlerweile so gelöst:
Der D Anteil wird nicht aus dem Mittelwert mehrerer Samples berechnet, sondern mit einem größeren zeitlichen Abstand. Trotzdem wird der D-Anteil nicht mit einer geringeren Abtastrate errechnet sondern so (ich glaube, dass ist das, was Besserwessi auch vorschlug):
FehlerD(t_5)=Sollwert(t_5)-Sollwert(t_1)
FehlerD(t_6)=Sollwert(t_6)-Sollwert(t_2)
FehlerD(t_7)=Sollwert(t_7)-Sollwert(t_3)
...

Es entsteht also ein größerer zeitlicher Abstand, aber trotzdem hat man zu jedem t einen aktuellen FehlerD mit wenig Rauschen und großer Amplitude.

malthy
16.09.2010, 15:40
Hallo William,

das ist auch eine gute Idee, aber ich muss zugeben, dass mir dessen Konsequenzen noch nicht so ganz klar sind. Ich werde es mal simulieren, damit ich's richitg kapiere... :-)

Klar ist, dass durch Deine Methode im Falle einer Ist-Soll-Differenz-Änderung um 1 (beliebige Einheit) ein länger anhaltendes Signal am Ausgang Deines modifizierten D-Anteil entsteht. Das ist schonmal gut. Und dass eine größere Amplitude entsteht, wenn das Signal sich systematisch mit der Zeit ändert, ist mir auch klar. Aber dass dadurch das Rauschen kleiner werden soll, versteh ich nicht. Wenn irgendein Sample zufällig nach oben oder unten ausreißt, tut das Dein Ausgangssignal doch auch...

Viele Grüße
Malte

Willa
16.09.2010, 16:11
Hi, mit "Rauschen verringern" meine ich immer das Signal to Noise Ratio. Also Signal wird größer, noise bleibt gleich => Verstärkungsfaktor kann verkleinert werden => Rauschen ist im Endeffekt geringer.

oberallgeier
16.09.2010, 16:40
Hallo Ihr,

eine Anmerkung zu Störungen bzw. zum Rauschen beim D-Anteil - und natürlich bei anderen Messungen.

Bei (genügend un-) geschickter Wahl der Größen kommen Fehler u.a. durch die endliche Stufung der Messwerte in die Rechnung. Dazu eine kurze Bemerkung von mir zusammen mit einem Beispiel-Graphen. (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=329381#329381) Der Graph wurde an einer streng monoton steigenden Funktion aufgenommen. Dieses Teilthema betrifft insofern Rundungsfragen, weil die zu messenden Werte oft irrationale Zahlen ergeben (sollten) mit z.T. beliebig langem Nachkommaanteil - die Messaufnehmer aber nur einen teilweise sehr begrenzten Zahlenraum haben.

Dieses Problem des Messrauschens habe ich bei (m)einer Drehzahlregelung ziemlich markant, da ich integer mit etwa 8 Bit Auflösung messe und rechne. Als Beispiel die Auswertung einer Messfahrt meines MiniD0 in diesem Diagramm, (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=457587#457587) bei dem der D-Anteil (hellblauer Graph) erheblich um seinen Nullwert (Achtung - D ist um 50 nach oben verschoben) pendelt.

Besserwessi
16.09.2010, 16:59
Wenn man ein längeres Zeitintervall für die Bestimmung der Steigung nutzt, gibt es mehrere Möglichkeiten. Mein Vorschlag ist gerade die Formel für die lineare Interpolation. Mit nur 2 Werten die etwas weiter auseinanderliegen, die Werte dazwischen aber ignorieren wird es auch schon besser als nur die letzten 2 Werte, aber in der Regel wird es mit den zwischenwerten noch etwas besser, schon einfach weil die Quatisierungsschritte kleiner werden. Die Länge des Zeitfensters für die bestimmung Steigung sollte aber kürzer bleiben als die Reaktionszeit der Heizung.


Ein weiteres Problem das man leicht bekommt, wenn man einen sehr stabilen Wert anstrebt ist das man irgendwann die Quantisierung beim Stellwert bemerkt. Solange man durch den D-Anteil noch Rauschen drin hat, schwankt der Ausganbewert auch so noch genug und man bekommt so eine Art Dithering, was die Auflösung erhöht. Wenn man jetzt das Rauschen des D-Anteils stark reduziert, kann es passieren das man die Quatisierung auf der Ausgabeseite stärker stört. Dem müßte man dann ggf. durch ein künstliches Dithering entgegenwirken. Mir ist das schonmal so bei einem Temperaturregeler passiert, trotz 12 Bit Auflösung für die Heizung.

Wenn das ein Programmregler werden soll, also so das nicht eine feste temperatur, sondern ein Temperatur - Zeitverlauf vorgegben wird, dann sollte man die grob geschätzten nötigen Heizleistungen schon aus den sollwerten von Temperatur, Steigung und ggf. auch der Ableitung der Steigung berechnen. Der Regler muß dann nur noch gegen die Fehler bei den Schätzwerten gegenan regeln. Das gibt vor allem an den Übergängen einen schnelleren Verlauf. Vor allem kann man so gut ein Überschießen der Temperatur reduzieren, weil man im Vorraus erkennen kann wie lange die Heizung auchmal ganz aus sein muß - der PID Regler hat da Probleme.

mycroc
16.09.2010, 17:52
Hallo,
ich beschäftige mich zur Zeit auch mit PID Reglern. Eine interessante Quelle wie man die PID Anteile berechnen kann habe ich im Systemhandbuch der S7 - 200 gefunden. Ab Seite 147
https://support.automation.siemens.com/WW/llisapi.dll/csfetch/1109582/s7200_system_manual_de-DE.pdf?func=cslib.csFetch&nodeid=1108714&forcedownload=true