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.
您好!
我将 F28388D 用于我们的项目。
是否可以在一个 PWM 周期内使用写入 CMPA 的两个新值重新加载 PWM 输出两次。
遗憾的是、我尝试实现这一点、结果显示 PWM 输出在一个 PWM 周期内只重新加载一次。
由于我的计数模式被配置为递增-递减、 一个 PWM 周期意味着:一个 PWM 周期= 2 x TBPRD×TTBCLK。
以下是我的实验环境:
-向上/向下计数模式
{EPwm1Regs.TBCTL.bit.CTRMODE = 2U;}
-启用 PWM 中断事件:时基计数器等于零或周期(TBCTR= 0x00或 TBCTR = TBPRD)。
{EPwm1Regs.ETSEL.bit.INTSEL = 3U;}
-来自影子选择模式的有源计数器比较 A (CMPA)加载: 在 CTR = 0或 CTR = PRD 时
{EPwm1Regs.CMPCTL.bit.LOADAMODE =2U;}
-将占空比设置为 CMPA,它在递增计数期间的作用是0.5*周期,在 PWM 中断递减计数期间的作用是0.1*周期
{status = EPwm1Regs.TBSTS.bit.CTRDIR;
如果(1u=status)
{m_set = 0.1f;}
如果(0U=STATUS)则为其他值
{mu = 0.5F;}
否则{}
}
请查找随附的 PWM 波形和具有两次重新加载 PWM 的仿真结果以进行比较。
是的、可以在每个 PWM 周期中加载两次 CMPA (从零到 PRD 到零)。
但您必须在零事件之前写入第一个值、然后在零事件和 PRD 事件之间写入第二个值。
NIMA
您好!
感谢你的答复。
根据我的理解,它是通过以下 C 代码实现的:“写入零事件之前的第一个值,然后写入零事件和 PRD 事件之间的第二个值”。
在时基计数器的计时等于零或周期生成的 PWM 中断例程中、以下 C 代码正在运行。
使用此 C 源,第一个零之前的值应为0.5*周期,第二个介于零和 PRD 之间的值应为0.1*周期。
但是,从 PWM 波形可以看出,只有0.5*个周期被执行。
{
STATUS = EPwm1Regs.TBSTS.bit.CTRDIR;
如果(1u=status)
{m_set = 0.1*句点;}
如果(0U=STATUS)则为其他值
{mu = 0.5*周期;}
否则{}
}
这是相关的寄存器配置。
-启用高分辨率死区、占空比和相位控制
-向上/向下计数模式
{EPwm1Regs.TBCTL.bit.CTRMODE = 2U;}
-启用 PWM 中断事件:时基计数器等于零或周期(TBCTR= 0x00或 TBCTR = TBPRD)。
{EPwm1Regs.ETSEL.bit.INTSEL = 3U;}
-来自影子选择模式的有源计数器比较 A (CMPA)加载:在 CTR = 0或 CTR = PRD 时
{EPwm1Regs.CMPCTL.bit.LOADAMODE =2U;}
我希望就此问题提出任何建议。
此致、
文京
您的 CMPA 是否处于影子加载模式?
您能否在代码中仔细检查上述问题?
你好、Nima
我是 温京的同事。
我代表她回答。
EPwm1Regs.TBCTL.bit.PRDLD = 0;
0:周期寄存器(TBPRD)从其影子寄存器加载
当时基计数器 TBCTR 等于零和/或同步时
由 TBCTL2[PRDLDSYNC]位确定的事件。
对 TBPRD 寄存器的写/读操作将访问影子寄存器
EPwm1Regs.TBCTL2.bit.PRDLDSYNC=0;
PRDLDSYNC
影子到活动周期寄存器在 SYNC 事件上加载
00:TBPRD 的影子到活动加载仅在 TBCTR = 0时发生
(与传统相同)。
01:当 TBCTR = 0时、TBPRD 的影子到活动加载都会发生
以及同步发生的时间。
您能告诉我们 PRDLDSYNC 上应该有什么值 吗?
此致、
Hidehiko
00和01均适用于 PRDLDSYNC。
PRDLD=0也是正确的。
您的预发布版本仅加载到 TBCTR=0上... 因此、您不能有两个更新。 您可以有两个 CMPA/B 更新...
> 00和01均适用于 PRDLDSYNC
负载条件
只有 当 TBCTR = 0时、PRDLDSYNC=00
当 TBCTR = 0 和 SYNC 发生时、PRDLDSYNC=01。
当 接收到 SYNC 时、PRDLDSYNC=10 b。
PRDLDSYNC=01
我们应该在零事件之前写入第一个值、
然后是零和 PRD 事件之间的第二个值。
在这种情况下,占空比在载波周期内更新两次(计数器0 ->顶部-> 0之间)。
此致、
Hidehiko
同样、CMPA/B 的占空比值可在一个 PWM 周期中改变两次。 不是周期。 周期只能在 TCBTR=0时改变。 那么、每个 PWM 周期一次。
NIMA
你好、Nima
很抱歉耽误你的反馈。
CMPA 处于影子加载模式。
我原来的问题是“在一个 PWM 周期中 CMPA/B 的占空比值可以改变两次。
现在、我已经确认它工作正常。
我意识到:
如果通过 EPwm1Regs.HRPCTL.bit.HRPE = 1U 启用高分辨率周期功能;
在 TBCTR=0时、占空比值只能被载入一次。
如果高分辨率周期被 Epwm1Regs.HRPCTL.bit.HRPE 禁用= 0U;
该占空比值可以加载两次。
这是否意味着如果在 PWM 周期中使用两次占空比更新、则必须禁用 HR 周期功能。
此致、
文京
精确地。 如果使用 HRPWM 模式、则每个 PWM 周期只能更新一次占空比。 您在非 HR 模式下的第二个阴影现在由 HR 模式内部使用、因此您无法将其用于应用。
请单击绿色的已验证答案按钮。
NIMA
你好、Nima、
感谢您的回答。
“使用 HRPWM 模式”是否意味着 HR 周期控制已启用?
如果是、遵守我的理解是否正确?
将寄存器配置为:
Epwm1Regs.HRPCTL.bit.HRPE = 1U;/** HR 周期控制被启用**/
EPwm1Regs.HRCNFG.bit.HRLOAD = 2U;/** CMPAHR 影子值在 CTR = 0或 CTR = PRD 上加载**/
但结果是 CMPA 影子值仅在 CTR=ZERO 时加载到活动寄存器中。
请看一下其他问题吗?
1.启用 HR 周期控制并使用 TRREM 时、
当 TBPRHR = 0时、HR 相位控制工作正常、
当 TBPRHR!= 0时、HR Phase 控件出现抖动、TBPRHR 值似乎越高、抖动越大。
您能告诉我原因吗?
2、如果禁用 HR 周期控制、HR 占空比控制(CMPAHR)是否不起作用?
此致、
文京
正确! CTR=PRD 被保留用于内部运行。
使用 TBPHSHR 时、需要确保不要在每个 PWM 周期同步。
它应该在 HRPRD 被禁用时工作。 实际上、如果不需要高分辨率周期、建议禁用它并仅使用小时占空比。