D-T PID controller in IIR structure with anti wind-up

OP #3542101
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
Gast #6213226
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren