控制中的核心應(yīng)用:從模型構(gòu)建到控制器設(shè)計(jì)實(shí)戰(zhàn))
1. 從“紙上談兵”到“動(dòng)手驗(yàn)證”為什么自動(dòng)控制離不開(kāi)MATLAB搞自動(dòng)控制的人如果沒(méi)在MATLAB里折騰過(guò)幾個(gè)傳遞函數(shù)、畫過(guò)幾張根軌跡圖那感覺(jué)就像廚師沒(méi)摸過(guò)炒鍋一樣總少了點(diǎn)實(shí)戰(zhàn)的底氣。我當(dāng)年學(xué)自控原理的時(shí)候課本上的公式推導(dǎo)得頭頭是道奈奎斯特判據(jù)、勞斯表背得滾瓜爛熟但一到自己分析一個(gè)稍微復(fù)雜點(diǎn)的系統(tǒng)比如一個(gè)帶延遲環(huán)節(jié)的PID控制就感覺(jué)腦子里的理論和手頭的實(shí)際問(wèn)題之間隔著一層毛玻璃模模糊糊看不真切。直到后來(lái)被導(dǎo)師“扔”進(jìn)機(jī)房要求用MATLAB把書上的所有例題和課后習(xí)題全部復(fù)現(xiàn)一遍我才真正體會(huì)到MATLAB不是一門需要額外學(xué)習(xí)的編程語(yǔ)言它就是自動(dòng)控制原理的“實(shí)驗(yàn)臺(tái)”和“計(jì)算尺”。這個(gè)“實(shí)驗(yàn)臺(tái)”的價(jià)值在于它把抽象的理論瞬間具象化。你不再需要對(duì)著一個(gè)復(fù)雜的特征方程去徒手畫根軌跡猜測(cè)閉環(huán)極點(diǎn)會(huì)往哪里跑也不再需要對(duì)著頻率特性曲線去腦補(bǔ)系統(tǒng)的穩(wěn)定裕度。tf、zpk、ss幾個(gè)函數(shù)一敲系統(tǒng)模型就立起來(lái)了step、bode、nyquist幾個(gè)命令一出系統(tǒng)的時(shí)域和頻域特性就一目了然地?cái)[在眼前。這種即時(shí)反饋對(duì)于理解概念、驗(yàn)證想法、甚至發(fā)現(xiàn)理論推導(dǎo)中忽略的細(xì)節(jié)比如數(shù)值精度問(wèn)題至關(guān)重要。可以說(shuō)MATLAB讓自動(dòng)控制從一門偏重?cái)?shù)學(xué)推導(dǎo)的學(xué)科變成了一門可以快速迭代、直觀驗(yàn)證的工程實(shí)踐。所以這篇總結(jié)不是一份冰冷的函數(shù)手冊(cè)而是我結(jié)合多年仿真和項(xiàng)目調(diào)試經(jīng)驗(yàn)梳理出的一條用MATLAB玩轉(zhuǎn)自控核心分析的實(shí)戰(zhàn)路徑。我們會(huì)從最基礎(chǔ)的模型搭建開(kāi)始穿越時(shí)域響應(yīng)、頻域分析、穩(wěn)定性判斷、控制器設(shè)計(jì)這幾個(gè)核心關(guān)卡最后聊聊如何把仿真模型和實(shí)際硬件對(duì)接起來(lái)。目標(biāo)很明確讓你拿到一個(gè)系統(tǒng)無(wú)論是傳遞函數(shù)描述還是狀態(tài)空間描述都能用MATLAB這套工具快速、準(zhǔn)確地進(jìn)行全面“體檢”和“手術(shù)”真正把理論用于解決工程問(wèn)題。2. 基石三種系統(tǒng)模型的構(gòu)建與轉(zhuǎn)換在MATLAB里“玩”自控一切始于系統(tǒng)模型的建立。模型就像建筑的設(shè)計(jì)圖后續(xù)所有的分析、設(shè)計(jì)都基于它。MATLAB主要支持三種模型表述方式各有優(yōu)劣適應(yīng)不同場(chǎng)景。2.1 傳遞函數(shù)模型最直觀的輸入輸出視角傳遞函數(shù)是經(jīng)典控制理論中最常用的模型直接描述了系統(tǒng)輸出與輸入在拉普拉斯域的關(guān)系。在MATLAB中我們使用tf函數(shù)來(lái)創(chuàng)建。% 示例創(chuàng)建一個(gè)傳遞函數(shù) G(s) (s 2) / (s^2 5s 6) num [1 2]; % 分子多項(xiàng)式系數(shù)按s的降冪排列[s^1的系數(shù), s^0的系數(shù)] den [1 5 6]; % 分母多項(xiàng)式系數(shù)[s^2的系數(shù), s^1的系數(shù), s^0的系數(shù)] G_tf tf(num, den)運(yùn)行后會(huì)顯示G_tf s 2 ------------- s^2 5 s 6為什么這么用這種系數(shù)向量的輸入方式是與多項(xiàng)式在MATLAB中的表示一脈相承的。[1, 5, 6]就代表多項(xiàng)式s^2 5s 6。對(duì)于高階系統(tǒng)務(wù)必注意系數(shù)的順序和零系數(shù)的補(bǔ)全。例如s^3 2s 1對(duì)應(yīng)的分母向量應(yīng)該是[1, 0, 2, 1]。實(shí)操心得一處理純微分或純積分環(huán)節(jié)。比如要表示純微分環(huán)節(jié)s不能直接寫num[1],den[1]這得到的是1。正確做法是tf([1, 0], 1)即分子為s分母為1。同理純積分1/s是tf(1, [1, 0])。2.2 零極點(diǎn)增益模型洞察系統(tǒng)本質(zhì)特性零極點(diǎn)增益模型將傳遞函數(shù)分解為零點(diǎn)、極點(diǎn)和增益的乘積形式G(s) K * (s-z1)(s-z2).../(s-p1)(s-p2)...。這直接揭示了系統(tǒng)的關(guān)鍵特征零點(diǎn)影響響應(yīng)速度和超調(diào)極點(diǎn)決定系統(tǒng)的穩(wěn)定性和模態(tài)增益影響穩(wěn)態(tài)輸出。用zpk函數(shù)創(chuàng)建。% 示例創(chuàng)建 G(s) 5 * (s1) / [(s23j)(s2-3j)(s5)] z [-1]; % 零點(diǎn)向量 p [-23j, -2-3j, -5]; % 極點(diǎn)向量復(fù)數(shù)極點(diǎn)成對(duì)出現(xiàn) k 5; % 增益 G_zpk zpk(z, p, k)為什么它重要在控制器設(shè)計(jì)時(shí)我們經(jīng)常直接操作零極點(diǎn)。比如希望通過(guò)添加一個(gè)零點(diǎn)來(lái)抵消某個(gè)不利的極點(diǎn)或者將主導(dǎo)極點(diǎn)配置到期望的位置。zpk模型讓這些操作變得極其直觀。此外對(duì)于具有相同零極點(diǎn)的系統(tǒng)如多個(gè)傳感器并聯(lián)用zpk形式更容易合并。2.3 狀態(tài)空間模型現(xiàn)代控制理論的通用語(yǔ)言對(duì)于多輸入多輸出、高階、或者內(nèi)部狀態(tài)重要的系統(tǒng)狀態(tài)空間模型是更強(qiáng)大的工具。它用一組一階微分方程描述系統(tǒng)dx/dt Ax Bu,y Cx Du。MATLAB中用ss函數(shù)創(chuàng)建。% 示例一個(gè)簡(jiǎn)單的二階系統(tǒng)狀態(tài)空間實(shí)現(xiàn) A [0 1; -2 -3]; B [0; 1]; C [1 0]; D 0; G_ss ss(A, B, C, D)為什么需要掌握即便你主要做經(jīng)典控制理解狀態(tài)空間也很有必要。首先很多物理系統(tǒng)如電機(jī)、機(jī)械臂的自然建模方式就是狀態(tài)空間。其次現(xiàn)代控制方法如LQR線性二次型調(diào)節(jié)器、狀態(tài)觀測(cè)器設(shè)計(jì)都基于此模型。最后MATLAB中許多高級(jí)分析函數(shù)如step,bode內(nèi)部都會(huì)先將傳遞函數(shù)模型轉(zhuǎn)換為狀態(tài)空間模型進(jìn)行計(jì)算因?yàn)閿?shù)值穩(wěn)定性更好。2.4 模型間的自由轉(zhuǎn)換與系統(tǒng)連接這三種模型在MATLAB中可以無(wú)縫轉(zhuǎn)換這是MATLAB在自控領(lǐng)域如此強(qiáng)大的原因之一。% 轉(zhuǎn)換示例 G_tf_from_zpk tf(G_zpk); % 零極點(diǎn)增益轉(zhuǎn)傳遞函數(shù) G_ss_from_tf ss(G_tf); % 傳遞函數(shù)轉(zhuǎn)狀態(tài)空間 G_zpk_from_ss zpk(G_ss); % 狀態(tài)空間轉(zhuǎn)零極點(diǎn)增益系統(tǒng)連接是構(gòu)建復(fù)雜模型的關(guān)鍵。MATLAB支持串聯(lián)(series或*)、并聯(lián)(parallel或)、反饋連接(feedback)。% 示例前向通道G反饋通道H構(gòu)成單位負(fù)反饋系統(tǒng) G tf(1, [1 1]); H tf(1, [0.5 1]); sys_cl feedback(G, H); % 默認(rèn)是負(fù)反饋 % 等效于 sys_cl G / (1 G*H); % 如果是正反饋 sys_cl_positive feedback(G, H, 1);踩坑記錄一feedback函數(shù)的默認(rèn)參數(shù)。feedback(G, H)默認(rèn)是負(fù)反饋且反饋連接點(diǎn)是G的輸出到H的輸入再回到G的輸入做減法。這符合大多數(shù)情況。但一定要清楚其結(jié)構(gòu)當(dāng)系統(tǒng)框圖不是標(biāo)準(zhǔn)單位負(fù)反饋時(shí)需要手動(dòng)計(jì)算或使用更基礎(chǔ)的series,parallel組合。3. 時(shí)域分析看看系統(tǒng)“動(dòng)起來(lái)”什么樣模型建好第一件事就是看它的時(shí)域響應(yīng)。這是最直觀的性能檢驗(yàn)方式看看系統(tǒng)接到命令后是迅速跟上還是拖拖拉拉是平穩(wěn)到達(dá)還是上躥下跳。3.1 階躍響應(yīng)考核系統(tǒng)跟蹤能力的“標(biāo)準(zhǔn)試題”階躍輸入模擬了一個(gè)突然變化的指令如突然將轉(zhuǎn)速設(shè)定值從0調(diào)到1000rpm。step函數(shù)是核心工具。G tf(25, [1 4 25]); % 一個(gè)欠阻尼二階系統(tǒng) step(G); grid on; % 獲取響應(yīng)數(shù)據(jù)用于定量分析 [y, t] step(G);運(yùn)行后圖形窗口會(huì)顯示系統(tǒng)的階躍響應(yīng)曲線。但看圖之外我們更需要量化指標(biāo)上升時(shí)間響應(yīng)從終值的10%上升到90%所需時(shí)間。反映了系統(tǒng)的快速性。峰值時(shí)間響應(yīng)達(dá)到第一個(gè)峰值所需時(shí)間。超調(diào)量最大峰值超出終值的百分比。(max(y)-y(end))/y(end)*100%。反映了系統(tǒng)的相對(duì)穩(wěn)定性超調(diào)太大意味著振蕩劇烈。調(diào)節(jié)時(shí)間響應(yīng)進(jìn)入并保持在終值±2%或±5%誤差帶內(nèi)所需的最短時(shí)間。反映了系統(tǒng)的總體收斂速度。如何獲取這些指標(biāo)MATLAB沒(méi)有直接給出這些參數(shù)的函數(shù)需要自己從響應(yīng)數(shù)據(jù)[y,t]中計(jì)算。這里分享一個(gè)我常用的計(jì)算超調(diào)量和峰值時(shí)間的小技巧[y,t] step(G); [ymax, idx_max] max(y); % 找到最大值及其索引 tp t(idx_max); % 峰值時(shí)間 yss y(end); % 穩(wěn)態(tài)值假設(shè)仿真時(shí)間足夠長(zhǎng) Mp (ymax - yss) / yss * 100; % 超調(diào)量百分比 fprintf(峰值時(shí)間 tp %.3f 秒超調(diào)量 Mp %.2f%%\n, tp, Mp);對(duì)于上升時(shí)間和調(diào)節(jié)時(shí)間需要編寫邏輯來(lái)查找首次穿越特定閾值的時(shí)間點(diǎn)稍微復(fù)雜一些。3.2 脈沖響應(yīng)與初始條件響應(yīng)impulse函數(shù)用于分析脈沖響應(yīng)它反映了系統(tǒng)的“記憶”特性或固有模態(tài)。在系統(tǒng)辨識(shí)中很有用。initial函數(shù)用于分析狀態(tài)空間模型在非零初始條件下的自由運(yùn)動(dòng)零輸入響應(yīng)。這對(duì)于研究系統(tǒng)的內(nèi)部狀態(tài)行為至關(guān)重要比如分析一個(gè)平衡點(diǎn)附近的運(yùn)動(dòng)。% 脈沖響應(yīng) impulse(G); grid on; % 初始條件響應(yīng) (僅適用于狀態(tài)空間模型 ss) sys_ss ss([0 1; -2 -3], [0;1], [1 0], 0); x0 [1; 0]; % 初始狀態(tài) [x1(0); x2(0)] initial(sys_ss, x0); grid on;3.3 任意輸入響應(yīng)lsim函數(shù)的強(qiáng)大之處現(xiàn)實(shí)中的輸入很少是標(biāo)準(zhǔn)的階躍或脈沖。lsim函數(shù)可以仿真系統(tǒng)對(duì)任意輸入信號(hào)的響應(yīng)。t 0:0.01:10; % 時(shí)間向量 u sin(t) 0.5*sin(3*t); % 一個(gè)任意的輸入信號(hào)例如兩個(gè)正弦波的疊加 [y, t_out] lsim(G, u, t); % 計(jì)算響應(yīng) plot(t, u, r--, t_out, y, b-, LineWidth, 1.5); legend(輸入 u(t), 輸出 y(t)); grid on;為什么lsim如此重要它讓你能夠模擬真實(shí)的工作場(chǎng)景。比如你可以生成一個(gè)模擬實(shí)際負(fù)載擾動(dòng)的信號(hào)u看看你的控制系統(tǒng)輸出y是否會(huì)被嚴(yán)重干擾。這是驗(yàn)證控制器魯棒性的有效手段。實(shí)操心得二注意lsim的輸入?yún)?shù)順序。lsim(sys, u, t)中t是時(shí)間向量u是輸入信號(hào)向量或矩陣對(duì)于多輸入。u的長(zhǎng)度必須和t相同。如果系統(tǒng)有初始狀態(tài)可以使用lsim(sys, u, t, x0)。4. 頻域分析透視系統(tǒng)的“頻率性格”如果說(shuō)時(shí)域分析是看“外表”那頻域分析就是看“內(nèi)在性格”。它告訴我們系統(tǒng)對(duì)不同頻率信號(hào)的“態(tài)度”是放大還是衰減是提前響應(yīng)還是延遲。4.1 伯德圖幅頻與相頻特性的“體檢報(bào)告”伯德圖由幅頻特性曲線和相頻特性曲線組成分別以對(duì)數(shù)坐標(biāo)展示增益dB和相位度隨頻率的變化。使用bode函數(shù)。G tf(100, [1 5 100]); bode(G); grid on; % 獲取幅值和相位數(shù)據(jù)用于計(jì)算穩(wěn)定裕度 [mag, phase, w] bode(G);從伯德圖我們可以直接讀出截止頻率增益下降到-3dB即輸出幅值約為輸入的70.7%時(shí)的頻率。粗略反映了系統(tǒng)的響應(yīng)速度。低頻增益決定了系統(tǒng)跟蹤穩(wěn)態(tài)信號(hào)如常值的能力。高頻衰減反映了系統(tǒng)抑制噪聲的能力。4.2 奈奎斯特圖穩(wěn)定性判據(jù)的幾何化奈奎斯特圖在復(fù)平面上繪制開(kāi)環(huán)頻率特性G(jω)H(jω)的軌跡。它是應(yīng)用奈奎斯特穩(wěn)定性判據(jù)的必備工具。使用nyquist函數(shù)。G_open tf(10, [1 2 1]); % 開(kāi)環(huán)傳遞函數(shù) nyquist(G_open); grid on; axis equal; % 保證縱橫軸比例相同圖形不扭曲如何用奈奎斯特圖判斷閉環(huán)穩(wěn)定性奈奎斯特穩(wěn)定判據(jù)可以表述為當(dāng)ω從-∞變化到∞時(shí)開(kāi)環(huán)奈奎斯特曲線逆時(shí)針包圍點(diǎn)(-1, j0)的次數(shù)N等于開(kāi)環(huán)傳遞函數(shù)在右半s平面的極點(diǎn)數(shù)P。閉環(huán)系統(tǒng)穩(wěn)定的充要條件是Z P - N 0其中Z是閉環(huán)右極點(diǎn)個(gè)數(shù)。 對(duì)于最小相位系統(tǒng)P0判據(jù)簡(jiǎn)化為奈奎斯特曲線不包圍(-1, j0)點(diǎn)則閉環(huán)穩(wěn)定。這是工程上最常用的快速判斷法。在圖上你可以直觀地觀察曲線與(-1, j0)點(diǎn)的位置關(guān)系。4.3 尼克爾斯圖連接開(kāi)環(huán)與閉環(huán)特性的橋梁尼克爾斯圖以開(kāi)環(huán)相位為橫軸開(kāi)環(huán)增益dB為縱軸繪制開(kāi)環(huán)頻率特性。它的核心價(jià)值在于圖上疊加的等M圓等閉環(huán)幅值線和等N圓等閉環(huán)相位線可以直接從開(kāi)環(huán)曲線讀出閉環(huán)的幅頻、相頻特性。使用nichols函數(shù)。nichols(G_open); grid on; ngrid; % 顯示等M圓和等N圓網(wǎng)格這是關(guān)鍵為什么尼克爾斯圖在控制器調(diào)參時(shí)有用當(dāng)你調(diào)整控制器參數(shù)如PID的Kp, Ki, Kd時(shí)開(kāi)環(huán)伯德圖會(huì)變化。在尼克爾斯圖上你可以直觀地看到開(kāi)環(huán)曲線相對(duì)于等M圓的位置移動(dòng)從而預(yù)判閉環(huán)諧振峰值、帶寬等指標(biāo)的變化趨勢(shì)指導(dǎo)你向期望的閉環(huán)性能方向調(diào)整。4.4 穩(wěn)定裕度系統(tǒng)“健康度”的量化指標(biāo)穩(wěn)定裕度直接給出了系統(tǒng)距離臨界穩(wěn)定振蕩還有多遠(yuǎn)。包括相位裕度和增益裕度。G_open tf(10, conv([1 1], [1 5 6])); % 開(kāi)環(huán)系統(tǒng) [Gm, Pm, Wcg, Wcp] margin(G_open); fprintf(增益裕度 Gm %.2f dB (在頻率 %.2f rad/s處)\n, 20*log10(Gm), Wcg); fprintf(相位裕度 Pm %.2f 度 (在截止頻率 %.2f rad/s處)\n, Pm, Wcp); margin(G_open); % 繪制帶裕度標(biāo)記的伯德圖 grid on;相位裕度在開(kāi)環(huán)增益為0dB截止頻率處相位距離-180度還有多少度。通常要求Pm 30°~60°。增益裕度在相位為-180度的頻率處增益距離0dB還有多少dB。通常要求Gm 2~6 dB。踩坑記錄二margin函數(shù)返回值的含義。Gm返回的是倍數(shù)不是分貝。所以打印增益裕度時(shí)需要轉(zhuǎn)換20*log10(Gm)。Pm直接是度數(shù)。Wcg是相位穿越頻率相位為-180度Wcp是增益穿越頻率增益為0dB。務(wù)必理解清楚否則會(huì)誤判系統(tǒng)穩(wěn)定性。5. 穩(wěn)定性與極點(diǎn)配置給系統(tǒng)“把脈”與“動(dòng)手術(shù)”分析完性能接下來(lái)是關(guān)鍵一步判斷系統(tǒng)是否穩(wěn)定以及如何讓它變得穩(wěn)定且性能優(yōu)良。5.1 代數(shù)判據(jù)勞斯-赫爾維茨判據(jù)的快速實(shí)現(xiàn)對(duì)于特征方程我們可以用roots函數(shù)直接求根根的位置決定穩(wěn)定性所有根都具有負(fù)實(shí)部則穩(wěn)定。但有時(shí)我們只關(guān)心是否穩(wěn)定不關(guān)心具體根值可以用勞斯判據(jù)的思路。% 通過(guò)求特征根判斷穩(wěn)定性 char_poly [1 3 6 2 1]; % 特征多項(xiàng)式系數(shù): s^4 3s^3 6s^2 2s 1 poles roots(char_poly); if all(real(poles) 0) disp(系統(tǒng)穩(wěn)定所有極點(diǎn)均在左半平面); else disp(系統(tǒng)不穩(wěn)定); unstable_poles poles(real(poles) 0); fprintf(不穩(wěn)定極點(diǎn)\n); disp(unstable_poles); end為什么還要用代數(shù)判據(jù)roots函數(shù)對(duì)于高階多項(xiàng)式可能存在數(shù)值精度問(wèn)題。在早期理論分析或手算驗(yàn)證時(shí)勞斯表可以幫助我們解析地確定參數(shù)的穩(wěn)定范圍。雖然MATLAB不直接提供勞斯表函數(shù)但根據(jù)判據(jù)規(guī)則寫一個(gè)小腳本并不難這對(duì)于理解判據(jù)本身很有幫助。5.2 根軌跡法圖解參數(shù)變化的影響根軌跡展示了當(dāng)系統(tǒng)某個(gè)參數(shù)通常是開(kāi)環(huán)增益K從0變化到∞時(shí)閉環(huán)極點(diǎn)在s平面上的移動(dòng)軌跡。它是設(shè)計(jì)控制器特別是PID的強(qiáng)力可視化工具。使用rlocus函數(shù)。G_open tf(1, conv([1 0], [1 2 2])); % 開(kāi)環(huán)傳遞函數(shù)包含積分環(huán)節(jié) rlocus(G_open); sgrid; % 添加等阻尼比和等自然頻率網(wǎng)格 title(根軌跡圖);如何利用根軌跡設(shè)計(jì)控制器確定期望的閉環(huán)極點(diǎn)位置根據(jù)要求的超調(diào)量阻尼比ζ和調(diào)節(jié)時(shí)間自然頻率ωn在s平面上確定一個(gè)區(qū)域。使用sgrid可以調(diào)出等ζ和等ωn線。在根軌跡上找到該點(diǎn)觀察根軌跡是否通過(guò)或靠近該區(qū)域。計(jì)算所需增益K如果根軌跡通過(guò)該點(diǎn)可以使用rlocfind函數(shù)交互式地選取該點(diǎn)并獲取對(duì)應(yīng)的K值。[K, poles] rlocfind(G_open); % 運(yùn)行后圖形上會(huì)出現(xiàn)十字光標(biāo)點(diǎn)擊你選中的點(diǎn)添加零極點(diǎn)改造根軌跡如果原始根軌跡不經(jīng)過(guò)期望區(qū)域就需要通過(guò)添加控制器如PD控制器引入零點(diǎn)PI控制器引入極點(diǎn)來(lái)“塑造”根軌跡使其通過(guò)。實(shí)操心得三理解rlocus繪制的是開(kāi)環(huán)增益K變化時(shí)的軌跡。這里的“開(kāi)環(huán)傳遞函數(shù)”是指你傳入rlocus的函數(shù)。如果你已經(jīng)有一個(gè)控制器C(s)和被控對(duì)象G(s)想研究比例系數(shù)Kp的影響應(yīng)該傳入C(s)*G(s)并令其中Kp作為可變?cè)鲆嬉蜃印@鐚?duì)于PI控制器Kp*(11/(Ti*s))在繪制根軌跡時(shí)通常將Kp作為可變參數(shù)而Ti固定。5.3 極點(diǎn)配置直接指定閉環(huán)性能對(duì)于狀態(tài)空間模型我們可以使用極點(diǎn)配置方法通過(guò)設(shè)計(jì)狀態(tài)反饋矩陣K直接將閉環(huán)系統(tǒng)的極點(diǎn)配置到期望的位置。這需要用到place或acker函數(shù)。A [0 1; -1 -1]; B [0; 1]; C [1 0]; D 0; sys_ss ss(A, B, C, D); % 期望的閉環(huán)極點(diǎn)位置決定動(dòng)態(tài)性能 desired_poles [-21j, -2-1j]; % 希望系統(tǒng)比原來(lái)更快、阻尼適中 % 檢查系統(tǒng)是否能控 Co ctrb(sys_ss); % 計(jì)算能控性矩陣 if rank(Co) size(A,1) disp(系統(tǒng)完全能控可以進(jìn)行極點(diǎn)配置); K place(A, B, desired_poles); % 使用place函數(shù)數(shù)值更穩(wěn)定適合多輸入或多極點(diǎn) % K acker(A, B, desired_poles); % 使用Acker公式適合單輸入系統(tǒng) A_cl A - B*K; % 閉環(huán)系統(tǒng)矩陣 sys_cl ss(A_cl, B, C, D); disp(配置的狀態(tài)反饋增益矩陣K為); disp(K); % 驗(yàn)證閉環(huán)極點(diǎn) disp(實(shí)際閉環(huán)極點(diǎn)為); disp(eig(A_cl)); else disp(系統(tǒng)不能控?zé)o法進(jìn)行任意極點(diǎn)配置); endplacevsackerplace函數(shù)采用更穩(wěn)健的算法可以處理重極點(diǎn)推薦用于多輸入系統(tǒng)或一般情況。acker基于阿克曼公式理論上更直觀但數(shù)值穩(wěn)定性較差僅推薦用于單輸入且階數(shù)不高的情況。6. 控制器設(shè)計(jì)從經(jīng)典PID到狀態(tài)觀測(cè)器有了分析工具最終目的是設(shè)計(jì)出能使系統(tǒng)滿足要求的控制器。6.1 PID控制器整定經(jīng)驗(yàn)與模型的結(jié)合MATLAB提供了pidtune函數(shù)可以基于模型自動(dòng)整定PID參數(shù)。G tf(1, [1 3 3 1]); % 一個(gè)三階對(duì)象 % 設(shè)計(jì)一個(gè)PID控制器目標(biāo)相位裕度60度 C_pid pidtune(G, PID, 60); % PID類型也可以選PI, PDF等 disp(C_pid); % 查看整定后的開(kāi)環(huán)頻率特性 sys_open C_pid * G; margin(sys_open);pidtune是一個(gè)很好的起點(diǎn)但它給出的參數(shù)往往比較保守。實(shí)際項(xiàng)目中我通常的流程是用pidtune獲取一組初始參數(shù)。在Simulink中搭建閉環(huán)仿真模型。根據(jù)階躍響應(yīng)的表現(xiàn)超調(diào)、調(diào)節(jié)時(shí)間手動(dòng)微調(diào)Kp,Ki,Kd。特別關(guān)注積分項(xiàng)Ki太小則穩(wěn)態(tài)誤差消除慢太大則容易引起積分飽和和超調(diào)。微分項(xiàng)Kd對(duì)噪聲敏感實(shí)際使用時(shí)通常需要加一個(gè)低通濾波器。6.2 基于頻域的設(shè)計(jì)超前-滯后校正對(duì)于性能要求更高的系統(tǒng)可能需要設(shè)計(jì)更復(fù)雜的校正網(wǎng)絡(luò)。超前校正用于提高穩(wěn)定性和響應(yīng)速度增加相位裕度滯后校正用于提高穩(wěn)態(tài)精度增加低頻增益。% 設(shè)計(jì)示例為一個(gè)系統(tǒng)設(shè)計(jì)超前校正 G tf(10, [1 1 0]); % 原系統(tǒng)類型I有一個(gè)積分環(huán)節(jié) [mag, phase, w] bode(G); % 假設(shè)我們希望通過(guò)校正在截止頻率wc處增加約50度的相位超前 phi_max 50 * pi/180; % 所需最大超前相位弧度 a (1 sin(phi_max)) / (1 - sin(phi_max)); % 計(jì)算衰減因子a % 選擇新的截止頻率 wc_new使得在此處原系統(tǒng)相位為 -180 (phi_max/2 5~10度補(bǔ)償) % ... (這里需要根據(jù)原系統(tǒng)伯德圖手動(dòng)選擇wc_new是一個(gè)迭代過(guò)程) % 假設(shè)我們選定 wc_new 3 rad/s T 1 / (sqrt(a) * wc_new); % 計(jì)算時(shí)間常數(shù)T C_lead tf([a*T 1], [T 1]); % 超前校正器傳遞函數(shù) (a*T*s 1) / (T*s 1) % 檢查校正后效果 sys_open_comp C_lead * G; margin(sys_open_comp);為什么頻域設(shè)計(jì)更系統(tǒng)它允許你直接針對(duì)系統(tǒng)的頻域缺陷如相位裕度不足、低頻增益不夠進(jìn)行“精準(zhǔn)手術(shù)”。雖然計(jì)算過(guò)程比PID整定繁瑣但對(duì)于復(fù)雜對(duì)象或特定性能指標(biāo)如特定帶寬、諧振峰值的要求這種方法更可靠。6.3 狀態(tài)反饋與觀測(cè)器設(shè)計(jì)現(xiàn)代控制方法當(dāng)系統(tǒng)狀態(tài)不可直接測(cè)量時(shí)需要設(shè)計(jì)狀態(tài)觀測(cè)器如龍伯格觀測(cè)器來(lái)估計(jì)狀態(tài)再結(jié)合狀態(tài)反饋。% 延續(xù)之前的狀態(tài)空間模型 A [0 1; -1 -1]; B [0; 1]; C [1 0]; D 0; sys ss(A, B, C, D); % 設(shè)計(jì)狀態(tài)反饋矩陣K極點(diǎn)配置 desired_poles_fb [-3, -4]; K place(A, B, desired_poles_fb); % 設(shè)計(jì)狀態(tài)觀測(cè)器龍伯格觀測(cè)器 % 觀測(cè)器極點(diǎn)通常比閉環(huán)極點(diǎn)快3-5倍以保證估計(jì)誤差快速收斂 desired_poles_obs [-10, -12]; L place(A, C, desired_poles_obs); % 注意這里是對(duì)偶系統(tǒng) (A, C) 進(jìn)行極點(diǎn)配置 % 構(gòu)建基于觀測(cè)器的控制器補(bǔ)償器 % 補(bǔ)償器的狀態(tài)空間實(shí)現(xiàn)[A-LC -B; 0 0] 等但更常用的是 reg 函數(shù) % 或者在Simulink中更方便地搭建觀測(cè)器結(jié)構(gòu)關(guān)鍵點(diǎn)分離原理。對(duì)于線性系統(tǒng)狀態(tài)反饋控制律的設(shè)計(jì)和狀態(tài)觀測(cè)器的設(shè)計(jì)可以獨(dú)立進(jìn)行分離原理。這意味著你可以先按性能要求設(shè)計(jì)K再按估計(jì)誤差收斂速度要求設(shè)計(jì)L最后將兩者組合。這大大簡(jiǎn)化了設(shè)計(jì)過(guò)程。7. 進(jìn)階實(shí)戰(zhàn)從仿真到實(shí)現(xiàn)的橋梁掌握了基礎(chǔ)分析和設(shè)計(jì)最后我們聊聊如何讓MATLAB的工作落地以及一些高級(jí)工具。7.1 模型離散化連接連續(xù)世界與數(shù)字芯片實(shí)際的控制系統(tǒng)大多由計(jì)算機(jī)數(shù)字芯片實(shí)現(xiàn)需要將設(shè)計(jì)好的連續(xù)控制器離散化。c2d函數(shù)是橋梁。G_continuous tf(1, [1 1]); Ts 0.01; % 采樣周期根據(jù)系統(tǒng)帶寬和硬件能力選擇通常為系統(tǒng)閉環(huán)帶寬的10-20倍以上 method zoh; % 零階保持器對(duì)應(yīng)實(shí)際DAC的保持特性 % method 還可以是 foh (一階保持), tustin (雙線性變換/塔斯廷), matched (零極點(diǎn)匹配)等 G_discrete c2d(G_continuous, Ts, method); disp(離散化后的傳遞函數(shù)); disp(G_discrete);選擇離散化方法的心得zoh最常用因?yàn)樗M了實(shí)際數(shù)字控制器中DAC的零階保持特性。對(duì)于大多數(shù)情況這是一個(gè)安全且合理的選擇。tustin能保持頻率響應(yīng)的形狀尤其適用于頻率特性重要的濾波器設(shè)計(jì)。它引入了頻率畸變但可以通過(guò)預(yù)畸變校正。matched能匹配連續(xù)和離散系統(tǒng)的DC增益和脈沖響應(yīng)在某些特定場(chǎng)合有用。關(guān)鍵參數(shù)是采樣周期Ts。選擇太小會(huì)增加計(jì)算負(fù)擔(dān)和存儲(chǔ)需求選擇太大會(huì)導(dǎo)致信號(hào)混疊和性能下降。一個(gè)經(jīng)驗(yàn)法則是采樣頻率fs 1/Ts應(yīng)至少是系統(tǒng)閉環(huán)帶寬的10倍奈奎斯特采樣定理要求2倍但工程上需要留足裕量。7.2 控制系統(tǒng)工具箱的利器sisotool與controlSystemDesigner對(duì)于復(fù)雜的單輸入單輸出系統(tǒng)設(shè)計(jì)圖形化交互工具sisotool或更新版本的controlSystemDesigner是效率神器。G tf(1, [1 3 2 0]); % 被控對(duì)象 controlSystemDesigner(G); % 或 sisotool(G)它會(huì)打開(kāi)一個(gè)交互界面同時(shí)顯示根軌跡圖、開(kāi)環(huán)伯德圖、閉環(huán)階躍響應(yīng)等。你可以在根軌跡圖上直接拖拽閉環(huán)極點(diǎn)。在伯德圖上添加/移動(dòng)零極點(diǎn)即調(diào)整控制器。實(shí)時(shí)觀察階躍響應(yīng)、頻率響應(yīng)指標(biāo)的變化。自動(dòng)計(jì)算PID參數(shù)。 這對(duì)于快速探索設(shè)計(jì)空間、直觀理解參數(shù)變化的影響非常有幫助尤其適合課程設(shè)計(jì)和項(xiàng)目前期原型驗(yàn)證。7.3 與Simulink的協(xié)同從傳遞函數(shù)到動(dòng)態(tài)仿真MATLAB的函數(shù)和腳本擅長(zhǎng)計(jì)算和分析而Simulink擅長(zhǎng)搭建動(dòng)態(tài)系統(tǒng)的框圖模型并進(jìn)行仿真。兩者結(jié)合是完整的控制設(shè)計(jì)流程。典型工作流在MATLAB中用tf、zpk、ss建立被控對(duì)象模型。用pidtune、rlocus、place等設(shè)計(jì)控制器得到控制器傳遞函數(shù)C(s)。在Simulink中搭建閉環(huán)控制系統(tǒng)框圖。使用LTI System模塊將MATLAB工作區(qū)中的G和C直接拖入模型。設(shè)置更真實(shí)的輸入信號(hào)、加入非線性環(huán)節(jié)如飽和、死區(qū)、引入噪聲和擾動(dòng)。進(jìn)行時(shí)域仿真驗(yàn)證控制器在更接近實(shí)際環(huán)境下的性能。回調(diào)MATLAB在Simulink中仿真完成后數(shù)據(jù)可以導(dǎo)出到MATLAB工作區(qū)用MATLAB強(qiáng)大的繪圖和分析函數(shù)進(jìn)行后處理。踩坑記錄三仿真步長(zhǎng)與求解器選擇。在Simulink中如果模型包含你從MATLAB導(dǎo)入的連續(xù)傳遞函數(shù)務(wù)必注意仿真參數(shù)。對(duì)于剛性系統(tǒng)或包含快速動(dòng)態(tài)的系統(tǒng)默認(rèn)的變步長(zhǎng)ode45求解器可能效率低下甚至失敗。需要根據(jù)情況選擇ode15s剛性系統(tǒng)或ode23t適度剛性系統(tǒng)并合理設(shè)置最大步長(zhǎng)以保證仿真精度和速度。最后我想說(shuō)的是MATLAB在自動(dòng)控制中的應(yīng)用精髓不在于記住所有函數(shù)名而在于建立起“問(wèn)題-模型-分析-設(shè)計(jì)-驗(yàn)證”的思維鏈條。每一個(gè)函數(shù)都是這個(gè)鏈條上的一個(gè)工具。當(dāng)你面對(duì)一個(gè)實(shí)際的控制問(wèn)題時(shí)先想清楚我要分析什么穩(wěn)定性、快速性、準(zhǔn)確性對(duì)應(yīng)的MATLAB工具是什么margin,step,rlocus我的設(shè)計(jì)目標(biāo)如何用工具實(shí)現(xiàn)配置極點(diǎn)、調(diào)整伯德圖形狀。多練多試錯(cuò)把這些函數(shù)用在你自己推導(dǎo)的例題、課后題甚至小項(xiàng)目上才能真正把它們變成你解決工程問(wèn)題的本能反應(yīng)。