基于stm32f427实现SVPWM控制永磁同步开环转动
1、SVPWM原理簡(jiǎn)介
PWM(Pulse Width Modulation)脈寬調(diào)整,這是一種利用面積等效原理實(shí)現(xiàn)的控制技術(shù)。SVPWM(Space Vector PWM)空間矢量PWM控制,因?yàn)榭刂齐妱?dòng)機(jī)內(nèi)部的圓形旋轉(zhuǎn)磁場(chǎng),最終需要控制的是電壓空間矢量。一般控制電機(jī)的三相電壓相互成120度,以正弦的形式變換。我們需要控制的就是這三相電壓呈現(xiàn)這種形式來(lái)最終控制到電磁轉(zhuǎn)矩。主電路圖如下所示:
將三相電壓矢量以等幅計(jì)算方式轉(zhuǎn)換為兩相矢量得:
?
由于逆變器三相橋臂共有6個(gè)開(kāi)關(guān)管,為了研究各相上下橋臂不同開(kāi)關(guān)組合時(shí)逆變器輸出的空間電壓矢量,特定義開(kāi)關(guān)函數(shù)Sx(x=a、b、c) 為:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
(Sa、Sb、Sc)的全部可能組合共有八個(gè),包括6個(gè)非零矢量 Ul(001)、U2(010)、U3(011)、U4(100)、U5(101)、U6(110)、和兩個(gè)零矢量? U0(000)、U7(111),下面以其中一種開(kāi)關(guān)組合為例分析,假設(shè)Sx(x=a、b、c)=(100),此時(shí)
?
求解上述方程可得:UaN=2Ud/3、UbN=-Ud/3、UcN=-Ud/3。同理可計(jì)算出其它各種組合下的空間電壓矢量,列表如下:
表 1-1? 開(kāi)關(guān)狀態(tài)與相電壓和線電壓的對(duì)應(yīng)關(guān)系
| Sa | Sb | Sc | 矢量符號(hào) | 線電壓 | 相電壓 | ||||
| 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 |
八個(gè)基本電壓空間矢量的大小和位置入下圖所示:
如果某一瞬間要求的電壓控制鍵矢量在第一扇區(qū),那么可以根據(jù)第一扇區(qū)的矢量U4以及U6以及零矢量U0或U7合成所要求的矢量U。經(jīng)過(guò)計(jì)算,可以得到各矢量的狀態(tài)保持時(shí)間為:
式中 m 為 SVPWM 調(diào)制系數(shù)(調(diào)制比):若要求Uref的模保持恒定,則Uref的軌跡為一圓形;若要求三相電壓波形不失真(即不飽和),則Uref的軌跡應(yīng)在正六邊形內(nèi)部;結(jié)合此兩點(diǎn)可知Uref的模取最大值時(shí)的軌跡為正六邊形的內(nèi)切圓,此時(shí)m=1,故m<=1。
我們以減少開(kāi)關(guān)次數(shù)為目標(biāo),將基本矢量作用順序的分配原則選定為:在每次開(kāi)關(guān)狀態(tài)轉(zhuǎn)換時(shí),只改變其中一相的開(kāi)關(guān)狀態(tài)。并且對(duì)零矢量在時(shí)間上進(jìn)行了平均分配,以使產(chǎn)生的 PWM對(duì)稱,從而有效地降低PWM的諧波分量。當(dāng) U4(100)切換至 U0(000)時(shí),只需改變 A 相上下一對(duì)切換開(kāi)關(guān),若由 U4(100)切換至 U7(111)則需改變 B、C 相上下兩對(duì)切換開(kāi)關(guān),增加了一倍的切換損失。因此要改變電壓矢量U4(100)、U2(010)、U1(001)的大小,需配合零電壓矢量U0(000),而要改變U6(110)、U3(011)、U5(101),需配合零電壓矢量U7(111)。這樣通過(guò)在不同區(qū)間內(nèi)安排不同的開(kāi)關(guān)切換順序, 就可以獲得對(duì)稱的輸出波形,其它各扇區(qū)的開(kāi)關(guān)切換順序如表 所示:
| Uref 所在的位置 | 開(kāi)關(guān)切換順序 | 三相波形圖 |
| Ⅰ區(qū)(0°≤θ≤60°) | …0-4-6-7-7-6-4-0… | ? |
| Ⅱ區(qū)(60°≤θ≤120°) | …0-2-6-7-7-6-2-0… | ? |
| Ⅲ區(qū)(120°≤θ≤180°) | …0-2-3-7-7-3-2-0… | ? |
| Ⅳ區(qū)(180°≤θ≤240°) | …0-1-3-7-7-3-1-0… | ? |
| Ⅴ區(qū)(240°≤θ≤300°) | …0-1-5-7-7-5-1-0… | ? |
| Ⅵ區(qū)(300°≤θ≤360°) | …0-4-5-7-7-5-4-0… | ? |
以第Ⅰ扇區(qū)為例,其所產(chǎn)生的三相波調(diào)制波形在時(shí)間 Ts 時(shí)段中如圖所示,圖中電壓矢量出現(xiàn)的先后順序?yàn)?U0、U4、U6、U7、U6、U4、U0,各電壓矢量的三相波形則與表 1-2 中的開(kāi)關(guān)表示符號(hào)相對(duì)應(yīng)。再下一個(gè) TS 時(shí)段,Uref 的角度增加一個(gè)γ,利用式(1-8)可以重新計(jì)算新的 T0、T4、T6 及 T7 值,得到新的合成三相類似表(1-2)所示的三相波形;這樣每一個(gè)載波周期TS就會(huì)合成一個(gè)新的矢量,隨著θ的逐漸增大,Uref 將依序進(jìn)入第Ⅰ、Ⅱ、Ⅲ、Ⅳ、Ⅴ、Ⅵ區(qū)。在電壓向量旋轉(zhuǎn)一周期后,就會(huì)產(chǎn)生 R 個(gè)合成矢量。
通過(guò)以上 SVPWM 的法則推導(dǎo)分析可知要實(shí)現(xiàn)SVPWM信號(hào)的實(shí)時(shí)調(diào)制,首先需要知道參考電壓矢量 Uref 所在的區(qū)間位置,然后利用所在扇區(qū)的相鄰兩電壓矢量和適當(dāng)?shù)牧闶噶縼?lái)合成參考電壓矢量。圖1-4是在靜止坐標(biāo)系(α,β)中描述的電壓空間矢量圖,電壓矢量調(diào)制的控制指令是矢量控制系統(tǒng)給出的矢量信號(hào) Uref,它以某一角頻率ω在空間逆時(shí)針旋轉(zhuǎn),當(dāng)旋轉(zhuǎn)到矢量圖的某個(gè) 60°扇區(qū)中時(shí),系統(tǒng)計(jì)算該區(qū)間所需的基本電壓空間矢量,并以此矢量所對(duì)應(yīng)的狀態(tài)去驅(qū)動(dòng)功率開(kāi)關(guān)元件動(dòng)作。當(dāng)控制矢量在空間旋轉(zhuǎn) 360°后,逆變器就能輸出一個(gè)周期的正弦波電壓。
? ? 空間矢量調(diào)制的第一步是判斷由 Uα 和 Uβ所決定的空間電壓矢量所處的扇區(qū)。假定合成的電壓矢量落在第 I 扇區(qū),可知其等價(jià)條件如下:
以上等價(jià)條件再結(jié)合矢量圖幾何關(guān)系分析,可以判斷出合成電壓矢量 Uref 落在第 X扇區(qū)的充分必要條件,得出下表:
| 扇區(qū) | 落在此扇區(qū)的充要條件 |
| I | Uα>0 ,Uβ>0 且Uβ/ Uα<sqrt(3) |
| Ⅱ | Uα>0 , 且Uβ/ |Uα|>sqrt(3) |
| Ⅲ | Uα<0 ,Uβ>0 且-Uβ/ Uα<sqrt(3) |
| Ⅳ | Uα<0 ,Uβ<0 且Uβ/ Uα<sqrt(3) |
| Ⅴ | Uβ<0 且-Uβ/|Uα|>sqrt(3) |
| Ⅵ | Uα>0 ,Uβ<0 且-Uβ/Uα<sqrt(3) |
??? 若進(jìn)一步分析以上的條件,有可看出參考電壓矢量Uref 所在的扇區(qū)完全由Uβ, sqrt(3)Uα-Uβ,?-sqrt(3)Uα- Uβ?三式?jīng)Q定,因此令:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?
再定義,若U1>0 ,則 A=1,否則 A=0; 若U 2>0 ,則 B=1,否則 B=0;若U3>0 ,則 C=1,否則 C=0。可以看出 A,B,C 之間共有八種組合,但由判斷扇區(qū)的公式可知 A,B,C 不會(huì)同時(shí)為 1 或同時(shí)為 0,所以實(shí)際的組合是六種,A,B,C 組合取不同的值對(duì) 應(yīng)著不同的扇區(qū),并且是一一對(duì)應(yīng)的,因此完全可以由 A,B,C 的組合判斷所在的扇區(qū)。為區(qū)別六種狀態(tài),令 N=4*C+2*B+A,則可以通過(guò)下表計(jì)算參考電壓 矢量 Uref 所在的扇區(qū)。
N值與扇區(qū)對(duì)應(yīng)關(guān)系
| N | 3 | 1 | 5 | 4 | 6 | 2 |
| 扇區(qū)號(hào) | Ⅰ | Ⅱ | Ⅲ | Ⅳ | Ⅴ | Ⅵ |
采用上述方法,只需經(jīng)過(guò)簡(jiǎn)單的加減及邏輯運(yùn)算即可確定所在的扇區(qū),對(duì)于提高系統(tǒng)的響應(yīng)速度和進(jìn)行仿真都是很有意義的。
最后因?yàn)槌绦蛑锌刂频氖菦](méi)相電壓的占空比,占空比經(jīng)過(guò)計(jì)算得到如下表格
表 1-4 各扇區(qū)基本空間矢量的作用時(shí)間
| 扇區(qū) | 時(shí)間 | ? |
| I | ? | ? |
| Ⅱ | ? | |
| Ⅲ | ? | ? |
| Ⅳ | ? | ? ? |
| Ⅴ | ? | ? ? |
| Ⅵ | ? | ? ? |
在扇區(qū)1中時(shí)間圖如下:
?
?
2、stm32f427資源簡(jiǎn)介
a、 stm32f427帶有FPU,它有硬件的浮點(diǎn)計(jì)算器,所以執(zhí)行SVPWM算法大致需要15us左右的時(shí)間
b、stm32f427的定時(shí)器1有7路PWM端口,其中6路是互補(bǔ)的PWM可以實(shí)現(xiàn)對(duì)三相橋式電路的控制,另外一路PWM端口,用來(lái)指示采樣電流的時(shí)間。
c、stm32f427有多路ADC轉(zhuǎn)換,并且分為注入組與規(guī)則組,注入組的優(yōu)先級(jí)高于規(guī)則組。SPWM算法就是在采樣相電流完成后處理的。
d、采樣相電流的時(shí)間:這里采用的是雙電阻采樣法,采樣的時(shí)間是三相PWM都為0的時(shí)候,這時(shí)候的電流狀態(tài)如圖所示,這時(shí)候采樣電阻上的電流就是相電流。現(xiàn)在的關(guān)鍵點(diǎn)是怎么知道是處于零矢量的狀態(tài),其實(shí)設(shè)置定時(shí)器1的PWM4占空是4路PWM中最高的就可以了,當(dāng)然還需要考慮ADC的轉(zhuǎn)換時(shí)間,這有個(gè)壞處就是PWM占空比將不能達(dá)到最大。
?
3、SVPWM算法程序?qū)崿F(xiàn)
需要用到的結(jié)構(gòu)體如下
struct CLARK {long Ia; //輸入,A相定子電流long Ib; //輸入,B相定子電流long Ic; //輸入,C相定子電流long IAlpha; //輸出,靜止坐標(biāo)系A(chǔ)lpha軸定子電流long IBeta; //輸出,靜止坐標(biāo)系Beta軸定子電流void (*calcClark)(); void (*calcAntiClark)(); }; struct PARK {long Id; //輸出,旋轉(zhuǎn)坐標(biāo)系下的D坐標(biāo)值電流long Iq; //輸出,旋轉(zhuǎn)坐標(biāo)系下的Q坐標(biāo)值電流long IAlpha; //輸入,靜止坐標(biāo)系A(chǔ)lpha軸定子電流long IBeta; //輸入,靜止坐標(biāo)系Beta軸定子電流float Ud; //輸出,旋轉(zhuǎn)坐標(biāo)系下的D坐標(biāo)值電壓float Uq; //輸出,旋轉(zhuǎn)坐標(biāo)系下的Q坐標(biāo)值電壓float UAlpha; //輸入,靜止坐標(biāo)系A(chǔ)lpha軸定子電壓float UBeta; //輸入,靜止坐標(biāo)系Beta軸定子電壓long Theta; //旋轉(zhuǎn)坐標(biāo)角度float ActId; //實(shí)際D軸電流float ActIq; //實(shí)際Q軸電流void (*calcPark)(); void (*calcAntiPark)(); }; struct SVPWM {float UAlpha; //輸入,靜止坐標(biāo)系A(chǔ)lpha軸定子電壓float UBeta; //輸入,靜止坐標(biāo)系Beta軸定子電壓long Ua; // long Ub; /long Uc; // long Tx; // long Ty; // long Tz; // long taOn; //A相時(shí)間long tbOn; //B相時(shí)間long tcOn; //C相時(shí)間 };?1、clark變換模塊程序,clark變換既將三相坐標(biāo)系轉(zhuǎn)換成二相固定坐標(biāo)系的變換。
static void Clark_calc(struct CLARK *v) {float sqrt_3 = SQRT_3;//添加浮點(diǎn)變量為了編譯器優(yōu)化調(diào)用硬件浮點(diǎn)指令v->IAlpha = v->Ia;v->IBeta = (sqrt_3/3)*(v->Ia+(v->Ib*2)); }?2、park變換模快程序,park變換既二相固定坐標(biāo)系轉(zhuǎn)換成二相旋轉(zhuǎn)坐標(biāo)系的變換。存在旋轉(zhuǎn)坐標(biāo)系是為了將永磁同步電機(jī)的勵(lì)磁電流與轉(zhuǎn)矩電流剝離。
#define SinPointNum 3600 extern const int Sin_Table[SinPointNum];//正弦表 static void Park_Calc(struct PARK *v) {long Sinthe,Costhe;UINT16 Point;Point = v->Theta;if(Point<2700)Costhe = Sin_Table[Point+900]; elseCosthe = Sin_Table[Point-2700]; // Ualpha = Ucos(the) UpmMax = 2/3UdcSinthe = Sin_Table[Point]; // Ubeta = Usin(the)v->Id = v->IAlpha*Costhe+v->IBeta*Sinthe;v->Iq = -v->IAlpha*Sinthe+v->IBeta*Costhe;v->Id = v->Id/0x8000;v->Iq = v->Iq/0x8000;v->ActId = (float)(v->Id)*7.15*3.3/4096;//最大采樣實(shí)際電流11.8av->ActIq = (float)(v->Iq)*7.15*3.3/4096;//最大采樣實(shí)際電流11.8a }3、反park變換,反park變換既二相旋轉(zhuǎn)坐標(biāo)系轉(zhuǎn)換成二相固定坐標(biāo)系的變換
static void Anti_Park_Calc(struct PARK *v) {int Sinthe,Costhe;UINT16 Point;Point = v->Theta;if(Point<2700)Costhe = Sin_Table[Point+900]; elseCosthe = Sin_Table[Point-2700]; // Ualpha = Ucos(the) UpmMax = 2/3UdcSinthe = Sin_Table[Point]; // Ubeta = Usin(the)v->UAlpha = v->Ud*(float)Costhe - v->Uq*(float)Sinthe;//范圍是-sqrt(2)μ?+sqrt(2)v->UBeta = v->Ud*(float)Sinthe + v->Uq*(float)Costhe;//范圍是-sqrt(2)μ?+sqrt(2) }?4、SVPWM模塊實(shí)現(xiàn)
static void Svpwm_Module(struct SVPWM *pstrSvpwm) {UINT8 u8Sector=0;UINT8 a,b,c;int t1,t2;int temp;float sqrt_3 = SQRT_3;//添加浮點(diǎn)變量為了編譯器優(yōu)化調(diào)用硬件浮點(diǎn)指令float m = K;UINT8 Udc = MOTOR_POWER;/* 利用以下公式確定扇區(qū) */ // iClarkBeta_calc(&strSvpwm.v); // pstrSvpwm->v.Va = pstrSvpwm->v.Beta; // beta // pstrSvpwm->v.Vb = (AMP1000_SQRT_3*pstrSvpwm->v.Alpha/2 - pstrSvpwm->v.Beta*AMP1000/2)/AMP1000; // alpha*sqrt(3/4)-0.5*beta // pstrSvpwm->v.Vc = (-AMP1000_SQRT_3*pstrSvpwm->v.Alpha/2 - pstrSvpwm->v.Beta*AMP1000/2)/AMP1000; // -alpha*sqrt(3/4)-beta*0.5pstrSvpwm->Ua = pstrSvpwm->UBeta; // betapstrSvpwm->Ub = (sqrt_3*pstrSvpwm->UAlpha/2 - pstrSvpwm->UBeta/2); // alpha*sqrt(3)-betapstrSvpwm->Uc = (-sqrt_3*pstrSvpwm->UAlpha/2 - pstrSvpwm->UBeta/2); // -alpha*sqrt(3)-betaif(pstrSvpwm->Ua>0)a = 1;elsea = 0;if(pstrSvpwm->Ub>0)b = 1;elseb = 0;if(pstrSvpwm->Uc>0)c = 1;elsec = 0;u8Sector = 4*c + 2*b + a;//*24/MOTOR_POWER/* 利用下面公式計(jì)算出X、Y、Z 其中Ts為Timer1_Period,Udc為MOTOR_POWER*/pstrSvpwm->Ua = sqrt_3*pstrSvpwm->Ua/Udc*Ts/(0x8000);//X=sqrt(3)*beta*Ts/UdcpstrSvpwm->Ub = sqrt_3*pstrSvpwm->Ub/Udc*Ts/(0x8000);//Y=(sqrt(3)/2*beta+3/2*alpha)*Ts/UdcpstrSvpwm->Uc = sqrt_3*pstrSvpwm->Uc/Udc*Ts/(0x8000);//Z=(sqrt(3)/2*beta-3/2*alpha)*Ts/Udc // pstrSvpwm->v.Va = SQRT_3*pstrSvpwm->v.Va*Ts/(0x8000)*K;//X=sqrt(3)*beta*Ts/Udc // pstrSvpwm->v.Vb = SQRT_3*pstrSvpwm->v.Vb*Ts/(0x8000)*K;//Y=(sqrt(3)/2*beta+3/2*alpha)*Ts/Udc // pstrSvpwm->v.Vc = SQRT_3*pstrSvpwm->v.Vc*Ts/(0x8000)*K;//Z=(sqrt(3)/2*beta-3/2*alpha)*Ts/Udc/* 計(jì)算SVPWM占空比 */switch(u8Sector){case 0:pstrSvpwm->taOn = Time1_Period / 2;pstrSvpwm->tbOn = Time1_Period / 2;pstrSvpwm->tcOn = Time1_Period / 2;break;case 1: // if(Ts>(t1+t2)) { // t1 = -pstrSvpwm->v.Vc; // t2 = -pstrSvpwm->v.Vb;t1 = -pstrSvpwm->Ub;//U2t //這個(gè)U2矢量先發(fā)生,所以在前t2 = -pstrSvpwm->Uc;//U6t }if(Ts<(t1+t2)){t1 = t1*Ts/(t1+t2);t2 = t2*Ts/(t1+t2);}pstrSvpwm->tbOn = ((Ts)- t1 - t2)/4; //Tbon = (1-t1-t2)/4pstrSvpwm->taOn = pstrSvpwm->tbOn + t1/2; //Taon = Tbon + t1/2pstrSvpwm->tcOn = pstrSvpwm->taOn + t2/2; //Tcon = Taon + t2/2break; //2號(hào)扇區(qū)case 2: // t1 = -pstrSvpwm->v.Va; // t2 = -pstrSvpwm->v.Vc;t1 = -pstrSvpwm->Uc;//Ut4t2 = -pstrSvpwm->Ua;//Ut5if(Ts<(t1+t2)){t1 = t1*Ts/(t1+t2);t2 = t2*Ts/(t1+t2);}pstrSvpwm->taOn = ((Ts)-t1 - t2)/4;//Taon = (1-t1-t2)/4pstrSvpwm->tcOn = pstrSvpwm->taOn + t1/2; //Tcon = Taon + t1/2pstrSvpwm->tbOn = pstrSvpwm->tcOn + t2/2; //Tbon = Tcon + t2/2break;//6號(hào)扇區(qū)case 3:t1 = pstrSvpwm->Ub;//Ut4t2 = pstrSvpwm->Ua;//Ut6if(Ts<(t1+t2)){t1 = t1*Ts/(t1+t2);t2 = t2*Ts/(t1+t2);}pstrSvpwm->taOn = ((Ts)-t1 - t2)/4;//Taon = (1-t1-t2)/4pstrSvpwm->tbOn = pstrSvpwm->taOn + t1/2; //Tbon = Taon + t1/2pstrSvpwm->tcOn = pstrSvpwm->tbOn + t2/2; //Tcon = Tbon + t2/2break;//1號(hào)扇區(qū)case 4: // t1 = -pstrSvpwm->v.Vb; // t2 = -pstrSvpwm->v.Va;t1 = -pstrSvpwm->Ua;//Ut1t2 = -pstrSvpwm->Ub;//Ut3if(Ts<(t1+t2)){t1 = t1*Ts/(t1+t2);t2 = t2*Ts/(t1+t2);}pstrSvpwm->tcOn = ((Ts)-t1 - t2)/4; //Tcon = (1-t1-t2)/4pstrSvpwm->tbOn = pstrSvpwm->tcOn + t1/2; //Tbon = Tcon + t1/2pstrSvpwm->taOn = pstrSvpwm->tbOn + t2/2; //Taon = Tbon + t2/2break;//4號(hào)扇區(qū)case 5:t1 = pstrSvpwm->Ua;//Ut2t2 = pstrSvpwm->Uc;//Ut3if(Ts<(t1+t2))//·防止發(fā)生過(guò)調(diào)整導(dǎo)致圓形電壓矢量失真,所以采取比列縮小 {t1 = t1*Ts/(t1+t2);t2 = t2*Ts/(t1+t2);}pstrSvpwm->tbOn = ((Ts)- t1 - t2)/4;//Tbon = (1-t1-t2)/4pstrSvpwm->tcOn = pstrSvpwm->tbOn + t1/2; //Tcon = Tbon + t1/2pstrSvpwm->taOn = pstrSvpwm->tcOn + t2/2; //Taon = Tcon + t2/2break;//3號(hào)扇區(qū)case 6: // t1 = pstrSvpwm->v.Vc; // t2 = pstrSvpwm->v.Vb;t1 = pstrSvpwm->Uc;//Ut1t2 = pstrSvpwm->Ub;//Ut5if(Ts<(t1+t2)){t1 = t1*Ts/(t1+t2);t2 = t2*Ts/(t1+t2);}pstrSvpwm->tcOn = ((Ts) - t1 - t2)/4;//Tcon = (1-t1-t2)/4pstrSvpwm->taOn = pstrSvpwm->tcOn + t1/2; //Taon = Tcon + t1/2pstrSvpwm->tbOn = pstrSvpwm->taOn + t2/2; //Tbon = Taon + t2/2break;//5號(hào)扇區(qū)default:break;}/* stm32的中間對(duì)齊模式為倒三角,所以重新計(jì)算占空比 */u16TimeAon = Time1_Period - (UINT16)pstrSvpwm->taOn;u16TimeBon = Time1_Period - (UINT16)pstrSvpwm->tbOn;u16TimeCon = Time1_Period - (UINT16)pstrSvpwm->tcOn;if(t1==0 && t2==0){u16TimeAon = Time1_Period;u16TimeBon = Time1_Period;u16TimeCon = Time1_Period;}if(u16TimeAon>=(Limit_Pluse_Max_Value))u16TimeAon = Limit_Pluse_Max_Value;if(u16TimeBon>=(Limit_Pluse_Max_Value))u16TimeBon = Limit_Pluse_Max_Value;if(u16TimeCon>=(Limit_Pluse_Max_Value))u16TimeCon = Limit_Pluse_Max_Value;TIM1->CCR1 = u16TimeAon;//Time1_Period/4;//u16TimeAon;//Time1_Period/4*3;u16TimeAon;//下一個(gè)周期生效TIM1->CCR2 = u16TimeBon;//0;//u16TimeBon;//Time1_Period/4;u16TimeBon;//下一個(gè)周期生效TIM1->CCR3 = u16TimeCon;//0;//u16TimeCon;//Time1_Period/4*3;u16TimeCon;//下一個(gè)周期生效 }開(kāi)環(huán)控制的方式為設(shè)定Ud=0,Uq=20.可以看到電機(jī)轉(zhuǎn)動(dòng)起來(lái)了。相電流的波形與轉(zhuǎn)速如圖所示:
紅色為Ia相電流,綠色為Ib相電流,在旋轉(zhuǎn)轉(zhuǎn)過(guò)程中轉(zhuǎn)速相差為8r/min
?
轉(zhuǎn)載于:https://www.cnblogs.com/andyfly/p/9915678.html
總結(jié)
以上是生活随笔為你收集整理的基于stm32f427实现SVPWM控制永磁同步开环转动的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 洛谷 P1034 矩形覆盖
- 下一篇: 360浏览器兼容模式下IE内核版本