Forum: Mikrocontroller und Digitale Elektronik D-T PID controller in IIR structure with anti wind-up


von Dominik B. (dspfriend)


Lesenswert?

Hallo liebe Community,

ich koennte vielleicht mal ein wenig Unterstuetzung gebrauchen. Ich 
versuche derzeit auf einem digitalen signal Prozessor einen PID 
controller in IIR-Filter form zu implementieren.
Das sollte eigentlich einen schoenen PID controller mit low pass Filter 
Verhalten fuer den D-Anteil ergeben.
Meine Frage dazu: Wo muss ich den anti wind-up implementieren, damit das 
Integrieren begrenzt wird.
Wuerde gerne ersteinmal einfachheits halber ein simples I-clamping 
verwenden, sprich mit einer Variablen die fehler Integration ab oder zu 
schalten. Back tracking ist aber auch willkommen. Implementierung sollte 
kein Problem sein, eher die Frage: Wo in meinem IIR filter ist der 
I-Anteil.
D-T Transferfunction gebe ich auch nochmal eben mit:
Bin dankbar fuer jede Hilfe. Eine Gleichung die das Problem beschreibt 
oder aehnliches waere nicht schlecht.

Schoene Gruesse

von Cesar (Gast)


Lesenswert?

Hallo Dominik,

ich bin gerade in meinem Praktikum und habe genau die Gleiche Frage.

es ist schon vielleicht zu weit Weg, aber kannst du mir sagen zur welche 
Lösung bist du eigentlich gekommen?

von Dominik B. (Gast)


Lesenswert?

Hi Cesar,

die Antwort ist tatsächlich ganz einfach:
Limitiere V0 und du hast den anti wind-up schon fertig.
Da V1, V2, V3 etc jeweils die um z verzögerten Werte sind, werden auch 
diese auf V0 gesetzt und der Integralanteil somit begrenzt.
Hier ein simples Code Beispiel:

#define LIMIT(A, B, C)           ((A < B) ? (B) : (A > C) ? (C) : (A))

/* Voltage loop calculation */
VoltU0 = (B0 * VoltE0) + (B1 * VoltE1) + (B2 * VoltE2) + (A1 * VoltU1) + 
(A2 * VoltU2)

/* Limit voltage loop output */
VoltU0 = LIMIT(VoltU0, DutyCycleMin, DutyCycleMax);

/* Store control loop variables */
VoltU2 = VoltU1;
VoltU1 = VoltU0;
VoltE2 = VoltE1;
VoltE1 = VoltE0;

Hoffe das hilft dir weiter, ansonsten einfach nochmal melden, falls es 
Probleme gibt.

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.