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