您好!
我正在尝试了解如何在驱动 PWM 信号时精确控制消隐窗口过程。
我希望能够打开 PWM 信号并立即启用一段时间内的消隐。 稍后、我将禁用消隐、以便信号实际上在第一个 X 时间内具有消隐支持、并且能够在该时间之后正常跳闸。
我无法创建宽度一致的消隐窗口。 我将通过驱动我们用来强制 PWM 跳闸的输入引脚来测试这一点、同时使用此代码来打开驱动器:
/*设置代码*/
ePWM[pParams->ulOutputChannel]->DCTRIPSEL.bit.DCAHCOMPSEL = 0U;
ePWM[pParams->ulOutputChannel]->DCAHTRIPSEL.bit.TRIPINPUT1 = 1U;
ePWM[pParams->ulOutputChannel]-> DCAHTRIPPIPSEL.bit.TCA1U= 1U;ePWM[pIPPUT1 = UPT1u.TCALE]
(笑声)
//启用消隐的//
enable_blank()
{
/**-允许编辑*/
EALLOW;
/**-停止 PWM */
ePWM[pObj->uwChannel]->TBCTL.bit.CTRMODE = 3U;
/**-禁用消隐*/
ePWM[pObj->uwChannel]->DCFCTL.bit.Blanke = 0U;
/**-设置消隐窗口*/
ePWM[pObj->uwChannel]->DCFWINDOW = uwBlankWidth;
/**-启用消隐*/
ePWM[pObj->uwChannel]->DCFCTL.bit.Blanke = 1U;
/**-清除计数器(触发消隐窗口)*/
ePWM[pObj->uwChannel]->TBCTR = 0U;
/**-清除 OneShot 标志以允许开始消隐*/
ePWM[pObj->uwChannel]->TZCLR.bit.DCAEVT1 = 1U;
ePWM[pObj->uwChannel]->TZOSTCLR.bit.DCAEVT1 = 1U;
ePWM[pObj->uwChannel]->TZCLR.bit.OST = 1U;
/**-重新启用 PWM */
ePWM[pObj->uwChannel]->TBCTL.bit.CTRMODE = 0U;
/**-禁用编辑*/
EDIS;
}
但是、信号仅在时间不一致的情况下有效。 消隐持续时间从几微秒到我要达到的最大值。
参考手册规定 DCFCOUNT 寄存器在 TBCTR=0脉冲上加载 DCFWINDOW 值。 手动设置 TBCTR=0是否会触发该脉冲? 我在这里是否遗漏了一些东西、以便更好地控制消隐窗口的确切时序?