SVPWM原理介紹
PWM(Pulse Width Modulation)脈寬調整,這是一種利用面積等效原理實現的控制技術。SVPWM(Space Vector PWM)空間矢量PWM控制,因為控制電動機內部的圓形旋轉磁場,最終需要控制的是電壓空間矢量。一般控制電機的三相電壓相互成120度,以正弦的形式變換。我們需要控制的就是這三相電壓呈現這種形式來最終控制到電磁轉矩。主電路圖如下所示:

由於逆變器三相橋臂共有6個開關管,為了研究各相上下橋臂不同開關組合時逆變器輸出的空間電壓矢量,特定義開關函數Sx(x=a、b、c) 為:

(Sa、Sb、Sc)的全部可能組合共有八個,包括6個非零矢量 Ul(001)、U2(010)、U3(011)、U4(100)、U5(101)、U6(110)、和兩個零矢量 U0(000)、U7(111),下面以其中一種開關組合為例分析,假設Sx(x=a、b、c)=(100),此時:


求解上述方程可得:UaN=2Ud/3、UbN=-Ud/3、UcN=-Ud/3。同理可計算出其它各種組合下的空間電壓矢量,列表如下:
| Sa | Sb | Sc | 矢量符號 | Uab | Ubc | Uca | UaN | UbN | UcN |
|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | U0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1 | 0 | 0 | U4 | Udc | 0 | -Udc | 2/3*Udc | -1/3*Udc | -1/3*Udc |
| 1 | 1 | 0 | U6 | 0 | Udc | -Udc | 1/3*Udc | 1/3*Udc | -2/3*Udc |
| 0 | 1 | 0 | U2 | -Udc | Udc | 0 | -1/3*Udc | 2/3*Udc | -1/3*Udc |
| 0 | 1 | 1 | U3 | -Udc | 0 | 0 | -2/3*Udc | 1/3*Udc | 1/3*Udc |
| 0 | 0 | 1 | U1 | 0 | -Udc | Udc | -1/3*Udc | -1/3*Udc | 2/3*Udc |
| 1 | 0 | 1 | U5 | Udc | -Udc | 0 | 1/3*Udc | -2/3*Udc | 1/3*Udc |
| 1 | 1 | 1 | U7 | 0 | 0 | 0 | 0 | 0 | 0 |
八個基本電壓空間矢量的大小和位置如下圖所示:

如果某一瞬間要求的電壓控制鍵矢量在第一扇區,那么可以根據第一扇區的矢量U4以及U6以及零矢量U0或U7合成所要求的矢量U。經過計算,可以得到各矢量的狀態保持時間為:

式中 m 為 SVPWM 調制系數(調制比):若要求Uref的模保持恆定,則Uref的軌跡為一圓形;若要求三相電壓波形不失真(即不飽和),則Uref的軌跡應在正六邊形內部;結合此兩點可知Uref的模取最大值時的軌跡為正六邊形的內切圓,此時m=1,故m<=1。
我們以減少開關次數為目標,將基本矢量作用順序的分配原則選定為:在每次開關狀態轉換時,只改變其中一相的開關狀態。並且對零矢量在時間上進行了平均分配,以使產生的 PWM對稱,從而有效地降低PWM的諧波分量。當 U4(100)切換至 U0(000)時,只需改變 A 相上下一對切換開關,若由 U4(100)切換至 U7(111)則需改變 B、C 相上下兩對切換開關,增加了一倍的切換損失。因此要改變電壓矢量U4(100)、U2(010)、U1(001)的大小,需配合零電壓矢量U0(000),而要改變U6(110)、U3(011)、U5(101),需配合零電壓矢量U7(111)。這樣通過在不同區間內安排不同的開關切換順序, 就可以獲得對稱的輸出波形,其它各扇區的開關切換順序如表 所示:
| Uref 所在的位置 | 開關切換順序 | 三相波形圖 |
|---|---|---|
| Ⅰ區(0°≤θ≤60°) | …0-4-6-7-7-6-4-0… | ![]() |
| Ⅱ區(60°≤θ≤120°) | …0-2-6-7-7-6-2-0… | ![]() |
| Ⅲ區(120°≤θ≤180°) | …0-2-3-7-7-3-2-0… | ![]() |
| Ⅳ區(180°≤θ≤240°) | …0-1-3-7-7-3-1-0… | ![]() |
| Ⅴ區(240°≤θ≤300°) | …0-1-5-7-7-5-1-0… | ![]() |
| Ⅵ區(300°≤θ≤360°) | …0-4-5-7-7-5-4-0… | ![]() |
1. 扇區判斷
空間矢量調制的第一步是判斷由 Uα 和 Uβ所決定的空間電壓矢量所處的扇區,以TI程序為例:
pV->tmp1= pV->Ubeta; // 相當於二相靜止坐標--到三相靜止變換出Uabc
pV->tmp2= _IQdiv2(pV->Ubeta) + _IQmpy(28377,pV->Ualpha); //0.866*32768=sqrt(3)/2*2^15
pV->tmp3= pV->tmp2 - pV->tmp1;
pV->VecSector=3; // 根據三相電壓符號計算矢量扇區
pV->VecSector=(pV->tmp2> 0)?( pV->VecSector-1):pV->VecSector;
pV->VecSector=(pV->tmp3> 0)?( pV->VecSector-1):pV->VecSector;
pV->VecSector=(pV->tmp1< 0)?(7-pV->VecSector) :pV->VecSector;
2. 有效電壓矢量作用時間計算
根據公式可以計算每個扇區兩側的有效電壓矢量作用時間(以扇區Ⅰ為例):

