你好!
在递增/递减计数模式下、是否有一种简单的方法来开始 ePWM 定时器递减计数? 我知道、计时器运行后、可以通过相位控制来实现它、但我更希望从一开始就具有适当的相位关系。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
你好!
在递增/递减计数模式下、是否有一种简单的方法来开始 ePWM 定时器递减计数? 我知道、计时器运行后、可以通过相位控制来实现它、但我更希望从一开始就具有适当的相位关系。
是的、您只能通过相位控制机制来设置方向。 但是、SW 同步强制仅在计数器运行时起作用、如果在初始化时执行此操作、则必须启动计时器、SW 强制同步事件、然后停止计时器。
对于其他任何人来说、这是我的解决方案:
/*********
*设置 PWM 计时器方向-仅在计时器停止时才能正常工作
* arg1:定时器结构的地址(例如 EPwm1Regs)
* arg2:时间的调整(TB_UP=0x1或 TB_DOWN=0x0)
秘书长的报告 /
void pwm_timer_set_dir (volatile struct ePWM_regs * pwm_module、unsigned int dir)
{
//存储计时器上下文
uint16 tmr_CTR = PWM_MODULE->TBCTR;
uint16 tmr_ctl = PWM_MODULE->TBCTL.ALL;
uint32 tmr_pHS = PWM_MODULE->TBPHS.ALL;
//在中间设置计数器,以防止对零或周期事件进行三角运算
PWM_MODULE->TBCTR = PWM_MODULE->TBPRD * 0.5;
PWM_MODULE->TBPHS.bit.TBPHS = PWM_MODULE->TBPRD * 0.5;
//将方向设置为递增计数模式
if (dir =TB_UP)
{
PWM_MODULE->TBCTL.bit.PHSEN = TB_ENABLE;
PWM_MODULE->TBCTL.bit.PHSDIR = TB_UP;
PWM_MODULE->TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;
PWM_MODULE->TBCTL.bit.SWFSYNC = 1;
PWM_MODULE->TBCTL.bit.CTRMODE = TB_FREEZE;
PWM_MODULE->TBCTL.bit.PHSEN = TB_DISABLE;
}
//在递减计数模式中设置方向
if (dir =TB_DOWN)
{
PWM_MODULE->TBCTL.bit.PHSEN = TB_ENABLE;
PWM_MODULE->TBCTL.bit.PHSDIR = TB_DOWN;
PWM_MODULE->TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;
PWM_MODULE->TBCTL.bit.SWFSYNC = 1;
PWM_MODULE->TBCTL.bit.CTRMODE = TB_FREEZE;
PWM_MODULE->TBCTL.bit.PHSEN = TB_DISABLE;
}
//恢复计时器上下文
PWM_MODULE->TBCTR = tmr_CTR;
PWM_MODULE->TBCTL.ALL = tmr_ctl;
PWM_MODULE->TBPHS.ALL = tmr_PHS;
}