调节 PID 控制器以侧重参考跟踪或抗扰(命令行)
此示例说明如何在命令行中使用 PID 调节选项,以减少参考跟踪中的超调或改善对被控对象输入扰动的抑制。通过使用 pidtune
命令,该示例说明如何在 PI 和 PID 控制系统中权衡参考跟踪和抗扰性能。
以下图中的控制系统为例。
设定点跟踪是输出 y 对输入信号 r 的响应。输入抗扰是抑制信号 d 对输出 y 产生的影响。
创建一个被控对象模型,在此示例中由下式给出:
G = tf(0.3,[1 0.1 0]);
为此被控对象设计一个 PI 控制器,使用带宽 0.03 rad/s。
wc = 0.03;
[C1,info] = pidtune(G,'PI',wc);
使用默认控制器检查控制系统的阶跃参考跟踪和阶跃抗扰。从 d 到 y 的扰动响应等效于由 feedback(G,C1)
给出的闭环响应。
T1 = feedback(G*C1,1); GS1 = feedback(G,C1); subplot(2,1,1); stepplot(T1) title('Reference Tracking') subplot(2,1,2); stepplot(GS1) title('Disturbance Rejection')
默认情况下,pidtune
会根据给定的带宽调节控制器以实现参考跟踪和抗扰之间的平衡。在此例中,控制器产生的参考跟踪响应中出现了一些超调。而且在初始峰值后,控制器需用比参考跟踪稍长的稳定时间来抑制输入扰动。
根据您的应用,您可能需要更改参考跟踪和抗扰之间的平衡以侧重其中一项。对于 PI 控制器,您可以通过更改所调节系统的相位裕度来改变这种平衡。pidtune
返回的默认控制器会产生 60° 的相位裕度。
info.PhaseMargin
ans = 60.0000
针对具有相同带宽的 45° 和 70° 相位裕度设计控制器,并比较它们产生的参考跟踪和抗扰。
opts2 = pidtuneOptions('PhaseMargin',45); C2 = pidtune(G,'PI',wc,opts2); T2 = feedback(G*C2,1); GS2 = feedback(G,C2); opts3 = pidtuneOptions('PhaseMargin',70); C3 = pidtune(G,'PI',wc,opts3); T3 = feedback(G*C3,1); GS3 = feedback(G,C3); subplot(2,1,1); stepplot(T1,T2,T3) legend('PM = 60','PM = 45','PM = 70') title('Reference Tracking') subplot(2,1,2); stepplot(GS1,GS2,GS3) title('Disturbance Rejection')
ans = Legend (PM = 60, PM = 45, PM = 70) with properties: String: {'PM = 60' 'PM = 45' 'PM = 70'} Location: 'northeast' Orientation: 'vertical' FontSize: 8.1000 Position: [0.7133 0.4882 0.1727 0.2592] Units: 'normalized' Use GET to show all properties
将相位裕度降至 45° 可加快抗扰,但也会增大参考跟踪响应的超调量。将相位裕度增至 70° 可完全消除超调,但会导致抑制扰动极其缓慢。您可以尝试不同相位裕度值,直到找到适合的值,能为您的应用平衡参考跟踪和抗扰。相位裕度对这种平衡的影响取决于被控对象模型。对于某些被控对象模型,这种影响不像此示例中表现得那样明显。
如果要同时固定控制系统的带宽和相位裕度,您仍可以使用 pidtune
的 DesignFocus
选项来更改参考跟踪和抗扰之间的平衡。您可以将 DesignFocus
设置为 'disturbance-rejection'
或 'reference-tracking'
来调节控制器,使其侧重其中之一。
DesignFocus
选项对于具有更多可调参数的控制系统更高效。因此,当与 PI 控制器结合使用时,其效果不明显。要查看其效果,请分别使用不同的 DesignFocus
值为相同的带宽和默认相位裕度 (60°) 设计一个 PIDF 控制器。比较结果。
opts4 = pidtuneOptions('DesignFocus','balanced'); % default focus C4 = pidtune(G,'PIDF',wc,opts4); T4 = feedback(G*C4,1); GS4 = feedback(G,C4); opts5 = pidtuneOptions('DesignFocus','disturbance-rejection'); C5 = pidtune(G,'PIDF',wc,opts5); T5 = feedback(G*C5,1); GS5 = feedback(G,C5); opts6 = pidtuneOptions('DesignFocus','reference-tracking'); C6 = pidtune(G,'PIDF',wc,opts6); T6 = feedback(G*C6,1); GS6 = feedback(G,C6); subplot(2,1,1); stepplot(T4,T5,T6) legend('Balanced','Rejection','Tracking') title('Reference Tracking') subplot(2,1,2); stepplot(GS4,GS5,GS6) title('Disturbance Rejection')
ans = Legend (Balanced, Rejection, Tracking) with properties: String: {'Balanced' 'Rejection' 'Tracking'} Location: 'northeast' Orientation: 'vertical' FontSize: 8.1000 Position: [0.7047 0.4882 0.1812 0.2592] Units: 'normalized' Use GET to show all properties
当使用 DesignFocus
选项来侧重调整后控制系统中的参考跟踪或抗扰时,您仍可以调整相位裕度,以进一步微调这两种性能测度之间的平衡。将 DesignFocus
和 PhaseMargin
结合使用,以实现最符合您设计需求的性能平衡。
这两个选项对系统性能的影响很大程度上取决于被控对象的属性。对某些被控对象来说,更改 PhaseMargin
或 DesignFocus
选项没有或几乎没有影响。