打印

SVPWM波形不完整

[复制链接]
2342|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
figo20042005|  楼主 | 2013-4-7 09:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
以前用SPWM方式做电机的变频控制,现在改成SVPWM方式,用定点运算。结果SVPWM波形不完整,老是在3每30度(即30度,60度,90度.....)的区域没有波形或偶尔有一点波形,反正波形不完整,求大神指点下这是什么原因造成的

相关帖子

沙发
airwill| | 2013-4-7 14:43 | 只看该作者
是不是在峰值点附件, 小脉宽被你软件屏蔽掉了.
或者小脉冲被外部驱动电路(由于驱动延迟) "忽略" 掉了.

使用特权

评论回复
板凳
figo20042005|  楼主 | 2013-4-8 09:13 | 只看该作者
好像不是硬件上的问题,以前SPWM都好着呢,昨天改了改角度又脉宽少的严重了。
void SPWMacc(void)
{
           unsigned long int temp,Theta_temp;
    unsigned int sin_angle1,sin_angle2;
    unsigned int t1,t2,t0;
    unsigned int PDC11,PDC12,PDC13;

    if(_PWM1IF==1)
    {
        getAD();
        _PWM1IF=0;

        K=1879;               //k=(65536/357);184 k=3.67*Q9
        Fref=(40*Q8);
        M=51;
       // Fs=80*Q7;
        //M=0.2*Q8;                //0.4*q15=13107  

        temp=(unsigned long int)(K*Fref);
        Theta=Theta+(unsigned int)(temp>>17);

        phase=Theta/10924;

//t1,t2,t0
        Theta_temp=Theta;
        sin_angle1=sin_angle(Theta);
        temp=(unsigned long int)(M*sin_angle1);
        temp=(unsigned long int)(temp>>6);
        temp=(unsigned long int)(temp*DUTY);
        t1=(unsigned int)(temp>>17);
        
        Theta_temp=10922-Theta;
        sin_angle2=sin_angle(Theta);
        temp=(unsigned long int)(M*sin_angle2); //M,q15
        temp=(unsigned long int)(temp>>6);
        temp=(unsigned long int)(temp*DUTY);
        t2=(unsigned int)(temp>>17);

                t0=(DUTY-t1-t2)>>1;
                                   PDC11=t0;
                PDC12=t2+t0;
                PDC13=t2+t0+t1;

        
//写占空比
                switch(phase)
                {        case 0:
                                PDC1=PDC13;
                                PDC2=PDC12;
                                PDC3=PDC11;
                                    break;
                        case 1:
                                PDC1=PDC12;
                                PDC2=PDC13;
                                PDC3=PDC11;
                                    break;
                        case 2:
                                PDC1=PDC11;
                                PDC2=PDC13;
                                PDC3=PDC12;
                                    break;
                        case 3:
                                PDC1=PDC11;
                                PDC2=PDC12;
                                PDC3=PDC13;
                                    break;
                        case 4:
                                PDC1=PDC12;
                                PDC2=PDC11;
                                PDC3=PDC13;
                                    break;
                        case 5:
                                PDC1=PDC13;
                                PDC2=PDC11;
                                PDC3=PDC12;
                                    break;
                        default:
                                break;
                }
      
    }
}

unsigned int sin_angle(unsigned int angle)
{
    unsigned int temp;
        if(angle>=32768)
        {
       angle=angle-32768;
        }
        else
    {
           angle=32768-angle;
        }

    temp=angle/273;
    temp=sintable[temp];
    return temp;
}

程序这样写的,现在就是不知道为什么会出现少波形的错误呢

使用特权

评论回复
地板
airwill| | 2013-4-8 09:21 | 只看该作者
可否上个图?

使用特权

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

本版积分规则

个人签名:need to study

16

主题

1576

帖子

3

粉丝