工具与软件:
我有一个函数、该函数应该通过使用 AQCSFRC 寄存器的连续软件力量来关闭 PWM 输出。
#define PWM_AB_OUTPUTS_OFF 0b0000000000000101
void Disable_PWM(void)
{
//**********************************************
// Force all PWM outputs off via continuous
// software force. This takes effect on the next
// rising edge of TBCLK (15MHZ) since we are
// immediate mode.
//**********************************************
DINT;
EPwm1Regs.AQCSFRC.all = PWM_AB_OUTPUTS_OFF; // force all ePWM1 outputs off
EPwm2Regs.AQCSFRC.all = PWM_AB_OUTPUTS_OFF; // force all ePWM2 outputs off
EPwm3Regs.AQCSFRC.all = PWM_AB_OUTPUTS_OFF; // force all ePWM3 outputs off
EINT;
}
我希望向该寄存器写入0x0005将关闭代码示例中所选 PWM 通道1、2和3的 A 和 B 输出(强制为低电平)。 我还希望、无论 PWM 当时进行了什么其他操作、这都能起作用。 也就是说、即使我要写入普通动作限定器寄存器、更改 PWM 占空比等
我不是在代码中的任何其他位置写入 AQSCFRC 寄存器。
但是、有时它会按预期工作、有时则不工作。
在我调用 Disable_pwm ()函数后查看 AQSCFRC 寄存器,可以看到 EPWM1、2和3.AQSCFRC 寄存器中的0x0005。 对于这些 PWM 通道、这将强制 A 和 B 输出为低电平。 但偶尔、在调用此函数后、我会看到电源在电流限制状态下出现高电流、因此我知道 PWM 开关是接通的。 我不知道实际上是否发生了 PWM。 但我知道有些开关处于打开状态、它们不应该亮起。
仅供参考-我正在运行具有立即重新加载功能的 PWM。 所以新设置应该在下一个 TBCLK 周期的上升沿生效。
下面是我的问题。
1、使用连续力寄存器(AQSCFRC)是否有特殊条件?
2.此寄存器中请求的强制条件是否覆盖 PWM 模块请求的任何其它输出操作? 软件强制事件具有最高优先级。
3.最后,为什么这不起作用(所有的时间)?
谢谢。