注:六個有效電壓矢量的幅值為2/3*Udc
對於不同的扇區,將對應的角度代入即可計算。
若假設三個臨時變量:

通過計算每個扇區內有效電壓矢量的作用時間,代入上式,可以得到:
| 扇區 | 時間 |
|---|---|
| I | ![]() |
| Ⅱ | ![]() |
| Ⅲ | ![]() |
| Ⅳ | ![]() |
| Ⅴ | ![]() |
| Ⅵ | ![]() |
3. PWM寄存器配置時間
扇區Ⅰ中的時間圖為:

對於七段式來說,三相PWM對應的比較寄存器參數配置為:

注:
-
每個有效電壓矢量的作用時間實際只有中心對稱的兩小段
-
對應中心對稱PWM,其周期寄存器配置參數為主頻/PWM頻率/2
-
對於TI例程中的不同,是因為TI的PWM動作模式為“反邏輯”,例如
按照上述計算結果得到的PWM動作時間為:
\[% MathType!MTEF!2!1!+- % feaahqart1ev3aaatCvAUfeBSjuyZL2yd9gzLbvyNv2CaerbuLwBLn % hiov2DGi1BTfMBaeXatLxBI9gBaerbd9wDYLwzYbItLDharqqtubsr % 4rNCHbWexLMBbXgBd9gzLbvyNv2CaeHbl7mZLdGeaGqipw0Je9sqqr % pepC0xbbL8F4rqqrFfpeea0xe9Lq-Jc9vqaqpepm0xbba9pwe9Q8fs % 0-yqaqpepae9pg0FirpepeKkFr0xfr-xfr-xb9adbaqaaeGaciGaai % aabeqaamaabaabauaakeaadaGabaqaauaabeqadeaaaeaacaWG0bWa % aSbaaSqaaiGac2gacaGGPbGaaiOBaiaad+gacaWGUbaabeaakiabg2 % da9maalaaabaGaaGymaaqaaiaaisdaaaGaamivamaaBaaaleaacaWG % ZbaabeaakmaadmaabaGaaGymaiabgkHiTmaabmaabaWaaSaaaeaada % GcaaqaaiaaiodaaSqabaaakeaacaaIYaaaaiaadwhadaqhaaWcbaGa % eqySdegabaGaaiOkaaaakiabgUcaRmaalaaabaGaaGymaaqaaiaaik % daaaGaamyDamaaDaaaleaacqaHYoGyaeaacaGGQaaaaaGccaGLOaGa % ayzkaaaacaGLBbGaayzxaaaabaGaamiDamaaBaaaleaacaWGTbGaam % yAaiaadsgacaWGVbGaamOBaaqabaGccqGH9aqpdaWcaaqaaiaaigda % aeaacaaI0aaaaiaadsfadaWgaaWcbaGaam4CaaqabaGcdaWadaqaai % aaigdacqGHsisldaqadaqaaiabgkHiTmaalaaabaWaaOaaaeaacaaI % ZaaaleqaaaGcbaGaaGOmaaaacaWG1bWaa0baaSqaaiabeg7aHbqaai % aacQcaaaGccqGHRaWkdaWcaaqaaiaaiodaaeaacaaIYaaaaiaadwha % daqhaaWcbaGaeqOSdigabaGaaiOkaaaaaOGaayjkaiaawMcaaaGaay % 5waiaaw2faaaqaaiaadshadaWgaaWcbaGaciyBaiaacggacaGG4bGa % am4Baiaad6gaaeqaaOGaeyypa0ZaaSaaaeaacaaIXaaabaGaaGinaa % aacaWGubWaaSbaaSqaaiaadohaaeqaaOWaamWaaeaacaaIXaGaeyOe % I0YaaeWaaeaacqGHsisldaWcaaqaamaakaaabaGaaG4maaWcbeaaaO % qaaiaaikdaaaGaamyDamaaDaaaleaacqaHXoqyaeaacaGGQaaaaOGa % eyOeI0YaaSaaaeaacaaIXaaabaGaaGOmaaaacaWG1bWaa0baaSqaai % abek7aIbqaaiaacQcaaaaakiaawIcacaGLPaaaaiaawUfacaGLDbaa % aaaacaGL7baaaaa!92A9! \left\{ {\matrix{ {{t_{\min on}} = {1 \over 4}{T_s}\left[ {1 - \left( {{{\sqrt 3 } \over 2}u_\alpha ^* + {1 \over 2}u_\beta ^*} \right)} \right]} \cr {{t_{midon}} = {1 \over 4}{T_s}\left[ {1 - \left( { - {{\sqrt 3 } \over 2}u_\alpha ^* + {3 \over 2}u_\beta ^*} \right)} \right]} \cr {{t_{\max on}} = {1 \over 4}{T_s}\left[ {1 - \left( { - {{\sqrt 3 } \over 2}u_\alpha ^* - {1 \over 2}u_\beta ^*} \right)} \right]} \cr } } \right. \]但是TI例程中計算結果為:
\[% MathType!MTEF!2!1!+- % feaahqart1ev3aaatCvAUfeBSjuyZL2yd9gzLbvyNv2CaerbuLwBLn % hiov2DGi1BTfMBaeXatLxBI9gBaerbd9wDYLwzYbItLDharqqtubsr % 4rNCHbWexLMBbXgBd9gzLbvyNv2CaeHbl7mZLdGeaGqipw0Je9sqqr % pepC0xbbL8F4rqqrFfpeea0xe9Lq-Jc9vqaqpepm0xbba9pwe9Q8fs % 0-yqaqpepae9pg0FirpepeKkFr0xfr-xfr-xb9adbaqaaeGaciGaai % aabeqaamaabaabauaakeaadaGabaqaauaabeqadeaaaeaacaWG0bWa % aSbaaSqaaiGac2gacaGGPbGaaiOBaiaad+gacaWGUbaabeaakiabg2 % da9maalaaabaGaaGymaaqaaiaaisdaaaGaamivamaaBaaaleaacaWG % ZbaabeaakmaadmaabaGaaGymaiabgUcaRmaabmaabaWaaSaaaeaada % GcaaqaaiaaiodaaSqabaaakeaacaaIYaaaaiaadwhadaqhaaWcbaGa % eqySdegabaGaaiOkaaaakiabgUcaRmaalaaabaGaaGymaaqaaiaaik % daaaGaamyDamaaDaaaleaacqaHYoGyaeaacaGGQaaaaaGccaGLOaGa % ayzkaaaacaGLBbGaayzxaaaabaGaamiDamaaBaaaleaacaWGTbGaam % yAaiaadsgacaWGVbGaamOBaaqabaGccqGH9aqpdaWcaaqaaiaaigda % aeaacaaI0aaaaiaadsfadaWgaaWcbaGaam4CaaqabaGcdaWadaqaai % aaigdacqGHRaWkdaqadaqaaiabgkHiTmaalaaabaWaaOaaaeaacaaI % ZaaaleqaaaGcbaGaaGOmaaaacaWG1bWaa0baaSqaaiabeg7aHbqaai % aacQcaaaGccqGHRaWkdaWcaaqaaiaaiodaaeaacaaIYaaaaiaadwha % daqhaaWcbaGaeqOSdigabaGaaiOkaaaaaOGaayjkaiaawMcaaaGaay % 5waiaaw2faaaqaaiaadshadaWgaaWcbaGaciyBaiaacggacaGG4bGa % am4Baiaad6gaaeqaaOGaeyypa0ZaaSaaaeaacaaIXaaabaGaaGinaa % aacaWGubWaaSbaaSqaaiaadohaaeqaaOWaamWaaeaacaaIXaGaey4k % aSYaaeWaaeaacqGHsisldaWcaaqaamaakaaabaGaaG4maaWcbeaaaO % qaaiaaikdaaaGaamyDamaaDaaaleaacqaHXoqyaeaacaGGQaaaaOGa % eyOeI0YaaSaaaeaacaaIXaaabaGaaGOmaaaacaWG1bWaa0baaSqaai % abek7aIbqaaiaacQcaaaaakiaawIcacaGLPaaaaiaawUfacaGLDbaa % aaaacaGL7baaaaa!9288! \left\{ {\matrix{ {{t_{\min on}} = {1 \over 4}{T_s}\left[ {1 + \left( {{{\sqrt 3 } \over 2}u_\alpha ^* + {1 \over 2}u_\beta ^*} \right)} \right]} \cr {{t_{midon}} = {1 \over 4}{T_s}\left[ {1 + \left( { - {{\sqrt 3 } \over 2}u_\alpha ^* + {3 \over 2}u_\beta ^*} \right)} \right]} \cr {{t_{\max on}} = {1 \over 4}{T_s}\left[ {1 + \left( { - {{\sqrt 3 } \over 2}u_\alpha ^* - {1 \over 2}u_\beta ^*} \right)} \right]} \cr } } \right. \]這里正好有一個加減號的相反關系(后者等於Ts/2減去前者)

-
這里給出的表達式是指min、mid和max對應的PWM動作時間,而不是ABC三相PWM的動作時間,所以程序中的設置的正確的,即:
if (pV->VecSector==1 || pV->VecSector==4) // 根據矢量扇區計算矢量占空比Tabc { pV->Ta= pV->tmp2; pV->Tb= pV->tmp1-pV->tmp3; pV->Tc=-pV->tmp2; } else if(pV->VecSector==2 || pV->VecSector==5) { pV->Ta= pV->tmp3+pV->tmp2; pV->Tb= pV->tmp1; pV->Tc=-pV->tmp1; } else { pV->Ta= pV->tmp3; pV->Tb=-pV->tmp3; pV->Tc=-(pV->tmp1+pV->tmp2); }












