目錄
- 一、STM32G4 SVPWM VF開環強拖電機
- 1 SVPWM
- 1.1 SVPWM技術簡介
- 1.2 基于零序分量注入的SVPWM算法的實現
- 2. VF開環強拖電機
- 3. VF啟動電機實驗現象
- 附學習參考網址
- 歡迎大家有問題評論交流 (* ^ ω ^)
一、STM32G4 SVPWM VF開環強拖電機
1 SVPWM
1.1 SVPWM技術簡介
- SVPWM控制策略是依據變流器空間電壓(電流)失量切換來控制變流器的種新穎思路和控制策略,其主要思想在于拋棄原有的SPWM算法,采用逆變器空間電壓矢量的切換以獲得準圓形旋轉磁場,從而在不高的開關頻率條件下使得交流電機獲得較SPWM算法更好的控制性能。
- 6種電機控制狀態,1代表上橋臂打開,0代表下橋臂打開,根據上圖可以看出三相電流無法同時達到最大,所以輸出是內部的藍色圓Uout而不是外部紅色圓U1
- 幾個電壓之間的關系
- 111和000是電感續流狀態,這時候電感的電流無法進行突變,適合進行三相電流采樣
1.2 基于零序分量注入的SVPWM算法的實現
-
三次諧波的電流注入可以模擬出馬鞍波,所以可以采用零區注入來實現SVPWM
-
這種方法計算量會小很多
-
為了提高直流電壓的利用率,考慮在調制波信號中注人零序分量,其調制波表達式為:
-
基于以上公式在 simulink 中建立模型,打開上一章模型;
-
將 AntiPark 變換得到的 Valpha及 Vbeta 電壓,通過 AntiClark 變換得到 Va,Vb,Vc;
-
找到Va,Vb,Vc 中的最大值及最小值,計算V0;
-
Va,Vb,Vc加V0,得到調制波;
-
計算 a,b,c三相電壓占空比;使用三相調制波除以母線電壓Vdc,然后乘以MCU定時器的計數值,即得到Ta,Tb,Tc的三相電壓切換時間;
-
模型中計算出來的三相調制波電壓乘-1;乘-1的原因與的STM32G4的TIM1的發波模式有關,如下圖,CH1,2,3為 PWM mode 1,即TIM計數值大于CCR值,CH1為低電平,而此處計算出來的三相調制波電壓是對應PWM mode 2,與mode1剛好相反,故此處需要乘-1。
-
SVPWM模型建立完成
2. VF開環強拖電機
結合前文的AntiPark模塊及SVPWM模塊即可實現VF模式來驅動電機開環轉動;
-
將AntiPark模塊及SVPWM 模型按如下連接;其中輸入的 ud,ug,Freq及Vbus均為標量,可在軟件中自行定義其值;輸出的Ta,Tb,Tc直接寫入MCU TIMER的比較值寄存器;
-
增加表貼式PMSM電機模型,寫入電機參數及采樣時間;并在數據字典中增加電機相關參數,將增加的電機參數的類定義為struct,并將struct命名為motor:該方法生成的代碼為結構體數據,便于后期更改電機參數;
- 這里需要先連接到之前文章使用的數據字典
- 這里需要先連接到之前文章使用的數據字典
-
增加一個將SVPWM輸出的Ta,Tb,Tc時間轉化為一個占空比時間的模塊;
-
使用Simulink自帶的逆變器轉換模塊,將三相電壓占空比轉化為實際的三相電壓;并在數據字典中增加母線電壓Udc參數,24V;
-
將各個模塊連接
-
電機運行,查看三相電流及速度波形;電流的頻率與我們設計輸入的頻率一致;電機轉速穩定在8左右;tABC輸出標準的馬鞍波;
3. VF啟動電機實驗現象
- 將 simulink中 VF mode 模塊,右鍵點擊生成嵌入式代碼;生成代碼流程可參考之前的文章;
- 將生成的代碼,拷貝至keil工程中的 MATLAB 文件夾;
- 打開Keil工程,在Project窗口中MATLAB 文件夾中增加VF.c文件;
- 修改的部分代碼:
在外設初始化函數后增加對 VF算法的輸入賦值,在while 循環中實時采樣Vbus 電壓;
在按鍵三的回調函數中,啟動和暫停PWM輸出:
在ADC中斷回調函數中,讀取三相電流值;將VF算法的輸出的三相計數值寫入CCR寄存器:并將電流及計數值上傳至VOFA上位機實時顯示;
- 按照之前文章的方法連接電機,編譯并下載程序,打開Keil debug,打開VOFA上位機,可以說看到輸出的三項計數值和馬鞍波
- 按下按鍵3,電機旋轉,ab項的電流值顯示正常
- 在 keil 的 dubug watch 串口中,輸入變量rtU,修改 Freq值,即可修改電機轉速
附學習參考網址
- STM32G4 FOC開發實戰