Simulink火速入坑 | PID控制模型
本次的主題是matlab的好哥們——simulink,并附上一個詳盡的PID控制案例,帶你火速入坑。
1 碎碎念
1.1 仿真是什么?
仿真是將實(shí)際系統(tǒng)的物理、數(shù)學(xué)機(jī)理等移植到計(jì)算機(jī)虛擬環(huán)境,并進(jìn)行系統(tǒng)行為的動態(tài)復(fù)現(xiàn)。當(dāng)所研究的系統(tǒng)造價昂貴、實(shí)驗(yàn)的危險性大或需要很長時間才能了解系統(tǒng)參數(shù)變化引起的后果時,仿真是一種非常高效的研究手段。其通過低廉的架設(shè)成本和分析成本獲得與真實(shí)環(huán)境近似等價的輸出效果,從而建立對系統(tǒng)內(nèi)部機(jī)理的深入理解,縮短從概念設(shè)計(jì)到實(shí)際系統(tǒng)的迭代周期與后期更改成本。

總結(jié)起來就是簡單高效、省錢省時間,目前很火的數(shù)字孿生
就衍生于仿真。

1.2 Simulink是什么?
Simulink
是Mathworks
公司推出的MATLAB中的一種可視化仿真工具,是一個模塊圖環(huán)境,用于多域仿真以及基于模型的設(shè)計(jì)。Simulink提供圖形編輯器
、可自定義的模塊庫
以及求解器
,能夠用精準(zhǔn)數(shù)學(xué)模型描述用戶需求并且執(zhí)行動態(tài)仿真。提到Simulink,就繞不開其與Matlab的關(guān)系:

?Matlab
—科學(xué)計(jì)算語言,以編程方式實(shí)現(xiàn)產(chǎn)品設(shè)計(jì);?Simulink
—圖形化開發(fā)環(huán)境,支持各種工程系統(tǒng)的仿真環(huán)境;?Simulink與MATLAB相互集成,能夠在Simulink 中將MATLAB算法融入模型,還能將仿真結(jié)果導(dǎo)出至MATLAB 做進(jìn)一步分析。

1.3 Simulink特點(diǎn)
模塊化開發(fā)環(huán)境
Simulink可理解為一種可視化的語言體系,其通過模塊化的手段把數(shù)學(xué)公式、算法進(jìn)行拆分,用搭積木的方式進(jìn)行組合呈現(xiàn)。
比如下圖表現(xiàn)了飛行控制的整體流程,并對預(yù)設(shè)控制指令、控制模型、飛機(jī)模型、狀態(tài)反饋等部分進(jìn)行了模塊化建模。

因此Simulink建模本質(zhì)上與代碼并無區(qū)別,不過表述方式相比于文本和代碼更為直觀、高效:其可觀測算法中公式之間的上下游關(guān)系,輸入輸出參數(shù)之間的交互關(guān)系,并可實(shí)時觀察不同參數(shù)變化對每個局部行為的影響。
基于模型的完整開發(fā)流程
貫穿研制過程,支持系統(tǒng)設(shè)計(jì)、仿真、自動代碼生成以及嵌入式系統(tǒng)的連續(xù)測試和驗(yàn)證。

豐富的可擴(kuò)展性
可調(diào)用Matlab算法(以模型形式封裝在Simulink環(huán)境中)、C、C++算法等進(jìn)行聯(lián)合仿真,并通過GUI界面進(jìn)行實(shí)時參數(shù)控制。
1.4 Simulink應(yīng)用領(lǐng)域
包括汽車、航空、 工業(yè)自動化、大型建模、復(fù)雜邏輯、物理邏輯, 信號處理等方面。

2 Simulink操作介紹
2.1 Simulink界面
在MATLAB環(huán)境中點(diǎn)擊啟動
Simulink:

Simulink界面,布局上可以分成左右兩欄:
?左側(cè)欄
可快捷打開歷史文件或工程項(xiàng)目;?右側(cè)
分成New、和Examples兩個欄目:?New
用于創(chuàng)建新模型、新庫模塊、新工程;?Examples
提供了豐富的預(yù)設(shè)模型,可以直接調(diào)用,大家可以大膽探索。

點(diǎn)擊Blank Model
創(chuàng)建空模型;
在空模型界面點(diǎn)擊Library Browser
,打開模塊庫:

2.2 常用模塊介紹
2.2.1 輸入信號源模塊庫(Sources)

其中,Step
階躍信號在仿真實(shí)驗(yàn)中會經(jīng)常用到,雙擊模塊彈出參數(shù)對話框,可進(jìn)行設(shè)置:
?“Step time”為階躍信號產(chǎn)生的時間?“Initial value”為階躍信號初始值?“Final value”為階躍信號終了值?“Sample time”為采樣時間
2.2.2 接收模塊庫(Sinks)

2.2.3連續(xù)系統(tǒng)模塊庫(Continuous)

