動仿真:SVPWM與FOC調(diào)參全解析)
做電機控制的這幾年我發(fā)現(xiàn)一個很普遍的現(xiàn)象很多朋友把兩電平SVPWM調(diào)得滾瓜爛熟但一接觸三電平NPC架構(gòu)仿真模型就開始各種鬧脾氣——不是中點電壓像過山車一樣來回飄就是扇區(qū)判斷算錯導(dǎo)致電流畸變再或者調(diào)制波切換的時候橋臂直通炸管子。這篇文章就圍繞手頭這套“永磁同步電機PMSM三電平驅(qū)動MATLAB/Simulink仿真模型”展開把FOC矢量控制的調(diào)參邏輯、三電平SVPWM的搭建細(xì)節(jié)以及不同調(diào)制方式SPWM、SVPWM、DPWM在實際仿真里的對比結(jié)果一次性講透。內(nèi)容偏工程向適合正在做電機控制器開發(fā)、準(zhǔn)備從兩電平切三電平的工程師也適合需要快速上手三電平仿真驗證算法的學(xué)生和科研人員。1. 為什么非得是“三電平PMSM”從兩電平方案的三個痛點說起1.1 器件耐壓與諧波的雙重限制在高壓大功率交流傳動、軌道交通、礦井提升、船舶推進這些場景里母線電壓越做越高。兩電平逆變器每相只有一個橋臂功率器件要直接承受整個直流母線電壓器件選型又貴又難還得考慮串聯(lián)均壓的問題。我自己在調(diào)試某中壓變頻項目時母線電壓規(guī)劃到上千伏兩電平方案下IGBT的耐壓等級、開關(guān)損耗和散熱成本一下子就上去了項目預(yù)算也跟著失控。諧波是另一個繞不開的痛點。兩電平逆變器每相輸出只有正負(fù)兩個電平相電壓在正負(fù)母線之間大幅跳變諧波含量高轉(zhuǎn)矩脈動幅度也大。對于PMSM這種對轉(zhuǎn)矩平穩(wěn)性要求高的電機低速重載下的轉(zhuǎn)矩脈動會直接體現(xiàn)在負(fù)載端的振動和噪聲上甚至影響整個機械系統(tǒng)的壽命。仿真里把相電流拿去做FFT兩電平方案在低頻段的諧波分量經(jīng)常比三電平高出幾個百分點這是做項目時非?,F(xiàn)實的問題。1.2 三電平到底多了什么三電平NPC逆變器每相輸出P、O、N三種狀態(tài)中間多了一個鉗位到直流母線中點的電平。同樣開關(guān)頻率下輸出電壓的諧波等效效果接近兩電平的兩倍開關(guān)頻率。比如開關(guān)頻率都是10kHz三電平方案的電流紋波明顯更小配套濾波器的體積也能縮小不少轉(zhuǎn)矩波動也跟著降下來。很多人容易誤解一點三電平的“電壓利用率”是不是比兩電平高同樣的SVPWM調(diào)制下兩電平和三電平在線性區(qū)的最大調(diào)制度都在1.15左右真正拉開差距的是諧波特性、開關(guān)損耗和器件耐壓。三電平每個開關(guān)管只承受一半母線電壓低壓器件就能應(yīng)付高壓應(yīng)用這才是在高壓場景選它的根本原因。另外三電平的中點電位本身就是一個控制自由度。它讓系統(tǒng)能通過小矢量冗余狀態(tài)去調(diào)節(jié)中點電流這也是三電平SVPWM比兩電平復(fù)雜的地方但也意味著多了一個優(yōu)化維度。把這一點吃透后面的中點平衡控制才有抓手。1.3 這套模型適合誰這套仿真模型適用的范圍大致分三類剛接觸電機控制的學(xué)生想快速理解FOC到底是怎么閉環(huán)的以及三電平NPC和兩電平在波形上的區(qū)別已經(jīng)在做兩電平FOC、項目要切換到三電平的工程師重點看SVPWM扇區(qū)判斷、死區(qū)設(shè)置和中點平衡這部分做光伏逆變器、儲能PCS或者中壓變頻器方案選型的人需要評估不同調(diào)制策略的諧波和損耗表現(xiàn)。仿真模型最大的好處是不用動硬件就能把三電平SVPWM的扇區(qū)判斷、中點平衡、調(diào)制波切換這些容易燒板子的問題先在軟件里跑清楚。等代碼邏輯、參數(shù)整定都驗證過了再移植到DSP或者FPGA上風(fēng)險和調(diào)試周期都會小很多。2. 仿真模型總體架構(gòu)與三電平NPC橋臂的搭建2.1 控制與主電路的分層設(shè)計我搭模型習(xí)慣把整體分成三層功率主電路、控制算法、測量與保護。在Simulink里分別放進三個子系統(tǒng)方便單獨調(diào)試。功率主電路包含直流電源、兩個串聯(lián)的直流母線電容、三電平NPC橋臂、PMSM電機。控制算法層包含坐標(biāo)變換、速度環(huán)PI、電流環(huán)PI、SVPWM/SPWM/DPWM調(diào)制波生成以及死區(qū)發(fā)生器。測量與保護層負(fù)責(zé)采樣三相電流、直流母線上下電容電壓、電機轉(zhuǎn)子位置以及過流和中點電壓越限保護邏輯。主電路有兩種搭建選擇。一種是Simscape Electrical庫里的IGBT橋臂直觀、貼近實際器件但仿真速度比較慢尤其是開關(guān)頻率一高跑一次幾十毫秒的過程要等很久。另一種是平均模型把三相橋臂等效成可控電壓源不考慮開關(guān)過程跑得快適合先把閉環(huán)邏輯和PI參數(shù)調(diào)通。我的實際做法是前期用平均模型驗證FOC邏輯和SVPWM代碼確認(rèn)沒問題之后再換成帶開關(guān)管的細(xì)節(jié)模型看諧波、死區(qū)影響和開關(guān)損耗。這個順序能省下大量等待時間。2.2 主電路搭建要點直流母線部分用兩個容量相同的大電容串聯(lián)中點引出作為O點上下電容分別接電壓采樣得到Vc1和Vc2。這兩個電壓值就是中點電位控制的狀態(tài)反饋后面SVPWM的小矢量調(diào)節(jié)要靠它們。每個橋臂四個IGBT加上兩個鉗位二極管接到中點。IGBT的導(dǎo)通壓降和損耗參數(shù)最好按實際選型填否則仿真里的損耗和諧波分布跟真機差距會很大。開關(guān)信號生成之后必須先過死區(qū)模塊再給IGBT絕對不能直接懟上去不然同一橋臂上下管直通的風(fēng)險很高。PMSM模塊我用的Simulink標(biāo)準(zhǔn)庫里的永磁同步電機模型輸入是三相電壓輸出三相電流和轉(zhuǎn)速、轉(zhuǎn)子位置。注意電機中性點和母線參考地不一定是同一個電位需要處理好三相線電壓的換算否則波形會偏。2.3 三電平開關(guān)狀態(tài)與死區(qū)時序每相四個開關(guān)管從上到下記為S1、S2、S3、S4。輸出P狀態(tài)導(dǎo)通S1和S2O狀態(tài)導(dǎo)通S2和S3N狀態(tài)導(dǎo)通S3和S4。這里有兩個絕對不能碰的組合S1和S3不能同時導(dǎo)通否則正負(fù)母線直通S2和S4不能同時導(dǎo)通否則對中點直通。死區(qū)的存在就是用來避免這些組合出現(xiàn)的。三電平死區(qū)比兩電平復(fù)雜。P到O、O到N的切換都需要死區(qū)在死區(qū)內(nèi)負(fù)載電流由鉗位二極管續(xù)流輸出電平暫時不按理論狀態(tài)走而是取決于電流方向。這種“電平空洞”會在輸出電壓里引入低次諧波嚴(yán)重時相電流削頂。我調(diào)試時有個習(xí)慣先把死區(qū)設(shè)成0觀察理想波形波形正常后逐步加大死區(qū)對比同一工況下FFT結(jié)果的變化這樣能很清楚看到死區(qū)對諧波和波形失真的影響。實際項目里死區(qū)時間一般按開關(guān)周期的2%~5%去設(shè)再通過死區(qū)補償算法消除影響。仿真模型里先按這個范圍設(shè)就行。3. FOC矢量控制坐標(biāo)變換、電流環(huán)與速度環(huán)的調(diào)參邏輯3.1 兩個坐標(biāo)變換與id0控制FOC控制的第一步是Clark變換把三相電流從abc坐標(biāo)變到兩相靜止αβ坐標(biāo)iα ia iβ (ia 2*ib) / √3第二步是Park變換按轉(zhuǎn)子電角度θe把αβ電流旋轉(zhuǎn)到dq旋轉(zhuǎn)坐標(biāo)系id iα*cosθe iβ*sinθe iq -iα*sinθe iβ*cosθeθe從電機模塊輸出的轉(zhuǎn)子機械角乘以極對數(shù)得到。有了dq軸電流電磁轉(zhuǎn)矩可以直接寫成Te 1.5 * pp * (ψf*iq (Ld - Lq)idiq)對于表貼式PMSMLd和Lq基本相等采用id0控制最省事勵磁磁鏈恒定轉(zhuǎn)矩只受iq控制線性度非常好。內(nèi)埋式PMSM可以后面做最大轉(zhuǎn)矩電流比MTPA但第一版仿真完全沒必要先把id0跑通再看實際需求擴展。3.2 電流環(huán)PI參數(shù)的一次性計算方法電流環(huán)的被控對象是定子電感和電阻在dq坐標(biāo)系下可以近似看成G(s) 1 / (Ls*s Rs)忽略反電動勢交叉耦合時把PI控制器設(shè)計成讓開環(huán)傳函等于一個純積分器ωc/s閉環(huán)帶寬就約等于ωc。這樣倒推出來一組很實用的公式Kp ωc * Ls Ki ωc * Rs比如我用的驗證電機參數(shù)是Rs 0.3ΩLd Lq 1.2mH開關(guān)頻率10kHz電流環(huán)帶寬取1kHz即ωc 2π * 1000 ≈ 6283。那么Kp ≈ 7.5 Ki ≈ 1885寫個簡單的MATLAB腳本算一下Rs 0.3; Ls 1.2e-3; fsw 10e3; fbw fsw / 10; wc 2*pi*fbw; Kp wc * Ls; Ki wc * Rs; fprintf(Kp %.2f, Ki %.2f\n, Kp, Ki);這組參數(shù)在Simulink的PID模塊里填進Kp和Ki配合離散化或連續(xù)模型都能直接轉(zhuǎn)起來。后續(xù)按仿真波形微調(diào)iq階躍響應(yīng)超調(diào)太大就把Kp適當(dāng)減小穩(wěn)態(tài)誤差消得慢就把Ki適當(dāng)加大。這么做基本兩三輪就能收斂。3.3 速度環(huán)初調(diào)與弱磁邊界速度環(huán)是外環(huán)帶寬通常取電流環(huán)的1/5到1/10。速度對象近似為G_v(s) Kt / (J*s)轉(zhuǎn)矩常數(shù)Kt 1.5 * pp * ψf。比如電機J 0.005 kg·m2Kt 0.9期望速度環(huán)帶寬50Hz阻尼系數(shù)0.707左右用二階系統(tǒng)反推Kp_v ≈ √2 * ωv * J / Kt ≈ 2.5 Ki_v ≈ ωv2 * J / Kt ≈ 55這個初值進仿真后觀察轉(zhuǎn)速階躍超調(diào)大就減小Kp_v響應(yīng)慢就加大Ki_v。速度環(huán)這里有個容易被忽略的地方速度反饋的濾波時間常數(shù)也會引入延遲濾波越大能用的帶寬就越低參數(shù)要往回收一點。弱磁區(qū)間在模型里可以后置。當(dāng)逆變器輸出電壓達到調(diào)制極限后轉(zhuǎn)速還想往上走就需要注入負(fù)向id電流來削弱永磁磁場。具體做法是在dq電壓限制里加一個電壓閉環(huán)實時計算id_ref。這個模塊等基礎(chǔ)FOC跑通后再加不影響前面理解FOC主流程。4. 三電平SVPWM的核心實現(xiàn)矢量分類、扇區(qū)判斷與作用時間分配4.1 從6個矢量到19個基礎(chǔ)矢量兩電平每相只有正負(fù)兩個狀態(tài)三相組合出來是8種開關(guān)狀態(tài)對應(yīng)6個有效基本矢量和2個零矢量。三電平每相有P、O、N三個狀態(tài)27種開關(guān)狀態(tài)按電壓合成歸類后得到19個基礎(chǔ)矢量1個零矢量、6個小矢量、6個中矢量、6個大矢量。關(guān)鍵差異在小矢量有冗余開關(guān)狀態(tài)。比如POO和ONN對應(yīng)的線電壓完全一樣但流過中點的電流方向相反。中矢量和大矢量各只有一種開關(guān)狀態(tài)。這意味著做中點電位平衡時唯一能調(diào)節(jié)的資源就是小矢量的冗余狀態(tài)分配這是三電平SVPWM和兩電平最本質(zhì)的區(qū)別。4.2 大扇區(qū)與子扇區(qū)的判斷三電平SVPWM的工程實現(xiàn)路徑我習(xí)慣這樣走先求Vα、Vβ的相角θ atan2(Vβ, Vα)每60度切一個大扇區(qū)θ落在0°~60°就是第一大扇區(qū)60°~120°是第二大扇區(qū)以此類推。每個大扇區(qū)內(nèi)部再劃分出四個三角形子扇區(qū)。參考電壓矢量落在哪個三角形就用這個三角形的三個頂點矢量來合成。判斷條件在歸一化坐標(biāo)系下是一組線性不等式邊界和母線電壓的若干系數(shù)相關(guān)。工程上為了防抖我給邊界判斷加了1V~2V的滯環(huán)實測波形穩(wěn)定很多不會在扇區(qū)邊界來回跳導(dǎo)致輸出毛刺。大致的代碼框架可以這樣寫function [sector, subsector] svpwm_sector(Va, Vb, Vdc) theta atan2(Vb, Va) * 180 / pi; if theta 0 theta theta 360; end sector floor(theta / 60) 1; % 子扇區(qū)判斷這里需要用歸一化后的坐標(biāo)和邊界閾值比較 % 返回值 subsector 為 1~4 end具體的子扇區(qū)邊界閾值需要按母線電壓歸一化后計算我在模型里做的是建立24個三角形區(qū)域的查找表用歸一化Vref坐標(biāo)去匹配避免每次在線解不等式。4.3 伏秒平衡與作用時間分配選定參考矢量的三個頂點矢量Vx、Vy、Vz之后列伏秒平衡方程T1Vx T2Vy T3Vz VrefTs T1 T2 T3 Ts這是一個線性方程組在Simulink里用矩陣求逆一次就能算出三個作用時間。算完之后把三個開關(guān)狀態(tài)在載波周期內(nèi)做對稱排列生成PWM波形。這里還有一個很重要的調(diào)節(jié)因子α。每個小矢量都有P型如POO和N型如ONN兩種冗余狀態(tài)α0時全部用P型小矢量α1全部用N型小矢量中間值則按比例混用??刂痞辆湍芸刂浦悬c電流的平均方向從而調(diào)節(jié)中點電位。工程上最常見的做法是把ΔV Vc1 - Vc2 經(jīng)過一個PI控制器輸出作為α的實時指令形成中點電位閉環(huán)。我在模型里把α限制在0.1~0.9之間不推到極端值否則會出現(xiàn)某一種小矢量占用時間過長、另一些矢量區(qū)間無法正常發(fā)波的情況實測限制后穩(wěn)定性好很多。5. SVPWM、SPWM、DPWM在仿真里的實際對比5.1 三種調(diào)制的實現(xiàn)差異SPWM最簡單正弦調(diào)制波和三角載波比較。三電平SPWM用兩個層疊載波上載波范圍0到1下載波-1到0正弦調(diào)制波在[-1,1]之間按比較結(jié)果輸出P、O、N三個狀態(tài)。SVPWM直接計算電壓矢量的作用時間等效于在SPWM調(diào)制波里注入合適的零序分量把正弦波變成馬鞍形波電壓利用率從1.0提升到1.15左右。DPWM是SVPWM的變體在某些扇區(qū)把某相調(diào)制波鉗位到±1讓該相在60度區(qū)間內(nèi)完全不開關(guān)。這樣做開關(guān)次數(shù)減少三分之一開關(guān)損耗顯著下降代價是諧波性能變差一些電流THD會往上走。在Simulink里這三種方式可以統(tǒng)一放到一個“調(diào)制波生成”子系統(tǒng)后面接兩層載波比較模塊切換對比非常方便。實際項目里DPWM還有DPWM1、DPWM2、DPWM3等不同版本區(qū)別在于鉗位區(qū)間的位置選擇仿真階段先用最基礎(chǔ)的版本跑通再根據(jù)應(yīng)用場景換版本。5.2 諧波、損耗和電壓利用率的實測對比同一套模型母線電壓600V開關(guān)頻率10kHz帶額定負(fù)載取穩(wěn)態(tài)后的相電流做FFT。SPWM的相電流THD最高仿真結(jié)果大概在5.8%左右SVPWM降到3.2%DPWM在SVPWM基礎(chǔ)上開關(guān)損耗明顯下降THD會回升到3.6%左右。電壓利用率方面SPWM在線性區(qū)最大調(diào)制度接近1.0SVPWM和DPWM都能到1.15左右。調(diào)制方式直流電壓利用率相電流THD仿真相對值開關(guān)損耗中點電壓平衡能力實現(xiàn)復(fù)雜度SPWM約1.0較高各相持續(xù)開關(guān)較弱低SVPWM約1.15最低各相持續(xù)開關(guān)強中DPWM約1.15略高于SVPWM最低鉗位區(qū)間受限中這個THD數(shù)據(jù)是相對值換電機參數(shù)和死區(qū)時間會有變化但趨勢是穩(wěn)定的。SVPWM在三種方案里綜合表現(xiàn)最均衡這也是為什么主流電機驅(qū)動都用SVPWM。5.3 選型取舍實際怎么選主要看需求優(yōu)先級。如果重點是諧波指標(biāo)和轉(zhuǎn)矩平穩(wěn)SVPWM是首選三電平SVPWM的組合能把轉(zhuǎn)矩脈動壓得非常低適合精密傳動和對噪聲敏感的場合。大功率設(shè)備發(fā)熱嚴(yán)重開關(guān)損耗是瓶頸DPWM更合適代價是濾波器和噪聲表現(xiàn)會變差一些但散熱壓力小了很多。SPWM則更適合教學(xué)驗證或者在低壓小功率、對性能要求不高的場合湊合使用。母線電壓利用率這一點值得單獨拿出來說。PMSM在基速區(qū)能跑到的最高轉(zhuǎn)速直接受制于逆變器能輸出的最大基波電壓。如果母線電壓本來就偏緊想靠更高電壓利用率換取速度余量那SPWM就別糾結(jié)了直接上SVPWM最實際。6. 仿真調(diào)試中反復(fù)踩的幾個坑6.1 中點電位像過山車中點電位漂移是初學(xué)三電平最容易撞上的問題。只要負(fù)載不對稱或者小矢量的冗余狀態(tài)分配不合理Vc1和Vc2之間的差值就會越來越大輸出電壓波形跟著畸變嚴(yán)重時保護邏輯都會誤動作??刂粕舷扔肞I閉環(huán)把ΔV壓住但增量輸出要加限幅和平滑不要讓α指令劇烈跳變。模型里兩個母線電容的初始電壓一定要都設(shè)成Vdc/2不然啟動瞬間會有很大的電容充電沖擊電流波形看起來像炸了一樣。6.2 死區(qū)、仿真步長與開關(guān)事件的匹配Simulink里用標(biāo)準(zhǔn)庫PMSM搭配PWM驅(qū)動時仿真步長設(shè)置非常關(guān)鍵。固定步長建議取1e-6秒或者更小用ode3算法否則PWM開關(guān)事件會落在兩個積分步長之間波形失真嚴(yán)重。死區(qū)時間也不能亂設(shè)一般不超過載波周期的5%。我試過一次載波周期100微秒、死區(qū)設(shè)成15微秒波形直接削頂諧波爆炸式增長。仿真階段先零死區(qū)跑通再加死區(qū)對比這樣能清楚看到死區(qū)引入的影響到底有多大。6.3 代數(shù)環(huán)和邊界浮點誤差電流環(huán)PI輸出的Vα、Vβ直接進SVPWM計算模塊時Simulink經(jīng)常報代數(shù)環(huán)錯誤。處理辦法是在反饋路徑或計算鏈路上加Memory模塊打破代數(shù)環(huán)。代價是會引入一拍延遲看起來影響不大但在高帶寬要求下會稍微降低調(diào)制性能可以接受。扇區(qū)邊界浮點數(shù)判斷還有一個隱性坑參考矢量正好壓在線性不等式邊界上時扇區(qū)號會來回抖動輸出電流毛刺不斷。解決辦法我前面提過給比較閾值留滯環(huán)幾伏的寬度就夠?qū)崪y效果非常明顯。7. 復(fù)現(xiàn)這套模型時值得注意的幾個小習(xí)慣最后聊幾個我自己反復(fù)用的小習(xí)慣不一定寫進文檔但對提高效率很有幫助。第一先把兩電平FOC徹底跑通再往三電平擴展。三電平SVPWM的所有調(diào)試難點都疊加在FOC之上如果兩電平的電流環(huán)都沒調(diào)穩(wěn)三電平出問題時分不清是FOC參數(shù)問題還是SVPWM扇區(qū)問題排查難度翻倍。第二每次改動只動一個變量。比如先把SVPWM扇區(qū)判斷代碼換上保持中點平衡算法不動確認(rèn)波形正常了再去調(diào)α調(diào)節(jié)器。同時改多個模塊出了問題只能從頭猜。第三FFT分析時取數(shù)據(jù)要在系統(tǒng)進入穩(wěn)態(tài)之后再選一個完整的基波周期而且最好加窗函數(shù)不然頻譜泄漏會污染THD數(shù)值。第四保留不同調(diào)制方式的對照組設(shè)置。同一工況下SPWM、SVPWM、DPWM各跑一遍把相電流畸變、轉(zhuǎn)矩波動、中點電位波動都存下來做成表格。這樣不僅自己判斷直觀后面寫技術(shù)方案或者匯報時也有數(shù)據(jù)支撐。這套模型如果按上面的順序走下來從平均模型驗證算法到開關(guān)級模型看波形通常一周以內(nèi)就能把三電平FOC的閉環(huán)、SVPWM發(fā)波和中點平衡全部穩(wěn)定跑起來。再往后想擴展弱磁、死區(qū)補償或者無感控制都是在現(xiàn)在這個骨架上加模塊的事。