旋轉(zhuǎn)電壓矢量:Clarke/Park變換與SVPWM仿真實(shí)踐)
1. 從一個(gè)反直覺的現(xiàn)象說起為什么電機(jī)里需要一個(gè)“會(huì)轉(zhuǎn)”的電壓很多人第一次接觸電機(jī)控制或者電力電子實(shí)驗(yàn)時(shí)都會(huì)有一個(gè)疑問我們明明給電機(jī)通的是直流電或者固定頻率的交流電為什么電機(jī)能平穩(wěn)地轉(zhuǎn)起來更奇怪的是在一些高性能控制場(chǎng)景里工程師們會(huì)刻意去“制造”一個(gè)旋轉(zhuǎn)的電壓矢量而不是簡(jiǎn)單地給三相繞組分別通正弦波。這背后的邏輯其實(shí)和“推秋千”是一個(gè)道理。你推秋千的時(shí)候不會(huì)在秋千往回?cái)[的時(shí)候還使勁往前推而是順著它的節(jié)奏在合適的時(shí)機(jī)給一個(gè)合適的力。電機(jī)里的旋轉(zhuǎn)電壓矢量本質(zhì)上就是這樣一個(gè)“順著轉(zhuǎn)子節(jié)奏走”的推力。它把三相電壓在空間上的分布合成一個(gè)幅值恒定、角度隨時(shí)間勻速旋轉(zhuǎn)的矢量。這個(gè)矢量與轉(zhuǎn)子磁場(chǎng)保持相對(duì)靜止或者以特定滑差旋轉(zhuǎn)從而產(chǎn)生穩(wěn)定的電磁轉(zhuǎn)矩。這個(gè)實(shí)驗(yàn)的核心價(jià)值在于它是理解磁場(chǎng)定向控制FOC、空間矢量脈寬調(diào)制SVPWM、交流電機(jī)變頻調(diào)速等一系列高級(jí)控制技術(shù)的基石。如果你只是會(huì)用現(xiàn)成的驅(qū)動(dòng)器可能永遠(yuǎn)不需要自己產(chǎn)生旋轉(zhuǎn)矢量但如果你想真正搞懂電機(jī)為什么能“聽話”地轉(zhuǎn)或者想自己寫一套控制算法那么這個(gè)實(shí)驗(yàn)就是繞不過去的第一道坎。適合閱讀這篇內(nèi)容的人包括電氣工程、自動(dòng)化、機(jī)電一體化方向的學(xué)生剛進(jìn)入電機(jī)控制行業(yè)的初級(jí)工程師以及那些玩機(jī)器人、無人機(jī)、數(shù)控設(shè)備想自己寫底層驅(qū)動(dòng)但被“矢量控制”四個(gè)字嚇退的愛好者。我會(huì)從最樸素的數(shù)學(xué)原理講起然后給出可以直接在仿真環(huán)境或者低成本硬件上復(fù)現(xiàn)的步驟最后分享幾個(gè)我在實(shí)際調(diào)試中踩過的坑。2. 旋轉(zhuǎn)電壓矢量的數(shù)學(xué)本質(zhì)從三相到兩相再到旋轉(zhuǎn)2.1 三相電壓的空間分布與合成規(guī)則先拋開復(fù)雜的坐標(biāo)變換我們回到最基本的三相繞組結(jié)構(gòu)。在一個(gè)典型的永磁同步電機(jī)或者異步電機(jī)中三相繞組在空間上互差120度電角度。假設(shè)A相繞組軸線在0度方向B相在120度方向C相在240度方向。每一相繞組通電后都會(huì)在氣隙中產(chǎn)生一個(gè)脈振磁場(chǎng)方向沿著該相繞組的軸線。如果給三相分別通入幅值相等、相位互差120度的正弦電壓那么每一相產(chǎn)生的脈振磁場(chǎng)在時(shí)間上也是正弦變化的。三個(gè)脈振磁場(chǎng)在空間上疊加結(jié)果就是一個(gè)幅值恒定、以電源角頻率旋轉(zhuǎn)的合成磁場(chǎng)。這個(gè)結(jié)論在電機(jī)學(xué)教材里通常用“旋轉(zhuǎn)磁動(dòng)勢(shì)”來表述但很多人學(xué)的時(shí)候只是記住了公式?jīng)]有真正理解“為什么三個(gè)脈振能合成一個(gè)旋轉(zhuǎn)”。我用一個(gè)更直觀的類比來解釋想象三個(gè)人站在一個(gè)圓盤周圍分別站在0度、120度、240度的位置。他們按照正弦規(guī)律輪流推圓盤每個(gè)人推的力度隨時(shí)間變化但三個(gè)人配合起來圓盤就會(huì)勻速轉(zhuǎn)動(dòng)。任何一瞬間圓盤受到的合力方向都是沿著某個(gè)角度而這個(gè)角度隨時(shí)間勻速變化。這就是旋轉(zhuǎn)矢量的物理來源。在數(shù)學(xué)上我們通常用Clarke變換把三相電壓從ABC坐標(biāo)系映射到靜止的α-β兩相正交坐標(biāo)系。變換公式如下# Clarke變換等幅值形式 # 輸入ua, ub, uc 為三相電壓瞬時(shí)值 # 輸出ualpha, ubeta 為兩相靜止坐標(biāo)系下的分量 ualpha ua ubeta (ua 2 * ub) / np.sqrt(3) # 另一種常見形式 # 更通用的等幅值Clarke變換矩陣形式 # ualpha (2/3) * (ua - 0.5*ub - 0.5*uc) # ubeta (2/3) * (np.sqrt(3)/2*ub - np.sqrt(3)/2*uc)這里要注意Clarke變換有不同的系數(shù)約定。等幅值變換和等功率變換的系數(shù)不同前者保持電壓矢量幅值與相電壓幅值一致后者保持功率不變。在實(shí)際寫代碼時(shí)如果你發(fā)現(xiàn)計(jì)算出來的矢量幅值比預(yù)期大了或者小了八成是系數(shù)用混了。我建議在實(shí)驗(yàn)階段統(tǒng)一使用等幅值形式因?yàn)槭静ㄆ魃峡吹降南嚯妷悍悼梢灾苯雍褪噶糠祵?duì)應(yīng)調(diào)試起來更直觀。2.2 Park變換把旋轉(zhuǎn)的矢量“按停”在眼前經(jīng)過Clarke變換后我們得到了一個(gè)在α-β平面上旋轉(zhuǎn)的電壓矢量。這個(gè)矢量的長(zhǎng)度代表電壓幅值角度代表當(dāng)前電壓的空間相位。如果電源頻率恒定這個(gè)矢量就以角速度ω勻速旋轉(zhuǎn)。但問題來了旋轉(zhuǎn)的東西不好控制我們更習(xí)慣控制靜止的量。于是就有了Park變換。Park變換的核心思想是建立一個(gè)隨矢量一起旋轉(zhuǎn)的d-q坐標(biāo)系其中d軸直軸對(duì)準(zhǔn)轉(zhuǎn)子磁場(chǎng)方向q軸交軸超前d軸90度。在這個(gè)旋轉(zhuǎn)坐標(biāo)系下原本旋轉(zhuǎn)的電壓矢量就變成了兩個(gè)直流量d軸分量和q軸分量??刂七@兩個(gè)直流量就等價(jià)于控制原來旋轉(zhuǎn)矢量的幅值和相對(duì)于轉(zhuǎn)子的相位。這個(gè)變換的物理意義非常漂亮它把“交流控制問題”轉(zhuǎn)化成了“直流控制問題”。在d-q坐標(biāo)系下我們可以像控制直流電機(jī)一樣分別控制勵(lì)磁分量和轉(zhuǎn)矩分量。對(duì)于表貼式永磁同步電機(jī)通常令d軸電流為0只控制q軸電流來產(chǎn)生轉(zhuǎn)矩這就是最簡(jiǎn)單的id0控制策略。Park變換的公式如下# Park變換 # 輸入ualpha, ubeta, theta轉(zhuǎn)子電角度 # 輸出ud, uq ud ualpha * np.cos(theta) ubeta * np.sin(theta) uq -ualpha * np.sin(theta) ubeta * np.cos(theta)反Park變換則用于把控制量從d-q坐標(biāo)系變回α-β坐標(biāo)系進(jìn)而生成PWM信號(hào)# 反Park變換 ualpha ud * np.cos(theta) - uq * np.sin(theta) ubeta ud * np.sin(theta) uq * np.cos(theta)這里有一個(gè)非常關(guān)鍵的細(xì)節(jié)theta的準(zhǔn)確性直接決定了矢量控制的效果。如果轉(zhuǎn)子角度估計(jì)有偏差那么d軸和q軸就不能準(zhǔn)確對(duì)準(zhǔn)會(huì)導(dǎo)致轉(zhuǎn)矩脈動(dòng)、效率下降嚴(yán)重時(shí)甚至無法啟動(dòng)。我在早期做實(shí)驗(yàn)時(shí)曾經(jīng)因?yàn)榫幋a器零位沒有校準(zhǔn)導(dǎo)致電機(jī)雖然能轉(zhuǎn)但電流大得離譜發(fā)熱嚴(yán)重。后來用示波器觀察q軸電流波形發(fā)現(xiàn)它一直在振蕩才意識(shí)到是角度問題。2.3 從矢量到PWMSVPWM如何把連續(xù)矢量變成開關(guān)信號(hào)有了旋轉(zhuǎn)電壓矢量下一步就是把它變成逆變器能執(zhí)行的開關(guān)信號(hào)。這里最常用的技術(shù)就是空間矢量脈寬調(diào)制SVPWM。SVPWM的基本思想是在一個(gè)PWM周期內(nèi)用相鄰的兩個(gè)基本電壓矢量和零矢量來合成目標(biāo)矢量通過調(diào)節(jié)它們的作用時(shí)間使得平均效果等于目標(biāo)矢量。三相逆變器有6個(gè)開關(guān)管共有8種開關(guān)狀態(tài)對(duì)應(yīng)8個(gè)基本電壓矢量6個(gè)非零矢量幅值為2/3*Udc和2個(gè)零矢量。這6個(gè)非零矢量在空間上互差60度把整個(gè)平面分成6個(gè)扇區(qū)。對(duì)于任意一個(gè)目標(biāo)矢量先判斷它落在哪個(gè)扇區(qū)然后用該扇區(qū)的兩個(gè)邊界矢量和零矢量來合成。SVPWM相比正弦PWMSPWM有幾個(gè)明顯優(yōu)勢(shì)直流母線電壓利用率提高了約15%諧波含量更低而且更適合數(shù)字化實(shí)現(xiàn)。但它的計(jì)算量也更大需要判斷扇區(qū)、計(jì)算作用時(shí)間、分配開關(guān)順序。我在實(shí)際寫代碼時(shí)通常會(huì)先把扇區(qū)判斷和作用時(shí)間計(jì)算寫成獨(dú)立的函數(shù)方便單獨(dú)測(cè)試。一個(gè)簡(jiǎn)化的SVPWM作用時(shí)間計(jì)算邏輯如下# 假設(shè)目標(biāo)矢量在扇區(qū)I邊界矢量為V1和V2 # T1為V1作用時(shí)間T2為V2作用時(shí)間T0為零矢量作用時(shí)間 # Ts為PWM周期 # Udc為直流母線電壓 # 目標(biāo)矢量幅值為Um角度為theta T1 Ts * np.sqrt(3) * Um / Udc * np.sin(np.pi/3 - theta) T2 Ts * np.sqrt(3) * Um / Udc * np.sin(theta) T0 Ts - T1 - T2如果T1T2大于Ts說明目標(biāo)矢量超出了逆變器能輸出的最大幅值需要進(jìn)行過調(diào)制處理。過調(diào)制處理不當(dāng)會(huì)導(dǎo)致波形畸變我在實(shí)驗(yàn)中遇到過因?yàn)檫^調(diào)制導(dǎo)致電流波形出現(xiàn)尖峰的情況后來通過限制目標(biāo)矢量幅值解決了。3. 動(dòng)手實(shí)驗(yàn)用Python仿真一個(gè)旋轉(zhuǎn)電壓矢量3.1 仿真環(huán)境搭建與參數(shù)選擇在真正接硬件之前我強(qiáng)烈建議先在仿真環(huán)境里把整個(gè)流程跑一遍。這樣你可以直觀地看到矢量是怎么轉(zhuǎn)起來的也可以隨意調(diào)整參數(shù)觀察效果不用擔(dān)心燒管子。我常用的工具是Python加上NumPy和Matplotlib輕量、免費(fèi)、靈活。首先確定幾個(gè)關(guān)鍵參數(shù)電源頻率f設(shè)為50Hz對(duì)應(yīng)角速度ω2πf≈314.16 rad/sPWM周期Ts設(shè)為100微秒對(duì)應(yīng)開關(guān)頻率10kHz直流母線電壓Udc設(shè)為300V目標(biāo)電壓矢量幅值Um設(shè)為150V約為Udc的一半留出余量。仿真總時(shí)長(zhǎng)設(shè)為0.1秒也就是5個(gè)電源周期足夠觀察旋轉(zhuǎn)過程。import numpy as np import matplotlib.pyplot as plt # 參數(shù)設(shè)置 f 50.0 # 電源頻率 Hz omega 2 * np.pi * f # 角速度 rad/s Ts 1e-4 # PWM周期 s Udc 300.0 # 直流母線電壓 V Um 150.0 # 目標(biāo)矢量幅值 V T_total 0.1 # 仿真總時(shí)長(zhǎng) s t np.arange(0, T_total, Ts)這里有一個(gè)容易忽略的點(diǎn)仿真步長(zhǎng)和PWM周期的關(guān)系。如果你用固定的仿真步長(zhǎng)而步長(zhǎng)又大于PWM周期那么你就無法準(zhǔn)確模擬每個(gè)PWM周期內(nèi)的開關(guān)行為。我通常讓仿真步長(zhǎng)等于PWM周期或者更小。如果步長(zhǎng)太大SVPWM的作用時(shí)間計(jì)算會(huì)失真觀察到的波形也會(huì)不對(duì)。3.2 生成旋轉(zhuǎn)矢量并觀察軌跡接下來生成旋轉(zhuǎn)電壓矢量。在α-β平面上目標(biāo)矢量的α分量和β分量可以表示為# 生成旋轉(zhuǎn)電壓矢量 theta omega * t ualpha_ref Um * np.cos(theta) ubeta_ref Um * np.sin(theta)把這兩個(gè)分量畫在α-β平面上應(yīng)該看到一個(gè)半徑為Um的圓。如果畫出來不是圓而是橢圓或者別的形狀那就要檢查你的角度計(jì)算或者幅值設(shè)置是不是有問題。plt.figure(figsize(6,6)) plt.plot(ualpha_ref, ubeta_ref) plt.axis(equal) plt.xlabel(ualpha (V)) plt.ylabel(ubeta (V)) plt.title(旋轉(zhuǎn)電壓矢量軌跡) plt.grid(True) plt.show()這個(gè)圓就是旋轉(zhuǎn)電壓矢量在靜止坐標(biāo)系下的軌跡。你可以清楚地看到矢量以角速度ω勻速旋轉(zhuǎn)幅值恒定。如果把這個(gè)矢量投影到三相軸上就得到了三相正弦電壓。你可以用反Clarke變換驗(yàn)證一下# 反Clarke變換從alpha-beta回到abc ua ualpha_ref ub -0.5 * ualpha_ref np.sqrt(3)/2 * ubeta_ref uc -0.5 * ualpha_ref - np.sqrt(3)/2 * ubeta_ref畫出來的三相電壓應(yīng)該是互差120度的正弦波。這一步驗(yàn)證了從三相到兩相再到三相的變換是自洽的。3.3 加入SVPWM調(diào)制并觀察開關(guān)波形有了目標(biāo)矢量下一步就是實(shí)現(xiàn)SVPWM。我寫了一個(gè)簡(jiǎn)化版的SVPWM函數(shù)輸入目標(biāo)矢量的α-β分量和直流母線電壓輸出三相占空比。核心步驟包括扇區(qū)判斷、作用時(shí)間計(jì)算、過調(diào)制處理、占空比分配。def svpwm(ualpha, ubeta, Udc, Ts): # 扇區(qū)判斷 # 利用三個(gè)參考量U1ubeta, U2(sqrt(3)*ualpha - ubeta)/2, U3(-sqrt(3)*ualpha - ubeta)/2 U1 ubeta U2 (np.sqrt(3) * ualpha - ubeta) / 2 U3 (-np.sqrt(3) * ualpha - ubeta) / 2 # 根據(jù)U1,U2,U3的符號(hào)確定扇區(qū) # 這里省略具體判斷邏輯實(shí)際代碼中需要完整實(shí)現(xiàn) # ... # 計(jì)算作用時(shí)間 # 以扇區(qū)I為例 # T1 Ts * (np.sqrt(3) * ualpha - ubeta) / Udc # T2 Ts * ubeta / Udc # 過調(diào)制處理 # if T1 T2 Ts: # T1 T1 * Ts / (T1 T2) # T2 T2 * Ts / (T1 T2) # 計(jì)算三相占空比 # ... return da, db, dc實(shí)際寫的時(shí)候扇區(qū)判斷可以用一個(gè)簡(jiǎn)單的查表法也可以直接用條件判斷。我傾向于用條件判斷因?yàn)檫壿嬊逦{(diào)試方便。過調(diào)制處理是必須的否則當(dāng)目標(biāo)矢量幅值超過線性調(diào)制區(qū)時(shí)計(jì)算出的作用時(shí)間會(huì)超過PWM周期導(dǎo)致占空比異常。把SVPWM輸出的占空比轉(zhuǎn)換成開關(guān)信號(hào)再畫出來你就能看到典型的PWM波形。如果用一個(gè)低通濾波器濾掉高頻分量應(yīng)該能恢復(fù)出三相正弦波。這一步是驗(yàn)證SVPWM是否正確的最直接方法。4. 從仿真到硬件在低成本平臺(tái)上復(fù)現(xiàn)旋轉(zhuǎn)矢量4.1 硬件選型與最小系統(tǒng)搭建仿真跑通之后下一步就是上硬件。對(duì)于這個(gè)實(shí)驗(yàn)?zāi)悴恍枰嘿F的電機(jī)驅(qū)動(dòng)器一個(gè)簡(jiǎn)單的三相逆變橋加上一個(gè)微控制器就夠了。我推薦使用常見的MOSFET搭建三相橋配合柵極驅(qū)動(dòng)芯片微控制器可以用任意一款帶高級(jí)定時(shí)器的型號(hào)比如常見的STM32系列或者國(guó)產(chǎn)的GD32系列。直流母線電壓建議從24V開始不要一上來就上300V。低電壓下即使接錯(cuò)線損壞也有限。功率管選擇耐壓60V以上、電流10A以上的N溝道MOSFET即可。柵極驅(qū)動(dòng)芯片選擇帶死區(qū)控制功能的半橋驅(qū)動(dòng)死區(qū)時(shí)間設(shè)置在1微秒左右。死區(qū)時(shí)間太短會(huì)導(dǎo)致上下管直通燒管子太長(zhǎng)會(huì)導(dǎo)致輸出波形畸變電流諧波增大。我在第一次搭這個(gè)電路時(shí)犯了一個(gè)低級(jí)錯(cuò)誤忘記在柵極驅(qū)動(dòng)芯片的電源端加去耦電容。結(jié)果一上電開關(guān)波形振蕩得厲害MOSFET發(fā)熱嚴(yán)重。后來在每個(gè)驅(qū)動(dòng)芯片的電源引腳旁邊并了一個(gè)100nF的陶瓷電容和一個(gè)10uF的電解電容問題就解決了。這個(gè)經(jīng)驗(yàn)告訴我電力電子實(shí)驗(yàn)里電源去耦怎么強(qiáng)調(diào)都不過分。4.2 代碼移植與實(shí)時(shí)性保障把仿真代碼移植到微控制器上最大的挑戰(zhàn)是實(shí)時(shí)性。仿真里你可以慢慢算但在硬件上PWM周期是100微秒意味著你必須在100微秒內(nèi)完成所有計(jì)算并更新占空比寄存器。如果計(jì)算超時(shí)PWM輸出就會(huì)異常。我的做法是把整個(gè)控制循環(huán)放在定時(shí)器中斷里中斷頻率等于PWM頻率。中斷服務(wù)程序里只做最必要的計(jì)算讀取角度、計(jì)算目標(biāo)矢量、執(zhí)行SVPWM、更新比較寄存器。所有浮點(diǎn)運(yùn)算盡量用定點(diǎn)數(shù)替代或者使用微控制器自帶的硬件浮點(diǎn)單元。如果微控制器沒有FPU那么三角函數(shù)查表法會(huì)比實(shí)時(shí)計(jì)算快得多。// 中斷服務(wù)程序偽代碼 void PWM_ISR(void) { // 1. 讀取當(dāng)前角度來自編碼器或開環(huán)累加 theta omega * Ts; if (theta 2*PI) theta - 2*PI; // 2. 計(jì)算目標(biāo)矢量 ualpha Um * cos_table[(int)(theta * TABLE_SIZE / (2*PI))]; ubeta Um * sin_table[(int)(theta * TABLE_SIZE / (2*PI))]; // 3. SVPWM計(jì)算 svpwm_calc(ualpha, ubeta, Udc, da, db, dc); // 4. 更新比較寄存器 TIM1-CCR1 (uint16_t)(da * PWM_PERIOD); TIM1-CCR2 (uint16_t)(db * PWM_PERIOD); TIM1-CCR3 (uint16_t)(dc * PWM_PERIOD); // 5. 清除中斷標(biāo)志 TIM1-SR ~TIM_SR_UIF; }這里有一個(gè)關(guān)鍵點(diǎn)角度累加的精度。如果theta用浮點(diǎn)數(shù)累加時(shí)間長(zhǎng)了會(huì)有累積誤差。我通常用整數(shù)累加比如把2π映射到0到65535的整數(shù)范圍每次累加一個(gè)固定的增量。這樣既避免了浮點(diǎn)誤差又提高了計(jì)算速度。4.3 用示波器驗(yàn)證旋轉(zhuǎn)矢量硬件跑起來之后怎么驗(yàn)證旋轉(zhuǎn)矢量是否正確最直接的方法是用示波器觀察三相輸出。如果你用的是帶數(shù)學(xué)運(yùn)算功能的示波器可以直接對(duì)三相電壓做Clarke變換然后看α-β軌跡是不是一個(gè)圓。如果沒有這個(gè)功能也可以觀察三相電壓的相位關(guān)系它們應(yīng)該是互差120度的正弦波幅值相等頻率與設(shè)定值一致。另一個(gè)驗(yàn)證方法是觀察電流波形。如果接的是感性負(fù)載比如電機(jī)或者電感電流應(yīng)該也是正弦波且相位滯后于電壓。如果電流波形出現(xiàn)明顯的畸變或者尖峰可能是死區(qū)時(shí)間設(shè)置不當(dāng)或者SVPWM的過調(diào)制處理有問題。我在調(diào)試時(shí)遇到過一個(gè)奇怪的現(xiàn)象電機(jī)能轉(zhuǎn)但噪音很大電流波形上有周期性的毛刺。用示波器抓了很久最后發(fā)現(xiàn)是角度更新和PWM更新不同步導(dǎo)致的。具體來說我在主循環(huán)里更新角度在中斷里更新PWM兩者之間存在競(jìng)爭(zhēng)。后來把角度更新也放到中斷里問題就消失了。這個(gè)坑讓我明白在實(shí)時(shí)控制系統(tǒng)中所有與時(shí)間相關(guān)的變量都應(yīng)該在同一個(gè)時(shí)間基準(zhǔn)下更新。5. 調(diào)試中容易踩的五個(gè)坑與排查思路5.1 矢量幅值不對(duì)先查Clarke變換系數(shù)如果你發(fā)現(xiàn)生成的旋轉(zhuǎn)矢量幅值比預(yù)期大了一倍或者小了一半第一個(gè)要檢查的就是Clarke變換的系數(shù)。等幅值變換和等功率變換的系數(shù)不同前者系數(shù)是2/3后者是sqrt(2/3)。很多教材和代碼示例混用這兩種形式導(dǎo)致初學(xué)者一頭霧水。我的建議是在實(shí)驗(yàn)階段統(tǒng)一使用等幅值形式因?yàn)檫@樣α-β平面上的矢量幅值就等于相電壓幅值物理意義明確。如果你用的是等功率形式那么矢量幅值會(huì)比相電壓幅值大sqrt(3/2)倍需要心里有數(shù)。5.2 矢量不轉(zhuǎn)或者轉(zhuǎn)得不對(duì)檢查角度來源旋轉(zhuǎn)矢量的角度來源通常有三種開環(huán)累加、編碼器反饋、無傳感器估計(jì)。開環(huán)累加最簡(jiǎn)單但頻率精度取決于晶振精度長(zhǎng)時(shí)間運(yùn)行會(huì)有累積誤差。編碼器反饋?zhàn)顪?zhǔn)確但需要正確校準(zhǔn)零位。無傳感器估計(jì)最復(fù)雜低速時(shí)容易失步。如果你發(fā)現(xiàn)矢量不轉(zhuǎn)先檢查角度是否在更新。如果角度在更新但矢量轉(zhuǎn)得忽快忽慢檢查角度增量是否恒定。如果矢量轉(zhuǎn)的方向反了把角度增量的符號(hào)取反即可。這些看似簡(jiǎn)單的問題在實(shí)際調(diào)試中經(jīng)常因?yàn)榇中亩速M(fèi)大量時(shí)間。5.3 電流波形畸變死區(qū)與過調(diào)制的雙重影響電流波形畸變是硬件實(shí)驗(yàn)中最常見的問題。原因通常有兩個(gè)死區(qū)時(shí)間設(shè)置不當(dāng)或者SVPWM過調(diào)制。死區(qū)時(shí)間是為了防止上下管直通而必須設(shè)置的但它會(huì)導(dǎo)致輸出電壓偏離理想值特別是在電流過零附近畸變最明顯。補(bǔ)償死區(qū)的方法有很多最簡(jiǎn)單的是根據(jù)電流方向?qū)φ伎毡冗M(jìn)行修正。如果電流為正上管實(shí)際導(dǎo)通時(shí)間比設(shè)定值短需要補(bǔ)償如果電流為負(fù)則相反。補(bǔ)償量等于死區(qū)時(shí)間除以PWM周期。我在實(shí)際項(xiàng)目中通常先不補(bǔ)償觀察畸變程度如果畸變?cè)诳山邮芊秶鷥?nèi)就不補(bǔ)償以簡(jiǎn)化代碼。如果畸變嚴(yán)重再考慮加入補(bǔ)償邏輯。5.4 電機(jī)發(fā)熱嚴(yán)重查q軸電流是否振蕩電機(jī)發(fā)熱嚴(yán)重但能轉(zhuǎn)通常意味著電流中存在大量諧波或者振蕩分量。用示波器觀察q軸電流需要先做Park變換如果q軸電流一直在振蕩說明角度估計(jì)不準(zhǔn)或者電流環(huán)參數(shù)不合適。角度不準(zhǔn)會(huì)導(dǎo)致d軸和q軸解耦不徹底q軸電流中會(huì)混入d軸分量產(chǎn)生無效的勵(lì)磁電流導(dǎo)致發(fā)熱。電流環(huán)參數(shù)不合適會(huì)導(dǎo)致系統(tǒng)振蕩同樣會(huì)增加損耗。我的經(jīng)驗(yàn)是先確保角度準(zhǔn)確再調(diào)電流環(huán)。角度不準(zhǔn)的情況下調(diào)電流環(huán)就像在流沙上蓋房子怎么調(diào)都不對(duì)。5.5 上電就燒管子檢查死區(qū)和直通這是最嚴(yán)重的問題通常發(fā)生在第一次上電時(shí)。原因幾乎總是上下管直通。檢查步驟先用萬用表測(cè)量上下管的柵極驅(qū)動(dòng)信號(hào)確保它們不會(huì)同時(shí)為高電平。然后用示波器觀察死區(qū)時(shí)間確保死區(qū)時(shí)間足夠長(zhǎng)。最后檢查柵極驅(qū)動(dòng)芯片的使能邏輯確保上電時(shí)所有管子都處于關(guān)斷狀態(tài)。我在早期實(shí)驗(yàn)中曾經(jīng)因?yàn)闁艠O驅(qū)動(dòng)芯片的輸入懸空導(dǎo)致上電瞬間上下管同時(shí)導(dǎo)通炸了一對(duì)管子。后來養(yǎng)成了一個(gè)習(xí)慣所有柵極驅(qū)動(dòng)芯片的輸入端都加上下拉電阻確保在微控制器未初始化時(shí)管子處于關(guān)斷狀態(tài)。這個(gè)習(xí)慣讓我后來再也沒有因?yàn)樯想娭蓖ǘ鵁^管子。6. 這個(gè)實(shí)驗(yàn)還能怎么玩從旋轉(zhuǎn)矢量到閉環(huán)控制旋轉(zhuǎn)電壓矢量實(shí)驗(yàn)本身是開環(huán)的但它打開了一扇門。一旦你能穩(wěn)定地產(chǎn)生一個(gè)旋轉(zhuǎn)矢量就可以在此基礎(chǔ)上加入電流環(huán)、速度環(huán)、位置環(huán)逐步構(gòu)建完整的矢量控制系統(tǒng)。電流環(huán)的輸入是d軸和q軸電流指令輸出是d軸和q軸電壓指令經(jīng)過反Park變換和SVPWM后作用于電機(jī)。速度環(huán)的輸入是速度指令輸出是q軸電流指令。位置環(huán)的輸入是位置指令輸出是速度指令。如果你對(duì)無傳感器控制感興趣還可以嘗試用反電動(dòng)勢(shì)觀測(cè)器或者滑模觀測(cè)器來估計(jì)轉(zhuǎn)子角度替代編碼器。這會(huì)讓整個(gè)系統(tǒng)更緊湊、成本更低但算法復(fù)雜度也更高。我建議先把有傳感器方案調(diào)穩(wěn)再嘗試無傳感器方案否則兩個(gè)問題混在一起很難定位。另外這個(gè)實(shí)驗(yàn)也可以擴(kuò)展到多相電機(jī)或者開繞組電機(jī)。多相電機(jī)的旋轉(zhuǎn)矢量維度更高但基本思想是一樣的把多個(gè)脈振合成一個(gè)旋轉(zhuǎn)。開繞組電機(jī)則可以使用雙逆變器供電電壓矢量更多控制自由度更大。這些擴(kuò)展方向在電動(dòng)汽車和工業(yè)驅(qū)動(dòng)中都有實(shí)際應(yīng)用。最后分享一個(gè)我在教學(xué)時(shí)常用的技巧讓學(xué)生先用LED燈代替電機(jī)觀察三相輸出的亮度變化。如果三個(gè)LED的亮度按照正弦規(guī)律輪流變化且整體看起來像在旋轉(zhuǎn)說明旋轉(zhuǎn)矢量已經(jīng)正確產(chǎn)生了。這個(gè)方法非常直觀不需要示波器也不需要電機(jī)幾塊錢的LED就能驗(yàn)證核心邏輯。等LED驗(yàn)證通過了再接電機(jī)成功率會(huì)高很多。