MCSDK 扇區(qū)判斷解析
前言
本文為學習st的電機庫MCSDK筆記,記錄判斷扇區(qū)的邏輯,并結合其他文章進行對比。
關鍵詞:SVPWM,MCSDK,FOC
扇區(qū)判斷
參考文章:《徹底吃透SVPWM如此簡單》
參考圖1,為了便于判斷扇區(qū),將αβ坐標系用三條直線分割,分別是:
通過判斷向量在每條直線的上下即可判斷扇區(qū)。
因此記
對XYZ的大小進行判斷,即可得知當前所在扇區(qū)
(注:這里除2的原因目前不太清楚;st的αβ坐標系以向下為正)。
| 扇區(qū) | X | Y | Z |
|---|---|---|---|
| 1 | \(>0\) | \(>0\) | \(<0\) |
| 2 | \(>0\) | \(>0\) | \(>0\) |
| 3 | \(>0\) | \(<0\) | \(>0\) |
| 4 | \(<0\) | \(<0\) | \(>0\) |
| 5 | \(<0\) | \(<0\) | \(<0\) |
| 6 | \(<0\) | \(>0\) | \(<0\) |
對比ST代碼:
wUAlpha = Valfa_beta.alpha * (int32_t)pHandle->hT_Sqrt3;
wUBeta = -(Valfa_beta.beta * ((int32_t)pHandle->PWMperiod)) * 2;
wX = wUBeta;
wY = (wUBeta + wUAlpha) / 2;
wZ = (wUBeta - wUAlpha) / 2;
/* Sector calculation from wX, wY, wZ */
if (wY < 0){
if (wZ < 0){}
else /* wZ >= 0 */
if (wX <= 0){}
else /* wX > 0 */
{}
}
else /* wY > 0 */
{
if (wZ >= 0)
{}
else /* wZ < 0 */
if ( wX <= 0 ){}
else /* wX > 0 */
{}
}
首先,根據(jù)傳入的αβ值生成中間值wUAlpha,wUBeta。有
計算得
根據(jù)\(wX,wY,wZ\)目前可以確定扇區(qū),但是還無法確定各向量的作用時間。
時間計算
先分析st的計算流程:
if (wY < 0){
if (wZ < 0)
{
pHandle->Sector = SECTOR_5;
wTimePhA = (((int32_t)pHandle->PWMperiod) / 4) + ((wY - wZ) / (int32_t)262144);
wTimePhB = wTimePhA + (wZ / 131072);
wTimePhC = wTimePhA - (wY / 131072) ;
}
}
wY<0時,wZ<0時,扇區(qū)為5。
然后看\(T_a,T_b,T_c\)的計算,和\(wY,wZ\)有關,且隨扇區(qū)變化。
看結果看不出來,需要正向推導下。
參考圖2:
記總導通時間為\(T_s\)有
將\(U_{out}\)分解,記\(T_4\)為基本矢量\(V_4\)的作用時間,\(T_6\)為基本矢量\(V_6\)的作用時間,有
將\(U_{out}\)在αβ軸的投影記為\(U_{\alpha},-U_{\beta}\),有
聯(lián)立\((1)\)~\((6)\)可得:
解得
在一般情況下,\(|U_4| = |U_6| = \frac{2U_{dc}}{3}\),其中\(|U_{dc}|\)為最大輸出相電壓,但是\(|U_{out}|\)無法完全維持在\(U_{dc}\),如圖3所示:
為了避免輸出電壓失真,將\(|U_{max}|\)限制在\(|\frac{\sqrt{3}U_x}{2}|\)
則有:
在ST的庫中,\(\frac{U_{\alpha}}{|Umax|} = V_{\alpha},\frac{U_{\beta}}{|Umax|} = V_{\beta}\),因此
在第一扇區(qū),矢量分布如圖4:
由于采用中心對稱計數(shù)模式,計算單側(cè)時間即可。
可得
代碼解讀
這時候?qū)Ρ萻t的代碼
pHandle->Sector = SECTOR_1;
wTimePhA = (((int32_t)pHandle->PWMperiod) / 4)+ ((wX - wZ) / (int32_t)262144);
wTimePhB = wTimePhA + (wZ / 131072);
wTimePhC = wTimePhB - (wX / 131072);
顯然
觀察\(wX\):
其中\(V_β\)為int16_t,即q15格式。在前面有
顯然\(V_β\in [-1,1]\),為浮點型。因此這里除以\(32768\)實際上是將q15轉(zhuǎn)換為float。
因此st計算公式可表示為
可以看到,和我們推算出的公式符號不一致。
參考st的定時器配置,發(fā)現(xiàn)st采用的向下中心計數(shù)模式,前面參考的圖為向上計數(shù),因此重新推算公式如下:
和代碼中吻合。
其他扇區(qū)按照相同方法推算,得出每個扇區(qū)對應的計算公式,實際使用時,根據(jù)扇區(qū)選擇對應的計算公式即可。
過調(diào)制
前面為了矢量不失真,將\(|U_{max}|\)限制了在\(|\frac{\sqrt{3}}{2}U_x|\)即\(|\frac{\sqrt{3}}{3}U_{dc}|\)
將\([0,\frac{\sqrt{3}U_{dc}}{3}]\)稱之為線性區(qū),在線性區(qū)內(nèi),\(U_{out}和U_{\alpha}U_{\beta}\)線性相關;
將\((\frac{\sqrt{3}}{3}U_{dc},\frac{2}{3}U_{dc}]\)稱之為過調(diào)制區(qū),在過調(diào)制區(qū)內(nèi),需要對\(U_{\alpha}U_{\beta}\)進行縮放,以保證合成矢量\(U_{out}\)不超出最大幅值。過調(diào)制方法這里不再探討,可以參考相關文章:
《STM32 MC SDK Overmodulation (new in V5.Y) - stm32mcu (stmicroelectronics.cn)》

浙公網(wǎng)安備 33010602011771號