ZHCAFI8 July 2025 TDA4VE-Q1
要改变 PWM 占空比,必须向 CMPA 寄存器写入新值。软件很难做到高度确定性的更新,因此 CMPA 寄存器可能在不合适的时刻更新,这会导致非预期的 PWM 占空比,进而在短时间内造成 LED 控制亮度异常或电机转速与扭矩控制失常。为了避免不可预测的更新,应使用影子寄存器更新来代替立即寄存器更新。让我们通过将 PWM 占空比从 20% 更改为 80%,尝试理解立即寄存器更新如何在向上计数模式下导致该问题。
考虑向上计数模式下的 PWM 配置为:当 TBCNT = 0 时输出高电平,当 TBCNT = CMPA 时输出低电平。如果 CMPA 寄存器在一个周期中途更新,根据新的 CMPA 值,PWM 输出可能会在当前周期中早于或晚于预期切换至低电平。这会导致持续一个或多个 PWM 周期的占空比失真。
以下寄存器配置可用于在向上计数模式下生成 20% 的 PWM 占空比。
EPWM_TBPRD = 62500 EPWM_TBCTL.CTRMODE = 0 → Up
count mode EPWM_CMPA = 12500 (= 62500 x 20%) EPWM_CMPCTL.SHDWAMODE = 1 → Immediate
mode
如下图所示,通过更新 CMPA 寄存器使 PWM 占空比达到 80%。
EPWM_CMPA = 50000 (= 62500 × 80%)
图 3-1 是通过逻辑分析仪探测到的 PWM 信号。
图 3-1 探测向上计数模式下更新 CMPA 寄存器期间的 PWM
变化预期占空比直接从 20% 变为 80%,但实际出现了 25% 和 83% 的非预期占空比。
图 3-2 分析向上计数模式下 PWM 占空比从 20% 变为
80%具体分析如下。
这种行为的根本原因在于 CMPA 寄存器的立即更新模式。在此模式下,写入 CMPA 的任何新值都会立即生效 — 即便在周期中间写入亦是如此。由于 PWM 逻辑使用当前 CMPA 值进行比较事件判断,周期中间的变化会导致输出时序错误。这并非硬件缺陷,而是配置上的疏忽。立即更新在某些情况下是有效的,但对于运行过程中的动态占空比调整,这种更新方式并不安全。