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

对于二电平SVPWM源代码的疑问,基于TMS320F2812

源代码由以下代码获得PWM信号,触发IGBT

pwm1.MfuncC1 = (int16)_IQtoIQ15(svgen_dq1.Ta); // MfuncC1 is in Q15
pwm1.MfuncC2 = (int16)_IQtoIQ15(svgen_dq1.Tb); // MfuncC2 is in Q15 pwm1.MfuncC3 = (int16)_IQtoIQ15(svgen_dq1.Tc); // MfuncC3 is in Q15
pwm1.update(&pwm1);

但是我发现上面代码前面有以下几行代码,初始化比较控制寄存器,如下,可以看到ACTR_ACTIVE_STATE=0x666,对应的意思是CMP1、3、5引脚为高有效,CMP2、4、6为低有效。为什么要这样子设置??这样子设计了得到的PWM信号不是反了吗?

if (RunFlag == 1) // running process// run ==1 stop == 0
{
Temp = _IQ16div(_IQ16(FreqRunSet),_IQ16(5000));
rc1.TargetValue = _IQ16toIQ(Temp);

EvaRegs.ACTRA.all = ACTR_ACTIVE_STATE;     // Init ACTRA Register.0x0666

}

else {
rc1.TargetValue = _IQ(0.0);
rc1.RampCtrlMode = StepSpeedCtrlFlag;

}

rookiecalf:

不知道你用的什么平台,什么源代码,pwm的配置与有效电平,计数方式,以及外部电路都相关,可以把所有的因素都考虑进来,试着画一下 波形

源代码由以下代码获得PWM信号,触发IGBT

pwm1.MfuncC1 = (int16)_IQtoIQ15(svgen_dq1.Ta); // MfuncC1 is in Q15
pwm1.MfuncC2 = (int16)_IQtoIQ15(svgen_dq1.Tb); // MfuncC2 is in Q15 pwm1.MfuncC3 = (int16)_IQtoIQ15(svgen_dq1.Tc); // MfuncC3 is in Q15
pwm1.update(&pwm1);

但是我发现上面代码前面有以下几行代码,初始化比较控制寄存器,如下,可以看到ACTR_ACTIVE_STATE=0x666,对应的意思是CMP1、3、5引脚为高有效,CMP2、4、6为低有效。为什么要这样子设置??这样子设计了得到的PWM信号不是反了吗?

if (RunFlag == 1) // running process// run ==1 stop == 0
{
Temp = _IQ16div(_IQ16(FreqRunSet),_IQ16(5000));
rc1.TargetValue = _IQ16toIQ(Temp);

EvaRegs.ACTRA.all = ACTR_ACTIVE_STATE;     // Init ACTRA Register.0x0666

}

else {
rc1.TargetValue = _IQ(0.0);
rc1.RampCtrlMode = StepSpeedCtrlFlag;

}

Rong Zhan:

回复 rookiecalf:

DSP2812,源代码就是上面那个,PWM配置不就是0x666???这个地方设置了有效电平

画了波形了,,为什么不全是高电平有效,,画出来有问题啊

赞(0)
未经允许不得转载:TI中文支持网 » 对于二电平SVPWM源代码的疑问,基于TMS320F2812
分享到: 更多 (0)