小猫爪:PMSM之FOC控制04-SVPWM
小貓爪:PMSM之FOC控制04-SVPWM
- 1 SVPWM的引出
- 2 SVPWM的原理
- 3 SVPWM的推導
- 4 仿真
- END
??
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的原理
??SVPWM 的理論基礎是平均值等效原理, 即在一個開關周期內通過對基本電壓矢量加以組合, 使其平均值與給定電壓矢量相等。 下圖為三相全橋逆變器拓撲:
??由于逆變器三相橋臂共有 6 個開關管, 為了研究各相上下橋臂不同開關組合時逆變器輸出
的空間電壓矢量, 特定義開關函數 Sx ( x = a、 b、 c) 為:
S(x)={1,上橋臂導通0,下橋臂導通S(x)= \begin{cases} 1, & \text {上橋臂導通} \\ 0, & \text{下橋臂導通} \end{cases} S(x)={1,0,?上橋臂導通下橋臂導通?
??(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。 同理可計算出其它各種組合下的空間電壓矢量, 列表如下:
| 0 | 0 | 0 | U0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1 | 0 | 0 | U4 | Udc | 0 | 0 | 23Udc{ \frac{2}{3} }Udc32?Udc | ?13Udc{- \frac{1}{3} }Udc?31?Udc | ?13Udc{- \frac{1}{3} }Udc?31?Udc |
| 1 | 1 | 0 | U6 | Udc | Udc | 0 | 13Udc{ \frac{1}{3} }Udc31?Udc | 13Udc{\frac{1}{3} }Udc31?Udc | ?23Udc{- \frac{2}{3} }Udc?32?Udc |
| 0 | 1 | 0 | U2 | 0 | Udc | Udc | ?13Udc{ -\frac{1}{3} }Udc?31?Udc | 23Udc{\frac{2}{3} }Udc32?Udc | ?13Udc{- \frac{1}{3} }Udc?31?Udc |
| 0 | 1 | 1 | U3 | 0 | Udc | Udc | ?23Udc{- \frac{2}{3} }Udc?32?Udc | 13Udc{\frac{1}{3} }Udc31?Udc | 13Udc{\frac{1}{3} }Udc31?Udc |
| 0 | 0 | 1 | U1 | 0 | 0 | Udc | ?13Udc{- \frac{1}{3} }Udc?31?Udc | ?13Udc{- \frac{1}{3} }Udc?31?Udc | 23Udc{ \frac{2}{3} }Udc32?Udc |
| 1 | 0 | 1 | U5 | Udc | 0 | 0 | 13Udc{ \frac{1}{3} }Udc31?Udc | ?23Udc{- \frac{2}{3} }Udc?32?Udc | 13Udc{\frac{1}{3} }Udc31?Udc |
| 1 | 1 | 1 | U7 | 0 | 0 | 0 | 0 | 0 | 0 |
| ??然后根據這8個情況下分別計算電壓合成矢量,則對應的基本電壓矢量大小和方向: | |||||||||
| ??其中非零矢量的幅值相同(模長為 2Udc/3), 相鄰的矢量間隔 60° , 而兩個零矢量幅值為零, 位于中心。 在每一個扇區, 選擇相鄰的兩個電壓矢量以及零矢量, 按照伏秒平衡的原則來合成每個扇區內的任意電壓矢量, 即: | |||||||||
| ??其中, Uref 為期望電壓矢量; T 為采樣周期; Tx,Ty,T0 分別為對應兩個非零電壓矢量 Ux、 Uy 和零電壓矢量 U 0 在一個采樣周期的作用時間,即T=Tx+Ty+T0; 其中 U0 包括了 U0 和 U7 兩個零矢量。 矢量 Uref 在 T 時間內所產生的積分效果值和 Ux、 Uy、 U0分別在時間 Tx,Ty,T0 內產生的積分效果相加總和值相同。 |
??由于三相正弦波電壓在電壓空間向量中合成一個等效的旋轉電壓, 其旋轉速度是輸入電源角頻率, 等效旋轉電壓的軌跡將是上面所示的圓形。 所以要產生三相正弦波電壓,可以利用以上電壓向量合成的技術, 在電壓空間向量上, 將設定的電壓向量由 U4(100)位置開始, 每一次增加一個小增量, 每一個小增量設定電壓向量可以用該區中相鄰的兩個基本非零向量與零電壓向量予以合成, 如此所得到的設定電壓向量就等效于一個在電壓空間向量平面上平滑旋轉的電壓空間向量, 從而達到電壓空間向量脈寬調制的目的。
3 SVPWM的推導
??上面說到,只需要算出 Tx,Ty,T0 ,就可以使用相聯的兩個電壓矢量合成任何一個想要的電壓狀態,換句話說也就是說任何一組Uα和Uβ都可以使用兩個相聯的電壓矢量合成。下面最重要的就是怎么算出 Tx,Ty,T0。
??假設欲合成的電壓向量 Uref 在第Ⅰ 區中第一個增量的位置, 如圖 2-10 所示, 欲用 U4、U6、 U0 及 U7 合成, 用平均值等效可得: U refTz =U4T4 + U6*T6 :
如圖可以列出等式:
再加上:
即可算出:
??既然Tx,Ty已經求出,則T0=Ts-Tx-Ty。同理即可得出其余六個扇區的值:
| 1 | 3TSUdc(32Uα?12Uβ)\frac{\sqrt{{ 3 }}T_S }{U_{dc}}(\frac{\sqrt{{ 3 }} }{2}U_{\alpha}-\frac{{1} }{2}U_{\beta})Udc?3?TS??(23??Uα??21?Uβ?) | 3TSUdcUβ\frac{\sqrt{{ 3 }}T_S }{U_{dc}}U_{\beta}Udc?3?TS??Uβ? |
| 2 | ?3TSUdc(32Uα?12Uβ)-\frac{\sqrt{{ 3 }}T_S }{U_{dc}}(\frac{\sqrt{{ 3 }} }{2}U_{\alpha}-\frac{{1} }{2}U_{\beta})?Udc?3?TS??(23??Uα??21?Uβ?) | ?3TSUdc(?32Uα?12Uβ)-\frac{\sqrt{{ 3 }}T_S }{U_{dc}}(-\frac{\sqrt{{ 3 }} }{2}U_{\alpha}-\frac{{1} }{2}U_{\beta})?Udc?3?TS??(?23??Uα??21?Uβ?) |
| 3 | 3TSUdcUβ\frac{\sqrt{{ 3 }}T_S }{U_{dc}}U_{\beta}Udc?3?TS??Uβ? | 3TSUdc(?32Uα?12Uβ)\frac{\sqrt{{ 3 }}T_S }{U_{dc}}(-\frac{\sqrt{{ 3 }} }{2}U_{\alpha}-\frac{{1} }{2}U_{\beta})Udc?3?TS??(?23??Uα??21?Uβ?) |
| 4 | ?3TSUdcUβ-\frac{\sqrt{{ 3 }}T_S }{U_{dc}}U_{\beta}?Udc?3?TS??Uβ? | ?3TSUdc(32Uα?12Uβ)-\frac{\sqrt{{ 3 }}T_S }{U_{dc}}(\frac{\sqrt{{ 3 }} }{2}U_{\alpha}-\frac{{1} }{2}U_{\beta})?Udc?3?TS??(23??Uα??21?Uβ?) |
| 5 | 3TSUdc(?32Uα?12Uβ)\frac{\sqrt{{ 3 }}T_S }{U_{dc}}(-\frac{\sqrt{{ 3 }} }{2}U_{\alpha}-\frac{{1} }{2}U_{\beta})Udc?3?TS??(?23??Uα??21?Uβ?) | 3TSUdc(32Uα?12Uβ)\frac{\sqrt{{ 3 }}T_S }{U_{dc}}(\frac{\sqrt{{ 3 }} }{2}U_{\alpha}-\frac{{1} }{2}U_{\beta})Udc?3?TS??(23??Uα??21?Uβ?) |
| 6 | ?3TSUdc(?32Uα?12Uβ)-\frac{\sqrt{{ 3 }}T_S }{U_{dc}}(-\frac{\sqrt{{ 3 }} }{2}U_{\alpha}-\frac{{1} }{2}U_{\beta})?Udc?3?TS??(?23??Uα??21?Uβ?) | ?3TSUdcUβ-\frac{\sqrt{{ 3 }}T_S }{U_{dc}}U_{\beta}?Udc?3?TS??Uβ? |
??計算到這里,有一點非常重要,當兩個零電壓矢量作用時間為 0 時,此時的合成空間電壓矢量幅值最大, 其幅值最大不會超過圖中所示的正六邊形邊界。 而當合成矢量落在該邊界之外 時, 將發生過調制, 逆變器輸出電壓波形將發生失真。 在 SVPWM 調制模式下, 逆變器能夠輸出的最大不失真圓形旋轉電壓矢量為下圖所示虛線正六邊形的內切圓,如下圖所示:
??如果發現了計算出的時間總和一旦大于單個周期,即Tx+Ty>Ts(六邊形界限), Tx+Ty>32\frac{\sqrt{{ 3 }} }{2}23??Ts(內切圓界限),這個時候就需要進行等比縮小。讓最終的Tx+Ty不大于Ts或者32\frac{\sqrt{{ 3 }} }{2}23??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=4C+2B+A,則可以得出如下結論:
| 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中也驗證正確了。
END
總結
以上是生活随笔為你收集整理的小猫爪:PMSM之FOC控制04-SVPWM的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: yii model层操作总结
- 下一篇: 全国计算机等级考试题库二级C操作题100