程詳解:從電流采樣到SVPWM的落地調(diào)試指南)
做電機(jī)控制這些年被問(wèn)得最多的問(wèn)題就是FOC控制過(guò)程到底是怎么一步步跑起來(lái)的。說(shuō)實(shí)話硬件方案成熟之后FOC并不算難它更像一道邏輯題只要把相電流、轉(zhuǎn)子角度、電壓指令這幾件事在坐標(biāo)系里理順剩下的工作就是在每個(gè)PWM周期里按固定順序算完十幾條公式。真正難的是每一步背后的原因以及調(diào)試時(shí)碰到電流發(fā)散、啟動(dòng)反轉(zhuǎn)、切換沖擊這些實(shí)際問(wèn)題要怎么定位。這篇文章我就把FOC控制過(guò)程完整拆開(kāi)從電流采樣到SVPWM輸出從PI參數(shù)估算到無(wú)感啟動(dòng)與閉環(huán)切換寫(xiě)成一份可以直接照著落地調(diào)試的工程筆記適合剛接觸FOC的嵌入式軟件工程師也適合想從方波控制轉(zhuǎn)向FOC的硬件和算法開(kāi)發(fā)者。1. FOC的實(shí)質(zhì)把交流電機(jī)當(dāng)直流電機(jī)來(lái)騙FOC的英文全稱(chēng)是Field-Oriented Control直譯就是磁場(chǎng)定向控制。不少人第一次聽(tīng)到這個(gè)概念以為它是一種很玄的電機(jī)驅(qū)動(dòng)波形生成技術(shù)其實(shí)它本質(zhì)上是在做一個(gè)控制目標(biāo)的翻譯工作把電機(jī)本體里三相交流電 旋轉(zhuǎn)磁場(chǎng)的復(fù)雜問(wèn)題轉(zhuǎn)換成兩個(gè)直流電流分量的簡(jiǎn)單問(wèn)題。用一句話概括我的理解FOC不是在千方百計(jì)生成正弦波形而是在把交流電機(jī)當(dāng)作一臺(tái)直流電機(jī)來(lái)控制。1.1 三相電流為什么不能直接作為PI的反饋很多人一開(kāi)始會(huì)疑惑三相電流本身就是正弦波PI控制器專(zhuān)門(mén)跟蹤直流量的為什么不能直接給三個(gè)PI呢這就涉及到控制對(duì)象的本質(zhì)。三相定子繞組在空間上相隔120度通入相位依次相差120度的正弦電流后氣隙里才會(huì)形成勻速旋轉(zhuǎn)的磁場(chǎng)。這三個(gè)相電流的頻率等于電頻率它隨轉(zhuǎn)速一直在變?nèi)绻肞I去跟蹤一個(gè)正弦信號(hào)跟蹤精度直接受PI帶寬限制帶寬再高也會(huì)出現(xiàn)相位滯后。更麻煩的是轉(zhuǎn)速升高時(shí)正弦頻率也在升高相當(dāng)于讓控制器去追一個(gè)永遠(yuǎn)追不上的目標(biāo)。還有一層數(shù)學(xué)上的簡(jiǎn)化三相電流并不是獨(dú)立的。星形連接下ia ib ic 0知道任意兩相第三相就等于負(fù)的和。真正產(chǎn)生轉(zhuǎn)矩的并不是某一相電流的大小而是三相電流合成的定子電流空間矢量is。這個(gè)矢量有自己的幅值和方向控制目標(biāo)從讓三相電流分別等于三個(gè)正弦量變成讓合成電流矢量等于期望的矢量本身就是一次降維。后面的Clark變換和Park變換全都是圍繞這個(gè)空間矢量展開(kāi)的。1.2 d-q軸電流控制目標(biāo)與電機(jī)物理的對(duì)應(yīng)關(guān)系把轉(zhuǎn)子永磁體的磁極方向定義為d軸也就是直軸再沿旋轉(zhuǎn)方向超前90度定義為q軸也就是交軸。于是定子電流矢量is被分解成兩個(gè)分量id和iq。id作用在d軸方向它不產(chǎn)生有效轉(zhuǎn)矩只影響氣隙磁場(chǎng)強(qiáng)弱iq作用在q軸方向和轉(zhuǎn)子磁場(chǎng)相互作用這才是真正產(chǎn)生電磁轉(zhuǎn)矩的分量。對(duì)于表貼式永磁同步電機(jī)Ld約等于Lq電磁轉(zhuǎn)矩近似正比于iq對(duì)于內(nèi)嵌式永磁電機(jī)Ld和Lq有明顯差異還會(huì)多出一項(xiàng)磁阻轉(zhuǎn)矩這時(shí)可以通過(guò)讓id為負(fù)值來(lái)提升單位電流的轉(zhuǎn)矩輸出也就是MTPA最大轉(zhuǎn)矩電流比控制。從控制角度看無(wú)論哪種電機(jī)核心動(dòng)作都收斂到兩件事讓id收斂到目標(biāo)值讓iq跟隨速度環(huán)給出的轉(zhuǎn)矩電流指令。目標(biāo)值從變化的交流量變成穩(wěn)定的直流量之后PI控制器終于可以做它最擅長(zhǎng)的事了。1.3 轉(zhuǎn)子磁鏈角度整個(gè)FOC的基準(zhǔn)坐標(biāo)d-q坐標(biāo)是旋轉(zhuǎn)坐標(biāo)它跟著轉(zhuǎn)子磁鏈的電角度θe走。這個(gè)角度是整個(gè)FOC的基準(zhǔn)坐標(biāo)角度不準(zhǔn)id和iq就沒(méi)有解耦iq指令里會(huì)混入id成分表現(xiàn)為同樣的電流指令下轉(zhuǎn)矩變小、電流偏大甚至出現(xiàn)電流震蕩。我第一版FOC調(diào)試時(shí)就吃過(guò)這個(gè)虧電流環(huán)參數(shù)怎么調(diào)都共振后來(lái)發(fā)現(xiàn)編碼器安裝時(shí)零位偏了幾度角度誤差直接把整個(gè)控制環(huán)路帶偏了。角度誤差并不是差不多就行。實(shí)測(cè)中3度左右的角度誤差在額定工況下就能讓電流明顯變大10度以上的誤差會(huì)把正向轉(zhuǎn)矩算成負(fù)向電機(jī)直接反轉(zhuǎn)。所以我的調(diào)試順序永遠(yuǎn)是第一步抓角度波形確認(rèn)旋轉(zhuǎn)方向和零位第二步才談電流環(huán)。有傳感器的FOC直接讀編碼器角度乘以極對(duì)數(shù)無(wú)感FOC靠反電動(dòng)勢(shì)觀測(cè)器估計(jì)不管哪種方案角度這條線如果沒(méi)打通后面調(diào)得再久也是白費(fèi)。2. 一條完整的FOC鏈路從ADC到SVPWM到底走了多少步每個(gè)PWM周期內(nèi)FOC做的事情可以壓縮成一條固定順序的鏈路采樣相電流、偏置校正、坐標(biāo)變換、電流環(huán)PI、逆變換、SVPWM生成六路PWM。初學(xué)者最容易把SVPWM理解成生成正弦波的一種調(diào)制方式其實(shí)它只是一套把αβ坐標(biāo)系下的電壓指令翻譯成逆變器開(kāi)關(guān)序列的規(guī)則。下面把這條鏈路一步步拆開(kāi)。2.1 Clark與Park靜止坐標(biāo)和旋轉(zhuǎn)坐標(biāo)的切換Clark變換把三相靜止坐標(biāo)系變換到兩相靜止坐標(biāo)系。采用等幅值變換且在星形連接、三相平衡的前提下工程里最常用的簡(jiǎn)化公式是iα iaiβ (1 / √3) * (ib - ic)如果三相不平衡或者在三角形連接下需要用完整公式包括ia、ib、ic三項(xiàng)的系數(shù)別為了一點(diǎn)運(yùn)算量犧牲魯棒性。Park變換把兩相靜止坐標(biāo)變換到兩相旋轉(zhuǎn)坐標(biāo)公式如下id iα * cos(θe) iβ * sin(θe)iq -iα * sin(θe) iβ * cos(θe)這個(gè)符號(hào)約定不是唯一的但一定要和逆Park變換保持配套。我建議統(tǒng)一用上面的約定并規(guī)定iq為正時(shí)對(duì)應(yīng)正向電磁轉(zhuǎn)矩。逆Park變換是這樣的vα vd * cos(θe) - vq * sin(θe)vβ vd * sin(θe) vq * cos(θe)注意PI輸出得到的是vd和vq它們不是直接加在電機(jī)端線上而是要經(jīng)過(guò)逆Park變換變成αβ坐標(biāo)系下的分量再送到SVPWM環(huán)節(jié)。這個(gè)PI輸出電壓指令、逆變器去執(zhí)行電壓指令的層次關(guān)系一定要清楚否則很容易把SVPWM和逆變器概念攪在一起。2.2 SVPWM的扇區(qū)判斷與矢量作用時(shí)間計(jì)算逆變器有六個(gè)開(kāi)關(guān)管同一橋臂上下管不能同時(shí)導(dǎo)通只看上管狀態(tài)的話八個(gè)基本開(kāi)關(guān)狀態(tài)里包含六個(gè)有效矢量U1到U6和兩個(gè)零矢量U0、U7。這六個(gè)有效矢量把平面分成六個(gè)扇區(qū)SVPWM要解決兩個(gè)問(wèn)題判斷參考電壓矢量落在哪個(gè)扇區(qū)以及在這個(gè)扇區(qū)里讓相鄰的兩個(gè)矢量各作用多少時(shí)間。扇區(qū)判斷有現(xiàn)成做法根據(jù)vα和vβ計(jì)算三個(gè)中間量U1 vβU2 -vβ √3 * vαU3 -vβ - √3 * vαU1大于0時(shí)A記為1U2大于0時(shí)B記為1U3大于0時(shí)C記為1N A 2B 4C。根據(jù)N值就能映射出實(shí)際扇區(qū)這個(gè)映射我在DSP和普通MCU的FOC庫(kù)里都見(jiàn)過(guò)只是命名和符號(hào)略有差異核對(duì)一次自己手上的矢量圖就行。確定扇區(qū)后一種直觀且不易出錯(cuò)的矢量作用時(shí)間計(jì)算方式是用幾何法。先求參考電壓矢量的幅值Umag和角度θ再求它在當(dāng)前扇區(qū)內(nèi)的相對(duì)角度γ于是相鄰兩個(gè)矢量的作用時(shí)間分別是T1 √3 * Umag * sin(60° - γ) * Ts / UdcT2 √3 * Umag * sin(γ) * Ts / UdcT0 Ts - T1 - T2就是零矢量作用時(shí)間。如果T1加T2已經(jīng)超過(guò)Ts說(shuō)明進(jìn)入了過(guò)調(diào)制區(qū)必須按比例同時(shí)縮小T1和T2。這個(gè)飽和度處理一定要放在寫(xiě)入PWM比較寄存器之前否則生成出來(lái)的占空比可能超過(guò)定時(shí)器周期波形直接亂套。有人會(huì)問(wèn)為什么用這種帶sin的計(jì)算而不是網(wǎng)上常見(jiàn)的X、Y、Z查表法其實(shí)那些查表法本質(zhì)上就是把上面的三角函數(shù)公式按六個(gè)扇區(qū)展開(kāi)后的代數(shù)化簡(jiǎn)為了省掉FPU上的sin和atan2運(yùn)算。如果你的主控帶FPU幾何法完全夠用而且不容易寫(xiě)錯(cuò)如果是不帶FPU的8位或者低端MCU再去用查表法。實(shí)際工程里追求的是可維護(hù)性和不出錯(cuò)不是把代碼寫(xiě)得越繞越好。2.3 一個(gè)可以照著寫(xiě)的FOC主循環(huán)偽代碼把整條鏈路串起來(lái)控制中斷里做的事情就是下面這個(gè)固定流程可以當(dāng)作模板來(lái)用。每個(gè)PWM周期進(jìn)入一次頻率通常取10kHz到20kHz。// 每個(gè)PWM周期Ts內(nèi)執(zhí)行一次 void FOC_ISR(void) { // 1. 讀取ADC采樣結(jié)果ia、ib ia ADC_GetChannel(ADC_CH_A); ib ADC_GetChannel(ADC_CH_B); ic -(ia ib); // 2. 偏置校正 ia - ia_offset; ib - ib_offset; // 3. 角度更新有編碼器時(shí)直接用無(wú)感時(shí)用觀測(cè)器結(jié)果 theta omega * Ts; // 4. Clark變換 i_alpha ia; i_beta (1.0f / SQRT3) * (ib - ic); // 5. Park變換 id i_alpha * cos(theta) i_beta * sin(theta); iq -i_alpha * sin(theta) i_beta * cos(theta); // 6. 電流環(huán)PI需要做輸出限幅和反飽和處理 vd PI_Update(pid_d, id_ref, id); vq PI_Update(pid_q, iq_ref, iq); // 7. 逆Park變換 v_alpha vd * cos(theta) - vq * sin(theta); v_beta vd * sin(theta) vq * cos(theta); // 8. SVPWM扇區(qū)判斷、計(jì)算比較值、更新定時(shí)器 svpwm_update(v_alpha, v_beta); }這套偽代碼是FOC的最小全集。實(shí)際項(xiàng)目里還要在鏈路上掛速度環(huán)、弱磁控制、MTPA、死區(qū)補(bǔ)償、故障保護(hù)甚至觀測(cè)器更新但無(wú)論加多少東西主鏈路的相對(duì)順序不要亂動(dòng)。我見(jiàn)過(guò)有人把PI輸出限幅漏了結(jié)果積分瘋狂累加一恢復(fù)指令電機(jī)猛沖一下這種問(wèn)題在代碼評(píng)審里一定要盯住反飽和處理。3. 電流環(huán)設(shè)計(jì)與PI整定先算后調(diào)再不行就掃電流環(huán)是FOC的內(nèi)環(huán)速度環(huán)再漂亮內(nèi)環(huán)帶寬跟不上外環(huán)全白搭。很多初學(xué)者一上來(lái)就亂試PID三個(gè)參數(shù)我強(qiáng)烈不建議這么做。電流環(huán)的對(duì)象是一階R-L電路PI參數(shù)完全可以先按電機(jī)參數(shù)估出一個(gè)能直接跑的初值再用示波器微調(diào)。3.1 用電機(jī)參數(shù)算出PI初值表貼式永磁同步電機(jī)的d-q軸電壓方程在忽略耦合項(xiàng)并做一定簡(jiǎn)化后可以寫(xiě)成vd R * id L * did/dtvq R * iq L * diq/dt ω * ψfd軸和q軸本質(zhì)上都是R-L一階慣性對(duì)象電流環(huán)PI開(kāi)環(huán)傳遞函數(shù)和電機(jī)傳遞函數(shù)相乘后如果把PI零點(diǎn)放在電機(jī)極點(diǎn)位置也就是滿(mǎn)足Ki / Kp R / L那么閉環(huán)就近似成一階慣性環(huán)節(jié)開(kāi)環(huán)增益Kp / L直接決定電流環(huán)帶寬。于是估算公式很簡(jiǎn)單Kp L * ωcKi R * ωc其中ωc是期望的電流環(huán)帶寬單位是rad/s。舉個(gè)例子一臺(tái)小型無(wú)人機(jī)電機(jī)相電阻R是0.25Ω相電感L是35μH想把電流環(huán)帶寬做到3000rad/s也就是大約477Hz那么Kp 35e-6 * 3000 0.105Ki 0.25 * 3000 750。單位分別是V/A和V/(A·s)。PWM頻率20kHz時(shí)Ts只有50微秒電流環(huán)帶寬建議取1000到3000rad/s。超過(guò)5000rad/s后會(huì)非常難穩(wěn)因?yàn)閿?shù)字控制本身有1到2個(gè)PWM周期的延遲帶寬拉太高相位裕度會(huì)快速掉光表現(xiàn)為高頻抖動(dòng)和噪音。這個(gè)公式估算出來(lái)的初值只要電感誤差不是特別離譜通常已經(jīng)能穩(wěn)定運(yùn)行接下來(lái)再用波形去修正。3.2 實(shí)測(cè)調(diào)參時(shí)讓波形開(kāi)口有了初值后不建議直接帶著負(fù)載調(diào)最實(shí)用的做法是鎖軸調(diào)試。把電機(jī)軸機(jī)械鎖死電流環(huán)給定一個(gè)iq階躍用示波器看實(shí)際iq波形。電流環(huán)作為一階系統(tǒng)階躍理論上不應(yīng)該超調(diào)所以看到超調(diào)通常意味著環(huán)路延遲補(bǔ)償不到位或采樣噪聲過(guò)大。我把常見(jiàn)的現(xiàn)象和調(diào)整方向總結(jié)在下面這張表里實(shí)際調(diào)試時(shí)可以對(duì)著排查現(xiàn)象可能原因調(diào)整方向響應(yīng)太慢iq像斜坡一樣慢慢爬Kp偏小帶寬不夠增大Kp保持Ki/Kp比例不變階躍出現(xiàn)明顯超調(diào)和振鈴環(huán)路延遲導(dǎo)致相位裕度不足整體降低增益或者增大PWM頻率縮短Ts穩(wěn)態(tài)有小幅高頻抖動(dòng)采樣噪聲或零漂檢查采樣時(shí)刻、偏置校準(zhǔn)必要時(shí)加一階低通指令方向切換時(shí)沖擊大PI輸出限幅或積分飽和檢查限幅邏輯加入反飽和處理注意一個(gè)反直覺(jué)的點(diǎn)電流環(huán)出現(xiàn)超調(diào)時(shí)很多人下意識(shí)去減小Kp但如果是相位裕度不足引起的減小Kp確實(shí)能穩(wěn)定代價(jià)是帶寬變低、動(dòng)態(tài)變慢。我一般會(huì)在保證Ki/Kp R/L的前提下整體縮放增益把帶寬壓到一個(gè)穩(wěn)定且有余量的值然后觀察dq軸電流在階躍下的表現(xiàn)。d軸電流階躍比q軸更干凈因?yàn)閐軸沒(méi)有反電動(dòng)勢(shì)項(xiàng)干擾所以調(diào)參時(shí)先看id回路的波形會(huì)更直觀。3.3 閉環(huán)帶寬與延遲預(yù)算數(shù)字FOC從采樣到PWM更新天然存在延遲ADC采樣需要時(shí)間算法計(jì)算需要時(shí)間占空比更新通常要等下一個(gè)PWM周期才能生效。這個(gè)總延遲大約1到2個(gè)PWM周期直接影響電流環(huán)能實(shí)現(xiàn)的最高帶寬。工程上用經(jīng)驗(yàn)公式粗估帶寬上限大約在1/(3Ts)附近20kHz PWM時(shí)約6600rad/s實(shí)際建議留足裕量只用到一半左右。也就是說(shuō)把PWM頻率從8kHz提到16kHz或20kHz不只是讓波形更細(xì)膩而是直接給電流環(huán)爭(zhēng)取了帶寬空間。高帶寬的電流環(huán)能讓外環(huán)速度環(huán)更穩(wěn)定也讓無(wú)感觀測(cè)器在更高動(dòng)態(tài)下不失步。所以設(shè)計(jì)FOC系統(tǒng)時(shí)PWM頻率通常是先定好的約束條件電流環(huán)帶寬跟著PWM頻率走速度環(huán)帶寬再比電流環(huán)帶寬低一個(gè)數(shù)量級(jí)左右這樣整個(gè)級(jí)聯(lián)系統(tǒng)才有足夠的穩(wěn)定裕度。4. 無(wú)感FOC從靜止到高速啟動(dòng)流程和過(guò)渡邏輯無(wú)感FOC不用編碼器也不用霍爾硬件成本最低但代價(jià)是低速時(shí)反電動(dòng)勢(shì)太小觀測(cè)器幾乎沒(méi)法用。所以從靜止到高速必須拆成幾個(gè)階段每個(gè)階段的控制策略都不同。這一步是很多無(wú)感方案一轉(zhuǎn)就飛的重災(zāi)區(qū)。4.1 初始位置預(yù)定位還是高頻脈沖注入轉(zhuǎn)子靜止時(shí)如果不知道磁極方向直接給一個(gè)旋轉(zhuǎn)磁場(chǎng)輕載下也許能轉(zhuǎn)起來(lái)重載或帶機(jī)械設(shè)備時(shí)大概率反轉(zhuǎn)或堵轉(zhuǎn)。工程上最簡(jiǎn)單可靠的做法是預(yù)定位也叫alignment給定一個(gè)固定的d軸電流比如0.5到1倍額定電流持續(xù)200到500毫秒讓轉(zhuǎn)子被定子磁場(chǎng)強(qiáng)行拉到已知角度。這個(gè)方法的缺點(diǎn)很直白啟動(dòng)瞬間電機(jī)會(huì)先動(dòng)一下對(duì)靜摩擦小的水泵、風(fēng)機(jī)沒(méi)影響但精密傳動(dòng)或壓縮機(jī)這類(lèi)不允許反轉(zhuǎn)的應(yīng)用就不行。如果要求靜止啟動(dòng)且不能有明顯位移就得用高頻信號(hào)注入法。向估計(jì)的d軸注入高頻電壓信號(hào)利用d-q電感差異帶來(lái)的電流響應(yīng)差異來(lái)判斷轉(zhuǎn)子位置。這個(gè)方案實(shí)現(xiàn)復(fù)雜度和計(jì)算量都高不少很多無(wú)感算法只在低速段用高頻注入中高速切換回反電動(dòng)勢(shì)觀測(cè)器。我的選型習(xí)慣是允許啟動(dòng)瞬間動(dòng)一下用預(yù)定位要求靜止啟動(dòng)優(yōu)先上高頻注入介于兩者之間的先用預(yù)定位跑通整個(gè)閉環(huán)鏈路再升級(jí)到注入法。4.2 開(kāi)環(huán)強(qiáng)拉階段的電流控制有了初始位置接下來(lái)進(jìn)入開(kāi)環(huán)強(qiáng)拉階段。所謂開(kāi)環(huán)指的是控制用的角度不來(lái)自觀測(cè)器而是來(lái)自軟件積分器生成的給定電頻率ωe。這個(gè)頻率會(huì)按照預(yù)設(shè)斜坡從零往上爬同時(shí)電流指令幅值也從啟動(dòng)值逐步提升。即使角度是假的電流環(huán)仍然正常工作d-q軸坐標(biāo)系跟著軟件角度旋轉(zhuǎn)把真實(shí)電流強(qiáng)行拽成期望的id和iq。這個(gè)階段最關(guān)鍵的是斜坡速率。電頻率增加太快轉(zhuǎn)子實(shí)際速度跟不上就會(huì)出現(xiàn)失步電流瞬間失控太慢又會(huì)讓啟動(dòng)過(guò)程顯得拖沓。加速度斜率主要看負(fù)載慣量我做過(guò)的一個(gè)風(fēng)機(jī)項(xiàng)目里電頻率每秒加15Hz左右約1秒內(nèi)從0拉到15Hz電頻率帶負(fù)載實(shí)測(cè)電流波動(dòng)很小。如果設(shè)備有大慣量負(fù)載斜坡要更緩必要時(shí)分段處理先慢速建立電流再逐漸提升頻率最后在切換點(diǎn)附近把加速度進(jìn)一步調(diào)小。4.3 切換閉環(huán)時(shí)如何避免咯噔一聲無(wú)感FOC最驚心動(dòng)魄的時(shí)刻就是開(kāi)環(huán)強(qiáng)拉切換到閉環(huán)觀測(cè)器的那一下。切換瞬間如果角度跳變電流環(huán)看到的坐標(biāo)系突然轉(zhuǎn)過(guò)一個(gè)角度電流沖擊會(huì)非常劇烈輕則電機(jī)咯噔一聲重則過(guò)流保護(hù)觸發(fā)。我的做法是讓觀測(cè)器從開(kāi)環(huán)階段就一直運(yùn)行只估計(jì)不參與控制。在強(qiáng)拉過(guò)程中持續(xù)比較開(kāi)環(huán)給定角度θ_open和觀測(cè)器估計(jì)角度θ_obs使用一個(gè)低成本的邏輯兩個(gè)角度的差值要先經(jīng)過(guò)2π跳變處理變成連續(xù)差值再判斷是否小于閾值比如5度以?xún)?nèi)并且維持一小段時(shí)間才允許切換。切換時(shí)不要硬切而是做一個(gè)軟過(guò)渡窗口控制角度θ_ctrl (1-k) * θ_open k * θ_obsk從0平滑變化到1窗口持續(xù)幾十到幾百毫秒。這樣即使兩個(gè)角度有一點(diǎn)殘余誤差電流沖擊也會(huì)被平滑掉而不是瞬間全部接過(guò)來(lái)。切換完成后速度環(huán)才真正接管把速度指令和觀測(cè)器速度估計(jì)做閉環(huán)。整個(gè)啟動(dòng)過(guò)程中電流環(huán)一直在線所以最怕的不是電流環(huán)不穩(wěn)而是角度源切換那一瞬間的坐標(biāo)系錯(cuò)動(dòng)。把這個(gè)過(guò)渡做平滑了無(wú)感啟動(dòng)的成功率會(huì)大幅提升。5. 實(shí)際工程中容易忽略的坑采樣、死區(qū)、零漂寫(xiě)完算法鏈路和啟動(dòng)邏輯再聊幾個(gè)我在實(shí)際調(diào)試中踩過(guò)、也幫別人排查過(guò)的問(wèn)題。這些問(wèn)題單看都不難但藏在波形異常背后時(shí)很容易讓人在PI參數(shù)上白費(fèi)幾天時(shí)間。5.1 電流采樣時(shí)刻到底該選在哪最常用的低壓方案是雙電阻下橋臂采樣也就是在兩個(gè)下管導(dǎo)通時(shí)通過(guò)采樣電阻上的壓降獲得相電流。采樣時(shí)刻要選在下管導(dǎo)通區(qū)間的穩(wěn)定中點(diǎn)通常就是PWM計(jì)數(shù)器到達(dá)周期值或零點(diǎn)的時(shí)刻對(duì)應(yīng)三角載波的頂點(diǎn)。這時(shí)三相下橋臂在七段式調(diào)制里都處于導(dǎo)通或續(xù)流狀態(tài)采樣窗口最大電流紋波也最小ADC采出來(lái)的值最有代表性。如果采樣時(shí)刻沒(méi)選好正好落在開(kāi)關(guān)沿附近ADC結(jié)果會(huì)混入振鈴和開(kāi)關(guān)噪聲。比較詭異的一種現(xiàn)象是空載時(shí)電流波形很干凈一加載就全是毛刺很多人以為是干擾加濾波、換地線折騰半天最后發(fā)現(xiàn)是占空比增大把采樣窗口擠到了開(kāi)關(guān)沿附近。解決思路不是加濾波器而是確認(rèn)ADC觸發(fā)源由定時(shí)器同步觸發(fā)并且采樣保持時(shí)間足夠而不是用軟件延時(shí)去碰運(yùn)氣。單電阻采樣方案更復(fù)雜一個(gè)PWM周期里的電流信息要靠多個(gè)采樣點(diǎn)重構(gòu)在低占空比和高占空比區(qū)域都存在天然盲區(qū)小型電機(jī)項(xiàng)目里能用雙電阻或三電阻采樣就不要為了省一個(gè)采樣電阻去選單電阻方案。5.2 偏置校準(zhǔn)為什么必須開(kāi)機(jī)做電流采樣鏈路的運(yùn)放偏置不可能精準(zhǔn)為零。偏置不消除id和iq里會(huì)始終疊加一個(gè)固定偏置電機(jī)在零指令時(shí)也可能有電流表現(xiàn)為空載發(fā)熱、輕微抖動(dòng)甚至低速時(shí)有一點(diǎn)點(diǎn)動(dòng)靜。這個(gè)問(wèn)題和PI參數(shù)沒(méi)有關(guān)系所以很多人調(diào)參數(shù)調(diào)到頭也解決不了。正確的做法是在PWM禁止輸出、電機(jī)不供電的狀態(tài)下多次采樣電流通道取平均把結(jié)果保存為偏置值。注意要在上電一段時(shí)間、電源穩(wěn)定之后再校準(zhǔn)如果環(huán)境溫度變化大最好定期重校。我遇到過(guò)一次很隱蔽的問(wèn)題換了運(yùn)放芯片之后零漂比原來(lái)大了幾十毫安空載電流波形看起來(lái)還正常但帶上負(fù)載后力矩波動(dòng)明顯。排查到最后才發(fā)現(xiàn)是偏置變了從那以后我都在初始化流程里加開(kāi)機(jī)自校準(zhǔn)并保留運(yùn)行中空閑時(shí)定時(shí)重校的接口。5.3 死區(qū)補(bǔ)償和調(diào)制策略的配合死區(qū)是防止橋臂直通故意插入的等待時(shí)間但它會(huì)造成輸出電壓誤差和電流波形畸變。死區(qū)時(shí)間固定時(shí)誤差大小與電流方向相關(guān)電流方向?yàn)檎龑?shí)際輸出電壓會(huì)低于指令方向?yàn)樨?fù)實(shí)際輸出電壓高于指令。低速輕載時(shí)電流接近零的區(qū)域會(huì)出現(xiàn)平臺(tái)畸變聽(tīng)上去像電機(jī)噪音變大轉(zhuǎn)矩脈動(dòng)明顯增加。死區(qū)補(bǔ)償?shù)挠?jì)算式很簡(jiǎn)單補(bǔ)償電壓為v_comp -sign(i) * Tdead * Udc / Ts實(shí)現(xiàn)時(shí)方向判斷很關(guān)鍵。電流接近零時(shí)sign()會(huì)來(lái)回跳如果盲目補(bǔ)償補(bǔ)償量反而成了擾動(dòng)源。我習(xí)慣加一個(gè)滯回或者零區(qū)閾值電流絕對(duì)值小于某個(gè)門(mén)檻時(shí)不補(bǔ)償超過(guò)門(mén)檻才按方向補(bǔ)償。另外一個(gè)容易忽略的點(diǎn)是死區(qū)補(bǔ)償要和調(diào)制策略配合七段式SVPWM和五段式DPWM的零矢量插入方式不同死區(qū)誤差分布也不一樣切換調(diào)制策略時(shí)必須重新驗(yàn)證補(bǔ)償參數(shù)。最后說(shuō)說(shuō)我的實(shí)際體會(huì)。FOC調(diào)通的關(guān)鍵不在公式背得多熟而在能不能把每個(gè)環(huán)節(jié)的波形拿過(guò)來(lái)和理論對(duì)照。我調(diào)過(guò)的每一套FOC方案幾乎都經(jīng)歷過(guò)電流震蕩、啟動(dòng)反轉(zhuǎn)、切換沖擊這些必經(jīng)之路每次排查問(wèn)題按這個(gè)順序來(lái)先懷疑角度、再懷疑采樣、最后才懷疑控制器參數(shù)能省掉大量無(wú)效勞動(dòng)。如果你正被某個(gè)電流震蕩折磨可以先把轉(zhuǎn)子機(jī)械鎖死單獨(dú)調(diào)電流環(huán)內(nèi)環(huán)穩(wěn)了再去碰速度環(huán)和無(wú)感切換。這個(gè)流程我反復(fù)用十次里有九次能快速定位問(wèn)題。FOC本質(zhì)上不是什么高深莫測(cè)的算法它只是一套需要耐心對(duì)待坐標(biāo)變換和控制時(shí)序的工程實(shí)踐把主鏈路順序和每個(gè)環(huán)節(jié)的物理意義都弄清楚后剩下的就是按部就班地調(diào)、測(cè)、驗(yàn)證。