前面教程已經得出了定速巡航系統的傳遞函數模型:
本教程採用的系統參數如下:
m
車輛質量 1000 kg
b
阻尼係數 50 N.s/m
u
額定控制力 500 N
控制性能目標
- 上升時間 < 5s
- 超調 < 10%
- 穩態誤差 < 2%
下面是典型的反饋控制系統框圖:
性能設計目標
- 上升時間 < 5s
- 超調 < 10%
- 穩態誤差 < 2%
比例控制
回顧控制教程 —— 介紹篇:4.根軌跡控制器設計,根軌跡圖顯示了單個增益從零變化到無窮大時所有可能的閉環極點的位置。因此,僅考慮比例控制器 來解決該問題,閉環傳遞函數爲:
另外,從控制教程 —— 介紹篇:4.根軌跡控制器設計我們知道MATLAB的命令sgrid
可以用於顯示根軌跡圖的範圍。要使用sgrid
,首先需要確定阻尼比 ,和自然頻率 ,以下兩個方程式將用於確定阻尼比和自然頻率:
其中:
- = 自然頻率 [rad/s]
- = 阻尼比
- = 上升時間 [s]
- = 最大超調
我們的設計標準之一是上升時間小於5s,從第一個方程式中,我們可以得到自然頻率必須大於 0.36。同樣適用第二個方程式,我們可以得到阻尼比必須大於 0.6 ,因爲最大過沖必須小於 10%。
現在,我們準備生產一個根軌跡圖,並使用sgrid
在根軌跡上找到一個可接受的區域。
m = 1000;
b = 50;
r = 10;
s = tf('s');
P_cruise = 1/(m*s+b);
rlocus(P_cruise)
axis([-0.6 0 -0.6 0.6]);
sgrid(0.6, 0.36)
角度部分的兩條虛線表示恆定阻尼比的位置();虛線之間的阻尼比大於 0.6 ,而虛線之外的阻尼比小於 0.6.半橢圓表示恆定自然頻率()的位置,半橢圓外部的自然頻率大於 0.36,內部小於 0.36。
接下來,我們可以使用 rlocfind
命令找到將閉環極點放置在所需區域中的增益。將代碼[kp, poles] = rlocfind(P_cruise)
輸入到MATLAB命令窗口中,運行後,您將看到提示,要求您在根軌跡圖上選擇一個點。由於要在虛線()和半橢圓()之間選擇一個點,如圖,約在 -0.4 的位置,如下圖中的十字標記。
請注意,從MATLAB命令窗口返回的值可能並不完全相同,但至少具有相同的數量級。該返回值可以用作補償器的增益,閉環階躍響應可以按一下方式獲得:
Kp = 350.2567;
sys_cl = feedback(Kp*P_cruise,1);
t = 0:0.1:20;
step(r*sys_cl,t)
使用您剛剛選擇的增益,就可以滿足上升時間和超調的條件。但是,穩態誤差仍然超過 10%。
滯後控制器
爲了減少穩態誤差,將向系統添加一個滯後控制器,滯後控制器的傳遞函數爲:
閉環傳遞函數(不包括)現在變爲:
最後,包括環路增益,閉環傳遞函數爲:
如果您在拓展部分(後續補充)部分查閱了關於使用根軌跡設計滯後或相位滯後補償器部分,則滯後控制器的極點和零點必須放置在一起。而且,它將穩態誤差減少 。因此,假設 ,。
zo = 0.3;
po = 0.03;
s = tf('s');
C_lag = (s+zo)/(s+po);
rlocus(C_lag*P_cruise);
axis([-0.6 0 -0.4 0.4])
sgrid(0.6,0.36);
再次使用rlocfind
命令,我們可以選擇一個新的環路增益。這裏還是選擇 -0.4 附近實軸上的點,如下圖示:
[Kp,poles]=rlocfind(C_lag*P_cruise)
完成此操作後,可以從MATLAB命令窗口中看到以下輸出內容。
然後,我們可以生成新的閉環階躍響應。
Kp = 1293.6;
sys_cl = feedback(Kp*C_lag*P_cruise,1);
t = 0:0.1:20;
step(r*sys_cl,t)
axis([0 20 0 12])
如您所見,穩態誤差已減小到接近零。超調是之後控制器中添加零點的結果,目前,所有設計標準都已滿足,不需要進一步的迭代。但是,您可以嘗試使用不同的 和 ,來查看它們對閉環系統響應的影響。