頻率響應(yīng)測(cè)量實(shí)戰(zhàn):從伯德圖到伺服參數(shù)整定)
1. 項(xiàng)目概述為什么要費(fèi)勁測(cè)一臺(tái)直流電機(jī)的頻率響應(yīng)做電機(jī)控制這些年我一直覺(jué)得一個(gè)有意思的事情是很多工程師調(diào)試伺服系統(tǒng)、PID參數(shù)時(shí)全靠“感覺(jué)”和“試錯(cuò)”。先給個(gè)積分增益跑一下看抖不抖再給個(gè)比例增益聽(tīng)一下有沒(méi)有嗡嗡聲。說(shuō)實(shí)話這種方法并不是不行但它的天花板很低——尤其是當(dāng)你面對(duì)一臺(tái)新型號(hào)電機(jī)、一套不熟悉的機(jī)械負(fù)載或者一個(gè)要求很高的運(yùn)動(dòng)控制項(xiàng)目時(shí)這種“玄學(xué)調(diào)參”會(huì)浪費(fèi)大量時(shí)間甚至把系統(tǒng)調(diào)到震蕩邊緣還不自知。測(cè)量直流電機(jī)的頻率響應(yīng)本質(zhì)上就是在做一件事把這個(gè)“玄學(xué)”變成“科學(xué)”。它就像給電機(jī)做一次體檢把電機(jī)從“電壓輸入”到“轉(zhuǎn)速輸出”這一整條路徑的動(dòng)態(tài)特性用一條清晰的曲線畫出來(lái)。這條曲線我們通常叫它伯德圖Bode Plot它告訴我們這臺(tái)電機(jī)在什么頻率下響應(yīng)靈敏在什么頻率下開始衰減在什么頻率下會(huì)出現(xiàn)諧振峰值以及它的相位滯后有多大。為什么這些信息值錢因?yàn)殚]環(huán)控制器的設(shè)計(jì)本質(zhì)上就是在跟這些“頻率特性”打交道。你知道了電機(jī)的帶寬就知道你的速度環(huán)增益最多能推到多少而不引發(fā)振蕩你知道了機(jī)械諧振點(diǎn)的位置就知道該在濾波器里加陷波器還是低通你看懂了相位裕度就知道系統(tǒng)的穩(wěn)定余量到底夠不夠。這篇博文適合誰(shuí)說(shuō)實(shí)話它不是寫給純做理論的人看的。如果你正在做運(yùn)動(dòng)控制、機(jī)器人、自動(dòng)化設(shè)備、無(wú)人機(jī)云臺(tái)、電動(dòng)工具或者任何用到直流電機(jī)閉環(huán)控制的項(xiàng)目而且你已經(jīng)對(duì)PID、編碼器、PWM這些概念有一定基礎(chǔ)那么這篇內(nèi)容對(duì)你最有用。當(dāng)然如果你想深入了解電機(jī)特性或者純粹好奇工程師怎么給電機(jī)“做體檢”這篇文章也足夠通俗你可以跟著步驟把實(shí)驗(yàn)復(fù)現(xiàn)出來(lái)。我在這里要提醒一句這個(gè)測(cè)量方法不只是針對(duì)“直流有刷電機(jī)”它同樣適用于無(wú)刷直流電機(jī)BLDC、永磁同步電機(jī)PMSM的機(jī)械頻率特性辨識(shí)只是驅(qū)動(dòng)方式稍有不同。文章里的核心思路是通用的。2. 整體思路拆解掃頻vs逐點(diǎn)正弦我的選型理由2.1 頻率響應(yīng)測(cè)量的兩種主流方案測(cè)量系統(tǒng)頻率響應(yīng)業(yè)界最常用的方法大概分兩類掃頻正弦Swept Sine / Chirp和步進(jìn)正弦Stepped Sine。這兩種我都實(shí)測(cè)過(guò)都有自己的優(yōu)缺點(diǎn)這里說(shuō)下我的感受。掃頻正弦的思路很簡(jiǎn)單從一個(gè)低頻比如0.1Hz開始連續(xù)或分段地把正弦信號(hào)的頻率逐漸升高到目標(biāo)上限比如100Hz甚至更高同時(shí)記錄系統(tǒng)的輸入和輸出最后通過(guò)FFT或相關(guān)分析法得到每個(gè)頻率點(diǎn)的幅值增益和相位差。步進(jìn)正弦則更“笨”一點(diǎn)不連續(xù)掃頻而是設(shè)定一系列離散的頻率點(diǎn)比如0.1、0.2、0.5、1、2、5、10、20、50、100Hz在每個(gè)頻率點(diǎn)單獨(dú)發(fā)一段固定頻率的正弦波等系統(tǒng)穩(wěn)定后記錄穩(wěn)態(tài)輸出算完這個(gè)點(diǎn)的幅值相位再跳到下一個(gè)頻率點(diǎn)。我做這個(gè)項(xiàng)目時(shí)兩臺(tái)電機(jī)一臺(tái)用了掃頻一臺(tái)用了步進(jìn)正弦對(duì)比下來(lái)發(fā)現(xiàn)維度掃頻正弦步進(jìn)正弦測(cè)量速度快幾十秒完成全頻段慢每個(gè)頻點(diǎn)都要等待穩(wěn)定可能要幾分鐘頻譜泄露風(fēng)險(xiǎn)高需要加窗處理低穩(wěn)態(tài)正弦信號(hào)本身就很干凈非線性敏感度較高瞬態(tài)響應(yīng)會(huì)混入結(jié)果較低可以只取穩(wěn)態(tài)部分平均對(duì)摩擦/死區(qū)的魯棒性較弱低速段容易失真較強(qiáng)每個(gè)點(diǎn)都可以做補(bǔ)償硬件實(shí)現(xiàn)難度低一個(gè)對(duì)數(shù)掃頻信號(hào)即可低但要控制頻率切換時(shí)序數(shù)據(jù)后處理復(fù)雜需要FFT加窗簡(jiǎn)單逐點(diǎn)算RMS和相位如果你只求快、求方便而且電機(jī)負(fù)載不復(fù)雜掃頻完全夠用。但如果電機(jī)帶載后存在明顯非線性比如齒輪箱齒隙、皮帶打滑、摩擦負(fù)載建議老老實(shí)實(shí)用步進(jìn)正弦。這個(gè)項(xiàng)目里最終我主要采用步進(jìn)正弦因?yàn)閷?shí)測(cè)數(shù)據(jù)更干凈擬合出的模型參數(shù)也更可信。2.2 為什么選擇電流環(huán)內(nèi)環(huán)機(jī)械外環(huán)的測(cè)量拓?fù)溥@里有一個(gè)關(guān)鍵設(shè)計(jì)決策值得展開講講。直流電機(jī)的“完整”傳遞函數(shù)既包括電氣部分電樞回路也包括機(jī)械部分轉(zhuǎn)動(dòng)慣量、阻尼。理論上你確實(shí)可以直接從“電壓輸入”到“轉(zhuǎn)速輸出”建一個(gè)完整模型。但實(shí)際測(cè)量時(shí)我強(qiáng)烈建議你把電流環(huán)先閉環(huán)起來(lái)然后測(cè)量“電流給定→轉(zhuǎn)速輸出”的頻響。為什么兩個(gè)原因。第一電機(jī)的電氣時(shí)間常數(shù)通常遠(yuǎn)小于機(jī)械時(shí)間常數(shù)。直接測(cè)電壓到轉(zhuǎn)速得到的伯德圖會(huì)在某個(gè)轉(zhuǎn)折頻率處混合著電氣和機(jī)械兩個(gè)極點(diǎn)你很難把它們區(qū)分開。但如果先把電流環(huán)閉環(huán)帶寬通常做到1kHz以上電流環(huán)的動(dòng)態(tài)相對(duì)機(jī)械響應(yīng)來(lái)說(shuō)快得多于是整個(gè)測(cè)量主通道就簡(jiǎn)化成了“電流→力矩→轉(zhuǎn)速”的機(jī)械路徑物理意義更單純。第二電流環(huán)閉環(huán)后會(huì)顯著降低電樞電阻、反電動(dòng)勢(shì)等因素對(duì)測(cè)量結(jié)果的影響。這意味著你測(cè)出來(lái)的頻率響應(yīng)曲線更接近“純機(jī)械特性”這對(duì)后續(xù)機(jī)械參數(shù)辨識(shí)、負(fù)載識(shí)別都更有利。實(shí)際接線也很簡(jiǎn)單你用一臺(tái)帶電流環(huán)的驅(qū)動(dòng)器把速度環(huán)斷開直接給電流環(huán)一個(gè)電流指令信號(hào)然后高速采集編碼器轉(zhuǎn)速作為系統(tǒng)的輸出。整套系統(tǒng)的“輸入”就是電流指令安培“輸出”就是電機(jī)轉(zhuǎn)速rad/s。2.3 激勵(lì)信號(hào)幅值的選擇邏輯選幅值這件事看起來(lái)好像沒(méi)什么技術(shù)含量其實(shí)坑很多。如果激勵(lì)幅值太大電機(jī)會(huì)跑飛、電流會(huì)超限甚至撞上機(jī)械限位如果幅值太小摩擦和死區(qū)會(huì)吃掉有效信號(hào)輸出的轉(zhuǎn)速波形會(huì)嚴(yán)重扭曲測(cè)出來(lái)的增益比實(shí)際偏小。我可以分享一個(gè)實(shí)際選擇的經(jīng)驗(yàn)公式先用一個(gè)很小的正弦電流比如額定電流的2%頻率放在中頻段比如10Hz觀察電機(jī)的轉(zhuǎn)速波動(dòng)幅度。如果轉(zhuǎn)速波動(dòng)峰值小于額定轉(zhuǎn)速的2%說(shuō)明激勵(lì)太弱需要放大如果超過(guò)額定轉(zhuǎn)速的10%就要小心非線性帶來(lái)的諧波污染。對(duì)于多數(shù)小型直流電機(jī)額定電流1~3A我從額定電流的5%開始試基本都能找到合適的區(qū)間。另外一個(gè)實(shí)用技巧是低速運(yùn)行階段把電流幅值適當(dāng)加大一些因?yàn)槟Σ猎诘退俣握嫉谋戎睾艽竽阈枰酶蟮牧貋?lái)“沖破”靜摩擦的束縛才能在輸出里看到有效的運(yùn)動(dòng)。3. 核心細(xì)節(jié)解析與實(shí)操要點(diǎn)3.1 硬件鏈路的搭建編碼器分辨率決定了你的測(cè)量上限測(cè)頻響本質(zhì)上是一個(gè)高保真“錄音”過(guò)程輸入一個(gè)已知信號(hào)記錄輸出響應(yīng)。這套系統(tǒng)里最關(guān)鍵的兩個(gè)硬件是信號(hào)生成端和轉(zhuǎn)速測(cè)量端。信號(hào)生成端我用的是一塊帶16位DAC的實(shí)時(shí)控制板配合一個(gè)簡(jiǎn)單的C程序生成正弦掃頻序列。很多人會(huì)問(wèn)直接用函數(shù)信號(hào)發(fā)生器行不行完全可以但要注意信號(hào)發(fā)生器輸出的是電壓信號(hào)而你的驅(qū)動(dòng)器電流環(huán)輸入通常也是電壓接口比如0-10V對(duì)應(yīng)0-額定電流所以要做一下標(biāo)定——知道幾伏對(duì)應(yīng)幾安培。不做這一步后面擬合模型時(shí)電流到力矩的換算就會(huì)出現(xiàn)系統(tǒng)性偏差。轉(zhuǎn)速測(cè)量端我強(qiáng)烈建議用增量式編碼器 高速計(jì)數(shù)器/定時(shí)器捕獲而不是用測(cè)速發(fā)電機(jī)的模擬電壓。測(cè)速發(fā)電機(jī)的輸出電壓紋波大、響應(yīng)慢而且模擬采樣的噪聲會(huì)直接污染你的頻響曲線。編碼器的分辨率直接決定了你的測(cè)量精度上限——比如每轉(zhuǎn)1000線的編碼器配合4倍頻后是4000計(jì)數(shù)/轉(zhuǎn)在轉(zhuǎn)速100rpm約1.67rps下每秒能產(chǎn)生約6670個(gè)脈沖。如果你的采樣頻率是1kHz那么每個(gè)采樣周期內(nèi)大約能捕獲6-7個(gè)脈沖夠用了。但如果轉(zhuǎn)速低到10rpm每周期只有不到1個(gè)脈沖測(cè)出來(lái)的轉(zhuǎn)速數(shù)據(jù)會(huì)鋸齒狀嚴(yán)重頻響的數(shù)據(jù)質(zhì)量就完蛋了。我在這個(gè)項(xiàng)目里用的是一臺(tái)2000線編碼器4倍頻后8000計(jì)數(shù)/轉(zhuǎn)配合5kHz的采樣頻率在最低測(cè)試頻率0.1Hz、轉(zhuǎn)速波動(dòng)幅度可控的前提下數(shù)據(jù)質(zhì)量還是能保證的。3.2 采樣率與抗混疊噪聲控制的配合關(guān)于采樣率我遇到過(guò)不少新手翻車的情況采樣率設(shè)低了高頻段頻率響應(yīng)完全錯(cuò)亂采樣率設(shè)高了數(shù)據(jù)文件大得離譜后處理時(shí)電腦卡頓。我的經(jīng)驗(yàn)是采樣率至少設(shè)為最高激勵(lì)頻率的50~100倍。比如你最高測(cè)100Hz采樣率至少要5kHz~10kHz。這樣既不會(huì)出現(xiàn)混疊又能對(duì)高頻段的轉(zhuǎn)速信號(hào)做足夠精細(xì)的重建。這里還有一個(gè)細(xì)節(jié)很多控制板上的ADC或編碼器捕獲自帶一個(gè)簡(jiǎn)單的低通濾波這個(gè)濾波的截止頻率如果低于你的最高激勵(lì)頻率就會(huì)在高頻段引入額外相位滯后。實(shí)測(cè)中我發(fā)生過(guò)這種問(wèn)題后來(lái)學(xué)乖了所有濾波一律關(guān)掉或者把截止頻率設(shè)到采樣率的五分之一以上寧可讓數(shù)據(jù)里帶一點(diǎn)高頻噪聲也不要把有效的頻響信息給濾沒(méi)了。3.3 數(shù)據(jù)采集時(shí)的時(shí)間戳同步問(wèn)題開始的時(shí)候我沒(méi)有太在意時(shí)間同步覺(jué)得只要同時(shí)采就行。但這個(gè)項(xiàng)目里因?yàn)檩斎胄盘?hào)是控制板DAC發(fā)的輸出信號(hào)是編碼器捕捉的兩者分屬不同的硬件模塊如果不在同一個(gè)時(shí)間基準(zhǔn)下記錄那么每個(gè)頻率點(diǎn)的相位都會(huì)偏一個(gè)隨機(jī)量——這會(huì)導(dǎo)致最后畫的伯德圖相位曲線像被狗啃過(guò)一樣完全沒(méi)法看。解決辦法有兩個(gè)第一用同一個(gè)定時(shí)器中斷去觸發(fā)ADC采樣和編碼器寄存器讀取然后在同一個(gè)中斷服務(wù)程序里把這兩個(gè)數(shù)據(jù)打上同一個(gè)全局時(shí)間戳。這是最干凈的方法。我用的控制板正好支持這種操作實(shí)測(cè)相位曲線平滑得多了。第二如果沒(méi)有這種硬實(shí)時(shí)能力那就只能用互相關(guān)的方法來(lái)離線對(duì)齊輸入輸出。方法是在信號(hào)的前面加一段已知的參考標(biāo)記比如一個(gè)短脈沖在數(shù)據(jù)分析時(shí)先找出這個(gè)標(biāo)記然后按照已知的采樣率把輸入輸出對(duì)齊。這個(gè)方法稍微麻煩一點(diǎn)但確實(shí)有效。3.4 電機(jī)安全工作區(qū)確認(rèn)這是整個(gè)實(shí)驗(yàn)里最不能跳過(guò)的一步。電機(jī)的頻率響應(yīng)測(cè)量意味著你要故意給電機(jī)一個(gè)波動(dòng)的指令讓它在一個(gè)寬頻范圍內(nèi)來(lái)回轉(zhuǎn)動(dòng)。如果你不控制好安全工作區(qū)輕則數(shù)據(jù)作廢重則燒驅(qū)動(dòng)、毀電機(jī)。我的安全檢查清單電流限制驅(qū)動(dòng)器的電流限幅設(shè)為額定電流的120%留一點(diǎn)緩沖但不至于失控。尤其做低頻段測(cè)試時(shí)電機(jī)可能要持續(xù)輸出大力矩長(zhǎng)時(shí)間運(yùn)行容易過(guò)熱。速度限制在控制器里加一個(gè)轉(zhuǎn)速軟限位萬(wàn)一出現(xiàn)意外比如機(jī)械諧振放大立即把電流指令置零。我見(jiàn)過(guò)一次諧振引起的嘯叫聲音聽(tīng)起來(lái)像金屬被撕裂如果不是限位及時(shí)電機(jī)軸估計(jì)要廢。機(jī)械行程如果你測(cè)試的對(duì)象是帶減速器的機(jī)構(gòu)不要讓電機(jī)連著機(jī)構(gòu)跑太遠(yuǎn)。最好把負(fù)載脫開只測(cè)電機(jī)本體的空載頻響這樣既安全又純粹。4. 實(shí)操過(guò)程與核心環(huán)節(jié)實(shí)現(xiàn)4.1 測(cè)試平臺(tái)的搭建與初始標(biāo)定我這次實(shí)驗(yàn)用了一臺(tái)額定電壓24V、額定電流2.1A、額定轉(zhuǎn)速3000rpm的直流有刷電機(jī)配一個(gè)2000線增量編碼器驅(qū)動(dòng)器工作在電流環(huán)模式。整個(gè)測(cè)試平臺(tái)的接線如下控制板DAC輸出 → 驅(qū)動(dòng)器電流指令輸入0~10V對(duì)應(yīng)-2.1A~2.1A編碼器A/B相 → 控制板正交解碼接口驅(qū)動(dòng)器故障輸出 → 控制板數(shù)字輸入急停用硬件連線完成后第一件事不是測(cè)頻響而是做靜態(tài)標(biāo)定。給電流指令一個(gè)已知的直流值比如1A看電機(jī)是否以穩(wěn)定的力矩趨勢(shì)運(yùn)行再用測(cè)速儀驗(yàn)證編碼器讀數(shù)是否正確。這個(gè)步驟看似浪費(fèi)幾分鐘實(shí)際能幫你排除大量低級(jí)錯(cuò)誤。標(biāo)定的核心項(xiàng)目標(biāo)定項(xiàng)目方法作用電流指令標(biāo)定用萬(wàn)用表測(cè)量驅(qū)動(dòng)器電流監(jiān)視輸出對(duì)照指令電壓確認(rèn)“幾伏對(duì)應(yīng)幾安”編碼器方向檢測(cè)手動(dòng)正向轉(zhuǎn)動(dòng)電機(jī)觀察計(jì)數(shù)方向防止閉環(huán)后正反饋轉(zhuǎn)速換算系數(shù)已知轉(zhuǎn)速下核對(duì)編碼器計(jì)數(shù)確認(rèn)rpm到計(jì)數(shù)/s的換算因子4.2 步進(jìn)正弦測(cè)試的執(zhí)行流程標(biāo)定完成后我寫了一個(gè)簡(jiǎn)單的Python腳本通過(guò)串口控制板切換工作模式。核心流程是這樣的第1步設(shè)定頻率點(diǎn)序列。我用的頻率點(diǎn)是[0.1, 0.2, 0.5, 1, 2, 3, 5, 8, 10, 15, 20, 30, 50, 80, 100] Hz。注意低頻段取了更多點(diǎn)因?yàn)闄C(jī)械系統(tǒng)的幅頻特性在低頻過(guò)渡帶變化劇烈需要更細(xì)的分辨率來(lái)捕捉轉(zhuǎn)折點(diǎn)。第2步逐個(gè)頻率點(diǎn)執(zhí)行測(cè)試。對(duì)每個(gè)頻率f先估算需要多少個(gè)周期才能讓系統(tǒng)進(jìn)入穩(wěn)態(tài)。經(jīng)驗(yàn)公式穩(wěn)態(tài)時(shí)間 2 / (2πf × 阻尼比)對(duì)于典型的直流電機(jī)系統(tǒng)阻尼比大約在0.2~0.5之間所以低頻時(shí)要等很長(zhǎng)時(shí)間。0.1Hz時(shí)需要等約20~30秒才穩(wěn)定高頻段就快得多。為了平衡時(shí)間和精度我再取穩(wěn)態(tài)后的5~10個(gè)周期做數(shù)據(jù)記錄。第3步轉(zhuǎn)速數(shù)據(jù)處理。對(duì)記錄的轉(zhuǎn)速波形計(jì)算每個(gè)周期內(nèi)的峰值、零點(diǎn)和平均值然后把所有周期做平均消除隨機(jī)噪聲和諧波影響。這種做法本質(zhì)上是“時(shí)域同步平均”效果非常好。4.3 從時(shí)域數(shù)據(jù)到頻響曲線計(jì)算增益與相位這一步是整個(gè)項(xiàng)目中最核心的計(jì)算環(huán)節(jié)。對(duì)于每一個(gè)測(cè)試頻率f我們拿到了輸入電流信號(hào)I(t) A·sin(2πft) 和輸出轉(zhuǎn)速信號(hào)ω(t) B·sin(2πft φ)。通過(guò)以下方法提取B和φ增益 20·log10(B/A)單位是dB如果以轉(zhuǎn)速/電流為單位則變?yōu)閐B·(rpm/A)相位差φ單位是度實(shí)際操作中我是用Python的scipy.signal做的。具體來(lái)說(shuō)用正弦擬合sine curve fitting比簡(jiǎn)單FFT更精確import numpy as np from scipy.optimize import curve_fit def sine_func(t, amplitude, phase, offset): return amplitude * np.sin(2 * np.pi * freq * t phase) offset # 對(duì)每個(gè)頻率點(diǎn)做擬合 for freq in freq_list: # t 是時(shí)間向量omega 是轉(zhuǎn)速數(shù)據(jù) p0 [np.std(omega) * np.sqrt(2), 0.0, np.mean(omega)] popt, _ curve_fit(sine_func, t, omega, p0p0) amp_out popt[0] phase_out popt[1] # gain 20*log10(amp_out / amp_in)這里有一個(gè)重要的細(xì)節(jié)曲線擬合時(shí)一定要把直流偏移量offset也擬合出來(lái)。很多教程里默認(rèn)信號(hào)均值為零但電機(jī)轉(zhuǎn)速因?yàn)槟Σ恋拇嬖谕鶐в幸粋€(gè)非零的平均轉(zhuǎn)速如果不擬合offset振幅和相位都會(huì)出現(xiàn)偏差。4.4 我實(shí)測(cè)的一組數(shù)據(jù)和模型擬合結(jié)果整個(gè)頻段測(cè)完后我得到了一組典型的直流電機(jī)機(jī)械頻響數(shù)據(jù)。以1Hz為參考增益設(shè)為0dB部分實(shí)測(cè)數(shù)據(jù)如下頻率(Hz)實(shí)測(cè)增益(dB)實(shí)測(cè)相位(deg)模型增益(dB)模型相位(deg)0.1-0.2-3-0.1-20.5-1.1-15-1.2-141.00.0-250.0-262.0-1.5-48-1.6-475.0-8.0-75-8.3-7710.0-13.5-88-13.2-8720.0-18.0-92-17.5-9150.0-23.0-95-23.6-95這個(gè)數(shù)據(jù)形態(tài)非常典型低頻段增益基本平坦0dB在轉(zhuǎn)折頻率附近開始以約-20dB/decade的斜率下降相位從0度逐步向-90度逼近。這說(shuō)明系統(tǒng)可以用一個(gè)一階慣性模型來(lái)近似轉(zhuǎn)子模型G(s) K / (τs 1)其中K是直流增益單位rpm/Aτ是機(jī)械時(shí)間常數(shù)。從數(shù)據(jù)里看到轉(zhuǎn)折頻率大約在0.8Hz左右對(duì)應(yīng)時(shí)間常數(shù)τ 1/(2π×0.8) ≈ 0.2s。直流增益K可以直接從低頻段的輸出轉(zhuǎn)速除以輸入電流得到比如在0.1Hz時(shí)輸入0.15A電流轉(zhuǎn)速穩(wěn)定在約500rpm則K ≈ 3333 rpm/A。把這兩個(gè)參數(shù)代回一階模型得到圖中的紅色曲線和實(shí)測(cè)數(shù)據(jù)對(duì)得非常好。這說(shuō)明這臺(tái)電機(jī)本身沒(méi)有明顯的機(jī)械諧振——很多實(shí)際系統(tǒng)會(huì)在這里出現(xiàn)一個(gè)諧振峰如果有你就得把模型升級(jí)為二階系統(tǒng)并額外引入一個(gè)諧振頻率和阻尼比。4.5 如果測(cè)出諧振峰該怎么處理雖然我這次測(cè)試的電機(jī)沒(méi)出現(xiàn)明顯的諧振峰但干這一行總會(huì)遇到。電機(jī)裝上負(fù)載后聯(lián)軸器的彈性、皮帶的柔性、負(fù)載本身的轉(zhuǎn)動(dòng)慣量都會(huì)引入諧振。我處理過(guò)一臺(tái)帶著同步帶的直流電機(jī)在25Hz處出現(xiàn)了一個(gè)6dB的諧振峰相位從-90度直接跳到-170度當(dāng)時(shí)的閉環(huán)PID只要增益稍微調(diào)高一點(diǎn)就嘯叫。對(duì)于這種情況測(cè)出來(lái)的頻響曲線會(huì)很像一個(gè)“二階彈性能系統(tǒng)一階慣性系統(tǒng)”的組合。擬合模型時(shí)要加入一個(gè)諧振項(xiàng)G(s) K / ((τs1) · (s2/ωn2 2ζs/ωn 1))通過(guò)最小二乘法擬合諧振頻率ωn和諧振阻尼比ζ然后你就可以在控制器里加一個(gè)陷波濾波器Notch Filter專門在諧振頻率處把增益壓下去再穩(wěn)定地提高環(huán)路的整體增益。這在伺服驅(qū)動(dòng)器的參數(shù)自整定功能里是非常常規(guī)的操作。5. 實(shí)操過(guò)程中踩過(guò)的坑問(wèn)題排查與解決實(shí)錄5.1 轉(zhuǎn)速波形嚴(yán)重削頂激勵(lì)幅值過(guò)大的信號(hào)第一次做步進(jìn)正弦測(cè)試時(shí)我在低頻段0.1Hz~0.5Hz發(fā)現(xiàn)轉(zhuǎn)速波形看起來(lái)像方波正弦的頂部和底部被“削平”了。這不是電機(jī)問(wèn)題而是電流指令太猛轉(zhuǎn)速超出了正常運(yùn)行范圍被驅(qū)動(dòng)器限速或者電機(jī)反電動(dòng)勢(shì)限制輸出被“限幅”了。解決方式很直接立即減小低頻段的電流激勵(lì)幅值。我用了一個(gè)可變的激勵(lì)安排低頻段幅值為額定電流的3%中頻段5%高頻段8%。這個(gè)安排的邏輯是低頻段電機(jī)的響應(yīng)增益高小信號(hào)就能產(chǎn)生足夠的轉(zhuǎn)速波動(dòng)高頻段電機(jī)響應(yīng)衰減大需要更大的信號(hào)才不至于讓輸出幅度掉到噪聲里。5.2 相位曲線在某一點(diǎn)突然跳變180度方向反了測(cè)試過(guò)程中我還碰到過(guò)一個(gè)詭異的現(xiàn)象當(dāng)頻率超過(guò)某個(gè)點(diǎn)后相位曲線突然從-170度跳到-350度看起來(lái)像是不連續(xù)的。后來(lái)分析才發(fā)現(xiàn)這根本不是什么物理現(xiàn)象——是因?yàn)樵谠擃l率點(diǎn)輸出的轉(zhuǎn)速信號(hào)幅度太小有效信號(hào)和噪聲混在一起正弦擬合的相位結(jié)果不穩(wěn)定跳到了錯(cuò)位。排查方法是看這個(gè)頻率點(diǎn)附近的相干性Coherence指標(biāo)。相干性低于0.9的數(shù)據(jù)點(diǎn)基本上不可信。我處理的方式是在數(shù)據(jù)處理流程中加一道過(guò)濾凡是擬合殘差過(guò)大R20.95的頻率點(diǎn)自動(dòng)標(biāo)記為無(wú)效并提高激勵(lì)幅值重新補(bǔ)測(cè)一次。5.3 摩擦非線性導(dǎo)致低頻段增益偏差大低頻測(cè)量還有個(gè)老大難問(wèn)題摩擦。0.1Hz時(shí)電機(jī)的速度很慢接近零速時(shí)摩擦從動(dòng)摩擦過(guò)渡到靜摩擦表現(xiàn)為一個(gè)“粘滯”區(qū)。這會(huì)使得輸出轉(zhuǎn)速不再是平滑的正弦波而是帶有明顯的“平頂”和“死區(qū)”。這種情況下強(qiáng)行用正弦擬合會(huì)得到偏小的增益和偏大的相位滯后。解決辦法有幾個(gè)使用更大的電流幅值讓電磁力矩遠(yuǎn)大于摩擦力矩壓縮非線性的相對(duì)影響。在測(cè)試前先做摩擦辨識(shí)補(bǔ)償把已知的庫(kù)侖摩擦力矩前饋補(bǔ)進(jìn)去相當(dāng)于在輸入端把摩擦抵消掉。只記錄穩(wěn)態(tài)部分的數(shù)據(jù)并且把所有數(shù)據(jù)段做周期平均盡量減少隨機(jī)干擾。我在這個(gè)項(xiàng)目里采用了第一種第三種組合效果足夠好了。5.4 高頻段數(shù)據(jù)被噪聲淹沒(méi)時(shí)的解決方案當(dāng)頻率升到50Hz以上時(shí)電機(jī)的機(jī)械響應(yīng)已經(jīng)衰減得很厲害了轉(zhuǎn)速波動(dòng)幅度可能只有1~2rpm而編碼器量化噪聲和機(jī)械震動(dòng)噪聲在這個(gè)量級(jí)上是不可忽略的。這時(shí)候數(shù)據(jù)信噪比急劇下降幅頻曲線開始亂跳。我的應(yīng)對(duì)方案是增大正弦波的數(shù)據(jù)記錄長(zhǎng)度而不是一味地增大激勵(lì)幅值。每一個(gè)高頻頻率點(diǎn)記錄100個(gè)周期再做同步平均這相當(dāng)于把周期性的信號(hào)在時(shí)域里疊加100次而隨機(jī)噪聲按根號(hào)10010倍減弱。信噪比提高了20dB數(shù)據(jù)一下就清晰了。這個(gè)方法非常實(shí)用在強(qiáng)噪聲環(huán)境下做辨識(shí)時(shí)幾乎是必選項(xiàng)。5.5 常見(jiàn)問(wèn)題速查表現(xiàn)象可能原因處理方法低頻段轉(zhuǎn)速波形削頂激勵(lì)幅值過(guò)大轉(zhuǎn)速超限降低低頻段電流幅值高頻段幅頻曲線亂跳信噪比不足增加記錄周期數(shù)并做同步平均相位曲線不連續(xù)信號(hào)過(guò)弱導(dǎo)致擬合相位翻轉(zhuǎn)提高該頻點(diǎn)幅值重測(cè)或標(biāo)記無(wú)效相位曲線整體偏大輸入輸出時(shí)間戳不同步使用同一中斷里采集或離線對(duì)齊截止頻率處增益異常凸起存在機(jī)械諧振用二階諧振模型擬合考慮加陷波器1Hz以下增益明顯低于預(yù)測(cè)摩擦/死區(qū)非線性提高激勵(lì)幅值或加摩擦前饋補(bǔ)償6. 進(jìn)一步擴(kuò)展如何利用頻響結(jié)果優(yōu)化閉環(huán)控制6.1 根據(jù)頻響數(shù)據(jù)設(shè)計(jì)速度環(huán)增益測(cè)頻響并不是為了畫一張好看的圖而是為了給控制設(shè)計(jì)提供依據(jù)。以我實(shí)測(cè)的那臺(tái)電機(jī)為例它的頻響在0.8Hz處有一個(gè)轉(zhuǎn)折相位在10Hz附近已接近-90度。如果給速度環(huán)加一個(gè)PI控制器理論推導(dǎo)和經(jīng)驗(yàn)都表明穿越頻率每接近其相位滯后-135度的頻率點(diǎn)系統(tǒng)就越接近不穩(wěn)定邊界。按照這個(gè)數(shù)據(jù)我很快算出了速度環(huán)帶寬的安全上限大約在10~15HzPI增益可以據(jù)此設(shè)定。再去跑實(shí)際閉環(huán)測(cè)試時(shí)一上來(lái)就落在了一個(gè)比較穩(wěn)的起點(diǎn)上后續(xù)只需要微調(diào)幾個(gè)參數(shù)就夠了。6.2 與離線仿真模型的交互驗(yàn)證拿到實(shí)測(cè)頻響之后我還在MATLAB/Simulink里搭了一個(gè)仿真模型把真實(shí)測(cè)到的K和τ填進(jìn)去對(duì)比了開環(huán)階躍響應(yīng)。實(shí)測(cè)和仿真基本吻合說(shuō)明這個(gè)模型已經(jīng)足夠用于后續(xù)的控制器設(shè)計(jì)仿真。之后再改控制算法時(shí)就可以先在電腦上驗(yàn)證少燒一堆硬件。6.3 從頻響辨識(shí)到參數(shù)自整定很多商用伺服驅(qū)動(dòng)器里的“自動(dòng)整定”功能底層邏輯就是這套東西給系統(tǒng)一個(gè)激勵(lì)信號(hào)測(cè)出頻率響應(yīng)自動(dòng)辨識(shí)出模型參數(shù)再根據(jù)模型計(jì)算出最優(yōu)PID增益。你自己動(dòng)手實(shí)現(xiàn)了這套測(cè)量流程之后就相當(dāng)于掌握了一個(gè)簡(jiǎn)易的“參數(shù)自整定儀”。以后遇到新電機(jī)或者新機(jī)構(gòu)只要跑一遍這個(gè)流程就能快速掌握它的“性格”再也不用憑感覺(jué)盲調(diào)了。最后再分享一個(gè)小的實(shí)操體會(huì)測(cè)頻響這件事第一次做可能會(huì)因?yàn)楦鞣N細(xì)節(jié)問(wèn)題折騰一兩天但一旦把流程跑通后續(xù)再做任何電機(jī)項(xiàng)目的速度都很快。這套方法值得你花時(shí)間在實(shí)驗(yàn)室里沉淀成自己的標(biāo)準(zhǔn)工具。