詳解:從PID整定到工程實(shí)戰(zhàn))
1. 先聊清楚直流電壓控制參數(shù)到底是什么做電源設(shè)計(jì)、電機(jī)驅(qū)動(dòng)、電池充電管理或者逆變器控制的朋友對(duì)直流電壓控制參數(shù)這七個(gè)字應(yīng)該都不陌生。說白了這就是你在閉環(huán)控制系統(tǒng)里那一堆需要整定的數(shù)值——PID增益、采樣周期、PWM頻率、死區(qū)范圍、軟啟動(dòng)斜率等等。它們決定了你的系統(tǒng)在負(fù)載突變時(shí)是穩(wěn)穩(wěn)當(dāng)當(dāng)還是劇烈震蕩決定了輸出電壓是精確到小數(shù)點(diǎn)后兩位還是飄得沒眼看。我最早接觸這個(gè)概念是在做一個(gè)48V轉(zhuǎn)12V的Buck電路那時(shí)候以為把功率級(jí)設(shè)計(jì)好就萬事大吉了結(jié)果一接上動(dòng)態(tài)負(fù)載輸出電壓直接甩出去三四伏差點(diǎn)把后端芯片燒了。后來才明白硬件拓?fù)渲皇枪羌芸刂茀?shù)才是靈魂。同一個(gè)Buck電路參數(shù)調(diào)好了電壓紋波能壓在30mV以內(nèi)負(fù)載跳變恢復(fù)時(shí)間能控制在幾百微秒?yún)?shù)調(diào)得稀爛系統(tǒng)直接嘯叫、震蕩、甚至炸管。這篇文章就是把這些參數(shù)掰開揉碎講清楚。適合誰看正在做DC-DC電源的硬件工程師、搞電機(jī)控制的算法工程師、剛?cè)腴T電力電子的學(xué)生還有那些被輸出電壓不穩(wěn)折磨得頭疼的調(diào)試人員。我會(huì)從控制邏輯的原理解起把每個(gè)關(guān)鍵參數(shù)的作用、整定方法、坑點(diǎn)和排查思路全部過一遍保證你看完能從瞎調(diào)變成有理有據(jù)地調(diào)。2. 核心參數(shù)全景拆解每個(gè)參數(shù)都在干什么要說清楚直流電壓控制參數(shù)得先把一個(gè)基礎(chǔ)閉環(huán)系統(tǒng)的骨架畫出來輸出電壓采樣 → 誤差計(jì)算 → 控制器運(yùn)算 → PWM調(diào)制 → 功率級(jí)輸出 → 回到采樣。這個(gè)循環(huán)里每一個(gè)環(huán)節(jié)都有自己的參數(shù)任何一個(gè)設(shè)錯(cuò)了整個(gè)系統(tǒng)都會(huì)出問題。2.1 反饋采樣參數(shù)精度和速度是一對(duì)矛盾采樣環(huán)節(jié)最核心的兩個(gè)參數(shù)是采樣電阻分壓比和采樣周期但很多人只盯著前者把后者忽略了。分壓比決定了你送到ADC或者誤差放大器輸入端的電壓范圍比如你輸出48VADC基準(zhǔn)是3.3V那分壓比就得大約14.5:1。這個(gè)算錯(cuò)后面全亂套。采樣周期或者說ADC采樣率這事我踩過比較大的坑。理論上采樣頻率至少要兩倍于控制帶寬才能保證系統(tǒng)穩(wěn)定但實(shí)際上我建議做到10倍以上。原因很簡(jiǎn)單你采樣率不夠輸出電壓的真實(shí)變化趨勢(shì)根本看不出來控制器拿到的是便秘式數(shù)據(jù)沒辦法及時(shí)響應(yīng)。我做過一個(gè)數(shù)字電源開關(guān)頻率200kHz采樣率只設(shè)了50kSPS結(jié)果負(fù)載瞬態(tài)的時(shí)候系統(tǒng)完全反應(yīng)不過來恢復(fù)時(shí)間拉長(zhǎng)了一倍還多。后來把采樣率提到接近1MSPS效果立竿見影。還有個(gè)細(xì)節(jié)——采樣時(shí)刻的選擇。用數(shù)字控制的盡量把采樣點(diǎn)對(duì)準(zhǔn)PWM載波的波峰或者波谷也就是開關(guān)管的開關(guān)時(shí)刻附近這時(shí)候開關(guān)噪聲最小采到的是最接近真實(shí)平均值的電壓。相位對(duì)齊這個(gè)事情比很多人想象的重要得多。2.2 PID三要素比例、積分、微分各自的管轄范圍PID是電壓控制環(huán)里最核心的運(yùn)算邏輯三個(gè)參數(shù)各管一攤誰也替代不了誰。比例系數(shù)Kp決定了系統(tǒng)對(duì)誤差的即時(shí)反應(yīng)力度。誤差大輸出調(diào)整就大誤差小調(diào)整就小。但是Kp調(diào)高了以后系統(tǒng)容易震蕩因?yàn)樗谟昧^猛和矯枉過正之間反復(fù)橫跳。我見過有些新手一上來就把Kp拉到最大覺得反應(yīng)快就完事結(jié)果輸出電壓像打擺子一樣來回抖。積分系數(shù)Ki負(fù)責(zé)消除穩(wěn)態(tài)誤差也就是最后那一口氣。比例環(huán)節(jié)再大理論上也沒法把誤差完全壓到零模擬控制器里是這樣數(shù)字控制器加了積分之后才能做到無靜差。Ki的整定要配合Kp來——積分太弱穩(wěn)態(tài)誤差慢慢悠悠地消除甚至始終差個(gè)0.1V積分太強(qiáng)系統(tǒng)容易產(chǎn)生低頻振蕩表現(xiàn)為輸出電壓按幾赫茲的頻率周期性波動(dòng)很難察覺但危害很大。微分系數(shù)Kd它看的是誤差的變化趨勢(shì)提前踩剎車。對(duì)電壓環(huán)來說Kd用得比溫度環(huán)、速度環(huán)少因?yàn)殡妷翰蓸釉肼暠旧砭捅容^大微分一上去噪聲就被放大了系統(tǒng)反而抖得更厲害。我自己的經(jīng)驗(yàn)是除非你對(duì)采樣做了很好的濾波處理否則Kd初始給0先讓PI工作發(fā)現(xiàn)問題確實(shí)需要再加一點(diǎn)阻尼再加微小的Kd。2.3 控制頻率整個(gè)環(huán)路的地基控制頻率或者叫環(huán)路執(zhí)行頻率是指控制器每秒計(jì)算一次控制量的頻率。對(duì)數(shù)字電源來說這個(gè)頻率通常和PWM頻率一致或者成整數(shù)倍關(guān)系。一個(gè)值得記在心里的工程經(jīng)驗(yàn)是電壓環(huán)的穿越頻率帶寬一般設(shè)置為開關(guān)頻率的1/10到1/20。比如開關(guān)頻率200kHz那電壓環(huán)帶寬做到1020kHz再高就容易把開關(guān)噪聲卷進(jìn)來再低動(dòng)態(tài)響應(yīng)就不夠了。這個(gè)帶寬目標(biāo)直接決定了你的PID參數(shù)的量級(jí)你不可能用10Hz的帶寬去實(shí)現(xiàn)1ms的動(dòng)態(tài)響應(yīng)這是物理規(guī)律。2.4 PWM調(diào)制參數(shù)從控制量到實(shí)際動(dòng)作的橋梁PID算出來的結(jié)果是一個(gè)數(shù)字量比如占空比0.45但這個(gè)數(shù)字要變成真實(shí)的開關(guān)動(dòng)作中間隔著PWM調(diào)制環(huán)節(jié)。這里兩個(gè)關(guān)鍵參數(shù)PWM頻率越大輸出紋波越小但開關(guān)損耗越高越小效率好一點(diǎn)但紋波難以壓住。做直流電壓控制PWM頻率的選擇經(jīng)常是紋波要求和效率要求之間的折中。調(diào)制分辨率數(shù)字控制器里占空比的精度受PWM計(jì)數(shù)器的位數(shù)限制。比如一個(gè)定時(shí)器分辨率是12位那占空比最小步進(jìn)就是1/4096。別小看這個(gè)數(shù)——輸出電壓要精確到±10mV的話以12V輸出為例占空比分辨率需要做到0.08%以內(nèi)也就是至少11位精度。如果你的MCU PWM分辨率只有8位穩(wěn)壓精度就是天生的短板再厲害的PID也沒用。這是很多人調(diào)了半天參數(shù)還是精度不夠的根本原因。2.5 保護(hù)與限幅參數(shù)不設(shè)限的控制是定時(shí)炸彈最后幾個(gè)不太起眼但生死攸關(guān)的參數(shù)輸出過壓保護(hù)閾值、過流保護(hù)閾值、占空比上下限防止單個(gè)周期內(nèi)占空比突變導(dǎo)致電感飽和、軟啟動(dòng)時(shí)間。軟啟動(dòng)這玩意我多說兩句很多人圖省事直接跳過了。上電瞬間輸出電壓從0往目標(biāo)值沖如果沒有軟啟動(dòng)限制控制器一上來就滿占空比輸出電感電流會(huì)沖到天上輸出電容充電電流巨大輕則輸出電壓嚴(yán)重過沖重則燒保險(xiǎn)絲。正確做法是讓電壓基準(zhǔn)從0開始按固定斜率爬升到目標(biāo)值爬升時(shí)間100ms到幾百ms比較常見。3. 參數(shù)整定的完整實(shí)操流程前面把參數(shù)講透了下面聊怎么調(diào)。這部分是重頭戲因?yàn)閰?shù)整定不是數(shù)學(xué)題是建模仿真實(shí)測(cè)三合一的手藝活。3.1 第一步先把模型搭出來別急著焊板子調(diào)參數(shù)之前我強(qiáng)烈建議先根據(jù)系統(tǒng)的小信號(hào)模型估算出一組初始值而不是盲目地邊調(diào)邊看。對(duì)于最常見的電壓模式Buck變換器可以用下面的思路快速估算Buck變換器在連續(xù)導(dǎo)通模式下的控制到輸出的傳遞函數(shù)大概是[ \frac{\hat{v}{out}}{\hatdrlblxrh1} \frac{V{in}}{1 \frac{s}{\omega_{LC}} \cdot Q \frac{s^2}{\omega_{LC}^2}} ]其中(\omega_{LC}1/\sqrt{LC})是LC濾波器的諧振角頻率Q是品質(zhì)因數(shù)。這套東西看著唬人實(shí)操里很多人也記不住公式那我給一個(gè)更工程化的快速設(shè)計(jì)法先確定目標(biāo)穿越頻率fc規(guī)則fc ≤ 開關(guān)頻率/10在穿越頻率處量出或者估算出補(bǔ)償前系統(tǒng)的增益和相位用PI控制器在穿越頻率處把相位裕度補(bǔ)到45°以上增益補(bǔ)到0dB說白了就是你要在目標(biāo)帶寬處讓總環(huán)路增益過0dB同時(shí)相位余量足夠。我常用LTspice或者SIMPLIS先做一版仿真把補(bǔ)償網(wǎng)絡(luò)的零極點(diǎn)擺出來看波特圖這一步能幫你避免90%的上電就嘯叫問題。3.2 第二步經(jīng)典整定法上手有了初始值之后幾種工程整定辦法都值得掌握Ziegler-Nichols法這是最經(jīng)典的經(jīng)驗(yàn)整定法。做法是先關(guān)掉積分和微分只保留比例環(huán)節(jié)把Kp從0慢慢往上加直到系統(tǒng)輸出出現(xiàn)持續(xù)等幅振蕩記下此時(shí)的臨界增益Kc和振蕩周期Tc。然后按經(jīng)驗(yàn)公式反推Kp0.6KcKiKp/(Tc/2)KdKp*Tc/8。但這個(gè)方法在電源上有局限。因?yàn)樗笙到y(tǒng)能承受等幅振蕩很多電源在這種狀態(tài)下已經(jīng)損壞了。所以我更推薦衰減振蕩法同樣只用P把Kp調(diào)到系統(tǒng)出現(xiàn)4:1衰減比第二個(gè)波峰是第一個(gè)的1/4然后把Kp降一半作為工作值再根據(jù)振蕩周期設(shè)積分時(shí)間。湊試法這是我日常調(diào)板子用得最多的方法。流程很簡(jiǎn)單先Kp從0.1倍的估算值開始Ki和Kd歸零觀察階躍響應(yīng)然后逐漸加Kp每加一次看一次輸出波形直到出現(xiàn)輕微振蕩接著把Kp退回去一點(diǎn)開始加Ki消除穩(wěn)態(tài)誤差最后如非必要不加Kd。這個(gè)過程要配合示波器實(shí)時(shí)看波形別憑感覺猜。3.3 第三步實(shí)測(cè)調(diào)試眼見為實(shí)下面是我調(diào)試一塊300W Buck模塊的真實(shí)記錄輸出48V開關(guān)頻率100kHzLC參數(shù)是L47uHC220uF數(shù)字控制用的STM32F334初始估算fc設(shè)在10kHz經(jīng)過計(jì)算和仿真初始PI參數(shù)設(shè)為Kp0.35Ki5000數(shù)字域積分系數(shù)。第一輪測(cè)試帶2A負(fù)載階躍輸出電壓跌落約800mV恢復(fù)時(shí)間約2ms。波形上能看到明顯的欠阻尼系統(tǒng)有輕微的響尾振蕩。此時(shí)的問題是Kp偏低Ki也不夠。第二輪調(diào)整Kp從0.35提到0.8跌落降到300mV恢復(fù)時(shí)間縮短到800us但開始出現(xiàn)高頻輕微抖動(dòng)說明Kp已經(jīng)接近臨界加了0.1就很可能等幅振蕩。于是Kp定在0.6作為安全值。第三輪Ki從5000提到15000穩(wěn)態(tài)誤差從50mV壓到5mV以內(nèi)效果非常明顯。但此時(shí)要注意Ki太大也會(huì)引入低頻擾動(dòng)實(shí)測(cè)15000在滿載到輕載切換時(shí)輸出電壓有了一次明顯的呼吸式波動(dòng)這就是積分飽和。于是把Ki降回10000同時(shí)在軟件里加了積分限幅——積分項(xiàng)最多只能貢獻(xiàn)±20%的占空比變化。最終結(jié)果負(fù)載階躍跌落控制在200mV以內(nèi)恢復(fù)時(shí)間約600us輸出紋波45mV含開關(guān)噪聲穩(wěn)態(tài)精度±10mV以內(nèi)。這個(gè)結(jié)果對(duì)一塊普通Buck板來說算是不錯(cuò)了。3.4 數(shù)字域參數(shù)和模擬域參數(shù)的換算坑如果你是做數(shù)字電源有一個(gè)地方必須格外留意芯片手冊(cè)里給你的公式都是連續(xù)域的PID參數(shù)而你代碼里用的是離散域z域的系數(shù)。這兩者不是直接相等的。以最簡(jiǎn)單的PI為例連續(xù)域的控制律是u(t)Kpe(t)Ki∫e(t)dt離散化之后采用前向歐拉法采樣周期Tsu[n]Kpe[n]KiTs*Σe[k]也就是說你代碼里的積分系數(shù)項(xiàng)是Ki乘以采樣周期Ts之后的結(jié)果。很多新手直接拿仿真里的Ki往代碼里填結(jié)果發(fā)現(xiàn)積分作用莫名其妙小了1000倍就是因?yàn)槁┏肆瞬蓸又芷凇7催^來有些程序員喜歡把Ki*Ts合并成一個(gè)數(shù)存起來這種表示方法也行但換算的時(shí)候必須心里有數(shù)別混用。4. 常見問題與排查技巧實(shí)錄調(diào)參數(shù)踩過的坑三天三夜說不完我把最典型的幾個(gè)拎出來按癥狀→原因→解法列成速查表。4.1 癥狀一輸出電壓持續(xù)振蕩頻率不高表現(xiàn)為輸出電壓在目標(biāo)值附近以幾十赫茲到幾百赫茲來回波動(dòng)帶載時(shí)尤其明顯。最常見原因是積分增益Ki過大積分環(huán)節(jié)的極點(diǎn)頻率太低和輸出濾波器的諧振峰形成了新的振蕩模態(tài)。我的排查方法是直接看PWM占空比波形——如果占空比也在低頻波動(dòng)那基本可以確定是積分環(huán)節(jié)的問題。解法很簡(jiǎn)單Ki減半觀察波形是否收斂。另外檢查一下是不是負(fù)載源本身在呼吸式變化比如后級(jí)有功率比較大的周期性負(fù)載這種情況可能需要加前饋補(bǔ)償而不是只調(diào)PI。4.2 癥狀二高頻嘯叫或者板子吱吱響電感發(fā)出人耳可聞的噪聲輸出電壓紋波波形雜亂頻譜上出現(xiàn)明顯的邊帶。這個(gè)問題的根源往往是環(huán)路帶寬被拉到了開關(guān)頻率附近控制器放大了開關(guān)噪聲或者環(huán)路相位裕度不足導(dǎo)致高頻振蕩。先用示波器鎖紋波看波形頻率——如果噪聲頻率和開關(guān)頻率相近優(yōu)先檢查是不是采樣時(shí)刻沒對(duì)準(zhǔn)把采樣點(diǎn)挪到PWM波形的中間位置如果噪聲頻率是開關(guān)頻率的整數(shù)分之一比如1/3、1/5那大概率是次諧波振蕩常見于峰值電流模式控制中選擇比占空比大于0.5的情況需要加斜坡補(bǔ)償。電壓模式控制下則優(yōu)先查環(huán)路相位裕度。另一個(gè)沒多少人提但很現(xiàn)實(shí)的原因是示波器探頭的環(huán)路太大探頭本身拾取了開關(guān)噪聲讓你誤以為系統(tǒng)在振蕩。用彈簧地線針短地線重新測(cè)一遍可能整個(gè)世界都清凈了。4.3 癥狀三穩(wěn)態(tài)誤差一直存在怎么調(diào)Ki都沒用輸出電壓和目標(biāo)值始終差著固定值比如設(shè)48V輸出卻穩(wěn)定在47.85V。首先排除采樣精度的鍋——分壓電阻的阻值誤差和ADC基準(zhǔn)溫漂都會(huì)導(dǎo)致這種假穩(wěn)態(tài)誤差拿萬用表實(shí)測(cè)輸出如果實(shí)測(cè)和目標(biāo)值一致而ADC讀到的是錯(cuò)的問題就在采樣鏈路。其次是離散控制下的量化誤差如果PWM分辨率不足占空比無法精確表達(dá)需求值系統(tǒng)會(huì)進(jìn)入極限環(huán)表現(xiàn)為輸出電壓在某個(gè)值附近來回跳。這種時(shí)候不是調(diào)PID能解決的得提升PWM分辨率或者用抖動(dòng)調(diào)制技術(shù)。4.4 癥狀四負(fù)載突變時(shí)電壓跌落過大或恢復(fù)太慢系統(tǒng)靜態(tài)穩(wěn)定但動(dòng)態(tài)性能拉胯。先別急著調(diào)參數(shù)先確認(rèn)你的采樣鏈路響應(yīng)到底有多快。我曾經(jīng)遇到一個(gè)板子為了省成本在電壓采樣后加了一級(jí)RC濾波時(shí)間常數(shù)做了1ms結(jié)果環(huán)路再怎么調(diào)動(dòng)態(tài)恢復(fù)也不可能優(yōu)于1ms——這根本不是帶寬問題是信號(hào)通路本身把高頻信息濾掉了。把RC濾波時(shí)間常數(shù)降到和開關(guān)周期一個(gè)量級(jí)動(dòng)態(tài)性能立刻改善。如果采樣沒問題那就加大Kp提高穿越頻率但前提依舊是不要讓穿越頻率超過開關(guān)頻率的1/10。4.5 癥狀五上電瞬間輸出過沖這個(gè)我最常跟結(jié)構(gòu)同事解釋的問題不是純粹靠PID參數(shù)能解決的。上電瞬間輸出過沖的主要來源是基準(zhǔn)的電平跳變——控制器在控制輸出電壓快速爬升但被控對(duì)象LC濾波的慣性導(dǎo)致爬過頭。解法有三條一是軟啟動(dòng)把基準(zhǔn)從0按斜坡爬升讓控制器追著移動(dòng)的目標(biāo)走而不是追一個(gè)瞬間到位的目標(biāo)二是給輸出電壓加上限幅鉗位超過預(yù)設(shè)值直接回收占空比三是加大輸出電容容值吸收過沖能量。現(xiàn)實(shí)中我一般是三個(gè)組合著用軟啟動(dòng)時(shí)間設(shè)150ms鉗位閾值比目標(biāo)值高5%電容按下限選。4.6 排查工具和配套裝備調(diào)參數(shù)千萬別拿色環(huán)電阻萬用表硬扛。至少準(zhǔn)備這三樣一臺(tái)帶FFT功能的示波器看紋波頻譜判斷是開關(guān)噪聲還是真振蕩高頻分量、一臺(tái)電子負(fù)載做階躍測(cè)試評(píng)估動(dòng)態(tài)響應(yīng)、一個(gè)隔離探頭測(cè)高壓側(cè)信號(hào)保護(hù)人也保護(hù)設(shè)備。有條件的話再配一個(gè)環(huán)路分析儀或者用信號(hào)發(fā)生器加示波器自己掃Bode圖這是確認(rèn)相位裕度最直接的辦法。我自己實(shí)測(cè)過一個(gè)現(xiàn)象用FFT看輸出紋波如果開關(guān)頻率處的峰值正常但在100Hz以下出現(xiàn)大能量峰說明環(huán)路出現(xiàn)了低頻擾動(dòng)這和電容ESR老化、環(huán)路增益不足有關(guān)——你可以順藤摸瓜查出問題而盲目調(diào)PI往往越調(diào)越亂。5. 幾個(gè)多年積累的實(shí)操心得調(diào)直流電壓控制參數(shù)這幾年我有幾個(gè)習(xí)慣性的做法算不上標(biāo)準(zhǔn)答案但確實(shí)幫我省了很多事。第一個(gè)是鎖一個(gè)參數(shù)基準(zhǔn)模板。每完成一次成功的調(diào)參我把當(dāng)時(shí)的拓?fù)?、開關(guān)頻率、LC參數(shù)、目標(biāo)帶寬、Kp/Ki/Kd數(shù)值全部記下來匯總成一個(gè)表格。下次碰到類似規(guī)格的電源板直接拿這個(gè)模板當(dāng)起點(diǎn)通常首輪就能達(dá)到可用狀態(tài)后面微調(diào)幾個(gè)值就行。這種經(jīng)驗(yàn)積累比看再多的理論文章都值錢。第二個(gè)是調(diào)試順序嚴(yán)格固定先靜態(tài)調(diào)穩(wěn)態(tài)精度再動(dòng)態(tài)調(diào)負(fù)載瞬態(tài)最后做極端工況過流、短路、高溫驗(yàn)證。跳過任何一步后面返工的概率都很大——有一次我圖快先做了瞬態(tài)測(cè)試發(fā)現(xiàn)過沖很大調(diào)完參數(shù)才發(fā)現(xiàn)穩(wěn)態(tài)紋波也跟著變差了最后全部推倒重來。第三個(gè)是善用帶寬受限法逐步逼近最優(yōu)解。我調(diào)PID很少一步到位都是先把系統(tǒng)建成一個(gè)較慢但絕對(duì)穩(wěn)定的狀態(tài)比如把帶寬設(shè)為1kHz跑確認(rèn)系統(tǒng)安全然后把帶寬逐步往上推每次只加大概2030%觀察波形再?zèng)Q定是否繼續(xù)。這個(gè)辦法雖然慢但能最大限度地避免參數(shù)跳變導(dǎo)致系統(tǒng)瞬間炸掉這類事故。峰值電流控制中還有一個(gè)更易用的鐵律保證任意時(shí)刻占空比的調(diào)整量不超過當(dāng)前周期的10%防止電感電流擺動(dòng)過大。最后再分享一個(gè)小技巧遇到系統(tǒng)振蕩但不確定是控制參數(shù)問題還是硬件問題的時(shí)候把控制器斷開用開環(huán)固定占空比驅(qū)動(dòng)功率級(jí)然后手動(dòng)掃描占空比觀察輸出電壓的響應(yīng)。如果開環(huán)下輸出電壓線性跟著占空比走那問題基本鎖定在環(huán)路參數(shù)上如果開環(huán)下電壓跳躍、毛刺、紋波都很大那先修硬件再去碰PID。這個(gè)先開環(huán)后閉環(huán)的排查順序能節(jié)省非常多的無效調(diào)試時(shí)間。