import numpy as np
import matplotlib.pyplot as plt
'ggplot')
plt.style.use(
import control as ct
In ihrem Buch Advanced PID Control haben Åström und Hägglund ein verbessertes Tuning für PI-Regler vorgestellt. Wie beim Ziegler-Nichols stehen Tuning-Tabellen für den Zeitbereich als auch den Frequenzbereich zur Verfügung.
Zeitbereich
Auf Basis eines FOPTD Modells \((K,T,L)\) schlagen Åström und Hägglund folgende PI-Parametrierung vor:
Reglertyp | \(K_p\) | \(K_i\) |
---|---|---|
Aström-Hägglund PI | \(\frac{0.15L+0.35T}{KL}\) | \(\frac{0.46L+0.02T}{KL^2}\) |
Ziegler-Nichols PI | \(\frac{0.9T}{KL}\) | \(\frac{0.27T}{KL^2}\) |
Frequenzbereich
Auch auf Basis der Frequenzbereichs-Parameter \(k_c, w_c, (K)\) werden von Aström und Hägglund folgende PI-Parameter vorgeschlagen. Dieses Tuning erfordert aber einen weiteren Parameter \(K\), welcher die konstante Verstärkung der Strecke darstellt.
Reglertyp | \(K_p\) | \(K_i\) |
---|---|---|
Aström-Hägglund PI | \(0.16k_c\) | \(\frac{0.16k_c+0.072/K}{T_c}\) |
Ziegler-Nichols PI | \(0.45k_c\) | \(\frac{0.54k_c}{T_c}\) |
Hinweis: Das Åström-Hägglund Tuning liefert meist niedrigere Reglerverstärkungen als die Ziegler-Nichols Methode. Es sei noch darauf hingewiesen, dass die hier verwendete PI-Reglerstruktur eine parallele Struktur ist. Wir könnten die \(K_p\) und \(K_i\) Werte aber auf die \(K_p\) und \(T_i = K_p / K_i\) Werte umrechnen.
Beispiel
Mit diesem Beispiel wollen wir zeigen, dass modifizierte Einstellregeln oft bessere Ergebnisse liefern, als die ursprüngliche Ziegler-Nichols Methode. Ist ein Modell gegeben, so erweisen sich gerade die Frequenzbereichsmethoden als einfach anzuwenden.
Gegeben sei die Strecke (Rasterkraftmikroskop)
\[ P(s) = \frac{1-e^{-sT_n}}{sT_n(s+1)} \]
wobei für \(T_n = 2n\pi a/\omega_0 = 2n\pi\xi\). Für dieses Beispiel legen wir die Parameter mit \(\xi=0.002\) und \(n=20\) fest.
= ct.tf('s')
s
= 20
n = 0.002
xi = 2*n*np.pi*xi
Tn
= ct.pade(Tn,4)
num, den = ct.minreal((s/s-ct.tf(num,den))/(s*Tn*(s+1)))
P P
2 states have been removed from the model
\[\frac{633.3 s^2 + 4.211 \times 10^{5}}{s^5 + 80.58 s^4 + 2929 s^3 + 5.576 \times 10^{4} s^2 + 4.74 \times 10^{5} s + 4.211 \times 10^{5}}\]
Die Verstärkung \(K=P(0)\) kann mit der Methode control.gcgain
oder mit der Methode ct.freqresp
ermittelt werden.
= ct.dcgain(P)
K print(f"Die Verstärkung der Strecke lautet {K}.")
0)[0][0]) np.allclose(ct.dcgain(P),ct.freqresp(P,
Die Verstärkung der Strecke lautet 0.9999999999999978.
True
= ct.margin(P)
gm, pm, wg, wp = gm
kc = wg
wc = 2*np.pi/wc
Tc print("Kritische Verstärkung", kc)
print("Kritische Frequenz", wc)
print("Kritische Periodenzeit", Tc)
Kritische Verstärkung 21.726882224637702
Kritische Frequenz 13.110950964797556
Kritische Periodenzeit 0.4792318516063189
def astrom_hagglund(kc,Tc,K):
= kc*0.16
kp = (0.16*kc+0.72/K)/(Tc)
ki return kp, ki
def ziegler_nichols(kc,Tc):
= kc*0.45
kp #Ti = Tc/1.2
= 0.54*kc/Tc
ki return kp, ki
= ziegler_nichols(kc,Tc)
kp, ki print(f" Die Reglerverstärkungen ergeben sich mit der Ziegler-Nichols Methode zu {kp = } und {ki = }.")
= kp+ki/s
C_1 = astrom_hagglund(kc,Tc,K)
kp, ki print(f" Die Reglerverstärkungen ergeben sich mit der Aström-Hägglund Methode zu {kp = } und {ki = }.")
= kp+ki/s C_2
Die Reglerverstärkungen ergeben sich mit der Ziegler-Nichols Methode zu kp = 9.777097001086966 und ki = 24.48192114522143.
Die Reglerverstärkungen ergeben sich mit der Aström-Hägglund Methode zu kp = 3.4763011559420325 und ki = 8.756306872918845.
Das verbesserte Verfahren nach Åström und Hägglund liefert kleinere Reglerparameter und der PI-Regler ist somit als weniger aggressiv anzusehen.
= ct.minreal(P*C_1)
L_1 = ct.feedback(L_1,1)
T_1 = ct.stability_margins(L_1)
_,_,gs,_,_,ws print(f"Die Stabilitätsreserve tritt bei {ws = } rad/s auf und nimmt den Wert {gs = } an.")
= ct.minreal(P*C_2)
L_2 = ct.feedback(L_2,1)
T_2 = ct.stability_margins(L_2)
_,_,gs,_,_,ws print(f"Die Stabilitätsreserve tritt bei {ws = } rad/s auf und nimmt den Wert {gs = } an.")
0 states have been removed from the model
Die Stabilitätsreserve tritt bei ws = 9.487327421223707 rad/s auf und nimmt den Wert gs = 0.2685244048683104 an.
0 states have been removed from the model
Die Stabilitätsreserve tritt bei ws = 5.7624674998827174 rad/s auf und nimmt den Wert gs = 0.6139198817877397 an.
Der PI-Regler nach Åström und Hägglund besitzt eine größere Stabilitätsreserve und ist somit weniger empfindlich gegenüber Parameter-Schwankungen der Strecke. Diese größere Stabilitätsreserve ist mithilfe des Nyquist-Diagramms deutlich zu erkennen.
=(16,8))
plt.figure(figsize
ct.nyquist([P,L_1,L_2])= plt.Circle((0, 0), 1., color='black', fill=False)
circle1
plt.gca().add_patch(circle1)-3,3])
plt.ylim([-3,3])
plt.xlim(['equal', 'box')
plt.gca().set_aspect(
# for legend
= plt.gca().get_lines()
lines = plt.legend([lines[i] for i in [0,3,6]], ["Prozess", "Ziegler-Nichols", "Aström-Hägglund"], loc=1)
legend
plt.gca().add_artist(legend)
plt.show()
=(16,8))
plt.figure(figsize= ct.step_response(T_1, 10)
tout, yout ='Ziegler-Nichols')
plt.plot(tout, yout, label= ct.step_response(T_2, 10)
tout, yout ='Aström-Hägglund')
plt.plot(tout, yout, label
plt.legend() plt.show()
Fazit
Wir sehen, dass das verbesserte Verfahren nach Åström-Hägglund einen weniger aggressiven und robusteren PI-Regler erzeugt.
Die bekannten Tuning-Verfahren wie Ziegler-Nichols und Chien-Hrones-Reswick liefern oftmals nicht die besten PID-Regler. Es kann hilfreich sein, mit verschiedenen PID-Tuning-Verfahren vertraut zu sein.
Referenzen
- Feedback Systems: An Introduction for Scientists and Engineers, Second Edition, 2020/2022 (Karl J. Aström, Richard M. Murray)
- PID Controllers: Theory, Design and Tuning, Second Edition, 1995 (Karl J. Åström, Tore Hägglund)
- Advanced PID Control, 2006 (Karl J. Åström, Tore Hägglund)