This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

请问一下svgen模块

Other Parts Discussed in Thread: CONTROLSUITE

请问svgen输出的Ta,Tb,Tc是占空比还是导通时间,我看程序f28335xpwm.h模块中有下面几句话

(*ePWM[ch1]).CMPA.half.CMPA = _IQmpy(v.HalfPerMax,v.MfuncC1)+ v.HalfPerMax; \
(*ePWM[ch2]).CMPA.half.CMPA = _IQmpy(v.HalfPerMax,v.MfuncC2)+ v.HalfPerMax; \
(*ePWM[ch3]).CMPA.half.CMPA = _IQmpy(v.HalfPerMax,v.MfuncC3)+ v.HalfPerMax; \

那这说明是占空比啊,可怎么会是占空比呢,svgen都不知道epwm周期怎么算占空比啊?

还有一个问题是

_IQmpy(m.HalfPerMax,m.MfuncC1)+ m.HalfPerMax;
其中m.HalfPerMax是Q0,m.MfuncC1是Q24这两个乘完是Q24啊,那Q24和Q0怎么相加啊?

  • haha,

    svgen通过alpha和beta的相电压计算出的是占空比,可以在controlSUITE中找到DMC MATH.pdf文档看说明。这个模块只是计算出比较寄存器和周期寄存器的比值,也就是占空比,这个模块的输出会给PWM MACRO模块,这个模块才是真正跟PWM模块直接连接,该模块的输入的占空比和周期值。

    第二个问题,我认同你。

    Eric

  • 谢谢你的回答,对于第二个问题,TI源码里面就是这么写的啊!!

  • haha,

    我看了v1.3版本的,如下图,通过对比,我觉得应该把_IQmpy(v.HalfPerMax,v.MfuncC1)转成IQ0。

    (*ePWM[ch1]).CMPA.half.CMPA = _IQmpy(v.HalfPerMax,v.MfuncC1)+ v.HalfPerMax;

     

    我看了V1.3版本的,

     

  • 那你的意思就是说这个TI源码有错误啦!!

    _IQmpy(v.HalfPerMax,v.MfuncC1)可以改成_IQmpy24(v.HalfPerMax,v.MfuncC1)可以吗?

  • haha,

    不好意思,我找了IQmpy函数确认了一下。

    _iq _IQmpy( _iq A, _iq B)      IQ Multiplication     Q=GLOBAL_Q

    而例程的函数是

    _IQmpy(v.HalfPerMax,v.MfuncC1)

    如果按照IQmath的语法,应该先把v.HalfPerMax <<24位 转成GLOBAL_Q形式,但是例程没有,相当于把结果往右移了24位,编程IQ0的形式。

    所以不用改。

    不好意思,之前的评论给你造成误解了。

     

    Eric