源代码由以下代码获得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???这个地方设置了有效电平
画了波形了,,为什么不全是高电平有效,,画出来有问题啊