控制教程 —— 介紹篇:9.基於Simulink爲火車系統設計PID控制器

上篇控制教程 —— 介紹篇:8.基於Simulink爲火車系統建模介紹瞭如何使用Simulink對火車系統進行數學建模,這篇教程將介紹如何在Simulink中爲建立好的火車系統設計控制器。

開環被控對象模型

回顧上節內容,我們建立了一個火車系統的數學模型。
在這裏插入圖片描述
假設火車沿直線方向運動,我們希望能對火車的牽引力進行控制,使其能夠平穩的啓動和停止,並能在穩態下以儘可能小的誤差跟蹤給定的恆定速度指令。

在Simulink中實現PID控制器

我們首先創建一個子系統來便於理解,刪除三個scope模塊和Singal Generator模塊,並用sink庫中的 out 模塊和 in 模塊替代,給相應的模塊編輯對應的標籤,“x1_dot” ,“x1”,“x2”以及“F”。
在這裏插入圖片描述
接下來,選中所有模塊(Ctrl+A),然後右鍵單擊,在彈出的菜單中選擇Create Subsystem from Selection(Ctrl+G)。然後重新排列和標記後,可以得到如下模型
在這裏插入圖片描述
現在,我們可以向窗口中添加控制器,這裏我們使用PID控制器,該控制器可以從Continuous庫中拖出,將該模塊與火車子系統串聯放置,如下圖:
在這裏插入圖片描述
我們將控制器的輸出定義爲火車牽引力 “F”,雙擊PID Control模塊,我們首先將積分(I)增益設置爲0,並將比例§和微分(D)增益分別設置爲默認值1和0。接下來,從Math Operations庫中添加一個Sum模塊。雙擊該模塊,然後將List of signs修改爲|+-,我們希望控制的是火車頭的速度,這裏通過“x1_dot”信號上引出並連接到Sum模塊的負輸入端。Sum模塊的輸出將是火車頭速度的誤差, 應連接到PID控制器的輸入端。調整模塊連接並添加標籤如下
在這裏插入圖片描述
接下來,從Source庫添加一個Signal Builder模塊作爲火車頭速度的給定。根據需求,我們想讓火車能夠平穩的加速並平穩的停下來,因此我們將給定速度升至 1m/s,然後再降到 0m/s。要生成這類信號,可以雙擊Signal Builder模塊,然後從模塊對話框頂部的 Axes 菜單中選擇 Change Time Range。將Max time設置爲 300s。接下來,將啓動階躍設置在10s,停止階躍設置在150s。這可以通過單擊信號圖的階躍位置(左右垂直線),並將其拖動到需要的位置,或在窗口底部的T中輸入對應的時間。
在這裏插入圖片描述
再從Sink庫中拖一個Scope,並用他替換火車速度的 Out1模塊,重新添加標籤。
在這裏插入圖片描述
現在,我們準備運行仿真。

運行閉環模型仿真

在運行模型之前,我們需要對模型中使用的每個變量賦值,對於我們的模型,使用如下參數:

  • M1M_1 = 1 kg
  • M2M_2 = 0.5 kg
  • kk = 1 N/sec
  • FF = 1 N
  • μ\mu = 0.02 sec/m
  • gg = 9.8 m/s^2
M1 = 1;
M2 = 0.5;
k  = 1;
F  = 1;
mu = 0.02;
g  = 9.8;

在這裏插入圖片描述
在MATLAB命令窗口中執行以上命令,接下來,需要設置仿真運行時間,爲了匹配Signal Builder模塊中時間範圍。可將仿真Stop Time設置爲300。現在,運行仿真並觀察 “x1_dot” 示波器的結果,從圖中可以看出,系統是穩定的。
在這裏插入圖片描述
由於我們只是用了比例環節,產生的穩態誤差並不能令人滿意,因此我們將展示如何重新設計控制器。首先將演示如何將Simulink中的模型提取到MATLAB中進行分析和設計,然後,我們將演示如何直接在Simulink中設計控制器。

將模型提取到MATLAB

Simulink控制器設計工具箱提供了將模型從Simulink提取到MATLAB工作空間的功能。這對於複雜的或非線性的仿真模型特別有效。對於離散時間(採樣)模型也非常有用。本示例中,讓我們提取火車子系統的連續時間模型。首先,我們需要確定要提取的模型的輸入和輸出。火車系統的輸入是牽引力 FF 。我們可以通過右鍵單擊標籤爲 F 信號並從菜單中選擇Linear Analysis Points > Open-loop Input。同樣,我們可以右鍵單擊 標籤爲x1_dot的信號並從菜單中選擇Linear Anasis Point > Open-loop Output來確定系統的輸出。這些輸入和輸出現在將由小箭頭符號表示,如下圖所示。由於我們希望自己在沒有控制的情況下提取火車模型,因此我們需要進一步刪除反饋信號,否則我們將提取的是從FFx˙1\dot{x}_1的閉環模型。
在這裏插入圖片描述
現在,我們可以通過選擇APPS > Model Linearizer來打開Model Linearizer進行分析。
注:我使用的是MATLAB2020a,早期版本應該叫 Linear Analysis Tool
在這裏插入圖片描述
打開後的界面如下
在這裏插入圖片描述
該工具是將給定模型(可能是非線性)線性化成一個LTI對象,並允許您指定要線性化的工作點,由於我們的模型本來就是線性的,因此我們選擇工作點沒有作用,現在保持默認的“Model Initial Condition”,爲了生成線性化模型,可以選擇圖中的step按鈕,該按鈕由一個綠色三角形表示。
在這裏插入圖片描述
通過上述檢查,可以自動生成線性化模型的階躍響應。可以將該結果與上一篇博文介紹的階躍響應結果進行對比,可以看到是相同的。此外,線性化過程還生成了對應的linsys1對象。只需要將該對象從Linear Analysis Workspace拖動到MATLAB Workspace中,即可在MATLAB中使用該LTI模型。
在這裏插入圖片描述
提取該模型後,我們現在可以使用MATLAB提供的用於控制器設計的所有功能。例如,讓我們使用以下命令來得到閉環系統的零極點。

