工具与软件:
各位专家、您好!
我有一个应用采用1类 ePWM、以向上/向下双向计数模式运行、必须精确控制脉冲宽度。 脉冲必须以 PRD 为中心以实现同步、因此使用向上计数模式会出现问题。
EPWMxA 在 CMPA 匹配递增计数时变为高电平、在 CMPA 递减计数时变为低电平。 HRPWM 在 CMPA 上运行、仅在下降沿上、因为 MEP 只能延迟脉冲转换。
在向上/向下计数模式下、T_PWM = 2 * PRD * T_TBCLK。
由于2倍乘法器、HRPWM 自动转换在此应用中无法正常工作:CMPA 的小数部分代表2 * T_TBCLK 的小数部分。 当小数部分为0.999999时、CMPAHR 中需要2个 MEP_SCALE_FACTOR 微步进、但自动转换将产生1个 MEP_SCALE_FACTOR。
禁用自动转换的情况下、我在代码中执行所有计算、并以一条指令写入32位 CMPA:CMPAHR 寄存器。
脉冲宽度设置正确、一切正常工作、但有一点除外:
在写入 CMPA:CMPAHR 寄存器时、 TBCTR=0附近会出现寄生干扰。 它恰好是一个 T_TBCLK 或一个 T_SYSCLK 宽。 然后、PWM 正常运行、直到下一次 CMPA 更新。 似乎只有当 CMPA 的粗略部分发生变化时才会出现干扰。
LOADAMODE 和 HRLOAD 均设置为根据论坛上的说明从 PRD 和零上的影子加载。 更改这些设置无效-当 CMPA/粗调更改时、干扰始终存在。
启用 AUTOCONV 后、波形是干净的、但分数占空比是应有值的一半、因为只有脉冲的下降沿会延迟、自动转换不考虑向上/向下计数模式。
禁用 HRPWM 后、不会出现干扰。
有什么建议吗?
