工具/软件:Code Composer Studio
您好!
我正在使用全桥逆变器。 我在20kHz 频率下成功地使用正弦表获得了4个 PWM 信号、以实现开环输出。 它使用 ePWM ISR 从正弦表更新占空比。 我目前正在研究闭环解决方案。 我正在尝试使用 ADC 计算输出60Hz 波形的 RMS 值。 当我尝试将 Timer1设置为16.67ms (60Hz)时、我 的 EPWM ISR 将被忽略。 我无法 同时运行两个 ISR。 下面是我的一些代码(主代码和计时器 ISR)、用于查看是否有人可以发现问题:
void main (void)
{
InitSysCtrl();// DSP2833x_sysctrl.c 中的基本内核初始化
EALLOW;
SysCtrlRegs.WDCR= 0x00AF;//重新启用看门狗
EDIS;//0x00AF 要不禁用看门狗、预分频器= 64
DINT;//禁用所有中断
GPIO_SELECT();
Setup_ePWM ();//init of ePWM1A
InitPieCtrl();// PIE 表的基本设置;来自 DSP2833x_PIECTRL.c
InitPieVectTable();// PIE 中的缺省 ISR
InitAdc();
EALLOW;
PieVectTable.TINT0 =&CPU_timer0_ISR;
EDIS;
InitCpuTimer();//基本设置 CPU Timer0、1和2
ConfigCpuTimer (&CpuTimer0、150、833);
CpuTimer0Regs.TCR.bit.TSS = 0;
EALLOW;
PieVectTable.EPWM1_INT =&ePWM_COMPARE_ISR;
EDIS;
PieCtrlRegs.PIEIER1.bit.INTx7=1;
PieCtrlRegs.PIEIER3.bit.INTx1 = 1;
IER |= 1;\
IER |= M_INT1;
EINT;
ERTM;
//配置 ADC
AdcRegs.ADCMAXCONV.ALL = 0;//在 SEQ1上设置1 conv
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x3;//将 ADCINA3设置为第1个 SEQ1转换器
AdcRegs.ADCTRL2.bit.ePWM_SOCA_SEQ1 = 1;//从 ePWM 启用 SOCA 以启动 SEQ1
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1;//启用 SEQ1中断(每个 EOS)
值= 1;
while (1)
{
while (CpuTimer0.InterruptCount = 0)
CpuTimer0.InterruptCount = 0;
EALLOW;
SysCtrlRegs.WDKEY = 0x55;//服务 WD #1
EDIS;
}
}
中断空 CPU_timer0_ISR (空)
{
CpuTimer0.InterruptCount++;
值++;
EALLOW;
SysCtrlRegs.WDKEY = 0xAA;//服务 WD #2
EDIS;
PieCtrlRegs.PIEACX.ALL = PIEACK_Group1;
}
感谢您的任何帮助、
Joe