TI中文支持网
TI专业的中文技术问题搜集分享网站

F28335电机矢量控制例程 svpwm生成中的一个问题

在TI 给的28335的例程里,SVGENDQ_MACRO 中

if         (v.VecSector==1 || v.VecSector==4)                  \      

     {     v.Ta= v.tmp2;               \         

           v.Tb= v.tmp1-v.tmp3;             \         

           v.Tc=-v.tmp2;              \       }                      \                        \    

else if  (v.VecSector==2 || v.VecSector==5)                                   \     

    {     v.Ta= v.tmp3+v.tmp2;             \        

          v.Tb= v.tmp1;               \      

          v.Tc=-v.tmp1;              \       }                      \                        \    

 else                                                                        \      

   {     v.Ta= v.tmp3;               \         

        v.Tb=-v.tmp3;               \        

        v.Tc=-(v.tmp1+v.tmp2);            \       }                      \      

 

我没看明白这段程序,按照原理的话,扇区1的 T1=-Z,T2=X,扇区4就应该是T1=-X,T2=Z  而这里扇区1和4都是同样的Ta、Tb、Tc  值我就不太懂了,而且上文给出的tmp1、tmp2、tmp3 在原理中旧事X,Y,Z的值, 而Ta、Tb、Tc  在下面的程序中直接赋给比较寄存器当作PWM占空比了, 中间的关系应该是

v.Tb = _IQmpy(_IQ(0.5),(_IQ(1)-t1-t2)); // tbon = (1-t1-t2)/2

v.Ta = v.Tb+t1; // taon = tbon+t1

 v.Tc = v.Ta+t2; // tcon = taon+t2

(上面3行是2812程序里给的此步骤的例程,为什28335中没有这一步了呢?)

 

刚刚接触dsp和svpwm 没有人带,自己资质也低,问题要是问的太蠢请各位前辈见谅。感谢之前的前辈们热心的帮助!

Young Hu:

这个模块就直接用吧,把时间放在其他更重要的算法上

在TI 给的28335的例程里,SVGENDQ_MACRO 中

if         (v.VecSector==1 || v.VecSector==4)                  \      

     {     v.Ta= v.tmp2;               \         

           v.Tb= v.tmp1-v.tmp3;             \         

           v.Tc=-v.tmp2;              \       }                      \                        \    

else if  (v.VecSector==2 || v.VecSector==5)                                   \     

    {     v.Ta= v.tmp3+v.tmp2;             \        

          v.Tb= v.tmp1;               \      

          v.Tc=-v.tmp1;              \       }                      \                        \    

 else                                                                        \      

   {     v.Ta= v.tmp3;               \         

        v.Tb=-v.tmp3;               \        

        v.Tc=-(v.tmp1+v.tmp2);            \       }                      \      

 

我没看明白这段程序,按照原理的话,扇区1的 T1=-Z,T2=X,扇区4就应该是T1=-X,T2=Z  而这里扇区1和4都是同样的Ta、Tb、Tc  值我就不太懂了,而且上文给出的tmp1、tmp2、tmp3 在原理中旧事X,Y,Z的值, 而Ta、Tb、Tc  在下面的程序中直接赋给比较寄存器当作PWM占空比了, 中间的关系应该是

v.Tb = _IQmpy(_IQ(0.5),(_IQ(1)-t1-t2)); // tbon = (1-t1-t2)/2

v.Ta = v.Tb+t1; // taon = tbon+t1

 v.Tc = v.Ta+t2; // tcon = taon+t2

(上面3行是2812程序里给的此步骤的例程,为什28335中没有这一步了呢?)

 

刚刚接触dsp和svpwm 没有人带,自己资质也低,问题要是问的太蠢请各位前辈见谅。感谢之前的前辈们热心的帮助!

fred cong:

前辈,我的课题就是 一种新式svpwm的算法,我会按照新的算法对TI 的SVGEN 进行一点小改动,然后对比一下,这个问题部攻克,我改都没法改……

