主要是ecap模块的问题。
我想用f28035的ecap模块捕捉电网频率,ecap模块的配置参照官方例程:Example_2803xECap_Capture_Pwm来弄的,烧录后实测也成功捕捉到电网频率。
但是我把ecap函数添加进主函数后就捕捉不到了,后来一步步排除,发现把epwm模块
(SetEPWM1(); // 初始化ePWM1
怀疑是epwm模块和ecap模块有什么不可言状的冲突,但是找了半天也没找到,希望官方人员帮忙解决问题。
谢谢。
另附代码如下:
void main(void)
{
InitSysCtrl();
// SetGpio(); // Initialize GPIO
InitEPwm1Gpio();
InitEPwm2Gpio();
InitECap1Gpio();
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
EALLOW;
PieVectTable.EPWM1_INT = &epwm1_isr;
PieVectTable.EPWM2_INT = &epwm2_isr;
PieVectTable.ECAP1_INT = &ecap1_isr;
PieVectTable.ADCINT1 = &adc_isr;
EDIS;
InitAdc(); // For this example, init the ADC
AdcOffsetSelfCal();
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0; // 停止所有ePWM时钟
EDIS;
InitECapture1(); //Cap1功能初始化
SetEPWM1(); // 初始化ePWM1
SetEPWM2(); // 初始化ePWM2
InitADC();
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1; // 启动所有ePWM时钟
EDIS;
IER |= M_INT1+M_INT3+M_INT4; // Enable CPU Interrupt 1
PieCtrlRegs.PIEIER1.bit.INTx1 = 1; // Enable INT 1.1 in the PIE
PieCtrlRegs.PIEIER3.bit.INTx1 = 1; //使能PWM1中断
PieCtrlRegs.PIEIER3.bit.INTx2 = 1; //使能PWM2中断
PieCtrlRegs.PIEIER4.bit.INTx1 = 1; //使能ECAP1中断
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
LoopCount = 0;
ConversionCount = 0;
for(;;)
{
LoopCount++;
// EPwm1Regs.CMPA.half.CMPA = (8.6 / ((Ud_REG[0] * 3.3 / 4095) / 0.04782)) * TB_PERIOD;
// EPwm2Regs.CMPA.half.CMPA = (8.6 / ((Ud_REG[0] * 3.3 / 4095) / 0.04782)) * TB_PERIOD;
EPwm2Regs.CMPA.half.CMPA = (2 * ((Voltage3[0] * 3.3 / 4095) * 59.64 + 82.59) + 3.5) / ((Ud_REG[0] * 3.3 / 4095) / 0.04782 * 26) * TB_PERIOD; //110V使用
EPwm1Regs.CMPA.half.CMPA = (2 * ((Voltage3[0] * 3.3 / 4095) * 59.64 + 82.59) + 3.5) / ((Ud_REG[0] * 3.3 / 4095) / 0.04782 * 26) * TB_PERIOD; //110V使用
// EPwm2Regs.CMPA.half.CMPA = (2 * ((Voltage3[0] * 3.3 / 4095) * 59.64 + 82.59) + 3.5) / ((Ud_REG[0] * 3.3 / 4095) / 0.04782 * 26) * TB_PERIOD; //110V使用
// EPwm1Regs.CMPA.half.CMPA = (2 * ((Voltage3[0] * 3.3 / 4095) * 59.64 + 82.59) + 3.5) / ((Ud_REG[0] * 3.3 / 4095) / 0.04782 * 52) * TB_PERIOD; //220V使用
// EPwm2Regs.CMPA.half.CMPA = (2 * ((Voltage3[0] * 3.3 / 4095) * 59.64 + 82.59) + 3.5) / ((Ud_REG[0] * 3.3 / 4095) / 0.04782 * 52) * TB_PERIOD; //220V使用
// nCAP1=ECap1Regs.CAP1;
}