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。
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; // 计数器归零时装载
4.4 知识体系总览
为了让大家更直观地理解ePWM模块的核心逻辑,我画了一张结构图。
这张图把ePWM模块的数据流理清楚了。时钟从左边进来,驱动计数器。计数器与TBPRD、CMPA/CMPB比较,产生事件。影子寄存器在安全时机装载,最终输出干净的PWM波形。
4.5 实战配置要点
最后,我总结几个实战中的关键点:
- TBPRD的计算:先确定开关频率,再反推TBPRD。别忘了增减模式下要除以2。
- 计数模式:SVPWM只用增减模式。别问我为什么,这是三相逆变器的天然需求。
- 影子装载:运行中动态修改占空比时,一定要用影子装载。立即装载只适合初始化阶段。
- 装载时机:我习惯在计数器归零时装载。这样占空比更新和电流采样可以同步进行,减少时序冲突。
一句话总结:TBPRD定频率,增减模式定波形,影子装载定安全。这三个点抓住了,ePWM模块你就掌握了八成。