Forum: Mikrocontroller und Digitale Elektronik PID-Regler Nullpunktverschiebung


von Sven L. (svenl)


Lesenswert?

Hallo zusammen,

ich zerbreche mir schon mehrere Tage über die Realisierung eines 
Regelvorgangs den Kopf:

Es gibt einen Behälter, welcher mit einem Füllstandssensor (kapazitiv) 
ausgestattet ist und in dem eine Flüssigkeit eingefüllt ist. Diese 
Flüssigkeit wird kontinuierlich entnommen.

Eine Pumpe P (analog ansteuerbar 0-5 V) soll den Flüssigkeitsstand im 
Behälter konstant halten. Der Flüssigkeitsstand ist in Prozent als 
Sollwert vorgegeben. Die Ausgangsgröße des Füllstandssensors ist auf 
Prozent skaliert.

Nun füttere ich beide Werte in meinen PID-Regler und bekomme eine 
Stellgröße heraus, welche mittels DAC in eine Spannung umgewandelt wird 
und die Pumpe ansteuert. So weit erst einmal so gut und das funktioniert 
auch..

Fassen wir zusammen:
- Pumpe P füllt nur nach und kann nur positiv regeln, negative 
Stellgrößen werden auf 0 begrenzt (entspricht 0 V Ansteuerung)
- Kontinuierliche Entnahme der Flüssigkeit aus dem Behälter mit einer 
relativ hohen Flussrate
- Mit geeigneter Parametrierung des Reglers wird der Sollwert vom 
Füllstand sicher erreicht

Das Problem beginnt, wenn der Sollwert sicher erreicht wird oder (durch 
einen evtl. zu hohen I-Term) der Regler überschwingt und der Sollwert 
überschritten wird. Die Pumpe läuft noch kurz nach (Integralteil) und 
schaltet dann schlagartig ab, was eine entsprechende Belastung für die 
Pumpe inkl. starken Druck- und Füllstandsschwankungen nach sich zieht. 
Kurz vor Erreichen des Sollwertes läuft die Pumpe auf ca. 60 % ihrer 
Leistung, wobei dieser Wert je nach Viskosität der Flüssigkeit variieren 
kann. Dieser Wert kann leider nicht vorgegeben/berechnet werden, sondern 
stellt sich im System autark ein.

Wie kann ich es nun anstellen, dass bei Erreichen des Sollwertes (Fehler 
= 0) die Stellgröße verharrt und bei Überschwingern die Drehzahl der 
Pumpe reduziert wird, ohne dass die Stellgröße auf 0 gesetzt wird? - Das 
Abschalten der Pumpe zieht jedenfalls größere Schwankungen in den 
nachfolgenden Systemen nach sich und muss definitiv verhindert werden.

Theoretisch bräuchte ich eine Nullpunktverschiebung, die sich gleitend 
an den Punkt des Gleichgewichts herantastet und die Regelung bei 
Stellgröße = 0 genau dort verharrt. Positive Stellgrößen lassen die 
Pumpe schneller laufen, negative langsamer. Aber wie um Himmels Willen 
realisiere ich das?

Kann mir jemand Tipps dazu geben?

Weitere Infos: PID-Regler mit Anti-Windup/Winddown und 
Stellgrößenbeschränkung ist selbst geschrieben. Rechenleistung reicht 
aus (80 MHz ARM-Core).

Viele Grüße!

Sven

: Bearbeitet durch User
von der mechatroniker (Gast)


Lesenswert?

Hört sich an, als wäre ein relativ langsam eingestellter I-Anteil im 
PID-Regler das, was du brauchst.

Ich realisiere Füllstandsregelungen übrigens meist als einfachen 
P-Regler.

Manchmal mit (statischer) Nullpunktverschiebung, wenn das, was auf der 
anderen Seite entnommen wird, bekannt ist (durch Durchflussmessung, oder 
weil es der immer gleiche Arbeitspunkt der Anlage ist).

Ansonsten ist bei typischen Anwendungen (Puffergefäß) der stationäre 
Fehler häufig wurscht.

von Hermann (Gast)


Lesenswert?

Sven,

die Förderpumpe bei einer Füllstandsregelung muss mit einem reinen 
P-Regelung geregelt werden. Grund: Der Behälterstand selbst wirkt als 
Integrator. Den I-Teil braucht man nur, wenn die Stellgrösse bei 
Sollwert == Istwert nicht gleich Null ist,

Ciao, Hermann

von Sven L. (svenl)


Lesenswert?

Hallo mechatroniker,

vielen Dank für Deine Antwort! - Eine langsame Abtastung (Zeitkonstante 
10 Sekunden) und entsprechender I-Anteil sorgt für eine langsame 
Regelung, bei welcher keine großartigen Schwankungen auftreten.

Wie Du schon bemerkt hast, wird dann aber immer eine Regelabweichung 
vorhanden sein und solange der Istwert unter dem Sollwert bleibt, 
funktioniert das System auch stabil.

Wie kann man denn so einen autonom bildenden Offset dem Regler 
beibringen?

