您好!
我正在尝试了解如何在驱动 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是否会触发该脉冲? 我在这里是否遗漏了一些东西、以便更好地控制消隐窗口的确切时序?