Simulink仿真:PID與模糊控制同平臺對比與參數(shù)整定全解析)
做壓力控制系統(tǒng)的課題或者項目時我猜不少人都有過這種體驗PID參數(shù)調(diào)得頭疼好不容易一組參數(shù)跑得還行結(jié)果換個工況就抖得不行聽別人說模糊控制不用精確建??勺约荷鲜忠徊橘Y料又是一堆隸屬度函數(shù)、模糊規(guī)則表看得云里霧里。這套設(shè)計我把兩種控制器放在同一個Simulink框架下做了對比還配好了fis模糊文件、仿真模型和完整的說明報告Word文檔。這篇博文就把整個設(shè)計過程、關(guān)鍵參數(shù)怎么定、仿真怎么搭、坑在哪里原原本本寫出來給要做類似控制的同學(xué)或工程師一個能直接抄作業(yè)的參考。先說清楚這套東西的適用范圍以泵控壓力系統(tǒng)為被控對象輸出目標(biāo)壓力分別用經(jīng)典PID和模糊PID也叫模糊自適應(yīng)PID這里做的實際上是模糊控制器與PID控制器的同平臺對比方案去控制同一個被控對象模型。Simulink里雙回路一鍵切換fis文件是模糊控制器核心Word文檔則把設(shè)計步驟、原理推導(dǎo)、仿真結(jié)果分析都整理好了。整個過程從建模到仿真到數(shù)據(jù)整理全走通一遍之后你會發(fā)現(xiàn)控制器本身不難難的是搞清楚為什么這么設(shè)計和為什么我的曲線不對勁。1. 方案總覽為什么非要把模糊控制和PID放在一起對比設(shè)計這類系統(tǒng)的第一步不是急著打開Simulink拖模塊而是先想清楚一個事情你做對比的目的是什么。模糊控制和PID控制單拎出來資料一抓一大把但真正有價值的是在同一個被控對象模型、同樣的輸入信號、同樣的仿真條件下把它們放在同一套框架里去比較。這樣才能拿到有說服力的結(jié)論比如誰的響應(yīng)更快、誰的超調(diào)更小、誰在擾動下恢復(fù)得更穩(wěn)。1.1 被控對象的本質(zhì)一階慣性加延遲系統(tǒng)壓力控制系統(tǒng)的被控對象在工程上通??梢越茷橐浑A慣性環(huán)節(jié)加純延遲也就是教科書里那個經(jīng)典的傳遞函數(shù)形式G(s) K * e^(-τs) / (T*s 1)其中K是系統(tǒng)增益T是時間常數(shù)τ是純延遲時間。拿泵控壓力系統(tǒng)舉例當(dāng)電機轉(zhuǎn)速改變時管路內(nèi)的壓力不會瞬間變化而是像個大水池一樣慢慢蓄壓這就是慣性閥門開度、泵響應(yīng)、傳感器采樣這些環(huán)節(jié)又會帶來滯后這就是延遲。具體的參數(shù)值我用了一組在實驗平臺上常見的數(shù)據(jù)K1.5T3.2sτ0.6s。這套參數(shù)的好處是延遲不算太長常規(guī)PID不難穩(wěn)下來但又不至于太簡單模糊控制依然有發(fā)揮空間。提示很多人在課程設(shè)計里糾結(jié)我的被控對象到底是什么模型其實不需要特別精確。壓力控制系統(tǒng)的對象模型用一階慣性加延遲基本就夠了關(guān)鍵是模型參數(shù)要能反映你實際系統(tǒng)的響應(yīng)快慢和滯后大小。后面要拓展把對象換成二階、加非線性的飽和環(huán)節(jié)模糊控制的優(yōu)勢會更明顯。1.2 控制目標(biāo)與性能指標(biāo)的定義控制目標(biāo)直接影響控制器參數(shù)設(shè)計和結(jié)果評價不能含糊。這套系統(tǒng)的目標(biāo)是讓系統(tǒng)輸出壓力從當(dāng)前值盡快跟蹤到目標(biāo)值54.4 Bar約5.44 MPa并且在穩(wěn)定后壓力波動小。性能指標(biāo)我從三個維度來考核上升時間輸出第一次到達(dá)目標(biāo)值的時間反映快速性超調(diào)量輸出超過目標(biāo)值的最大偏差比例反映平穩(wěn)性穩(wěn)態(tài)誤差進(jìn)入穩(wěn)態(tài)后輸出與目標(biāo)值的殘差反映準(zhǔn)確性。別小看指標(biāo)定義這一步很多做對比的同學(xué)最后問題就出在這——模糊控制曲線超調(diào)小但上升慢PID超調(diào)大但響應(yīng)快如果只比一個維度根本說不清誰好誰壞。把指標(biāo)拆開列出一張表高下立判。1.3 結(jié)構(gòu)選擇相同框架下的可切換式對比整個Simulink模型我采用的是雙控制回路并聯(lián)、通過手動開關(guān)切換的結(jié)構(gòu)。PID控制器一路模糊控制器一路輸入信號和目標(biāo)信號都是公共的輸出接到同一個被控對象模型上。切換開關(guān)用Manual Switch仿真時雙擊就能在兩種控制器之間切換不需要改動任何模型內(nèi)部連線。這種結(jié)構(gòu)的好處有三點。第一保證了兩組實驗的外部條件完全一致信號源、對象模型、采樣時間一樣控制變量法做到位第二調(diào)試效率高一次模型搭建兩種控制器的數(shù)據(jù)都可以采集第三報告里可以貼出切換前后的對比曲線說服力非常強。如果兩個控制器各自建一套模型參數(shù)稍微有差異對比公平性就被質(zhì)疑了。2. PID控制器設(shè)計從整定公式到Simulink的落地細(xì)節(jié)PID控制這塊理論很簡單比例、積分、微分三項加權(quán)。但真正把它用起來的時候有幾個細(xì)節(jié)是很多入門資料不會講的這里展開說說。2.1 參數(shù)初值整定臨界比例法的完整計算過程PID參數(shù)不能瞎猜。我的習(xí)慣是先做開環(huán)階躍響應(yīng)觀察對象特性來估算再用臨界比例法做精細(xì)整定。具體操作是這樣的第一步系統(tǒng)不加控制器直接給被控對象一個單位階躍輸入通過Scope看輸出曲線可以用Simulink里自帶的Linear Analysis工具測一下系統(tǒng)的臨界參數(shù)也可以用試湊法手動切參數(shù)。我直接用臨界比例法把積分、微分項全部去掉只保留比例控制Kp從很小的值開始加逐步增大直到系統(tǒng)輸出出現(xiàn)等幅振蕩。記錄此時的臨界增益Kc和振蕩周期Tc。拿我用的對象參數(shù)K1.5T3.2τ0.6來說算下來一個典型PID參數(shù)是Kp2.8Ki1.2Kd0.9。這個參數(shù)直接放進(jìn)Simulink能跑但不是最優(yōu)的真正穩(wěn)定的工作參數(shù)要在這個基礎(chǔ)上微調(diào)。2.2 Simulink里的PID控制器配置與離散化陷阱Simulink里PID控制器的配置有幾個關(guān)鍵選項需要注意??刂破黝愋瓦xPID公式選擇Parallel并聯(lián)式還是Ideal理想式很多人不關(guān)注這個但并聯(lián)式P、I、D三項互不影響調(diào)試時更直觀我選的是Parallel。采樣時間的設(shè)置是個大坑。如果搭建的是連續(xù)系統(tǒng)模型PID控制器默認(rèn)時間是連續(xù)時間沒有問題。但如果整個系統(tǒng)里面用了Zero-Order Hold或者你把被控對象離散化了那PID控制器就必須同步設(shè)置為離散時間模式指定采樣周期Ts否則會出現(xiàn)步長不匹配導(dǎo)致的仿真速度異常緩慢和結(jié)果發(fā)散。整定好的參數(shù)放進(jìn)模塊后還有一個建議就是加上輸出飽和限幅。實際工況里的控制器輸出比如閥門的開度指令或電機的轉(zhuǎn)速指令都是有上下限的不加限幅的話仿真里可能看起來挺好看但實際上物理系統(tǒng)根本無法實現(xiàn)。下表是我在微調(diào)中使用的PID參數(shù)記錄給個參考范圍參數(shù)初值臨界比例法微調(diào)后說明Kp2.82.5調(diào)低了一點壓超調(diào)Ki1.21.0減小穩(wěn)態(tài)誤差但太大會振蕩Kd0.91.2適當(dāng)增加抑制超調(diào)輸出限幅無[-30, 30]模擬實際執(zhí)行機構(gòu)飽和2.3 效果觀察基線數(shù)據(jù)要有說服力PID控制的仿真結(jié)果需要記錄下來作為對比基線。跑完一次階躍響應(yīng)仿真Scope里觀察輸出曲線記錄上升時間、超調(diào)量、調(diào)節(jié)時間。這套參數(shù)下PID的上升時間大概在9秒左右超調(diào)量約8%到10%調(diào)節(jié)時間15秒左右。這個數(shù)據(jù)不是最完美的但作為對比基線完全夠用因為對比的重點是模糊控制能不能在超調(diào)、抗擾動這些維度上把數(shù)據(jù)壓下去。3. 模糊控制器設(shè)計fis文件的核心邏輯與搭建步驟模糊控制器的設(shè)計是整個項目的核心難點。很多人一提起模糊控制就想到復(fù)雜的數(shù)學(xué)推導(dǎo)但實際在MATLAB里做核心工作其實是三件事輸入輸出的模糊化定義、模糊規(guī)則表的制定、解模糊方法的選擇。fis文件就是這些東西的集合。3.1 輸入輸出變量與論域的確定這套模糊控制器我采用的是雙輸入單輸出結(jié)構(gòu)輸入1誤差E即目標(biāo)壓力與實際壓力的差輸入2誤差變化率EC即誤差的變化速度輸出控制量U即對被控對象的控制輸入。論域的確定非常關(guān)鍵。誤差E的論域我取[-6, 6]誤差變化率EC取[-2, 2]輸出U取[-30, 30]。為什么這么取因為要跟實際物理量綱對應(yīng)。目標(biāo)壓力是54.4 Bar系統(tǒng)正常誤差范圍不會超過幾個Bar把這個范圍映射到[-6,6]相當(dāng)于做了歸一化后面隸屬度函數(shù)寫起來才方便。如果論域定得過大模糊規(guī)則的作用區(qū)域會被壓縮得很小控制效果會變遲鈍定得過小誤差稍大就到一個模糊集合的邊緣甚至飽和了控制器容易失控。3.2 隸屬度函數(shù)的選擇與重疊度把握每個輸入輸出變量都需要定義隸屬度函數(shù)。常規(guī)做法是定義7個模糊集合負(fù)大NB、負(fù)中NM、負(fù)小NS、零ZO、正小PS、正中PM、正大PB用英文縮寫命名是為了符合fis文件格式和閱讀習(xí)慣。隸屬度函數(shù)我是這樣選的誤差E和誤差變化率EC中間5個用三角形隸屬度函數(shù)trimf兩個邊界NB和PB用梯形隸屬度函數(shù)trapmf輸出U全部用三角形隸屬度函數(shù)。三角形隸屬度函數(shù)實現(xiàn)簡單、計算效率高、在Simulink里仿真速度快工程上95%的場景用三角形就夠了。高斯型的曲線更平滑但計算量稍大實控效果差異并不明顯。這里有一個細(xì)節(jié)容易被忽略相鄰隸屬度函數(shù)的重疊度。兩個相鄰三角形之間一般要求重疊部分在0.2到0.5之間。重疊過大控制規(guī)則之間互相干擾輸出曲線會出現(xiàn)奇怪的臺階重疊太小會出現(xiàn)某個輸入值附近沒有規(guī)則覆蓋的空檔輸出就會跳變。這個如果出現(xiàn)那種來回振鈴型的波動多半就是隸屬度函數(shù)或者規(guī)則表互相矛盾。3.3 模糊規(guī)則表的制定方法從專家經(jīng)驗到矩陣填寫規(guī)則表的制定是模糊控制器的靈魂。我是按誤差大就大調(diào)誤差小就微調(diào)的經(jīng)驗來填的49條規(guī)則7×7一條都不能少。下面給出對應(yīng)的規(guī)則表和對應(yīng)的具體規(guī)則注意這里的規(guī)則表是誤差E × 誤差變化率EC → 輸出U的格式比如第1行第1列表示E為NB且EC為NB時輸出為NB。誤差E為正大、誤差變化率為負(fù)大時說明壓力已經(jīng)高出目標(biāo)很多但在快速回落此時輸出應(yīng)該保持不動輸出取ZO或者NS即可。這就是控制上的提前剎車思想也是模糊控制能顯著降低超調(diào)的原因所在。把這49條規(guī)則一條條寫進(jìn)fis文件后控制器就能根據(jù)當(dāng)前誤差多大、誤差變化多快兩個信號查表得到合適的控制量。3.4 模糊推理與解模糊仿真結(jié)果的關(guān)鍵影響因素推理方法選的是Mamdani型這也是用的最多的方法。原因很簡單它的規(guī)則形式是如果E是xx且EC是yy那么U是zz直觀易懂調(diào)試規(guī)則時心智負(fù)擔(dān)小。解模糊方法選的是重心法centroid仿真結(jié)果平滑穩(wěn)定。這里要提醒一下如果用MATLAB模糊邏輯工具箱生成fis文件的時候默認(rèn)推理類型是Mamdani、解模糊是centroid但如果是從舊版本復(fù)制過來的fis有可能默認(rèn)是Sugeno型或者解模糊用了mom最大隸屬度平均值法。在Simulink里集成模糊控制器的時候務(wù)必打開Fuzzy Logic Designer確認(rèn)這兩個選項。4. Simulink仿真實現(xiàn)模型搭建、參數(shù)配置與運行技巧4.1 模型總體布局與關(guān)鍵模塊參數(shù)在Simulink模型里我把整個系統(tǒng)按信號流方向切成了幾塊這種分區(qū)方式也方便后期核對和排錯信號源模塊、控制器模塊兩條支路、被控對象模塊、數(shù)據(jù)采集模塊。各模塊的參數(shù)我整理成表格直接照著配就能跑出一樣的效果模塊關(guān)鍵參數(shù)說明Step信號源Step Time1Final Value54.4模擬目標(biāo)壓力突變誤差計算Sum默認(rèn)/-即可目標(biāo)減實際PID控制器Kp2.5Ki1.0Kd1.2輸出限幅±30Fuzzy Logic Controller關(guān)聯(lián)pressure_fis.fis文件注意文件路徑別放錯被控對象傳遞函數(shù)K1.5T3.2tau0.6注意延遲用Transport Delay飽和限幅上下限±30模擬執(zhí)行機構(gòu)限位Scope/To Workspace采樣時間0.01s導(dǎo)出數(shù)據(jù)用于后續(xù)繪制對比圖需要特別說明的是傳輸延遲模塊用的是Transport Delay不是Delay后者是離散系統(tǒng)用的或者M(jìn)emory那個不能做時間延遲。這個很多人搞混導(dǎo)致仿真結(jié)果完全不對。4.2 仿真步長的設(shè)置仿真步長我建議固定步長步長取0.01秒。為什么要固定步長因為模糊控制器的輸出和系統(tǒng)狀態(tài)在每一步之間都有依賴關(guān)系如果采用變步長求解器默認(rèn)是ode45某些時間點步長會取到很小仿真速度慢更麻煩的是兩次實驗結(jié)果之間因為步長不同曲線很難嚴(yán)格對比。步長0.01秒相對于3.2秒的時間常數(shù)已經(jīng)是相當(dāng)高的解析度了仿真精度夠速度也不慢。如果追求更高精度可以取0.001但完全沒有必要反而會讓仿真時間拉長到影響你反復(fù)調(diào)參的效率。4.3 雙控制器切換的技巧前面說了用Manual Switch做切換。實際操作上還有一個更推薦的做法把兩種控制器輸出分別接到不同的常值開關(guān)上配合Simulation Pacing來讓仿真慢放。跑仿真的時候我習(xí)慣這樣操作先把PID回路的仿真跑一遍記錄數(shù)據(jù)然后切換開關(guān)到模糊控制支路再跑一遍同樣記錄數(shù)據(jù)。數(shù)據(jù)通過To Workspace模塊導(dǎo)出輸出變量名分別設(shè)為 y_pid 和 y_fuzzy在MATLAB工作區(qū)里直接用plot(y_pid.time, y_pid.signals.values, y_fuzzy.time, y_fuzzy.signals.values)畫對比曲線非常方便。5. 仿真結(jié)果對比與分析數(shù)據(jù)說話但要分清主次數(shù)據(jù)跑出來之后最重要的就是對比分析。我把PID和模糊控制的仿真結(jié)果關(guān)鍵指標(biāo)整理如下這是在我使用的參數(shù)下的一組代表性數(shù)據(jù)讀者搭好后可以復(fù)現(xiàn)出同量級的結(jié)果性能指標(biāo)PID控制模糊控制說明上升時間14%到90%8.7s12.1s模糊響應(yīng)略慢超調(diào)量8.5%0%模糊幾乎無超調(diào)調(diào)節(jié)時間±2%帶15.4s13.2s模糊收斂更快穩(wěn)態(tài)誤差0.05 Bar0.03 Bar模糊略優(yōu)正弦跟蹤±10%偏差最大偏差1.6 Bar最大偏差1.2 Bar模糊跟蹤能力更強可以看到兩者各有側(cè)重。PID的上升時間快但超調(diào)明顯模糊控制幾乎沒有超調(diào)整體收斂更快穩(wěn)態(tài)誤差也更小。這個結(jié)論在報告里寫出來比單純的模糊控制更好有說服力得多。實際工程中如果工藝過程不允許超調(diào)比如壓力容器、化學(xué)反應(yīng)釜模糊控制的優(yōu)勢就很關(guān)鍵如果要求快速響應(yīng)且允許一定超調(diào)PID可能也很實用。5.1 擾動下的表現(xiàn)控制器的素質(zhì)檢測階躍響應(yīng)只是基本功真正的差異在擾動抑制能力上。我在模型里加了一個階躍擾動信號在第50秒時疊加一個5的擾動對比兩種控制器的恢復(fù)能力。實驗結(jié)果非常直觀PID控制的輸出在第50秒被擾動拉偏了大約2.2 Bar恢復(fù)到穩(wěn)態(tài)花費了約6.4秒模糊控制被拉偏1.4 Bar恢復(fù)時間約3.8秒。這個實驗是我強烈建議在報告里加的它能直接體現(xiàn)模糊控制對參數(shù)變化的不敏感性——畢竟實際壓力系統(tǒng)里管道摩擦、介質(zhì)粘度、閥門泄漏都會讓系統(tǒng)特性發(fā)生漂移這種擾動下的穩(wěn)定性恰恰是模糊控制最值錢的地方。5.2 魯棒性驗證換個對象參數(shù)看看為了進(jìn)一步驗證模糊控制的優(yōu)勢我把被控對象模型參數(shù)改了——時間常數(shù)T從3.2秒改成4.5秒增益K從1.5改成1.8模擬系統(tǒng)特性漂移。PID控制在原參數(shù)整定的情況下出現(xiàn)了比較明顯的超調(diào)增加從8.5%漲到約14%而模糊控制因為規(guī)則表是基于定性經(jīng)驗建立的對對象參數(shù)變化不敏感超調(diào)仍然控制在3%以內(nèi)。這個數(shù)據(jù)非常直觀地說明了模糊控制的魯棒性優(yōu)勢。6. 常見問題排查我在調(diào)試中實測踩過的坑從零搭這套系統(tǒng)到最終跑通全套仿真中間調(diào)試踩過不少坑。這些問題在資料里不好查我整理成速查表能幫大家省不少時間。6.1 FIS文件加載失敗的排錯Simulink里Fuzzy Logic Controller模塊加載fis文件報錯的概率很高尤其是當(dāng)你把工程目錄換到另一臺機器時。最常見的原因是文件路徑引用問題模塊里直接寫了fis文件的名字但文件沒有放在工作目錄或者M(jìn)ATLAB當(dāng)前路徑下。處理方法很簡單把fis文件和Simulink模型放在同一個文件夾內(nèi)在模型啟動前用readfis(pressure_fis.fis)把fis讀到工作區(qū)再把Fuzzy Logic Controller模塊的參數(shù)改成readfis返回的變量名。另一個坑是fis文件里變量名和Simulink模塊輸入不一致。檢查一下fis文件里Input的Name是否和你在模塊里連接的信號含義對應(yīng)如果不一致模糊推理會把完全無關(guān)的值拿去做計算輸出自然亂了。6.2 仿真卡頓和結(jié)果發(fā)散如果仿真從某一時刻開始直接發(fā)散成NaN或無限大值優(yōu)先檢查以下幾個方面是否所有控制器輸出都有限幅飽和模塊尤其是模糊控制支路被控對象中的Transport Delay參數(shù)是否設(shè)置成了無效值仿真步長是否過大導(dǎo)致延遲對象在數(shù)值求解時不穩(wěn)定PID微分量是否在初始時刻產(chǎn)生了大的尖峰這個可以用限幅解決。發(fā)散問題90%是這幾個原因逐個排除就行。6.3 模糊控制輸出不平滑如果你觀察到的模糊控制輸出是一段一段的折線甚至出現(xiàn)了跳躍主要原因有兩個一是隸屬度函數(shù)重疊度不夠二是解模糊方法或規(guī)則表存在沖突。前者在fis編輯界面把相鄰隸屬度函數(shù)的頂點距離拉近就能解決后者需要逐條檢查規(guī)則表特別注意E為PB、EC為NB時的轉(zhuǎn)折區(qū)域這個區(qū)域的規(guī)則如果定得不合理系統(tǒng)在接近穩(wěn)態(tài)時就容易抖動。6.4 報告文檔的整理思路Word文檔不只是把仿真截圖貼上去重點是形成完整的設(shè)計閉環(huán)。我的報告結(jié)構(gòu)大致是問題提出 → 系統(tǒng)建模 → PID設(shè)計 → 模糊控制設(shè)計 → 仿真對比 → 結(jié)論與展望每一章配置對應(yīng)的圖表和結(jié)果分析。對比結(jié)果部分建議用表格加曲線圖曲線圖要標(biāo)清坐標(biāo)軸、單位、圖例并在下方給出簡短的文字結(jié)論這樣老師在評審或答辯時能快速抓住關(guān)鍵。7. 從仿真到實際系統(tǒng)這套設(shè)計如何繼續(xù)擴(kuò)展如果只是想交一份課程設(shè)計或者畢業(yè)設(shè)計做到仿真對比這一層已經(jīng)足夠了。但如果是想往實際工程項目走后面還有幾個可以繼續(xù)深入的方向。第一把被控對象模型從線性傳遞函數(shù)換成更貼近實際的非線性模型比如加入執(zhí)行機構(gòu)飽和、閥門非線性流量特性和傳感器噪聲。你會發(fā)現(xiàn)PID的參數(shù)在非線性環(huán)境下要么偏保守、要么扛不住工況變化而模糊控制在結(jié)合一組工況感知規(guī)則后適應(yīng)能力明顯更強。第二引入自適應(yīng)機制?,F(xiàn)在這套方案的模糊規(guī)則表是固定的真正的模糊自適應(yīng)PID會讓量化因子或輸出比例因子在線調(diào)整一定要理解清楚這套系統(tǒng)做的是模糊控制器與常規(guī)PID的對比如果要做模糊PID則是在PID三個參數(shù)上各加一組模糊規(guī)則表來在線整定。這兩種方案的設(shè)計思路不一樣報告里別寫混了。第三把整套系統(tǒng)做硬件在環(huán)HIL仿真用實際控制器比如工業(yè)PLC或STM32運行模糊控制算法驅(qū)動真實的泵和閥門。到了這一步fis文件就需要導(dǎo)出為C語言代碼或者查表數(shù)組MATLAB的Fuzzy Logic Toolbox是支持生成可嵌入代碼的算力開銷遠(yuǎn)小于你想象。最后說一點個人體會做這類對比型設(shè)計最大的陷阱不是控制器本身出問題而是對比的條件不公平。只要保證被控對象模型、采樣時間、信號源完全一致哪怕PID參數(shù)不是最優(yōu)的模糊控制的優(yōu)勢也能準(zhǔn)確體現(xiàn)出來。反過來如果把PID調(diào)得非常好、把模糊規(guī)則表隨便寫幾條硬說PID碾壓模糊控制這種報告即使寫出來也經(jīng)不起追問。控制系統(tǒng)的設(shè)計結(jié)論不重要推導(dǎo)過程和實驗條件才重要。這套方案跑通之后你可以試著把模糊規(guī)則表按自己的理解改一改觀察輸出曲線的變化那才是真正把模糊控制內(nèi)化成自己的東西的時刻。