Viele Grüße!

Sven

von Sven L. (svenl)


Lesenswert?

Hermann,

ja genau das ist das Problem: Ist = Soll wird ohne I-Anteil nicht 
erreicht, was aber in der Natur eines P-Reglers liegt. Es bleibt immer 
eine Regelabweichung bestehen.

Viele Grüße!

Sven

von Karl (Gast)


Lesenswert?

Sven L. schrieb:
> Es bleibt immer
> eine Regelabweichung bestehen.

Und ist die Regelabweichung dann ein Problem in deiner Anwendung? Wenn 
du die Pumpe nicht abschalten willst, ist das doch genau was du 
brauchst.

von Tcf K. (tcfkao)


Lesenswert?

@Hermann: Der Behälter (=Regelstrecke) wirkt zwar integrierend, aber das 
hat nichts mit dem Verhalten des Reglers zu tun.

@TO: Wenn Du mit einer dauerhaften Regelabweichnung leben kannst bleibe 
beim reinen P-Regler. Wenn die dauerhafte Regelabweichung Null werden 
soll brauchst Du den I-Anteil. Um die Überschwinger zu vermeiden den 
D-Anteil, d.h. nähert sich der Füllstand von "unten" dem Sollwert wirkt 
der D-Anteil gegen und der Füllstand nähert sich "sanfter" dem Soll, 
ohne Überschwingen aber auch erst nach längerer Zeit. Bei konstanter 
Entnahme wird der Füllstand durch den I-Anteil exakt erreicht, bei 
Verringerung der Entnahme muss natürlich erst mal eine positive 
Regeldifferenz (=Überfüllung) entstehen bevor der Regler reagieren kann. 
Kein Regler kann ohne Regeldifferenz auf sich ändernde Bedingungen 
reagieren.

Wenn die Pumpe nicht ganz abgeschaltet werden soll hilft wohl nur eine 
manuelle Begrenzung der Stellgröße (per Codierung).

von Sven L. (svenl)


Lesenswert?

Hallo zusammen,

eine dauerhafte Regelabweichung ist nicht erwünscht und wird auch nicht 
akzeptiert.

Der Hintergrund ist der, dass das Behältnis zusätzlich mit einem 
leichten Überdruck beaufschlagt ist, welcher den konstanten Abfluss der 
Flüssigkeit ermöglicht (Differenzdruck).

Das Nachfüllen in das Behältnis bringt einerseits neue Flüssigkeit 
hinein und erhöht aber auch den Druck. - Die Regelung soll am 
Gleichgewichtspunkt (Zufluss = Abfluss) verharren bzw. maximal leicht 
und langsam um diesen pendeln.

Plötzlich auftretende Druckschwankungen durch Abschaltung der Pumpe 
bringen das System stark aus dem Gleichgewicht.

Ich verfolge gerade folgenden Ansatz:
Die letzte Stellgröße != 0 werden bei jedem Regleraufruf gespeichert. 
Wird der Fehler null, und damit die Steuergröße null, wird mit dem 
letzten Wert weitergefahren, bis der Regler wieder eine Stellgröße 
ausgibt, die sich durch ihren Integralteil dem Ersatzregelwert 
angenähert hat. - Nicht schön, sieht aber erst einmal nicht schlecht 
aus...

Gibt es evtl. andere Vorschläge?

Viele Grüße!

Sven

von Marian (phiarc) Benutzerseite


Lesenswert?

Sven L. schrieb:
> Gibt es evtl. andere Vorschläge?

Den Überdruck regulieren?

von Tcf K. (tcfkao)


Lesenswert?

Andere? Nö, halt wie gesagt dass nur durch den Integralanteil die 
Regelabweichung zu Null werden kann. Und Abschalten der Pumpe kannst Du 
nur durch manuelle Begrenzung des Stellwertes erreichen, also etwas das 
unabhängig vom Regleralgorithmus ist.

von Sven L. (svenl)


Lesenswert?

@Marian:
Der Druck wird bereits reguliert und das funktioniert. Nur kann der 
Druck nicht so schnell ausgeregelt werden (Totzeit der Regelstrecke über 
die Aktoren zu lang). Überdruck baut sich bekanntlich ganz schnell ab... 
:)

Begrenzung, sprich: Das Verharren auf dem Idealwert mache ich bereits 
außerhalb meines Regelalgorithmus. Im Endeffekt bekomme ich aus dem 
PID-Regler ja auch nur eine Korrekturgröße heraus. Sie sagt also nur 
aus, ob die Pumpe zum gegenwärtigen (Abtast-)Zeitpunkt und dem 
"virtuellen Nullpunkt" schneller oder langsamer laufen muss.

Das Gleiten dieses "virtuellen Nullpunktes" auf den Wert, auf den sich 
das System einpendelt, wäre ideal. So würde die Korrekturgröße in eine 
Geschwindigkeitsänderung umgesetzt, ansonsten bei Stellgröße 0 eine 
Grundgeschwindigkeit beibehalten. - Wie gesagt: Dieses Offset ist nicht 
statisch, sondern pendelt sich beim Hochfahren des Systems ein.

