我正在使用具有单面调制功能的 Delfino F28335 HRPWM 外设。 对于我的应用、我需要更改 PWM 载波。 即 TBPRD 寄存器中的值大约为150kHz 至300kHz、具体取决于外部控制消息。 这种变化我有一个问题、在少数情况下、其中一个 PWM 会停止工作。 我使用三个 HRPWM、通常在变化后牵引它们正常工作、其中一个每4-5次停止调制。 这种情况不规律地发生、似乎取决于当前的占空比值。 这一问题似乎还与以下事实有关:有问题的 PWM 具有比其他两个更高的高频成分、从而导致更快地更改占空比值。 占空比由基于 McBSP 使用 DMA 更新的同步填充整数阵列的中断过程加载。
代码片段–中断设置部分、ISR_Run 是一个汇编程序、用于计算和馈送 EPWM 和 HRPWM 占空比/边沿位置:
EALLOW;
PieVectTable.EPWM1_INT =&ISR_Run; //映射中断
EDIS;
PieCtrlRegs.PIEIER3.bit.INTx1 = 1; // PIE 电平启用、Grp3 / Int1
EPwm1Regs.ETSEL.bit.INTSEL = ET_CTRL_CMPB; // CMPB 事件上的 INT
EPwm1Regs.ETSEL.bit.INTEN = 1; //启用 INT
EPwm1Regs.ETPS.bit.INTPRD = et_1st; //在每个事件上生成 INT
//启用外设、全局 INT 和更高优先级的实时调试事件:
IER |= M_INT3; //启用连接到 EPWM1-6 INT 的 CPU INT3:
EINT; //启用全局中断 INTM
ERTM; //启用全局实时中断 DBGM
PWM 载波值的变化目前只是简单的分配:
(* ePWM[1]).TBPRD =(prd);
(* ePWM[2]).TBPRD =(PRD);
(* ePWM[3]).TBPRD =(PRD);
(* ePWM[4]).TBPRD =(PRD);
(* ePWM[5]).TBPRD =(prd);
(* ePWM[6]).TBPRD =(PRD);
为了消除这一问题,我应该做些什么? 也许应该在占空比改变之前重新配置一些 PWM 寄存器或执行 PWM 中断? 我已经做了一些不同的变通办法,但目前没有成功。
Pawel