songwanjie 发表于 2016-4-20 21:36

SVPWM三次谐波方法

三次谐波注入方法产生是svpwm简单好用,再也不用算xyz,N,t1 t2了.

#define UVW 1
#define VUW 2
#define UWV 3
#define VWU 4
#define WUV 5
#define WVU 6

doublemaxmidmin;
double mid;

void compare( doubleu double v double w )
{
        if( u>= w)
        {
                if( v>= w)
                {
                        if( u>= v)
                        {
                                maxmidmin= UVW;                // u >= v >= w
                        }
                        else
                        {
                                maxmidmin= VUW;                // v >u >= w
                        }
                }
                else
                {
                                maxmidmin= UWV;                // u >= w >v
                }
        }
        else
        {
                if( v>= w)
                {
                                maxmidmin= VWU;                // v >= w >u
                }
                else
                {
                        if( u>= v)
                        {
                                maxmidmin= WUV;                // w >u >=v
                        }
                        else
                        {
                                maxmidmin= WVU;                // w >v >   u
                        }
                }
        }

}


compare( u, v, w );//输入的uvw为 Ualpha 和 Ubeta 经过 clarke 后的 uvw
//正弦的波形       
        switch( maxmidmin){       
                case UVW:
                mid =((u + w) >> 1);
       
                        break;
                case UWV:
                        mid =((u + v) >> 1);
               
                        break;
                case VWU:
                        mid =((v + u) >> 1);
               
                        break;
                case VUW:
                mid =((v + w) >> 1);
                       
                        break;
                case WUV:
                        mid =((w + v) >> 1);
                       
                        break;
                case WVU:
                        mid = ((w + u) >> 1);
                       
                        break;
                default:
                        mid = 0;
                       
                        break;
        }
   

   
    ///////////ta//tb//tc
   
          u += mid;                       
        v += mid;
        w += mid;///马鞍型了

xiaoxiao201005 发表于 2016-4-21 09:25

你这个三次谐波注入是在spwm的基础是注入吗?注入应该注入cos(3x)才对,请问这种的原理是?

songwanjie 发表于 2016-4-21 09:33

xiaoxiao201005 发表于 2016-4-21 09:25
你这个三次谐波注入是在spwm的基础是注入吗?注入应该注入cos(3x)才对,请问这种的原理是?

自己做下仿真对比就知道了

songwanjie 发表于 2016-4-21 09:42

这样比cos3x在单片机中跟快速更容易实现

illusion2012 发表于 2016-4-21 10:08

嗯,这个方法已经get。
我还试过discontinuous PWM,不过不知道为什么低速跑还可以,不过有噪音,高速跑一会就过流了。

xiaoxiao201005 发表于 2016-4-21 10:35

你的Ta Tb Tc怎么求?

songwanjie 发表于 2016-4-21 10:40

illusion2012 发表于 2016-4-21 10:08
嗯,这个方法已经get。
我还试过discontinuous PWM,不过不知道为什么低速跑还可以,不过有噪音,高速跑一 ...

你是跑仿真还是实际测试呢

songwanjie 发表于 2016-4-21 10:42

xiaoxiao201005 发表于 2016-4-21 10:35
你的Ta Tb Tc怎么求?

最后写马鞍型的那里就是

illusion2012 发表于 2016-4-21 10:58

songwanjie 发表于 2016-4-21 10:40
你是跑仿真还是实际测试呢

实际的测试啊{:1_561:}

songwanjie 发表于 2016-4-21 11:01

illusion2012 发表于 2016-4-21 10:58
实际的测试啊

电流环带宽太大了吧,特别是d轴的,
discontinuous PWM是啥玩意

xiaoxiao201005 发表于 2016-4-21 11:12

songwanjie 发表于 2016-4-21 10:42
最后写马鞍型的那里就是

没明白你的意思,你用uvw加上mid得出新的uvw,然后用新的uvw求ta tb tc?

illusion2012 发表于 2016-4-21 11:25

songwanjie 发表于 2016-4-21 11:01
电流环带宽太大了吧,特别是d轴的,
discontinuous PWM是啥玩意

减少PWM开关次数的,可以百度一下,我们这边没法上传图片或者附件,网络限制

陈四川 发表于 2016-4-25 14:44

现在很多svpwm的计算都是采用楼主说的这种方式,也即参考电压加上电压中间值的一半,理论上这和七段式SVPWM是等效的,具体可以看各种文献。
不过楼主贴的代码bug实在太多,根本不适合用于嵌入式代码。

// f32Ua,f32Ub,f32Uc 为输入的正弦电压
// f32UaCmp, f32UbCmp, f32UcCmp为输出的调制波(马鞍波)
// iSQRT3=1/sqrt(3)
void SVPWM(void)
{
        FLOAT32 f32Umid = 0.0f;
           if((f32Ua - f32Ub) * (f32Ub - f32Uc) > 0)
           {
              f32Umid = f32Ub;
           }
           else if((f32Ub - f32Ua) * (f32Ua - f32Uc) >0)
           {
              f32Umid = f32Ua;
           }
           else
           {
              f32Umid = f32Uc;
           }

   f32Umid = f32Umid * 0.5f;

   f32UaCmp = 0.5f + (f32Ua + f32Umid) * iSQRT3;
   f32UbCmp = 0.5f + (f32Ub + f32Umid) * iSQRT3;
   f32UcCmp = 0.5f + (f32Uc + f32Umid) * iSQRT3;
}

xiaoxiao201005 发表于 2016-4-26 12:36

陈四川 发表于 2016-4-25 14:44
现在很多svpwm的计算都是采用楼主说的这种方式,也即参考电压加上电压中间值的一半,理论上这和七段式SVPWM ...

你的Ua Ub Uc是要经过判断扇区计算出来的吧?

陈四川 发表于 2016-4-26 13:32

xiaoxiao201005 发表于 2016-4-26 12:36
你的Ua Ub Uc是要经过判断扇区计算出来的吧?

不用啊,就是dq变换到静止坐标的值

xiaoxiao201005 发表于 2016-4-27 09:52

陈四川 发表于 2016-4-26 13:32
不用啊,就是dq变换到静止坐标的值

如果不是,你这个方法就不用判断扇区了吧?不用扇区直接得到三相的占空比?

车永兴 发表于 2016-11-22 15:46

已入电机控制坑,学习了。

zdc1122 发表于 2016-12-7 11:11

该方法的相关文献能推荐下吗?找了很久没有找到。

windancerhxw 发表于 2016-12-14 10:13

{:1_492:}战略mark一下。学习了,能否提供一个相关文献呢,文献解释的比较浅显,适合我这种基础比较差的。

zimiaoxinghan 发表于 2017-4-15 08:42

一直不断学习中…………
页: [1] 2
查看完整版本: SVPWM三次谐波方法