Viele Grüße!

Sven

von Tcf K. (tcfkao)


Lesenswert?

Das was Du "virtueller Nullpunkt" nennst ist ein sprachlicher Mischmasch 
aus der Regeldifferenz (eben der Differenz zwischen Soll- und Istwert) 
und der Stellgröße, die bei einem Regler mit I-Regler eben nur den 
I-Anteil enthält wenn die Regeldifferenz Null ist, also Sollwert = 
Istwert.
Den D-Anteil brauchst Du wenn Du die Überschwinger vermeiden willst. Am 
Besten in sauberen Blöcken aufbauen, sonst wird das gemurkse.

von Ernst O. (ernstj)


Lesenswert?

Die Idee, eine gewisse Menge Luft unter Druck in dem Behälter zu halten, 
um den Abfluss zu ermuntern hat einen Haken: Luft löst sich unter Druck 
in Wasser auf - zwar nur in geringer Menge, aber über die Zeit doch 
merklich.
Nicht umsonst ist in Asugleichsbehältern von Zentralheizungen eine 
Gummimembran eingebaut.

Die von dir beobachtete Nullpunktverschiebung muss also nicht 
ausschliesslich ein Reglerproblem sein.

von Dominik E. (Gast)


Lesenswert?

Hallo,
Hast du ein paar Daten des Behälters? Volumen/Füllhöhe/Grundfläche? 
Wieviel Volumenstrom fließt aus? Ist der Volumenstrom am Ausgang 
regelbar (Ventil) oder stellt er sich nur über die Druckdifferenz bei 
fixer Abflussgröße ein? Bin mir sicher, dass sich hier eine saubere 
Regelung implementieren lässt.

Bei konstantem (oder bekanntem) Füllstand und Behälterdruck könnte man 
relativ einfach den Ausgangsvolumenstrom für eine Vorsteuerung 
heranziehen. Dadurch wird die Stellgrößenbeschränkung nach unten hin 
hinfällig.

Melde dich einfach nochmal wenn du mehr infos brauchst

LG
Dominik

von Sven L. (svenl)


Lesenswert?

Hallo Dominik,

leider kann ich Daten über den Behälter nicht herausgeben. Die 
beaufschlagten Drücke spielen sich im millibar-Bereich ab und der sich 
daraus ergebende Differenzdruck ist ebenfalls sehr niedrig.

Ich habe die Regelung jetzt mit vorwiegend proportionaler Regelung 
angepasst und nutze einen sehr kleinen Integralteil zum Erreichen des 
Endwerts. - In der bisherigen Parametrierung war der Integralteil zu 
hoch, was ein ständiges Schwingen des Füllstandes und damit der Drücke 
verursacht hat. Da die Drücke ebenfalls reguliert werden, haben sich die 
Regler untereinander aufgeschwungen.

Aktuell habe ich ein zufriedenstellendes Ergebnis erreicht, welches kaum 
noch eine Schwingneigung zeigt. Die Glättung der Eingangsgrößen 
(gleitender Mittelwert) wie auch die starke Reduktion des Integralteils 
der einzelnen Regler bringen dieses Ergebnis.

Der Regler des Füllstandes regelt kontinuierlich außerhalb und innerhalb 
seines Totbereichs verändert er die Regelgröße nicht. Das Ergebnis ist 
ein leichtes Pendeln zwischen Ober- und Untergrenze des Sollbereichs. 
Eine kontinuierliche Regeleung ohne Totbereich hingegen bringt durch die 
Pumpenregelung zu viele Störgrößen ein und die Regler arbeiten 
gegeneinander und das Gesamtsystem kommt wieder in's Schwingen.

Ich denke das Gesamtsystem lässt sich durch weitere Anpassung der 
Regelparameter noch optimieren, aber das liegt nicht mehr in meinem 
Verantwortungsbereich.

Vielen Dank für alle Beiträge und die Ideen!

Sven

von Sven L. (svenl)


Lesenswert?

Ernst O. schrieb:

> Die Idee, eine gewisse Menge Luft unter Druck in dem Behälter zu halten,
> um den Abfluss zu ermuntern hat einen Haken: Luft löst sich unter Druck
> in Wasser auf - zwar nur in geringer Menge, aber über die Zeit doch
> merklich.
> Nicht umsonst ist in Asugleichsbehältern von Zentralheizungen eine
> Gummimembran eingebaut.

Hallo Ernst,

vielen Dank für Deinen Beitrag! - Bei der zu fördernden Flüssigkeit 
handelt es sich nicht um Wasser und auch nicht um eine Heizungsanlage 
mit entsprechend hohen Drücken.

Der Gedanke, dass sich allerdings Luft in der Flüssigkeit lösen könnte 
ist nicht schlecht und würde eine langfristige Abweichung der Drücke 
erklären können.

Ich danke Dir für diesen Hinweis!

Viele Grüße!

Sven

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.