在TI 给的28335的例程里,SVGENDQ_MACRO 中

if         (v.VecSector==1 || v.VecSector==4)                  \      

     {     v.Ta= v.tmp2;               \         

           v.Tb= v.tmp1-v.tmp3;             \         

           v.Tc=-v.tmp2;              \       }                      \                        \    

else if  (v.VecSector==2 || v.VecSector==5)                                   \     

    {     v.Ta= v.tmp3+v.tmp2;             \        

          v.Tb= v.tmp1;               \      

          v.Tc=-v.tmp1;              \       }                      \                        \    

 else                                                                        \      

   {     v.Ta= v.tmp3;               \         

        v.Tb=-v.tmp3;               \        

        v.Tc=-(v.tmp1+v.tmp2);            \       }                      \      

 

我没看明白这段程序,按照原理的话,扇区1的 T1=-Z,T2=X,扇区4就应该是T1=-X,T2=Z  而这里扇区1和4都是同样的Ta、Tb、Tc  值我就不太懂了,而且上文给出的tmp1、tmp2、tmp3 在原理中旧事X,Y,Z的值, 而Ta、Tb、Tc  在下面的程序中直接赋给比较寄存器当作PWM占空比了, 中间的关系应该是

v.Tb = _IQmpy(_IQ(0.5),(_IQ(1)-t1-t2)); // tbon = (1-t1-t2)/2

v.Ta = v.Tb+t1; // taon = tbon+t1

 v.Tc = v.Ta+t2; // tcon = taon+t2

(上面3行是2812程序里给的此步骤的例程,为什28335中没有这一步了呢?)

 

刚刚接触dsp和svpwm 没有人带,自己资质也低,问题要是问的太蠢请各位前辈见谅。感谢之前的前辈们热心的帮助!

fred cong:

HI xiaoming liu  :

     请问您 扇区选择的部分我已经看懂了,但是时间计算上 我总觉得扇区2与4,1与5、3与6之间的 T1、T2是互换位置并取反,我无法从程序中找到相应的代码,还请您多指教!

在TI 给的28335的例程里,SVGENDQ_MACRO 中

if         (v.VecSector==1 || v.VecSector==4)                  \      

     {     v.Ta= v.tmp2;               \         

           v.Tb= v.tmp1-v.tmp3;             \         

           v.Tc=-v.tmp2;              \       }                      \                        \    

else if  (v.VecSector==2 || v.VecSector==5)                                   \     

    {     v.Ta= v.tmp3+v.tmp2;             \        

          v.Tb= v.tmp1;               \      

          v.Tc=-v.tmp1;              \       }                      \                        \    

 else                                                                        \      

   {     v.Ta= v.tmp3;               \         

        v.Tb=-v.tmp3;               \        

        v.Tc=-(v.tmp1+v.tmp2);            \       }                      \      

 

我没看明白这段程序,按照原理的话,扇区1的 T1=-Z,T2=X,扇区4就应该是T1=-X,T2=Z  而这里扇区1和4都是同样的Ta、Tb、Tc  值我就不太懂了,而且上文给出的tmp1、tmp2、tmp3 在原理中旧事X,Y,Z的值, 而Ta、Tb、Tc  在下面的程序中直接赋给比较寄存器当作PWM占空比了, 中间的关系应该是

v.Tb = _IQmpy(_IQ(0.5),(_IQ(1)-t1-t2)); // tbon = (1-t1-t2)/2

v.Ta = v.Tb+t1; // taon = tbon+t1

 v.Tc = v.Ta+t2; // tcon = taon+t2

(上面3行是2812程序里给的此步骤的例程,为什28335中没有这一步了呢?)

 

刚刚接触dsp和svpwm 没有人带,自己资质也低,问题要是问的太蠢请各位前辈见谅。感谢之前的前辈们热心的帮助!

xiaoming liu:

你用倒三角计数的公式去推导,就会发现。

在TI 给的28335的例程里,SVGENDQ_MACRO 中

