微风启航 https://bbs.21ic.com/?517067 [收藏] [复制] [RSS] 记载自己在电子开发中的点点滴滴,愿与电子爱好者共同交流学习,分享经验

日志

svpwm计算方法

已有 692 次阅读2014-11-30 16:23 |个人分类:单片机应用|系统分类:单片机| 计算方法, 子程序, SVPWM

写了很多提交的时候说无权发布URL链接什么的,我似乎没发什么,晕。简单写点了。

    SVPWM电压Uout由Uα和Uβ合成,Uout = 210,DETA = 2*3.1415926/360,这里把一个周期分成了360段,每段一度
// 根据Uout的标称值计算ualfa,ubeta子程序
void  calu()
{
        int        i;
        for(i=0;i<360;i++)
        {
                ualfa[i]=Uout*cos(i*DETA);//Alpha轴电压
                ubeta[i]=Uout*sin(i*DETA);//Beta轴电压
        }
}

判断合成电压所在扇区
// 各点的扇区确定子程序
void  SECTOR()
{
        int        i,a,b,c;
        float        vref1,vref2,vref3;
        for(i=0;i<360;i++)
        {
                vref1=ubeta[i];
                vref2=(-ubeta[i]+ualfa[i]*1.732051)/2;        
                vref3=(-ubeta[i]-ualfa[i]*1.732051)/2;        // 计算确定扇区数需要的3个参考量
// vref1、vref2、vref3
                if(vref1>0)                a=1;
                else        a=0;        
                if(vref2>0)                b=1;
                else        b=0;
                if(vref3>0)                c=1;
                else        c=0;
                a=4*c+2*b+a;//
                switch(a){
                case 1:sector[i]=1;break;                        
                case 2:sector[i]=5;break;
                case 3:sector[i]=0;break;
                case 4:sector[i]=3;break;
                case 5:sector[i]=2;break;
                case 6:sector[i]=4;break;
                default:break;
                }                                                // 根据相应的关系确定各个Uout所在的扇区
        }
}

计算三相PWM信号的计数值,结果可以乘系数和平移变换,比如乘个TP把数据压缩一下

K = (Ts*1.732051)/Udc;

for(i=0;i<DataP;i+=1)

        {

                U1=ubeta[i];

        U2=(-ubeta[i]+ualfa[i]*1.732051)/2;     

        U3=(-ubeta[i]-ualfa[i]*1.732051)/2;    // 计算确定扇区数需要的3个参考量

switch(sector[i])

                {

                case 0: T4 = K*U2;T6 = K*U1;T7 = (Ts - T4 - T6)/2;

                            Tu = TP*(T4 + T6 + T7);Tv = TP*(T6 + T7);Tw = TP*(T7);break;


                case 1: T6 = -K*U3;T2 = -K*U2;T7 = (Ts - T2 -T6)/2;

                            Tu = TP*(T6 + T7);Tv = TP*(T2 + T6 + T7);Tw = TP*(T7);break;


                case 2: T2 = K*U1;T3 = K*U3;T7 = (Ts - T2 - T3)/2;

                            Tu = TP*(T7);Tv = TP*(T2 + T3 + T7);Tw = TP*(T3 + T7);break;


            case 3: T3 = -K*U2;T1 = -K*U1;T7 = (Ts - T1 - T3)/2;

                            Tu = TP*(T7);Tv = TP*(T3 + T7);Tw = TP*(T1 + T3 + T7);break;


                case 4: T1 = K*U3;T5 = K*U2;T7 = (Ts - T1 - T5)/2;

                            Tu = TP*(T5 + T7);Tv = TP*(T7);Tw = TP*(T1 + T5 + T7);break;


                case 5: T5 = -K*U1;T4 = -K*U3;T7 = (Ts - T4 - T5)/2;

                            Tu = TP*(T4 + T5 + T7);Tv = TP*(T7);Tw = TP*(T5 + T7);break;


                default: break;

                }


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)