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