PID控制技術(shù)詳解:從Simulink仿真到參數(shù)整定實(shí)戰(zhàn))
拿到這套《基于先進(jìn)PID控制技術(shù)的MATLAB仿真pdf資料隨書仿真模型》的時(shí)候我第一反應(yīng)其實(shí)是有點(diǎn)懷疑的。市面上講PID的書和資料多到爛大街光是Simulink里拖個(gè)PID模塊誰(shuí)不會(huì)但真正翻完隨書模型、把里面的例子一個(gè)個(gè)跑通之后我承認(rèn)自己之前的判斷有點(diǎn)草率。這套資料真正值錢的地方不在PID基礎(chǔ)而在“先進(jìn)”這兩個(gè)字——它把模糊PID、級(jí)聯(lián)PID、前饋補(bǔ)償、抗積分飽和這些聽起來(lái)高大上、實(shí)際工程里又繞不開的東西全部做成了能直接跑、能改參數(shù)、能看波形的仿真模型。對(duì)于正在做課程設(shè)計(jì)的學(xué)生、剛接觸運(yùn)動(dòng)控制的工程師或者想把手里的加熱棒、電機(jī)、無(wú)人機(jī)飛控調(diào)得更穩(wěn)的愛好者來(lái)說這套資料相當(dāng)于把一條別人踩過無(wú)數(shù)坑才走通的路直接鋪到你腳下了。我花了一周時(shí)間把隨書模型全部復(fù)現(xiàn)并做了二次修改這篇文章就把整個(gè)學(xué)習(xí)過程、模型架構(gòu)拆解、參數(shù)整定心得和踩坑記錄原原本本寫出來(lái)。不講空理論只講怎么把這些模型跑起來(lái)、改明白、用出去。1. 一套“先進(jìn)PID”資料到底先進(jìn)在哪拿到手先別急著跑模型1.1 資料的裝幀邏輯與內(nèi)容的真正主線先說結(jié)論這套資料不是把一堆PID仿真模型打包扔給你而是按照“經(jīng)典PID性能瓶頸 → 先進(jìn)PID解決思路 → 仿真驗(yàn)證 → 參數(shù)整定”這條主線來(lái)組織的。PDF部分大約三分之二的篇幅在講為什么經(jīng)典PID在某些場(chǎng)景下不夠用剩下三分之一才是具體模型的說明文檔。這個(gè)編排順序很關(guān)鍵——如果你一上來(lái)就雙擊打開模型文件亂點(diǎn)一通大概率會(huì)跟我第一次一樣看著Scope里的波形一頭霧水。隨書仿真模型的文件命名也很有意思。不是那種隨意起的“model1.slx”“PID_demo.slx”而是帶有場(chǎng)景標(biāo)簽的比如“FuzzyPID_Temperature.slx”“CascadePID_Motor.slx”“FeedforwardPID_Disturbance.slx”。每個(gè)文件名都對(duì)應(yīng)一個(gè)明確的應(yīng)用場(chǎng)景這比我見過的大多數(shù)工程教學(xué)資料要嚴(yán)謹(jǐn)?shù)枚?。模型?nèi)部也做了信號(hào)線顏色區(qū)分控制回路用紅色線被控對(duì)象用藍(lán)色線參考輸入用綠色線一眼看過去信號(hào)流向非常清楚。1.2 經(jīng)典PID的天花板在哪里為什么一定要“先進(jìn)化”我在實(shí)際項(xiàng)目里吃過經(jīng)典PID的虧所以對(duì)這部分感觸特別深。前幾年調(diào)一個(gè)加熱棒溫控系統(tǒng)用普通PID參數(shù)試了整整兩天溫度始終在目標(biāo)值附近來(lái)回震蕩穩(wěn)態(tài)誤差怎么都消不掉。后來(lái)才發(fā)現(xiàn)問題出在加熱棒的大慣性純滯后特性上——普通PID的微分項(xiàng)對(duì)這種滯后系統(tǒng)基本無(wú)能為力你加大Kd系統(tǒng)反而更容易震蕩發(fā)散。這套資料明確指出了經(jīng)典PID的三大天花板第一參數(shù)固定無(wú)法應(yīng)對(duì)被控對(duì)象特性變化。同一個(gè)PID參數(shù)電機(jī)空載的時(shí)候調(diào)好了一帶負(fù)載就抖加熱棒在低溫段和高溫段的熱慣性完全不同固定參數(shù)必然顧此失彼。第二微分項(xiàng)對(duì)噪聲極其敏感。實(shí)際系統(tǒng)的傳感器信號(hào)不可能像仿真里那么干凈稍微有點(diǎn)測(cè)量噪聲微分項(xiàng)就會(huì)把它放大成劇烈的控制量變化執(zhí)行器跟著來(lái)回動(dòng)作磨損和能耗都很糟糕。第三線性控制器的本質(zhì)限制。經(jīng)典PID本質(zhì)上是線性控制器面對(duì)飽和、死區(qū)、摩擦這些非線性特性時(shí)要么響應(yīng)太慢要么超調(diào)過大。而“先進(jìn)PID”這個(gè)說法涵蓋的其實(shí)就是針對(duì)這些瓶頸的改進(jìn)思路模糊PID解決參數(shù)自整定問題級(jí)聯(lián)PID解決大滯后和中間變量不可測(cè)問題前饋補(bǔ)償解決已知擾動(dòng)的抑制問題抗積分飽和解決執(zhí)行器限幅導(dǎo)致的控制品質(zhì)惡化問題。這套資料把這四類技術(shù)全部用Simulink模型做了落地實(shí)現(xiàn)這是它最實(shí)在的地方。1.3 我建議的學(xué)習(xí)路徑和閱讀順序如果你剛拿到這套資料我強(qiáng)烈建議不要按照PDF的頁(yè)碼順序從頭往后啃。我的血淚教訓(xùn)是PDF前兩章關(guān)于經(jīng)典PID的公式推導(dǎo)占了差不多四十頁(yè)這些內(nèi)容本科教材里都有直接跳過不影響后面的理解。合理的路徑應(yīng)該是先打開“FuzzyPID_Temperature.slx”和配套的PDF章節(jié)因?yàn)槟:齈ID最能體現(xiàn)“先進(jìn)”的直觀效果而且溫度控制場(chǎng)景最容易理解然后跑“CascadePID_Motor.slx”理解串級(jí)結(jié)構(gòu)的內(nèi)環(huán)外環(huán)配合關(guān)系再看“FeedforwardPID_Disturbance.slx”體會(huì)前饋反饋組合的威力最后才是PDF里關(guān)于抗積分飽和和各處細(xì)節(jié)的補(bǔ)充說明。按這個(gè)順序你能在兩三天內(nèi)搭起一個(gè)完整的知識(shí)框架而不是在公式海洋里迷失方向。2. 隨書仿真模型的架構(gòu)拆解先看懂信號(hào)流再動(dòng)手改參數(shù)2.1 模型分層被控對(duì)象模型與控制器模型怎么分離打開模型文件后你首先會(huì)注意到所有隨書模型都遵循一個(gè)非常規(guī)范的分層原則被控對(duì)象模型、控制器模型、信號(hào)源與觀測(cè)單元三者完全分離。以FuzzyPID_Temperature.slx為例整個(gè)模型從上到下依次是信號(hào)源區(qū)域給定溫度階躍信號(hào)、可選的噪聲注入模塊、擾動(dòng)信號(hào)發(fā)生器控制器區(qū)域誤差計(jì)算、誤差變化率計(jì)算、模糊推理系統(tǒng)FIS、PID參數(shù)輸出修正、限幅單元被控對(duì)象區(qū)域一個(gè)帶純滯后的二階慣性環(huán)節(jié)參數(shù)可以雙擊模塊直接修改觀測(cè)區(qū)域Scope示波器、To Workspace數(shù)據(jù)導(dǎo)出模塊。這種分層設(shè)計(jì)的最大好處是你可以單獨(dú)修改任意一層而不會(huì)牽連其他層。比如我想把被控對(duì)象從帶滯后的慣性環(huán)節(jié)換成電機(jī)傳遞函數(shù)只需要替換被控對(duì)象區(qū)域的模塊控制器區(qū)域和觀測(cè)區(qū)域完全不用動(dòng)。這在做參數(shù)對(duì)比實(shí)驗(yàn)的時(shí)候特別方便——同一套控制器換不同對(duì)象模型看控制效果的差異。2.2 PID控制器內(nèi)部到底塞了哪些“先進(jìn)”東西初看這些模型的時(shí)候你會(huì)發(fā)現(xiàn)它們的控制器部分并不是Simulink庫(kù)里的那個(gè)現(xiàn)成PID Controller模塊而是用基礎(chǔ)模塊自己搭出來(lái)的。我一開始覺得這是多此一舉直到我嘗試修改結(jié)構(gòu)時(shí)才明白作者的真實(shí)意圖。以模糊PID為例控制器的內(nèi)部結(jié)構(gòu)包含三個(gè)PID參數(shù)分支Kp、Ki、Kd分別由模糊推理系統(tǒng)的輸出經(jīng)過比例因子和偏置疊加后生成。換句話說實(shí)際送入控制器的Kp不是固定值而是隨著誤差和誤差變化率實(shí)時(shí)變化的。其內(nèi)部的實(shí)現(xiàn)邏輯是先算出當(dāng)前誤差e和誤差變化率ec送入FIS模糊推理系統(tǒng)模塊FIS輸出的是三個(gè)修正系數(shù)ΔKp、ΔKi、ΔKd再分別乘以各自的量化因子后與初始PID參數(shù)相加得到實(shí)際的控制參數(shù)。這里有個(gè)細(xì)節(jié)很多人會(huì)忽略初始PID參數(shù)Kp0、Ki0、Kd0是模型里單獨(dú)放置的三個(gè)常數(shù)模塊FIS輸出的修正量只是在這個(gè)基礎(chǔ)上疊加。換句話說模糊PID并不是完全拋棄初始參數(shù)而是在一個(gè)“基礎(chǔ)PID”之上做自適應(yīng)修正。這個(gè)設(shè)計(jì)思路非常符合工程實(shí)踐——你先用常規(guī)方法調(diào)出一組合適的PID參數(shù)再讓模糊推理在它附近微調(diào)而不是讓模糊推理從零開始生成全部參數(shù)。后者往往會(huì)導(dǎo)致系統(tǒng)無(wú)法收斂。2.3 從Bode圖到階躍響應(yīng)模型自帶的驗(yàn)證面板隨書模型里幾乎每個(gè)控制模型都配有一個(gè)“響應(yīng)分析面板”實(shí)際上是一組預(yù)先配置好的線性化分析和繪圖工具。在Simulink的APPS菜單里可以用Control System Designer打開這些模型自動(dòng)生成閉環(huán)系統(tǒng)的Bode圖和階躍響應(yīng)曲線。我第一次用這個(gè)功能的時(shí)候確實(shí)被驚艷到了。以前做仿真想看系統(tǒng)穩(wěn)不穩(wěn)定只能盯著Scope里的波形猜。有了這個(gè)面板可以直接從Bode圖的增益裕度和相位裕度判斷系統(tǒng)的相對(duì)穩(wěn)定性。模型的閉環(huán)Bode圖在什么頻段出現(xiàn)諧振峰、相位裕度還剩多少一目了然。不過需要提醒的是Control System Designer做線性化分析有一個(gè)前提被控對(duì)象模型必須是線性的或者至少在某個(gè)工作點(diǎn)附近可以近似為線性。隨書模型中的被控對(duì)象大多設(shè)計(jì)成了線性模型所以用這個(gè)功能沒問題。但如果你后來(lái)自己替換成了帶飽和、死區(qū)這類強(qiáng)非線性模型線性化分析工具給出的結(jié)果只能作為參考不能完全代表實(shí)際系統(tǒng)的行為。3. 從零復(fù)現(xiàn)一個(gè)先進(jìn)PID仿真以模糊PID為例的完整操作3.1 為什么選模糊PID作為第一個(gè)復(fù)現(xiàn)對(duì)象如果只看PDF的目錄你可能覺得級(jí)聯(lián)PID的結(jié)構(gòu)更“先進(jìn)”一些。但我的建議是復(fù)現(xiàn)的第一個(gè)對(duì)象一定選模糊PID。原因有三點(diǎn)第一模糊PID對(duì)初值的容忍度最高。級(jí)聯(lián)PID的內(nèi)外環(huán)參數(shù)如果配不好系統(tǒng)直接發(fā)散給你看而模糊PID的推理規(guī)則相當(dāng)于給PID參數(shù)加了一個(gè)軟約束即使初始參數(shù)稍微偏一點(diǎn)模糊規(guī)則也能把它拉回合理范圍。第二模糊PID的效果最容易“看見”。同樣是階躍響應(yīng)經(jīng)典PID可能超調(diào)20%模糊PID能把超調(diào)壓到5%以內(nèi)這種直觀對(duì)比帶來(lái)的成就感對(duì)學(xué)習(xí)動(dòng)力的維持至關(guān)重要。第三模糊PID涉及的Simulink技能點(diǎn)最綜合。搭建過程中你會(huì)接觸到FIS編輯器的使用、Simulink與FIS文件的接口、量化因子的標(biāo)定這些技能后面做其他先進(jìn)控制都會(huì)用到。3.2 模糊PID的Simulink搭建步驟我自己復(fù)現(xiàn)模糊PID模型的時(shí)候走了不少?gòu)澛愤@里給出一份可以直接照做的操作流程。第一步準(zhǔn)備模糊推理系統(tǒng)FIS。在MATLAB命令行輸入fuzzy打開FIS編輯器。設(shè)置兩個(gè)輸入誤差e和誤差變化率ec三個(gè)輸出ΔKp、ΔKi、ΔKd。隸屬度函數(shù)建議先用最經(jīng)典的三角形函數(shù)輸入論域都設(shè)為[-3,3]五個(gè)模糊子集分別為NB、NS、ZO、PS、PB。輸出論域根據(jù)被控對(duì)象的特性設(shè)定我用的溫度對(duì)象設(shè)的是[-0.6,0.6]這個(gè)范圍后續(xù)可以根據(jù)仿真效果調(diào)整。第二步設(shè)計(jì)模糊規(guī)則表。這里給出一個(gè)我實(shí)際使用且效果穩(wěn)定的規(guī)則表模板以ΔKp為例e/ecNBNSZOPSPBNBPBPBPMPSZONSPBPMPSZONSZOPMPSZONSNMPSPSZONSNMNBPBZONSNMNBNBΔKi和ΔKd的規(guī)則表遵循同樣的邏輯但方向相反誤差大時(shí)減小Ki防止積分飽和誤差小時(shí)增大Ki消除穩(wěn)態(tài)誤差Kd在誤差變化率大時(shí)取小值規(guī)避噪聲放大誤差變化率小時(shí)取適當(dāng)值增強(qiáng)阻尼。第三步搭建Simulink模型。按照前面說的分層原則依次添加階躍信號(hào)源、誤差計(jì)算模塊一個(gè)減法器、誤差變化率計(jì)算模塊單位延遲減法除以采樣時(shí)間、FIS模塊在User-Defined Functions庫(kù)中雙擊導(dǎo)入剛才保存的.fis文件、PID參數(shù)合成模塊、PID控制器主體用基礎(chǔ)模塊搭建或直接用PID Controller模塊但參數(shù)設(shè)置為外部輸入、被控對(duì)象傳遞函數(shù)、示波器。第四步參數(shù)連接。FIS模塊的三個(gè)輸出分別乘以量化因子后加上初始PID參數(shù)再作為PID Controller模塊的Kp、Ki、Kd外部輸入。第五步量化因子調(diào)試。量化因子的作用是匹配FIS的輸入論域與真實(shí)誤差值。比如溫度誤差最大可能有50度而FIS輸入論域只有[-3,3]那么e的量化因子就要設(shè)成3/500.06左右。這個(gè)因子的大小直接影響模糊推理的靈敏度設(shè)小了系統(tǒng)反應(yīng)遲鈍設(shè)大了又會(huì)頻繁觸發(fā)規(guī)則邊界導(dǎo)致震蕩。3.3 參數(shù)整定的實(shí)操流程先粗后細(xì)模糊PID的參數(shù)整定比普通PID多了一個(gè)維度但核心思路還是先粗后細(xì)。我的實(shí)際操作流程是這樣的先把模糊推理的輸出修正量全部置零在Simulink里把修正量的增益模塊設(shè)為0這樣模型退化為一個(gè)純PID。用Ziegler-Nichols法或試湊法調(diào)出一組能穩(wěn)定工作的初始PID參數(shù)記為Kp0、Ki0、Kd0?;謴?fù)模糊修正先讓?duì)p、ΔKd生效ΔKi暫時(shí)保持為0。觀察階躍響應(yīng)主要看超調(diào)量和響應(yīng)時(shí)間。如果超調(diào)仍然偏大把ΔKp的輸出比例因子調(diào)小一些如果響應(yīng)太慢調(diào)大ΔKp的比例因子。等超調(diào)和響應(yīng)速度都滿意后再逐步介入ΔKi修正目標(biāo)是消除穩(wěn)態(tài)誤差。最后微調(diào)ΔKd的比例因子在響應(yīng)速度與抗噪聲能力之間找平衡點(diǎn)。這個(gè)過程聽起來(lái)不復(fù)雜但每一步觀察波形、調(diào)整參數(shù)、重新仿真至少得十幾輪。我在調(diào)第三輪的時(shí)候犯過一個(gè)低級(jí)錯(cuò)誤修改了FIS文件的某個(gè)規(guī)則卻忘了在Simulink里重新加載FIS結(jié)果參數(shù)怎么調(diào)都沒反應(yīng)折騰了半天才想起FIS模塊的加載問題。所以提醒你一句改了.fis文件之后一定要在Simulink模型里雙擊FIS模塊重新導(dǎo)入。4. 仿真發(fā)散是常態(tài)我踩過的三個(gè)坑和完整排查鏈路4.1 坑一采樣時(shí)間設(shè)置不合理導(dǎo)致的假發(fā)散剛跑這套隨書模型的時(shí)候我遇到的最詭異的問題就是仿真發(fā)散。Scope里曲線直接飛到了10的30次方這種量級(jí)第一反應(yīng)是控制器參數(shù)出了問題但把PID參數(shù)全部歸零還是發(fā)散這就不對(duì)勁了。后來(lái)逐段排查才發(fā)現(xiàn)問題出在誤差變化率的計(jì)算上。我用的是一階差分近似ec(k) [e(k) - e(k-1)] / Ts。Simulink的Unit Delay模塊默認(rèn)采樣時(shí)間是-1繼承而我的信號(hào)源采樣時(shí)間是0.01秒到了誤差變化率計(jì)算這里分母的采樣時(shí)間實(shí)際變成了1秒。也就是說我除以了0.01但實(shí)際差分間隔是1秒相當(dāng)于把誤差變化率放大了100倍。模糊推理拿到的ec值嚴(yán)重偏大輸出的ΔKp、ΔKd修正量也就全部超出正常范圍系統(tǒng)自然就飛了。這個(gè)坑的本質(zhì)是離散化參數(shù)不一致。排查方法是在Simulink的“信息覆蓋”顯示里檢查每個(gè)模塊的實(shí)際采樣時(shí)間。做一個(gè)正常的工程師千萬(wàn)別在這上面偷懶每一個(gè)有采樣時(shí)間概念的模塊都要確認(rèn)它的實(shí)際繼承值。4.2 坑二模糊規(guī)則表邊界處理不當(dāng)造成振蕩發(fā)散第二個(gè)坑更隱蔽。我用自定義模糊規(guī)則表的時(shí)候把輸出論域設(shè)成了[-0.6,0.6]但實(shí)際仿真中FIS的輸出有時(shí)候會(huì)超出這個(gè)范圍。超出范圍后模糊推理會(huì)采用邊界值作為輸出相當(dāng)于給PID參數(shù)修正量加了一個(gè)飽和限幅。當(dāng)時(shí)我觀察到系統(tǒng)不是在發(fā)散而是在設(shè)定值附近持續(xù)等幅振蕩幅度不大但一直消不掉。排查了很久才意識(shí)到這是規(guī)則表邊界處隸屬度函數(shù)覆蓋不足導(dǎo)致的。具體來(lái)說當(dāng)誤差和誤差變化率都位于相鄰模糊子集的交界處時(shí)如果隸屬度函數(shù)的形狀設(shè)計(jì)不合理會(huì)出現(xiàn)某條規(guī)則完全不被觸發(fā)的盲區(qū)導(dǎo)致輸出修正量出現(xiàn)跳變。解決辦法有兩個(gè)方向一是把隸屬度函數(shù)改成重疊度更高的高斯型或鐘形函數(shù)二是擴(kuò)大論域范圍留足余量。我實(shí)際采用的是高斯型隸屬度函數(shù)擴(kuò)大輸出論域到[-0.8,0.8]振蕩問題隨即消失。4.3 坑三微分項(xiàng)的“噪聲放大器”效應(yīng)第三個(gè)坑是在做前饋補(bǔ)償PID模型時(shí)遇到的。模型里加入了白噪聲模擬傳感器測(cè)量噪聲結(jié)果系統(tǒng)的控制量輸出劇烈抖動(dòng)只看輸出波形像極了發(fā)散。這里要給“先進(jìn)PID”正個(gè)名如果模型里用了帶有噪聲的反饋信號(hào)微分項(xiàng)D就是一個(gè)不折不扣的噪聲放大器。仿真中看起來(lái)只是曲線毛糙了一點(diǎn)但控制量的劇烈變化已經(jīng)真實(shí)反映了微分放大噪聲的本質(zhì)。隨書模型在前饋補(bǔ)償?shù)睦永锸褂昧藶V波微分——實(shí)際是給微分項(xiàng)串聯(lián)了一個(gè)一階低通濾波器這個(gè)做法在很多工程實(shí)踐里是標(biāo)準(zhǔn)配置。復(fù)現(xiàn)的時(shí)候建議你也注意這個(gè)細(xì)節(jié)要么在反饋信號(hào)處加濾波要么在PID控制器內(nèi)部給微分項(xiàng)加濾波系數(shù)N。Simulink自帶的PID Controller模塊有N參數(shù)可調(diào)默認(rèn)值一般取100左右工程上可以降到20~30來(lái)獲得更好的抗噪效果。4.4 發(fā)散排查的完整操作鏈路如果你在仿真中遇到了發(fā)散問題我建議按照下面的鏈路逐級(jí)排查而不是一上來(lái)就懷疑控制器參數(shù)檢查模型穩(wěn)定性斷開控制器到被控對(duì)象的連接給被控對(duì)象單獨(dú)加一個(gè)階躍輸入看開環(huán)響應(yīng)是否穩(wěn)定。如果開環(huán)本身就發(fā)散說明被控對(duì)象模型參數(shù)有問題與控制器無(wú)關(guān)。檢查采樣時(shí)間一致性調(diào)出所有模塊的采樣時(shí)間顯示確認(rèn)沒有混用不同的采樣周期。這一步大約能解決30%的“莫名發(fā)散”。檢查信號(hào)范圍在關(guān)鍵信號(hào)線上添加Scope從誤差計(jì)算處開始逐級(jí)觀察信號(hào)大小。哪個(gè)位置的信號(hào)出現(xiàn)了異常數(shù)量級(jí)的變化問題就出在哪一級(jí)。逐步簡(jiǎn)化控制器先把模糊修正量歸零退化為純PID看是否穩(wěn)定再把微分項(xiàng)置零只保留PI看是否穩(wěn)定。這個(gè)過程能幫你隔離出具體是哪個(gè)環(huán)節(jié)導(dǎo)致的發(fā)散。檢查代數(shù)環(huán)如果模型里有信號(hào)直接形成閉環(huán)而沒有經(jīng)過任何狀態(tài)模塊Simulink會(huì)產(chǎn)生代數(shù)環(huán)。代數(shù)環(huán)會(huì)導(dǎo)致數(shù)值求解困難甚至發(fā)散可以嘗試添加極小延遲的Unit Delay或Memory模塊打斷代數(shù)環(huán)。這套鏈路我后面每次遇到仿真發(fā)散問題都用成功率非常高絕對(duì)能幫你省下大量試錯(cuò)時(shí)間。5. 級(jí)聯(lián)PID與模型失配從仿真到半實(shí)物的進(jìn)階路徑5.1 級(jí)聯(lián)PID到底先進(jìn)在哪隨書另一個(gè)重要的仿真模型是CascadePID_Motor.slx場(chǎng)景是一個(gè)帶電流環(huán)、速度環(huán)、位置環(huán)的直流電機(jī)三環(huán)控制。很多人第一次看級(jí)聯(lián)PID會(huì)覺得不就是兩個(gè)PID串聯(lián)嗎有什么先進(jìn)可言但實(shí)際工程中它的價(jià)值非常大。以電機(jī)控制為例單環(huán)PID面對(duì)的問題是把電流、速度、位置三個(gè)動(dòng)態(tài)特性差異巨大的變量擠在一個(gè)回路里。電流響應(yīng)快速度響應(yīng)中等位置響應(yīng)慢——如果只用一個(gè)PID同時(shí)控制這三者參數(shù)只能遷就最慢的位置環(huán)整個(gè)系統(tǒng)的響應(yīng)速度就被嚴(yán)重拖累了。級(jí)聯(lián)PID的精髓在于把不同時(shí)間尺度的控制任務(wù)分開處理。內(nèi)環(huán)控制電流執(zhí)行周期最短負(fù)責(zé)處理電氣動(dòng)態(tài)中環(huán)控制速度執(zhí)行周期居中負(fù)責(zé)處理機(jī)械動(dòng)態(tài)外環(huán)控制位置執(zhí)行周期最長(zhǎng)負(fù)責(zé)規(guī)劃運(yùn)動(dòng)軌跡。三環(huán)各自獨(dú)立整定參數(shù)內(nèi)環(huán)比外環(huán)快3到5倍這就是級(jí)聯(lián)結(jié)構(gòu)穩(wěn)定配合的黃金法則。5.2 模型失配場(chǎng)景下的仿真設(shè)計(jì)隨書級(jí)聯(lián)PID模型中有個(gè)設(shè)計(jì)我非常欣賞它專門提供了一個(gè)“模型失配”開關(guān)——可以一鍵把控制器內(nèi)部假設(shè)的電機(jī)參數(shù)與實(shí)際被控對(duì)象的參數(shù)設(shè)為不同值。這個(gè)設(shè)計(jì)對(duì)理解魯棒性太重要了。實(shí)際操作中我把控制器內(nèi)部的電樞電阻Ra設(shè)為2歐姆而被控對(duì)象模塊中的Ra設(shè)為2.5歐姆相當(dāng)于模擬了一個(gè)模型辨識(shí)不完全的工況。這時(shí)候你會(huì)觀察到一個(gè)非常典型的工程現(xiàn)象內(nèi)環(huán)電流響應(yīng)仍然很快但出現(xiàn)了穩(wěn)態(tài)誤差這個(gè)誤差會(huì)被速度環(huán)和位置環(huán)逐步補(bǔ)償最終位置輸出仍然能準(zhǔn)確跟蹤設(shè)定值只是動(dòng)態(tài)過程明顯變長(zhǎng)。反過來(lái)做另一個(gè)極端實(shí)驗(yàn)——把被控對(duì)象的轉(zhuǎn)動(dòng)慣量J翻倍但控制器內(nèi)部參數(shù)不改。此時(shí)三環(huán)響應(yīng)都會(huì)明顯變慢但系統(tǒng)仍然穩(wěn)定沒有發(fā)散。這說明級(jí)聯(lián)PID對(duì)參數(shù)失配具有相當(dāng)好的容忍度。但如果失配程度繼續(xù)加大比如J變成原來(lái)的5倍速度環(huán)就可能出現(xiàn)明顯的振蕩這是內(nèi)環(huán)帶寬設(shè)計(jì)和被控對(duì)象特性嚴(yán)重不匹配的表現(xiàn)。這類實(shí)驗(yàn)是純仿真模型無(wú)法替代的寶貴經(jīng)驗(yàn)。只有親手在Simulink里改變參數(shù)、親眼看波形從穩(wěn)定走向振蕩再到發(fā)散你才能真正體會(huì)“魯棒性”三個(gè)字的含義。這也是這套隨書模型最值得反復(fù)玩弄的部分。5.3 從Simulink模型到實(shí)際控制器的移植思路跑通級(jí)聯(lián)PID仿真之后很多人會(huì)問一個(gè)問題這個(gè)模型怎么變成實(shí)際控制器上的代碼這也是我最初的目標(biāo)。隨書模型雖然沒有直接教代碼生成但Simulink的C代碼生成工具鏈正好可以接上。合理的移植路徑是先把隨書模型中的Scope、To Workspace等觀測(cè)模塊全部移除或替換為信號(hào)記錄模塊然后在模型配置參數(shù)中設(shè)置合適的求解器定步長(zhǎng)、離散求解器最后用Embedded Coder生成C代碼。生成后的代碼可以部署到支持Simulink外部模式通信的開發(fā)板上也可以通過串口或CAN與上位機(jī)通信進(jìn)行參數(shù)在線調(diào)整。需要特別注意的是仿真中的連續(xù)被控對(duì)象模型在實(shí)際控制系統(tǒng)中不存在你需要把被控對(duì)象模塊刪除替換為真實(shí)的I/O接口模塊ADC采集反饋信號(hào)、PWM或DAC輸出控制量??刂破鞯腜ID參數(shù)在仿真里調(diào)好的值只能作為初值實(shí)際系統(tǒng)必須重新整定。因?yàn)榉抡婺P筒还芙6嗑?xì)都不可能完全復(fù)現(xiàn)真實(shí)系統(tǒng)的摩擦、死區(qū)、電氣噪聲等非線性因素。6. 把仿真模型用出真實(shí)工程價(jià)值的三點(diǎn)提醒6.1 仿真步長(zhǎng)不是控制周期這是我在多個(gè)項(xiàng)目里反復(fù)踩過的坑必須單獨(dú)拿出來(lái)說。Simulink的仿真步長(zhǎng)是數(shù)值求解器對(duì)微分方程進(jìn)行近似求解的步長(zhǎng)而控制器的執(zhí)行周期是控制器實(shí)際輸出控制量的時(shí)間間隔。兩者雖然可以取相同的數(shù)值但它們的含義完全不同。隨書有些模型的仿真步長(zhǎng)設(shè)的很小比如1e-4秒這是因?yàn)楸豢貙?duì)象模型中有快速動(dòng)態(tài)需要精確求解。但如果你把這個(gè)步長(zhǎng)誤當(dāng)成控制周期直接對(duì)應(yīng)到實(shí)際控制器上會(huì)產(chǎn)生兩個(gè)問題一是控制器計(jì)算耗時(shí)跟不上這么快的執(zhí)行頻率二是傳感器采樣頻率往往遠(yuǎn)低于這個(gè)值反饋信號(hào)根本無(wú)法提供這么高頻率的更新。正確做法是在仿真中單獨(dú)設(shè)置控制器的采樣時(shí)間屬性被控對(duì)象模型可以用更小的仿真步長(zhǎng)求解但控制器的更新周期要單獨(dú)指定為符合實(shí)際硬件能力的時(shí)間比如1毫秒或者10毫秒。Simulink的PID Controller模塊都有采樣時(shí)間參數(shù)把它設(shè)置為實(shí)際控制周期才能真實(shí)模擬離散控制的效果。6.2 先確認(rèn)執(zhí)行器飽和再談控制算法先進(jìn)我在調(diào)試電機(jī)控制項(xiàng)目時(shí)發(fā)現(xiàn)很多所謂“先進(jìn)PID控制效果不好”的案例根源根本不在算法而是執(zhí)行器飽和。電機(jī)輸出的最大力矩是有限的加熱棒的功率上限也是有限的。當(dāng)控制器給出的控制量超過執(zhí)行器上限時(shí)實(shí)際輸出被限制在最大值但PID積分項(xiàng)還在持續(xù)累積。等到誤差反向時(shí)這個(gè)累積的積分量會(huì)讓系統(tǒng)沖過頭產(chǎn)生嚴(yán)重的超調(diào)也就是經(jīng)典的“積分飽和”問題。這套隨書模型在模糊PID和級(jí)聯(lián)PID中都包含了飽和限幅模塊這是非常用心的設(shè)計(jì)。但PDF里面也提到限幅只是第一道保護(hù)真正解決積分飽和還需要在積分環(huán)節(jié)上加積分限幅或者在檢測(cè)到輸出飽和時(shí)暫停積分累積。這些屬于抗積分飽和的范疇在實(shí)際工程中的價(jià)值比模糊PID本身還要大。6.3 文檔代碼化與仿真版本兼容性最后分享兩個(gè)操作層面的經(jīng)驗(yàn)。第一強(qiáng)烈建議你在解壓隨書模型后先運(yùn)行一次完整的模型依賴檢查確保MATLAB的路徑設(shè)置包含了所有模型文件、FIS文件和初始化腳本。我第一次運(yùn)行的時(shí)候因?yàn)闆]設(shè)置路徑報(bào)了一堆“無(wú)法解析FIS文件”的錯(cuò)誤。第二如果你用的是比較新的MATLAB版本R2023b以后打開舊版隨書模型時(shí)可能會(huì)遇到模塊庫(kù)名稱變化或自動(dòng)升級(jí)提示。這時(shí)候最好先備份原文件再允許升級(jí)以免某些自定義模塊在新版本中行為發(fā)生變化導(dǎo)致你誤判為模型本身的問題。還有一個(gè)小技巧隨書模型里幾乎每個(gè)模型的初始化都依賴一個(gè).m腳本這個(gè)腳本里定義了所有需要預(yù)置的參數(shù)變量。我建議你把這些腳本匯總到一個(gè)init_params.m文件每次仿真前統(tǒng)一運(yùn)行而不是分散在多個(gè)腳本中。這樣改參數(shù)的時(shí)候只需要修改一處排查問題的時(shí)候也只需要看一個(gè)地方管理效率會(huì)明顯更高。我在這套資料上花的時(shí)間遠(yuǎn)比我最初預(yù)期的要多但收獲也確實(shí)超出了我的預(yù)期?,F(xiàn)在回過頭來(lái)看這些隨書模型不只是用來(lái)驗(yàn)證PID理論的工具更像是一套把“算法理論”翻譯成“工程實(shí)踐”的譯碼器。那些在論文里佶屈聱牙的先進(jìn)PID改進(jìn)策略在這些模型里變成了看得見、摸得著、改一改參數(shù)就能感受到效果變化的真實(shí)系統(tǒng)。如果你也正在被PID調(diào)參折磨或者想在仿真層面快速驗(yàn)證一些先進(jìn)控制想法建議你不要光看PDF一定親手把每個(gè)模型跑一遍再按我前面說的思路把參數(shù)往極限推一推那種對(duì)控制系統(tǒng)的體感認(rèn)知是光看書永遠(yuǎn)得不到的。