4. ePWM模块详解:时基周期寄存器TBPRD,计数模式,影子寄存器与立即装载

各位同学,欢迎来到第四章。前面几章我们把SVPWM的数学原理和整体框架聊清楚了。从这一章开始,咱们要真正动手碰寄存器了。

ePWM模块是C2000系列生成PWM波形的核心外设。说句实话,我刚开始接触C2000时,看到ePWM那几十个寄存器,头都大了。但后来我发现,只要抓住三个关键点——时基周期、计数模式、影子装载机制——整个模块的脉络就清晰了。

今天我们就把这三点彻底讲透。

4.1 时基周期寄存器TBPRD:决定开关频率

TBPRD,全称Time-Base Period Register。它的作用很简单:设定PWM波形的周期。

在SVPWM中,我们通常使用对称三角波作为载波。TBPRD的值决定了三角波的峰值,也就决定了PWM的开关频率。

计算公式如下:

f_PWM = f_TBCLK / (2 × TBPRD)

举个例子。假设系统时钟SYSCLKOUT为100MHz,ePWM模块的时基时钟TBCLK经过预分频后也是100MHz。如果我们想要20kHz的开关频率:

TBPRD = 100MHz / (2 × 20kHz) = 2500

所以TBPRD就设为2500。

我的经验:TBPRD的值不要设得太小。我曾在项目中为了追求高频,把TBPRD设到500以下,结果发现PWM分辨率严重不足,电机低速运行时电流纹波大得吓人。一般来说,TBPRD保持在1000以上比较稳妥。

4.2 计数模式:三种模式,各有千秋

ePWM模块支持三种计数模式。咱们一个一个看。

计数模式 波形形状 典型应用
递增模式(Up Count) 锯齿波 非对称PWM,DC-DC变换器
递减模式(Down Count) 锯齿波(反向) 非对称PWM,特殊时序需求
增减模式(Up-Down Count) 对称三角波 SVPWM、三相逆变器

在SVPWM中,我们只用增减模式。为什么?

因为对称三角波在波峰和波谷都会产生中断事件。波峰中断用于更新占空比,波谷中断用于采样电流。这种对称结构天然适合SVPWM的七段式或五段式发波策略。

配置增减模式的代码很简单:

EPwm1Regs.TBCTL.bit.CTRMODE = 0x02;  // 增减模式
EPwm1Regs.TBCTL.bit.PHSEN = 0;       // 禁止相位同步
EPwm1Regs.TBCTL.bit.SYNCOSEL = 0;    // 同步信号源选择

关键点:增减模式下,计数器从0递增到TBPRD,再从TBPRD递减回0。一个完整的PWM周期包含两次计数过程。所以开关频率的计算公式中,分母是2 × TBPRD。

4.3 影子寄存器与立即装载:时机决定一切

这是ePWM模块最容易踩坑的地方。我当年就吃过亏。

影子寄存器(Shadow Register),说白了就是一个缓冲器。你写入寄存器的值,不会立刻生效,而是先存在影子寄存器里。等到某个特定时刻(比如计数器归零或达到周期值),影子寄存器的内容才会被装载到活动寄存器中。

为什么要这么设计?

你想想看,PWM波形是连续产生的。如果你在波形输出的中途修改了占空比,波形可能会突然跳变,产生毛刺。严重的话,可能烧毁功率管。

影子寄存器就是为了避免这种情况。它保证所有参数在安全的时间点统一更新。

3.3.1 装载模式的选择

ePWM模块提供两种装载模式:

  • 立即装载(Immediate Load):写入寄存器后立即生效。适合初始化阶段或不需要同步的场景。
  • 影子装载(Shadow Load):写入影子寄存器,在指定事件发生时装载。适合运行中动态调整参数的场景。

对于SVPWM,我强烈建议使用影子装载。具体配置如下:

// 使能影子装载,在计数器归零时装载
EPwm1Regs.TBCTL.bit.PRDLD = 0;   // 0: 影子装载, 1: 立即装载
EPwm1Regs.CMPCTL.bit.SHDWAMODE = 0;  // 影子装载模式
EPwm1Regs.CMPCTL.bit.SHDWBMODE = 0;  // 影子装载模式
EPwm1Regs.CMPCTL.bit.LOADAMODE = 0;  // 计数器归零时装载
EPwm1Regs.CMPCTL.bit.LOADBMODE = 0;  // 计数器归零时装载
我曾经踩过的坑:有一次我在中断服务函数里直接修改CMPA寄存器,忘了配置影子装载模式。结果PWM波形在中断响应延迟时出现了不完整的脉冲,导致电机抖动。排查了整整两天才发现是装载时机的问题。从那以后,我所有动态更新的参数都走影子装载。

4.4 知识体系总览

为了让大家更直观地理解ePWM模块的核心逻辑,我画了一张结构图。

ePWM模块核心逻辑结构图 系统时钟 SYSCLKOUT 时基时钟 TBCLK 时基计数器 TBCTR 递增/递减/增减模式 TBPRD 周期寄存器 CMPA / CMPB 比较寄存器 影子寄存器 (Shadow) 装载事件:计数器归零 / 达到周期值 ePWM 波形输出

这张图把ePWM模块的数据流理清楚了。时钟从左边进来,驱动计数器。计数器与TBPRD、CMPA/CMPB比较,产生事件。影子寄存器在安全时机装载,最终输出干净的PWM波形。

4.5 实战配置要点

最后,我总结几个实战中的关键点:

  • TBPRD的计算:先确定开关频率,再反推TBPRD。别忘了增减模式下要除以2。
  • 计数模式:SVPWM只用增减模式。别问我为什么,这是三相逆变器的天然需求。
  • 影子装载:运行中动态修改占空比时,一定要用影子装载。立即装载只适合初始化阶段。
  • 装载时机:我习惯在计数器归零时装载。这样占空比更新和电流采样可以同步进行,减少时序冲突。

一句话总结:TBPRD定频率,增减模式定波形,影子装载定安全。这三个点抓住了,ePWM模块你就掌握了八成。