打印
[STM32F1]

关于svpwm方面的一些疑问

[复制链接]
1069|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
可不可以让他每隔一个定时周期将角度值加一作为他的角度,然后根据这个角度进行扇区判断,不用id iq来计算还有就是 是不是svpwm随扇区的变化 pwm占空比也在不断地进行着调整 小弟初次接触svpwm 有点困惑
沙发
zhouhuyin| | 2017-4-26 10:11 | 只看该作者
void SVPWM_CalcDutyCycle(s16 Va,s16 Vb)
{
        signed short X,Y,Z,Tx,Ty;
        unsigned short Ta,Tb,Tc;
        signed short ua,ub,uc;
        unsigned char A,B,C;
        unsigned short Tcm1,Tcm2,Tcm3;
        unsigned char Sector; //¿Õ¼äʸÁ¿ÉÈÇø
        //unsigned short pot,adc,adc2;
        //pot=(ADC_ConvertedValue[0]);
        //adc=Udc;
       
        //½«ÉÏÇűÛתΪÏÂÇű۱íʾµÄ£¬ÉÈÇø·´180¡ã£¬TIM1µÄPWMģʽҪÉèÖÃΪPWM1¾ÍÐÐÁË
        Va=-Va;Vb=-Vb;
        X=SQRT3MUL1000*Vb/1000*TS/Udc;
        Y=(3*Va+SQRT3MUL1000*Vb/1000)*TS/(2*Udc);
        Z=(-3*Va+SQRT3MUL1000*Vb/1000)*TS/(2*Udc);
        ua=Vb;ub=(SQRT3MUL1000*Va/1000-Vb)/2;uc=-(SQRT3MUL1000*Va/1000+Vb)/2;
        A=(ua>0)?1:0;
        B=(ub>0)?1:0;
        C=(uc>0)?1:0;
        Sector=A+2*B+4*C;//get the sector number */
       
        switch (Sector)
        {
     case 1:
         Tx=Z;Ty=Y;break;
     case 2:
         Tx=Y;Ty=-X;break;
     case 3:
         Tx=-Z;Ty=X;break;
     case 4:               
         Tx=-X;Ty=Z;break;
     case 5:
         Tx=X;Ty=-Y;break;
     case 6:
         Tx=-Y;Ty=-Z;break;
        }
        Ta=(u16)((TS-Tx-Ty)/4);
        Tb=(u16)(Ta+Tx/2);
        Tc=(u16)(Tb+Ty/2);           //ÆäÖÐTc×î´ó£¬Ta×îС
       
        switch(Sector)
        {
         case 4:
         Sector=SECTOR_1;break;
     case 6:
         Sector=SECTOR_2;break;
     case 2:
         Sector=SECTOR_3;break;
     case 3:               
         Sector=SECTOR_4;break;
     case 1:
         Sector=SECTOR_5;break;
     case 5:
         Sector=SECTOR_6;break;
        }
        /*************************************************/
        switch (Sector)       
        {
         case SECTOR_1:               
         Tcm1=Tc;Tcm2=Tb;Tcm3=Ta;
                 break;
     case SECTOR_2:
         Tcm1=Tb;Tcm2=Tc;Tcm3=Ta;
                 break;
         case SECTOR_3:
        Tcm1=Ta;Tcm2=Tc;Tcm3=Tb;
                break;
     case SECTOR_4:
         Tcm1=Ta;Tcm2=Tb;Tcm3=Tc;
                 break;
         case SECTOR_5:
         Tcm1=Tb;Tcm2=Ta;Tcm3=Tc;
                 break;
     case SECTOR_6:
         Tcm1=Tc;Tcm2=Ta;Tcm3=Tb;
                 break;     
        }
       
        TIM1->CCR1=Tcm1;           //½«»º´æֵд½ø¼Ä´æÆ÷CCR
        TIM1->CCR2=Tcm2;
        TIM1->CCR3=Tcm3;
}

使用特权

评论回复
板凳
这么好的贴子,竟然0回复

使用特权

评论回复
地板
Quanf| | 2020-3-22 22:34 | 只看该作者
zhouhuyin 发表于 2017-4-26 10:11
void SVPWM_CalcDutyCycle(s16 Va,s16 Vb)
{
        signed short X,Y,Z,Tx,Ty;

你好,请问你这部分程序中为什么要对Va = -Va,Vb = -Vb呀。实际Ua,Ubeta不行么?以及下方的switch case中的进行赋值我不是很明白?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

60

帖子

1

粉丝