2023-05-31 小猫爪:PMSM之FOC控制04-SVPWM
Local Duplicate (Author is 小貓爪)
1 SVPWM的引出
在Park變換那一節,說到了可以通過控制Eq(Iq)和Ed(Id)來控制電機。而電流我們並不能直接控制,只能簡介通過控制輸出電壓來控制電流,這個時候就需要通過經典的反饋控制來實現了。當我們拿到轉子的位置時,就可以根據轉子位置對電機三相電流進行解耦,經過Clark和Park變換得到反饋信號Id_feedback和Iq_feedback,再通過PID控制器對Id_feedback和Iq_feedback進行分別控制來得到最佳的控制信號,即電壓信號Ud和Uq。
根據上面我們就可以列出下面的foc控制的框圖:
電流反饋信號經過Clark和Park變換變成Id_feedback和Iq_feedback後,再輸入給PID控制器,再使用反Park變換把PID控制器輸出的控制信號Ud和Uq變換成Uα和Uβ,然後再將Uα和Uβ送入SVMPWM中產生三相全橋逆變器控制信號控制逆變器產生控制電流。這就是FOC控制流程。
那麼Uα和Uβ怎麼最終怎麼變成逆變器的PWM控制信號呢,這就需要SVPWM來完成了。即SVPWM模塊的輸入是Uα和Uβ,輸出則是PWM信號。
2 SVPWM的原理
的空間電壓矢量, 特定義開關函數 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=2Udc/3、 UbN=-Udc/3、 UcN=-Udc/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 | 0 | 2/3 Udc | -1/3 Udc | -1/3 Udc |
1 | 1 | 0 | U6 | Udc | Udc | 0 | 1/3 Udc | 1/3 Udc | -2/3 Udc |
0 | 1 | 0 | U2 | 0 | Udc | Udc | −1/3 Udc | 2/3 Udc | -1/3 Udc |
0 | 1 | 1 | U3 | 0 | Udc | Udc | −2/3 Udc | 1/3 Udc | 1/3 Udc |
0 | 0 | 1 | U1 | 0 | 0 | Udc | −1/3 Udc | -1/3 Udc | 2/3 Udc |
1 | 0 | 1 | U5 | Udc | 0 | 0 | 1/3 Udc | -2/3 Udc | 1/3 Udc |
1 | 1 | 1 | U7 | 0 | 0 | 0 | 0 | 0 | 0 |
* 然後根據這8個情況下分別計算電壓合成矢量,則對應的基本電壓矢量大小和方向:
3 SVPWM的推導
上面說到,只需要算出Tx,Ty,T0 ,就可以使用相聯的兩個電壓矢量合成任何一個想要的電壓狀態,換句話說也就是說任何一組Uα和Uβ都可以使用兩個相聯的電壓矢量合成。下面最重要的就是怎麼算出Tx,Ty,T0。
假設欲合成的電壓向量Uref 在第Ⅰ 區中第一個增量的位置, 如圖2-10 所示, 欲用U4、U6、 U0 及U7 合成, 用平均值等效可得: U ref Tz =U4 T4 + U6*T6 :

如圖可以列出等式:

再加上:

即可算出:

既然Tx,Ty已經求出,則T0=Ts-Tx-Ty。同理即可得出其餘六個扇區的值:

計算到這裡,有一點非常重要,當兩個零電壓矢量作用時間為0 時,此時的合成空間電壓矢量幅值最大, 其幅值最大不會超過圖中所示的正六邊形邊界。而當合成矢量落在該邊界之外時, 將發生過調製, 逆變器輸出電壓波形將發生失真。在SVPWM 調製模式下, 逆變器能夠輸出的最大不失真圓形旋轉電壓矢量為下圖所示虛線正六邊形的內切圓,如下圖所示:

如果發現了計算出的時間總和一旦大於單個週期,即Tx+Ty>Ts(六邊形界限),

(內切圓界限),這個時候就需要進行等比縮小。讓最終的Tx+Ty不大於Ts或者

。
每個扇區的時間根據Uα和Uβ都已經計算出來了,但是還有一個需要注意的是怎樣通過Uα和Uβ算出當前處在哪個扇區區間內?
不妨再仔細看上表,發現了有三個元素出現頻率非常高,分別是:

因為時間肯定是正的,所以讓Tx>0, Ty>0,即可列出在每個扇區中保證時間是正的充分必要條件U1,U2,U3是否大於0。若U1>0 , 則A=1, 否則A=0; 若U 2>0 , 則B=1, 否則B=0; 若U3>0 ,則C=1, 否則C=0。令N=4 C+2 B+A,則可以得出如下結論:
扇區號 | 1 | 2 | 3 | 4 | 5 | 6 |
N值 | 3 | 1 | 5 | 4 | 6 | 2 |
這樣就通過Uα和Uβ計算出扇區,決定使用哪兩個相連的電壓矢量以及各自作用的時間,還有最後一個問題,怎麼把時間變成我們想要的PWM波。
最常用的SVPWM調製方式有兩種,7段式和5段式,顧名思義就是在一個扇區中,開關狀態一共有7種狀態或者5種狀態,下面我們就以最常見的7段式作說明:
以減少開關次數為目標, 將基本矢量作用順序的分配原則選定為: 在每次開關狀態轉換時, 只改變其中一相的開關狀態。並且對零矢量在時間上進行了平均分配, 以使產生的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)。這樣通過在不同區間內安排不同的開關切換順序, 就可以獲得對稱的輸出波形。
以第一個扇區為例:開關狀態切換和PWM波形,以及每個開關狀態相應的作用時間如下圖:

可以看出在第一扇區中,一次經歷了0-4-6-7-7-6-4-0這七種開關狀態,兩種開關狀態之間的切換只改變了一組開關狀態。依次類推,其他扇區也是這樣的,這裡就不多做什麼,了解到7段式調製的原理,接下來就是怎樣把算出的時間轉換成MCU外設中的比較器值了,讓MCU按照需求輸出正確時間的PWM波形了。
這一般跟MCU的PWM生成模塊相關,就以最常見的center-align舉例吧。在I 扇區時如下圖:

三個PWM高電平時間值為:

對應的計數器的比較值為:

其中TNx和Tx的對應關係為:TNx = NTPWM*Tx/Ts。
以此類推,得到其他扇區的比較器值如下表所示:

注:當然了,由於現在各家MCU廠商的SDK驅動庫比較全面,一般都有直接設置佔空比的函數,所以也可以讓SVPWM輸出三個佔空比信號直接傳參給驅動函數就好了,這樣會更加簡單。確定好PWM的周期之後,直接將三個信號的佔空比算出即可,當然還是僅限center-align的這種對稱工作模式。
到這里為止,SVPWM就全部介紹完了。
4 仿真
根據上面的推導直接整出仿真:

仿真結果比較值輸出:

如果是這種馬鞍形狀,那麼就代表成功了,接下來就是將其移植到MCU中,讓其輸出正確的PWM波了。將算法使用MATLAB生成並移植到MCU中,打印出比較器的值如下:

在MCU中也驗證正確了。