:從PID進階到現(xiàn)代控制)
聊到工業(yè)控制里最簡單也常用的控制器大家第一反應肯定是PID。PID確實改變了眾多行業(yè)的控制方式但真正在現(xiàn)場跑過伺服、溫控、電源項目的工程師心里都清楚PID從來不是萬能鑰匙。被控對象一強耦合、強非線性或者外部擾動特別猛PID那三個增益調(diào)來調(diào)去往往不是超調(diào)就是抖動很難找到一個舒服的工作點。韓京清先生提出的自抗擾控制Active Disturbance Rejection ControlADRC給的是另一條路它不執(zhí)著于把被控對象模型建得多準而是把系統(tǒng)內(nèi)部不確定性、外部擾動統(tǒng)統(tǒng)裝進一個“總擾動”里由擴展狀態(tài)觀測器實時估計出來再在控制量中把它補償?shù)?。這樣一來再復雜的系統(tǒng)在控制器眼里都被拉回了標準的積分串聯(lián)結構后續(xù)設計就簡單了。這篇文章把ADRC的原理和控制器設計從頭到尾拆一遍重點放在一階對象的工程實現(xiàn)、參數(shù)整定和調(diào)試經(jīng)驗上。適合正在做伺服驅動、運動控制、電力電子、溫控等項目的工程師也適合想從PID進階到現(xiàn)代控制理論的同學看完之后從零手寫一個能跑的ADRC基本沒問題。1. 自抗擾控制到底要“抗”什么1.1 PID為什么不夠用做控制這些年我越來越覺得PID的問題不是它不好學而是它的結構決定了它在某些場景下注定吃力。PID的三個增益KP、KI、KD本質(zhì)都是對誤差的“事后處理”先出現(xiàn)偏差再想方設法把偏差壓回去。面對線性、時不變、低擾動的對象這個思路夠用可一旦對象變復雜短板就暴露了。第一個痛點是快速性和超調(diào)的矛盾。想讓階躍響應更快最直接的做法就是把比例增益調(diào)大結果響應確實快了超調(diào)也跟著來了。經(jīng)典的解決辦法是引入微分項讓控制器提前“踩剎車”但理想微分在實際系統(tǒng)中并不存在。用差分近似微分噪聲會被放大得一塌糊涂所以我見過很多現(xiàn)場工程師最后干脆只用PI把D關掉。第二個痛點是擾動抑制太被動。外部擾動出現(xiàn)后系統(tǒng)要等輸出已經(jīng)發(fā)生偏差控制器才有所動作。這種被動補償?shù)姆绞皆跀_動小、變化慢的場景下還能忍但如果擾動來得又急又猛比如電機負載突變、電網(wǎng)電壓跌落PID的恢復速度常常跟不上。第三個痛點更隱蔽PID本質(zhì)上是拿一個固定結構的控制器去適配不同工況。工作點一變對象特性就變當初調(diào)好的參數(shù)可能立刻失效。這也是為什么很多設備在不同負載條件下表現(xiàn)差異巨大最終只能靠分段PID或者模糊PID這類補丁來緩解。1.2 總擾動把“未知”請進狀態(tài)空間回到韓京清先生的原始思考。他關注的不是“怎么調(diào)PID更好”而是“為什么控制問題那么依賴精確模型”。當時的現(xiàn)代控制理論雖然漂亮但高度依賴對象模型模型一不準理論就很難落地。而經(jīng)典PID雖然不依賴模型卻又不具備對擾動的主動抑制能力。韓京清的關鍵洞察是能不能把系統(tǒng)內(nèi)部的建模誤差、參數(shù)變化和外部擾動合并成一個“總擾動”來處理考慮一個一階系統(tǒng)x_dot f(x, w, t) b * uy x這里x是系統(tǒng)狀態(tài)u是控制輸入y是輸出w是外部擾動f(x, w, t)包含了內(nèi)部動態(tài)、外部擾動、未建模部分的所有影響。如果我能把這個f實時估計出來并在控制量中加以抵消那么系統(tǒng)就變成了一個理想的積分器x_dot ≈ u0這種把“未知動態(tài)”統(tǒng)一視為一個擴展狀態(tài)的思想就是ADRC自抗擾的核心。它不要求你精確知道f長什么樣不要求擾動可測量只要求系統(tǒng)在結構上滿足輸入輸出關系——這在工程上是極大程度的解放。為什么叫“自抗擾”因為系統(tǒng)不是依賴外部擾動模型或前饋傳感器來對抗擾動而是靠回路內(nèi)部的狀態(tài)觀測器把擾動“看”出來。就像開車上坡你不需要知道坡度到底多大只需要根據(jù)車速下降的程度和油門開度就能反推出此時的等效阻力然后自動補油。ADRC里的擴展狀態(tài)觀測器干的就是這個“反推阻力”的活。2. ADRC三大件的原理與分工2.1 跟蹤微分器TD既平滑信號又提供微分跟蹤微分器Track Differentiator作用是解決兩個問題一是從帶有噪聲的參考信號中提取微分二是安排過渡過程。最速跟蹤微分器的連續(xù)形式寫作v1_dot v2v2_dot fst(v1 - v, v2, r, h0)其中v是原始參考輸入v1是v的跟蹤輸出v2是v1的微分fst是最速控制綜合函數(shù)。簡單說v1會以盡可能快的速度逼近v但它的變化速率受r約束不會一下子跳過去。v2就是v1的變化速度由于是通過對v1的導通得到的不會像直接對v求差分那樣把噪聲放大。它的價值在階躍輸入時體現(xiàn)得最明顯。如果直接用階躍作為控制目標誤差信號一上來就是滿幅值控制器會立刻輸出最大控制量系統(tǒng)很容易超調(diào)。但經(jīng)過TD之后階躍被安排成一個斜率受限的斜坡系統(tǒng)的實際目標在平滑地靠近最終值超調(diào)量大幅下降。r的含義可以理解為目標的“最大變化速率”。r越大過渡過程越快但也越接近直接階躍輸入r越小過渡越平緩系統(tǒng)越穩(wěn)?,F(xiàn)場調(diào)試時可以先根據(jù)執(zhí)行機構允許的最大變化率設定r再去微調(diào)。2.2 擴展狀態(tài)觀測器ESO全系統(tǒng)最關鍵的“偵察兵”擴展狀態(tài)觀測器是ADRC真正核心的部分也是理解ADRC的一道坎。它的任務是在只知道輸入u和輸出y的前提下估計出系統(tǒng)的狀態(tài)以及總擾動。還是看一階對象。構造擴張狀態(tài)觀測器z1_dot z2 - β1 * ez2_dot z3 - β2 * e b0 * uz3_dot -β3 * e其中e z1 - yz1估計x系統(tǒng)輸出z2估計x_dot輸出的變化率z3就是擴展出來的那個狀態(tài)用來估計總擾動f。β1、β2、β3是觀測器增益。初看這個結構會覺得奇怪為什么那個e同時出現(xiàn)在三個方程里實際上這就是觀測器的修正機制。想象你有一個系統(tǒng)的“虛擬副本”它按照你對系統(tǒng)的理解運行著。你把真實輸出和虛擬副本輸出之間的誤差分別按不同比例反饋到副本的各層狀態(tài)上不斷校正它的內(nèi)部值。只要反饋增益選得合適過不了多長時間z1就會貼近真實輸出yz2貼近真實變化率z3逼近真實總擾動f。信號流的方向是輸出誤差e先影響到z1估計z1的修正再傳導到z2z2的修正再傳導到z3。這就像一支小隊逐級匯報敵情偵察兵發(fā)現(xiàn)偏差班長調(diào)整位置排長得到更宏觀的態(tài)勢判斷。非線性版本的ESO會把β1 * e這類線性項替換成基于fal函數(shù)的非線性項fal(e, α, δ) sign(e) * |e|^α當|e| δ時fal(e, α, δ) e / δ^(1-α)當|e| ≤ δ時α小于1時小誤差對應高增益理論上控制精度可以更高。但工程上非線性ESO的參數(shù)太多、物理意義不直觀所以大量產(chǎn)品中用線性ESOLESO替代也就是把α直接取1再用帶寬法整定β參數(shù)。很多商業(yè)實現(xiàn)中所謂的LADRC本質(zhì)上就是這套線性化方案效果足夠好參數(shù)還少。2.3 狀態(tài)誤差反饋與擾動補償剩下的都是標準流程有了TD提供的過渡參考信號v1、v2有了ESO提供的狀態(tài)估計z1、z2和擾動估計z3控制律的設計就變得非?!敖炭茣薄H≌`差e1 v1 - z1e2 v2 - z2對于一階對象反饋律可以設計成P控制形式u0 kp * e1對于二階對象則常用PD形式u0 kp * e1 kd * e2最終的控制量是u (u0 - z3) / b0這一步就是擾動補償。ESO估計出的z3是當前系統(tǒng)承受的總擾動把它從控制量里減掉相當于在控制器內(nèi)部生成了一個反向的“抵消信號”。除以b0是為了把虛擬控制量u0換算成實際執(zhí)行器能理解的控制量因為系統(tǒng)本身的輸入增益是b而我們使用的是一個估計值b0來近似b。把u代回系統(tǒng)方程x_dot f b * u ≈ f b * (u0 - z3) / b0 ≈ f u0 - z3 ≈ u0只要z3能跟上fb0與b的偏差不太大系統(tǒng)就會近似成一個積分器x_dot ≈ u0。在這個近似模型下設計控制器什么極點配置、帶寬設計都是信手拈來的事。3. 一階ADRC控制器設計與離散化實現(xiàn)3.1 設計一個完整的一階ADRC需要哪些步驟下面把設計流程整理成可以直接抄的步驟。這里以一個典型一階對象為例比如永磁同步電機的速度環(huán)、加熱爐的溫度控制等效模型核心思想是一致的。第一步確定對象的階次和控制增益b0。一階對象在控制量階躍作用下輸出是近似勻速變化的因此b0可以通過開環(huán)階躍實驗標定。給一個固定控制量u_open測量輸出的變化率Δy/Δt則b0約等于(Δy/Δt) / u_open。第二步設計TD。設定速度因子r和濾波因子h0。r根據(jù)執(zhí)行機構允許的目標變化速率來選h0一般取5到10倍的采樣周期。第三步設計ESO。如果用線性ESO增益按帶寬法設定β1 3 * ω0β2 3 * ω02β3 ω03其中ω0是觀測器帶寬。z1、z2、z3初始賦值為0。第四步設計控制律。一階對象用P控制即可kp取期望閉環(huán)帶寬ωc。工程上一般要求ωc小于ω0的三分之一到五分之一。第五步離散化。用最簡單的歐拉法離散即可把微分方程改寫為差分方程。采樣頻率至少要大于10倍的ω0否則觀測器會失真。3.2 離散化核心公式與參考代碼離散化后的核心公式v1(k1) v1(k) h * v2(k)v2(k1) v2(k) h * fst(v1(k) - v(k), v2(k), r, h0)e(k) z1(k) - y(k)z1(k1) z1(k) h * (z2(k) - 3ω0e(k))z2(k1) z2(k) h * (z3(k) - 3ω02e(k) b0*u(k))z3(k1) z3(k) h * (-ω03*e(k))e1(k) v1(k) - z1(k)u0(k) kp * e1(k)u(k) (u0(k) - z3(k)) / b0完整參考代碼如下基于Python寫便于理解實際移植到C語言時只需加上變量定義和限幅import math h 0.001 # 采樣周期 1ms r 100.0 # TD速度因子 h0 0.005 # TD濾波因子 b0 50.0 # 控制增益估計 w0 30.0 # ESO帶寬 kp 10.0 # 控制律比例增益 u_max 100.0 # 控制量上限 u_min -100.0 # 控制量下限 def sat(x, up, low): return max(low, min(up, x)) def fst(v1, v2, v, r, h0): d r * h0 d0 d * h0 y v1 - v h0 * v2 a0 math.sqrt(d * d 8 * r * abs(y)) if abs(y) d0: a v2 y / h0 else: a v2 0.5 * (a0 - d) * math.copysign(1, y) return -r * sat(a / d, 1, -1) # 初始狀態(tài) v1 0.0 v2 0.0 z1 0.0 z2 0.0 z3 0.0 u 0.0 # 假設輸出函數(shù) def plant_output(x, u): return x # 一階對象對應關系 # 主控制循環(huán) for step in range(10000): # 參考輸入比如一個階躍 v_ref 10.0 if step 100 else 0.0 y plant_output(z1, u) # 這里實際應為真實傳感器讀取 # 跟蹤微分器TD fst_value fst(v1, v2, v_ref, r, h0) v1 h * v2 v2 h * fst_value # 擴展狀態(tài)觀測器ESO e_eso z1 - y z1 h * (z2 - 3 * w0 * e_eso) z2 h * (z3 - 3 * w0 * w0 * e_eso b0 * u) z3 h * (-w0 * w0 * w0 * e_eso) # 控制律 u0 kp * (v1 - z1) u (u0 - z3) / b0 u sat(u, u_max, u_min) # 將u施加到真實被控對象這里由具體硬件完成注意代碼中植物輸出只是示意真實系統(tǒng)應從傳感器讀取y。ESO更新時使用的u必須是限幅后的實際控制量這一點極其重要后面會專門講。3.3 參數(shù)初值與帶寬法的對應關系初次接觸ADRC最大的心理障礙是參數(shù)多。TD有兩個參數(shù)r、h0ESO有一個ω0控制律有一個kp再加上b0和采樣周期h看著有六七個參數(shù)。如果像調(diào)PID那樣這些參數(shù)彼此影響那確實很難。但ADRC參數(shù)實際上是分組解耦的TD只管參考信號整形ESO只管狀態(tài)和擾動估計控制律只管反饋增益。ACR參數(shù)之間是弱耦合。用帶寬法之后初始設置就簡單多了參數(shù)含義初始設置建議h采樣周期根據(jù)硬件能力盡量小1ms以內(nèi)較常見rTD速度因子參考目標最大變化率越小過渡越慢h0TD濾波因子取5到10倍h主要用于減小微分噪聲b0控制增益估計開環(huán)階躍實驗獲得有±20%誤差可接受ω0ESO帶寬取期望閉環(huán)帶寬ωc的3到5倍kp控制律增益一階對象直接取ωc即期望閉環(huán)帶寬需要注意對于一階對象即使采用的是三階ESO反饋控制律用P控制就足夠了。二階對象才需要PD控制此時需要額外引入v2和z2構成微分通道。4. 參數(shù)整定與工程實施的8個細節(jié)4.1 b0標定是成敗的第一步幾乎所有現(xiàn)場調(diào)ADRC翻車的項目最后都能回溯到b0沒標準。b0是控制器對“控制輸入多大程度影響輸出變化率”的估計它直接決定了擾動補償量的比例。b0偏大控制器會認為對象對輸入很敏感實際沒那么敏感補償不足系統(tǒng)偏軟響應遲緩b0偏小補償過頭系統(tǒng)容易振蕩。標定方法不復雜。開環(huán)狀態(tài)下給被控對象一個固定控制量比如伺服驅動器里直接給一個固定電流值記錄速度響應曲線。穩(wěn)態(tài)段斜率就是Δy/Δt用斜率除以控制量得到b0。為減小擾動影響多測幾組不同控制量取平均值。實際經(jīng)驗是ADRC對b0誤差有一定容忍度大概正負20%以內(nèi)都能工作。但超出這個范圍系統(tǒng)要么發(fā)軟要么發(fā)振?,F(xiàn)場如果發(fā)現(xiàn)系統(tǒng)對擾動的補償方向正確但幅度不對優(yōu)先懷疑b0。4.2 ESO帶寬、控制帶寬與采樣周期怎么配ESO帶寬ω0決定觀測器跟蹤擾動多快控制帶寬ωc決定閉環(huán)響應的剛度。兩者關系經(jīng)驗上取ωc ω0 / 3ω0 fs / 10其中fs是采樣頻率。第一條保證觀測器比控制器快否則控制環(huán)會拿到一個滯后的擾動估計補償動作會“晚半拍”反而造成振蕩。第二條保證離散化不丟信息采樣太慢時觀測器看到的是“稀疏”的信號很難精確重建快速變化的擾動。我從項目里的體會是一上來不要把ω0懟得太高。本子上可以算得很漂亮但實際系統(tǒng)有測量噪聲、有執(zhí)行器延遲ω0太高后控制量高頻抖得厲害。調(diào)試時從低到高慢慢加ω0直到擾動恢復速度不再明顯改善反而噪聲變大這個拐點就是當前系統(tǒng)條件下的最優(yōu)觀測器帶寬。4.3 非線性fal函數(shù)和線性ESO怎么選韓京清原版ADRC用的是非線性ESO理論上小誤差高增益的特性確實優(yōu)越。但工程調(diào)試中我發(fā)現(xiàn)直接用非線性ESO容易讓參數(shù)調(diào)整變得很抽象。fal函數(shù)里的α1、α2、α3、δ四個參數(shù)哪個影響什么很難從時域曲線上直觀判斷。所以我的建議是第一版調(diào)試一律用線性ESO。讓系統(tǒng)先動起來把b0、ω0、kp這些關鍵參數(shù)對齊確認擾動補償正確、閉環(huán)穩(wěn)定之后如果有進一步提升性能的需求再按原版非線性結構去優(yōu)化。很多量產(chǎn)產(chǎn)品最終用的也是線性化版本性能完全夠用。如果堅持用非線性ESOδ參數(shù)值得說一句。δ是線性段區(qū)間理論上δ越小小誤差時增益越大跟蹤精度越高但δ太小會放大噪聲容易引起高頻極限環(huán)。一個可行策略是先取δ1%到5%的量程再逐步減小到系統(tǒng)開始抖動的臨界值之前停下。4.4 控制量飽和與抗飽和處理ESO內(nèi)部維護著一個對被控對象的“數(shù)字副本”它認為控制量u是真實施加到對象上的。一旦控制器輸出達到執(zhí)行器限幅真實施加的控制量就不是計算值而是限幅后的截斷值。如果此時ESO還用未飽和的u去更新z2、z3它就會嚴重誤判總擾動等退出飽和時ESO狀態(tài)已經(jīng)漂移系統(tǒng)會出現(xiàn)大幅超調(diào)或遲滯。處理辦法只有一條送給ESO的u必須是實際限幅后的值。在代碼里先對u做限幅再用限幅后的u去更新ESO。更進一步可以做抗飽和反饋。計算飽和差值u_sat u_calc - u_actual把這個差值以一定比例補償?shù)紼SO的z2更新中這樣觀測器在飽和期間能感知到執(zhí)行器已截斷不會盲目積分。常用形式是在z2方程中加一項k_sat * (u_calc - u_actual)k_sat取與β2相當?shù)牧考壖纯伞?.5 測量噪聲下面怎么穩(wěn)住觀測器ESO的性能上限很大程度上由測量噪聲決定。z3是擾動估計但它是由輸出誤差e一路放大得到的測量噪聲會被帶到z3再進入控制量。很多工程師把ω0調(diào)高后擾動恢復倒是快了但電機開始嗡嗡響就是這個原因。噪聲處理有三個方向。一是降低ω0犧牲一點擾動跟蹤速度換控制量平順二是在測量通道加低通濾波濾波引入的相位延遲會限制ω0需要平衡三是在采樣值送入ESO之前做輕度的滑動平均注意這種濾波會讓ESO看到更平滑的信號但也有延遲不能過度使用。另外一個常用技巧是不要在控制量u上直接加低通濾波那是拿系統(tǒng)性能換好看曲線。而是要先把速度/位置反饋信號洗干凈再做ESO。濾波位置放錯控制品質(zhì)損失很大。4.6 TD的r和h0到底怎么取r決定了系統(tǒng)的過渡過程快慢直觀理解就是“目標變化的最大速率”。項目里我會根據(jù)實際執(zhí)行機構能力來定電機空載所能達到的最大加速度系統(tǒng)允許的最大參考變化率或者工藝要求的最短爬坡時間。把這些算成每秒變化多少量r就取對應量級。r太大TD幾乎直接放行輸入階躍過渡過程形同虛設r太小系統(tǒng)反應遲鈍參考信號半天爬不到位會讓人覺得“控制很肉”。h0是濾波因子作用在fst函數(shù)內(nèi)部影響過渡過程的平滑程度和噪聲抑制。工程上取5到10倍的采樣周期比較穩(wěn)妥。采樣周期1ms時h0取5到10ms配合r的整定效果不錯。如果現(xiàn)場噪聲小可以取小一點減小延遲噪聲大可適當調(diào)大。4.7 參數(shù)整定的推薦順序現(xiàn)場調(diào)參最怕沒章法。我常用的順序第一步確認采樣周期和測量鏈路。采樣周期固定濾波鏈固定后面所有參數(shù)都基于這個前提。第二步標定b0。開環(huán)階躍實驗測斜率多測幾次取平均值。這一步?jīng)]做準后面都是白調(diào)。第三步設定TD。先以工藝允許的目標爬升時間估算rh0取5到10倍采樣周期。這樣參考側就固定了。第四步從較小值開始逐漸加大ω0。觀察兩個指標擾動出現(xiàn)后z3的響應速度以及控制量抖動的幅度。找到一個恢復夠快、噪聲可接受的折中點。第五步調(diào)整kp。一階系統(tǒng)里kp就相當于閉環(huán)帶寬。先給一個保守值跑階躍響應觀察超調(diào)和擾動恢復剛度逐步加大直到閉環(huán)動態(tài)滿足要求。第六步回頭微調(diào)r和h0。如果階躍超調(diào)大適度減小r如果微分通道噪聲大增大h0。這時其他參數(shù)已經(jīng)基本就位微調(diào)工作量很小。這套流程下來通常兩三個小時就能完成一個速度環(huán)或者溫控回路的整定比PID盲調(diào)快得多。4.8 和現(xiàn)有PID系統(tǒng)怎么過渡切換現(xiàn)場已經(jīng)穩(wěn)定運行的PID系統(tǒng)直接換ADRC風險較大即使仿真效果很好現(xiàn)場也會有意外。推薦三步走第一步讓ESO在線運行但不參與控制。代碼里同時跑PID和ESO觀察z3估計出來的擾動與實際負載變化是否吻合。比如設備周期性加載z3應該出現(xiàn)和負載同步的波動。這相當于在正式使用前先讓“偵察兵”熟悉地形。第二步把z3補償項疊加到PID輸出上。保留PID作為主控制器ADRC只負責擾動前饋補償。不要怕補償方向反了調(diào)試中一旦發(fā)現(xiàn)擾動抑制變差說明z3極性反了把符號反一下即可。第三步切換到完整ADRC閉環(huán)保留PID輸出作為限幅參考或者用一個速度極慢的切換斜坡把控制權過渡過去。這樣即使現(xiàn)場參數(shù)不理想切回PID也只是一瞬間的事。5. 調(diào)試實錄三個常見問題與復盤5.1 高頻抖動伺服速度環(huán)的“嗡嗡”聲某次調(diào)試伺服速度環(huán)一上電電機就發(fā)出輕微的高頻嗡嗡聲控制量波形上能明顯看到高頻噪聲分量。排查時先看速度反饋示波器顯示噪聲峰峰值并不大。再看z3發(fā)現(xiàn)擾動估計在±一個比較大的范圍來回跳動。初步判斷是ESO帶寬過高把測量噪聲放大了。把ω0從80降到40噪聲明顯減小但擾動恢復也慢了。后來重新做了b0標定發(fā)現(xiàn)最初的b0比真實值低了約30%修正后系統(tǒng)在ω060時就獲得了比之前ω080還好的擾動抑制效果。復盤來看這是典型的“噪聲增益偏小”復合問題。只降ω0會犧牲性能重新標b0之后等價于提高了擾動補償?shù)臏蚀_性才真正解決問題。5.2 溫控階躍超調(diào)TD的過渡過程不是擺設某加熱爐溫度控制項目目標溫度從200度提高到400度超調(diào)高達15度以上。檢查參數(shù)時發(fā)現(xiàn)為了追求快速TD的r設置得非常大過渡過程幾乎等同于直接階躍。ESO的ω0只是控制帶寬的2倍補償滯后明顯。處理方式是對癥下藥把r從5000降到1000目標從200到400的過渡時間從不到3秒延長到接近8秒同時將ω0提高到控制帶寬的4倍。再次跑階躍超調(diào)降到1度以內(nèi)升溫時間只比原來慢了不到1秒。這個案例提醒我ESO再強TD的安排過渡過程也不能省。參考側的整形和控制側的補償是兩回事跳過TD會直接面對快速性和超調(diào)這對老矛盾。5.3 電源負載突變恢復慢ESO帶寬才是瓶頸一個DC-DC電源項目負載從空載切換到滿載輸出電壓跌落約200mV恢復時間接近50ms。這里已經(jīng)用了ADRC但效果比之前的PID好不到哪去。排查思路是觀察ESO的估計值。將z3波形和負載電流波形對比發(fā)現(xiàn)負載突變時z3確實在變大但速度偏慢擾動都作用到輸出上了z3還沒跟蹤到位。這說明ω0設置太保守觀測器跟不上擾動的變化速率。把ω0從20逐步加到80配合提高控制律增益kp恢復時間最短做到了約5ms且沒有出現(xiàn)明顯的高頻抖動。項目結束后復盤我把“擾動恢復速度主要由ESO帶寬決定”這一條記進了團隊的控制調(diào)試規(guī)范里。以下是問題速查表現(xiàn)場遇到類似現(xiàn)象可以直接對照現(xiàn)象可能原因處理方向控制量高頻抖動ω0過高 / b0偏小 / 測量噪聲大降ω0、重新標定b0、加測量濾波階躍響應超調(diào)大r過大 / ω0偏低 / kp過大減小r、提高ω0、降低kp擾動恢復慢ω0偏低 / b0偏大提高ω0、重新標定b0低頻極限環(huán)振蕩δ過小 / b0偏大 / 飽和處理不當增大δ、核對b0、加抗飽和邏輯穩(wěn)態(tài)誤差明顯執(zhí)行器死區(qū) / b0偏小 / 控制律剛度不足補償死區(qū)、提高kp、必要時加積分最后再分享一個個人經(jīng)驗每次調(diào)ADRC之前先花十分鐘把b0標準后面省下的時間遠遠不止十分鐘。ADRC看起來參數(shù)多但只要抓住b0、ω0、kp這三個抓手剩下的都是錦上添花。工程上穩(wěn)妥的路徑永遠是先線性后非線性、先仿真后現(xiàn)場、先觀測后閉環(huán)。