现问题描述:
同时使用ECAP1、ECAP5、ECAP6作为APMW输出,各通道独立;
频率全部配置为10k,仅占空比不同;
配置方式完全一样;
用示波器观察,仅ECAP1的输出复合程序预期,频率和占空比都对;ECAP5、ECAP6波形一致,但频率为9.几k一直在变,占空比也不是我发的那个值;
求指正!!!
配置如下:
//辅助PWM输出初始化
void APWM_init(void)
{
//设定ECAP5/6/1作为辅助PWM1/2/3输出
//设定APWM3
// Setup APWM mode on CAP1, set period and compare registers
InitECap1Gpio();
ECap1Regs.ECCTL2.bit.CAP_APWM = 1; // Enable APWM mode
ECap1Regs.CTRPHS = 0x0; // make phase zero
ECap1Regs.ECCTL2.bit.APWMPOL = APWM_POL; // 0:Active high
ECap1Regs.CAP1 = APWM_PRD; // Set Period value
ECap1Regs.CAP2 = APWM_CMP_INIT; // Set Compare value
ECap1Regs.ECCLR.all = 0x0FF; // Clear pending interrupts
//ECap1Regs.ECEINT.bit.CTR_EQ_CMP = 1; // enable Compare Equal Int
//设定APWM1
// Setup APWM mode on CAP5, set period and compare registers
InitECap5Gpio();
ECap5Regs.ECCTL2.bit.CAP_APWM = 1; // Enable APWM mode
ECap5Regs.CTRPHS = 0x0; // make phase zero
ECap5Regs.ECCTL2.bit.APWMPOL = APWM_POL; // 0:Active high
ECap5Regs.CAP1 = APWM_PRD; // Set Period value
ECap5Regs.CAP2 = APWM_CMP_INIT; // Set Compare value
ECap5Regs.ECCLR.all = 0x0FF; // Clear pending interrupts
//ECap1Regs.ECEINT.bit.CTR_EQ_CMP = 1; // enable Compare Equal Int
//设定APWM2
// Setup APWM mode on CAP6, set period and compare registers
InitECap6Gpio();
ECap6Regs.ECCTL2.bit.CAP_APWM = 1; // Enable APWM mode
ECap6Regs.CTRPHS = 0x0; // make phase zero
ECap6Regs.ECCTL2.bit.APWMPOL = APWM_POL; // 0:Active high
ECap6Regs.CAP1 = APWM_PRD; // Set Period value
ECap6Regs.CAP2 = APWM_CMP_INIT; // Set Compare value
ECap6Regs.ECCLR.all = 0x0FF; // Clear pending interrupts
//ECap1Regs.ECEINT.bit.CTR_EQ_CMP = 1; // enable Compare Equal Int
// Start counters
ECap1Regs.ECCTL2.bit.TSCTRSTOP = 1; // 1:Allow TSCTR to run, start counters
ECap5Regs.ECCTL2.bit.TSCTRSTOP = 1; // 1:Allow TSCTR to run, start counters
ECap6Regs.ECCTL2.bit.TSCTRSTOP = 1; // 1:Allow TSCTR to run, start counters
}
改变占空比函数:
//设定APWM的有效占空比,输入为PWM编号(1-3),以及Q15的有效占空比
void APWM_duty_set(long pwm_num,long r)
{
switch ( pwm_num )
{
//下一周期生效
case 1: //APWM1,对应ECAP5
ECap5Regs.CAP4 = IQmpy(APWM_PRD,r,15) ; // Set Compare value
break;
case 2: //APWM2, 对应ECAP6
ECap6Regs.CAP4 = IQmpy(APWM_PRD,r,15) ; // Set Compare value
break;
case 3: //APMW3, 对应ECAP1
ECap1Regs.CAP4 = IQmpy(APWM_PRD,r,15) ; // Set Compare value
break;
default:
break;
}
return;
}