其中,Transfer Fcn
傳遞函數(shù)模塊在仿真實(shí)驗(yàn)中會經(jīng)常用到,雙擊模塊彈出參數(shù)對話框,可進(jìn)行設(shè)置:
?“Numerator”欄是傳遞函數(shù)分子多項(xiàng)式系數(shù)向量?“Denominator”欄是傳遞函數(shù)分母多項(xiàng)式系數(shù)向量?注意:當(dāng)多項(xiàng)式缺項(xiàng)時,必須將對應(yīng)系數(shù)的“0”輸入,不能遺漏
2.2.4數(shù)學(xué)運(yùn)算模塊(Discrete)

2.2.5 非連續(xù)函數(shù)模塊

同時,Simulink給各個模塊提供了詳細(xì)的說明文檔以便查閱:

2.3 模塊使用技巧
改變模塊的方向
在Simulink中,模塊輸入端口位于模塊左側(cè),輸出端口位于模塊右側(cè),但有時需要對其方向進(jìn)行改變。方法是:用鼠標(biāo)選中模塊對象,利用“Format →Flip Block”(快捷鍵Ctrl +I)可將模塊順時針旋轉(zhuǎn)180°;或者利用“Format →Rotate Block”(快捷鍵Ctrl +R)或?qū)⒛K順時針旋轉(zhuǎn)90°。
仿真參數(shù)設(shè)置
在對系統(tǒng)模型中各個模塊進(jìn)行合適的參數(shù)設(shè)置之后,需要對系統(tǒng)仿真參數(shù)進(jìn)行必要的設(shè)置以開始仿真。
在模型窗口中選擇“Simulation”菜單下的“Simulation parameters”,就會出現(xiàn)一個對話框。仿真參數(shù)設(shè)置共有5個選項(xiàng),分別是Solver
、Workspace I/O
、Diagnostics
、Advanced
和RTW
。
這里選擇一個我們平時用的比較多的,具體講一講Solver的各個選項(xiàng)與設(shè)置方法:

Solver中最常用的幾個設(shè)置有:Simulation time(仿真時間)、Solver options(仿真器選項(xiàng))、Relative tolerance (相對誤差限)和Max step size(最大步長)。
?Simulation time
(仿真時間):包括仿真起始時間和停止時間,它們的差即代表仿真時間;在缺省情況下,Simulink默認(rèn)的仿真起始時間為0 s,仿真結(jié)束時間為10 s。?Solver options
(仿真器選項(xiàng)) :Type項(xiàng)用來選擇變步長或固定步長仿真器。右欄用于選擇仿真器的算法。固定步長仿真器在仿真過程中,其步長是不變的。變步長解法可以在仿真過程中根據(jù)要求調(diào)整運(yùn)算步長。在采用變步長解法時,應(yīng)先指定一個容許誤差限(在Relative tolerance和Absolute tolerance中設(shè)置 ),使得當(dāng)誤差超過誤差限時自動修正仿真步長。?Relative tolerance
(相對誤差限)是規(guī)定了每個狀態(tài)相對于步長的誤差大小,用百分比來表示一個狀態(tài)值。默認(rèn)值是1e-3,即狀態(tài)的計(jì)算值要精確到0.1%;Absolute tolerance(絕對誤差限)是一個閾誤差值,當(dāng)測量的狀態(tài)值接近零時,代表可接受誤差。如果將其設(shè)定為auto,則將每個狀態(tài)的初始絕對誤差限設(shè)置在1e-6。?Max step size
用于設(shè)置最大步長。在默認(rèn)情況下為“auto”,并按下式計(jì)算步長:最大步長=(終止時間-起始時間)/50。但這樣的取法對于仿真時間較長的系統(tǒng)則可能帶來取樣點(diǎn)過于稀疏,而使仿真結(jié)果失真。一般建議對于仿真時間不超過15s的采用默認(rèn)值即可,對于超過15s的每秒至少保證5個采樣點(diǎn),對于超過100s的,每秒至少保證3個采樣點(diǎn)。最大步長的選取直接關(guān)系到系統(tǒng)仿真結(jié)果的準(zhǔn)確性。
第三部分-應(yīng)用仿真
俗話說,實(shí)踐出真知,這里我們以傳統(tǒng)控制算法中的基礎(chǔ)方法、并且在工業(yè)界中得到廣泛應(yīng)用的PID
(proportion integration differentiation)控制為例,跑一個小實(shí)驗(yàn)來練練手。
3.1 算法背景
PID控制應(yīng)該算是歷史悠久且應(yīng)用非常廣泛的控制算法了,距離筆者寫這篇帖子的時候,PID算法已經(jīng)有108年歷史。PID并不是很神秘的東西,在很多實(shí)際應(yīng)用中都可以看到它的身影:溫度控制系統(tǒng)、四旋翼飛行器、倒立擺系統(tǒng)、尋跡小車等等。
應(yīng)用PID控制的前提是系統(tǒng)一定要是一個閉環(huán)系統(tǒng)
,什么是閉環(huán)系統(tǒng)?就是一定要有反饋回路,要能及時反饋我們最終控制的那個量的狀態(tài),給到控制器。也就是說,PID控制是根據(jù)被控系統(tǒng)的狀態(tài)來進(jìn)行控制的,我們需要知道這個狀態(tài)才能決定控制器下一步應(yīng)該怎么做。
總的來說,PID控制的用途分為兩種,
?一種是使某個物理量“保持穩(wěn)定",即便出現(xiàn)外界干擾也能很快回到原始的穩(wěn)定狀態(tài);?另一種是使物理量穩(wěn)定地“跟蹤”給定的信號,穩(wěn)定地隨著給定信號變化。
3.2 算法原理
接下來結(jié)合理論知識來讓大家對PID控制有更進(jìn)一步的認(rèn)識。
下面這個公式是PID控制的核心,PID控制器的控制量就是根據(jù)這個公式計(jì)算出來的??梢钥闯觯刂破髟跀?shù)學(xué)意義上可以看作一個多項(xiàng)式,想要使系統(tǒng)達(dá)到優(yōu)秀的控制效果,關(guān)鍵要調(diào)試公式中三個系數(shù)KP、KI、KD,使其達(dá)到合適的取值。