sys_cl = feedback(linsys1,1);
p = pole(sys_cl)
z = zero(sys_cl)

在這裏插入圖片描述
從結果中可以看到存在零極點在原點處抵消的情況,此外,其餘極點均具有負實部,這說明現在的模型閉環系統是穩定的,但零極點的分佈說明主導極點的阻尼不足,將產生振盪,這與我們閉環仿真的結果一致,也可以通過工具畫出零極點分佈圖。
在這裏插入圖片描述
接下來我們將設計一個新的控制器來抑制響應中的振盪。

Simulink中的控制器設計

我們可以使用自帶的GUI工具來對PID參數進行快速調整,雙擊模型中的PID控制器,然後選擇PID Tuner,但本教程我們打算使用Control System Designer進行控制器設計
在這裏插入圖片描述
打開後的界面如下
在這裏插入圖片描述
首先要做的是確定要調整的控制模塊,點擊添加模塊按鈕,然後從出現的窗口中選擇PID控制器模塊,如下所示,當然也可以選擇其他類型的模塊如傳遞函數,狀態空間等表示的控制器。選擇完成後在Edit Architecture窗口中選擇OK按鈕。
在這裏插入圖片描述
在這裏插入圖片描述
在進行控制器調整之前,我們必須確定要分析的閉環系統的輸入和輸出。這與我們將線性化模型提取到MATLAB中的方式類似。具體來說,右擊速度命令信號(Signal Builder的輸出),然後從菜單中選擇Linear Analysis Points > Input Perturbation來作爲閉環系統的輸入,接下來右擊速度信號(x1_dot),然後從菜單中選擇Linear Analysis Points > Output Measurement來作爲閉環系統的輸出。
在這裏插入圖片描述
現在我們已經確定了要調整的模塊以及我們的輸入和輸出信號,現在我們可以開始對控制器進行調參了。
選擇Tuning Methods按鈕,我們將選擇希望用於設計控制器的設計方式,在該示例中,我們將採用根軌跡方法,因此在Tuning Methods下選擇Root Locus Editor
在這裏插入圖片描述
然後,我們可以獲取到該模型的根軌跡圖,該軌跡圖顯示了在比例控制下閉環系統的所有可能的閉環極點位置,從圖中可以看到所有環路增益都在左半平面,表明響應是穩定的。
在這裏插入圖片描述
如果我們想降低環路增益,則可以將閉環極點在左半平面進行移動來改變系統的表現。可以通過抓取粉紅色方塊標記的極點位置,向開環零點位置(用星號x標記)拖動來實現。
在這裏插入圖片描述
選定好增益後,我們可以選擇ANALYSIS下的New Plot並選擇New Step來檢查響應的閉環階躍響應。選擇New Input-Output Transfer Response並選擇對應的輸入輸出。
在這裏插入圖片描述
然後單擊繪製按鈕,從產生的閉環階躍響應中,我們可以看到響應是穩定的,但存在一些穩態誤差。
在這裏插入圖片描述
回顧一下,增加積分環節可以減小閉環系統穩態誤差。調用以下形式的PI控制器。
C(s)=Kp+Kis=Kps+Kis C(s) = K_p + \frac{K_i}{s} = \frac{K_ps + K_i}{s}
這個方程式表明要在系統中新增一個純積分極點和一個零點。我們可以在根軌跡圖中右鍵單擊,然後從出現的菜單中選擇Add Pole/Zero > Integrator來添加純積分極點,同樣,可以選擇Add Pole/Zero > Real Zero來新增一個實部零點,這樣添加的話需要自己手動拖動零極點位置到合適的位置,當然,也可以通過選擇Edit Compensator直接輸入要添加的零極點和位置,我們將採用這種方法,在打開的窗口中,添加一個在 -0.15的零點和一個純積分極點,並將環路增益配置在 0.05
在這裏插入圖片描述
得到的根軌跡如圖
在這裏插入圖片描述
和之前一樣,可以獲得當前參數下的階躍響應。
在這裏插入圖片描述
現在,可以將新得到的參數更新到原來的PID控制器中,然後重新進行仿真。
在這裏插入圖片描述
在這裏插入圖片描述
總體而言,這種響應似乎可以達到我們想要火車能平穩的啓動和停止的目標,同時還需要保持最小的穩態誤差。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章