if         (v.VecSector==1 || v.VecSector==4)                  \      

     {     v.Ta= v.tmp2;               \         

           v.Tb= v.tmp1-v.tmp3;             \         

           v.Tc=-v.tmp2;              \       }                      \                        \    

else if  (v.VecSector==2 || v.VecSector==5)                                   \     

    {     v.Ta= v.tmp3+v.tmp2;             \        

          v.Tb= v.tmp1;               \      

          v.Tc=-v.tmp1;              \       }                      \                        \    

 else                                                                        \      

   {     v.Ta= v.tmp3;               \         

        v.Tb=-v.tmp3;               \        

        v.Tc=-(v.tmp1+v.tmp2);            \       }                      \      

 

我没看明白这段程序,按照原理的话,扇区1的 T1=-Z,T2=X,扇区4就应该是T1=-X,T2=Z  而这里扇区1和4都是同样的Ta、Tb、Tc  值我就不太懂了,而且上文给出的tmp1、tmp2、tmp3 在原理中旧事X,Y,Z的值, 而Ta、Tb、Tc  在下面的程序中直接赋给比较寄存器当作PWM占空比了, 中间的关系应该是

v.Tb = _IQmpy(_IQ(0.5),(_IQ(1)-t1-t2)); // tbon = (1-t1-t2)/2

v.Ta = v.Tb+t1; // taon = tbon+t1

 v.Tc = v.Ta+t2; // tcon = taon+t2

(上面3行是2812程序里给的此步骤的例程,为什28335中没有这一步了呢?)

 

刚刚接触dsp和svpwm 没有人带,自己资质也低,问题要是问的太蠢请各位前辈见谅。感谢之前的前辈们热心的帮助!

fred cong:

回复 xiaoming liu:

xiaoming liu  前辈,您说的这个倒三角计数公式 我怎么没听过呢? 能指点一下吗?

在TI 给的28335的例程里,SVGENDQ_MACRO 中

if         (v.VecSector==1 || v.VecSector==4)                  \      

     {     v.Ta= v.tmp2;               \         

           v.Tb= v.tmp1-v.tmp3;             \         

           v.Tc=-v.tmp2;              \       }                      \                        \    

else if  (v.VecSector==2 || v.VecSector==5)                                   \     

    {     v.Ta= v.tmp3+v.tmp2;             \        

          v.Tb= v.tmp1;               \      

          v.Tc=-v.tmp1;              \       }                      \                        \    

 else                                                                        \      

   {     v.Ta= v.tmp3;               \         

        v.Tb=-v.tmp3;               \        

        v.Tc=-(v.tmp1+v.tmp2);            \       }                      \      

 

我没看明白这段程序,按照原理的话,扇区1的 T1=-Z,T2=X,扇区4就应该是T1=-X,T2=Z  而这里扇区1和4都是同样的Ta、Tb、Tc  值我就不太懂了,而且上文给出的tmp1、tmp2、tmp3 在原理中旧事X,Y,Z的值, 而Ta、Tb、Tc  在下面的程序中直接赋给比较寄存器当作PWM占空比了, 中间的关系应该是

v.Tb = _IQmpy(_IQ(0.5),(_IQ(1)-t1-t2)); // tbon = (1-t1-t2)/2

v.Ta = v.Tb+t1; // taon = tbon+t1

 v.Tc = v.Ta+t2; // tcon = taon+t2

(上面3行是2812程序里给的此步骤的例程,为什28335中没有这一步了呢?)

 

刚刚接触dsp和svpwm 没有人带,自己资质也低,问题要是问的太蠢请各位前辈见谅。感谢之前的前辈们热心的帮助!

user5283999:

回复 fred cong:

您好,前辈这段程序您看懂了吗?能不能帮忙解释一下,真的很急,看了很久了仍然看不懂,谢谢了

赞(0)
未经允许不得转载:TI中文支持网 » F28335电机矢量控制例程 svpwm生成中的一个问题
分享到: 更多 (0)