至于如何調(diào)試參數(shù),這需要根據(jù)被控系統(tǒng)的特性,根據(jù)時域或頻域的方法來分析,這里就不詳細(xì)展開了。
結(jié)合上圖的PID控制系統(tǒng)的基本結(jié)構(gòu)來看這個公式:

具體地,被控系統(tǒng)輸出c(t)
與給定量r(t)
進(jìn)行比較,得到偏差e(t)
,控制器對偏差值進(jìn)行比例P、積分I、微分D三種運(yùn)算合成,得到對應(yīng)的控制器輸出u(t)
,反饋給被控系統(tǒng),進(jìn)一步調(diào)節(jié)作動器的行為(例如閥門開度、電機(jī)轉(zhuǎn)速、力矩輸出等等)從而使偏差趨近于零,進(jìn)而使被控對象的行為趨近于給定的指令信號。
?比例環(huán)節(jié)P可以提高系統(tǒng)響應(yīng)的快速性,但單獨(dú)使用比例環(huán)節(jié)并不能使系統(tǒng)性能穩(wěn)定在一個理想的狀態(tài),當(dāng)有余差出現(xiàn),較大的比例系數(shù)會引起較大的控制器輸出,導(dǎo)致超調(diào)過大,系統(tǒng)產(chǎn)生振蕩,使系統(tǒng)穩(wěn)定性變差;?積分調(diào)節(jié)I可以在比例調(diào)節(jié)的基礎(chǔ)上減小余差,提升系統(tǒng)的穩(wěn)態(tài)性能;?微分環(huán)節(jié)D屬于超前調(diào)節(jié),可以提升系統(tǒng)的動態(tài)性能,使系統(tǒng)超調(diào)量減小、穩(wěn)定性增加。
3.3 仿真步驟
3.3.1 被控要求
被控對象為二階微分環(huán)節(jié),傳遞函數(shù)為

執(zhí)行機(jī)構(gòu)為一階慣性環(huán)節(jié),傳遞函數(shù)為

執(zhí)行機(jī)構(gòu)輸出限幅:200Nm
給定指令信號源為

該信號在1500s處存在一個快速變化,從90°變化到-90°:

3.3.2 操作步驟
(1)打開simulink界面

(2)選擇空模板Blank Model

(3)進(jìn)入操作界面,打開工具庫Library Browser

(4)搭建模型:
?選擇工具庫中所需要的模塊,拖動至Blank Model界面?按照PID控制系統(tǒng)的基本結(jié)構(gòu)連接各個模塊?雙擊“被控對象”“執(zhí)行機(jī)構(gòu)”模塊,按照設(shè)置參數(shù)


(5)構(gòu)建指令信號源模塊
這里信號源表達(dá)式前面已經(jīng)給出:

可以看出公式形式較為復(fù)雜,為了更簡潔地搭建仿真模型,這里采用Simulink中的Interpreted Function模塊,具體的步驟如下:



(6)加入信號源的輸入源:仿真時間信號t

(7)設(shè)置PID控制器的參數(shù),并根據(jù)仿真輸出進(jìn)行調(diào)試

(8)單擊RUN,運(yùn)行

(10)雙擊Scope,查看仿真輸出曲線

作者:陳珺儀 吳瑀倩 | 編輯 圖圖
?如需本文中完整PID模型,請關(guān)注微信公眾號“圖通道”后臺回復(fù)全家桶
;
?圖圖的 MATLAB 交流群:1129425848;