1. HRPWM核心价值与设计思路拆解
在数字电源和电机驱动的世界里,PWM信号的精度直接决定了系统的性能天花板。传统的PWM生成依赖于系统时钟(EPWMCLK)的整数分频,其分辨率被限制在单个时钟周期。例如,一个100MHz的系统时钟,其最小时间步长就是10纳秒。当你的开关频率达到1MHz甚至更高时,这个10ns的“颗粒度”就显得过于粗糙了。想象一下,你试图用一把刻度为厘米的尺子去测量一张纸的厚度——这几乎是不可能的。高分辨率脉宽调制(HRPWM)技术,就是为工程师提供了这把“游标卡尺”。
HRPWM的核心,在于其微边沿定位器(Micro Edge Positioner, MEP)模块。它不再满足于在时钟的“整点”触发边沿,而是能在两个相邻的系统时钟边沿之间,再插入最多255个精细的调整步长。如果系统时钟周期是10ns,MEP步长典型值为150-180皮秒(ps),那么理论分辨率就从10ns跃升到了150ps,提升了近两个数量级。这对于追求极致效率的数字电源意味着什么?意味着你可以更精确地控制功率开关管的导通时间,减少死区时间设置带来的损耗,实现更平滑的电压调整和更低的输出纹波。对于电机控制,则意味着更细腻的转矩控制和更低的谐波失真。
那么,HRPWM是如何做到这一点的?其设计思路非常巧妙。它并没有试图去创造更快的时钟,而是在现有的时钟架构下,通过一个可编程的延迟链来实现。你可以把MEP理解为一个精密的“数字式延迟线”。当PWM的计数器(TBCTR)匹配比较寄存器(CMPA)的常规部分时,一个“粗调”的边沿事件被触发。紧接着,MEP模块根据比较寄存器的高分辨率部分(CMPAHR)指定的步长值,对这个边沿进行“微调”延迟,从而将边沿精确地放置在期望的时间点上。这种“粗调+微调”的两级架构,在不大幅增加系统复杂度和功耗的前提下,实现了精度的巨大飞跃。
2. HRPWM架构与核心寄存器深度解析
要驾驭HRPWM,必须深入理解其硬件架构和关键的控制寄存器。整个HRPWM子系统并非独立存在,而是紧密集成在每个增强型PWM(ePWM)模块之中。
2.1 时钟架构与模块独立性
每个HRPWM模块(如HRPWM1, HRPWM2)的时钟源直接来自于其对应的ePWM模块时钟(EPWM1CLK, EPWM2CLK)。这种设计保证了HRPWM的时序与基础PWM生成逻辑严格同步,避免了跨时钟域带来的复杂性和时序风险。图26-83清晰地展示了这一点:HRPWMx与ePWMx共享时钟源。然而,这里有一个至关重要的细节需要注意:HRCAL(高分辨率校准)模块拥有自己独立的时钟源。HRCAL负责MEP比例因子的动态测量和校准,它的独立时钟设计确保了校准过程不会干扰主PWM通道的正常运行。
注意 :一个常见的误解是认为HRPWM配置寄存器可以通过任意CPU核心访问。根据文档特别说明,对于ePWM2到ePWM8模块,其HRCAL寄存器 不能 通过CPU2进行配置。这通常是在多核处理器(如F2838x的CM核和CL核)架构下需要注意的存储空间映射和访问权限问题。在单核应用或配置主核(CPU1)时,通常不会遇到此限制,但在进行多核软件架构设计时,必须仔细规划各模块的配置任务归属。
2.2 核心配置寄存器:HRCNFG
HRPWM的行为几乎完全由HRCNFG寄存器控制。这个寄存器是你与MEP逻辑对话的主要接口,理解它的每一个字段都至关重要。
边沿模式(EDGMODE) :这是HRPWM的“工作模式”选择开关。
- 上升沿控制(RE) :仅对PWM信号的上升沿进行高分辨率定位。适用于需要精确控制导通起点的拓扑,如某些电流型控制。
- 下降沿控制(FE) :仅对下降沿进行高分辨率定位。这是 最常用 的模式,特别是在电压型Buck、Boost等变换器中,通过精确控制开关管的关断时刻(下降沿)来调节占空比。
- 双边沿控制(BE) :同时对上升沿和下降沿进行高分辨率定位。这种模式通常不用于单纯的占空比控制,而是用于 相位控制 ,例如在移相全桥(Phase-Shifted Full-Bridge)拓扑中,需要高精度地调整两个桥臂之间的相位差时,就会用到TBPHSHR(高分辨率相位寄存器)并配合BE模式。
控制模式(CTLMODE) :这个字段决定了哪个寄存器负责向MEP提供微调值。
- CMPAHR/CMPBHR控制 :当进行占空比的高分辨率控制时,微调值来自CMPAHR或CMPBHR寄存器。此时边沿模式应选择RE或FE。
- TBPHSHR控制 :当进行相位的高分辨率控制时,微调值来自TBPHSHR寄存器。此时边沿模式必须选择BE。
- TBPRDHR控制 :当进行周期的高分辨率控制时,微调值来自TBPRDHR寄存器。这是一个更高级的功能,可以实现极其精确的开关频率控制。
影子模式(HRLOAD) :与常规PWM的影子(双缓冲)加载机制类似,HRPWM的高分辨率寄存器(CMPAHR, CMPBHR, TBPRDHR)也支持影子加载。这保证了在PWM周期中的安全时刻更新比较值,避免产生毛刺。其加载事件(CTR=ZERO, CTR=PRD, 或两者)需要与对应的常规CMPA/CMPB寄存器的影子加载模式相匹配。
自动转换模式(AUTOCONV) :这是HRPWM的“智能”功能,也是简化软件计算的关键。当此位使能时,你只需要向CMPAHR寄存器写入 未经缩放的分数部分 (例如,对于40.5%的占空比,分数部分是0.5),硬件和后台的SFO软件会自动完成与MEP比例因子(HRMSTEP)的乘法、取整和移位操作。如果禁用,则必须由软件完成所有计算,再将最终结果写入CMPAHR。 强烈建议在大多数应用中都使能自动转换模式 ,它能大幅减轻CPU负担并减少出错概率。
2.3 高分辨率死区配置:HRCNFG2
在带死区的互补PWM输出中(例如用于驱动半桥或全桥),HRPWM同样可以提升死区时间的精度。这通过HRCNFG2寄存器配置。它允许对死区上升沿延迟(DBRED)和下降沿延迟(DBFED)进行独立的高分辨率控制。配置逻辑与主PWM通道类似,需要选择边沿模式(RED, FED或两者)和控制模式。一个关键的限制是: 要使用高分辨率死区,对应的DBRED或DBFED寄存器的值必须大于等于7 (在半周期时钟模式下)。这是因为MEP逻辑需要一定的建立和稳定时间。
3. HRPWM实战配置与软件实现
理解了原理和寄存器,我们进入实战环节。配置一个HRPWM通道需要遵循清晰的步骤,任何顺序错乱都可能导致无法预料的行为。
3.1 基础占空比控制配置流程
假设我们要在ePWM1A上实现高分辨率下降沿控制(最常用场景),系统时钟100MHz,PWM频率1MHz,目标占空比40.5%。以下是详细的C语言配置步骤:
void HRPWM_ConfigForDutyControl(void) {
// 第一步:配置常规ePWM参数(必须先完成)
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1; // 时基时钟预分频 = 1, TBCLK = EPWMCLK = 100MHz
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // 高速时钟预分频 = 1
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // 向上计数模式(非对称PWM)
EPwm1Regs.TBPRD = 99; // 周期值。PWM频率 = 100MHz / (99+1) = 1MHz
EPwm1Regs.TBCTL.bit.PRDLD = TB_IMMEDIATE; // 周期寄存器立即加载(也可用影子模式)
// 配置动作限定器,产生一个简单的PWM波形
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW; // CMPA使用影子模式
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // 在CTR=0时加载影子寄存器到活动寄存器
EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET; // CTR=0时,将ePWM1A输出置高
EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR; // CTR=CMPA时(匹配比较值),将ePWM1A输出置低
// 初始比较值,先设为50%占空比
EPwm1Regs.CMPA.half.CMPA = 50;
// 第二步:配置HRPWM模块
EALLOW; // 解除寄存器保护,HRPWM相关寄存器通常受EALLOW/EDIS保护
EPwm1Regs.HRCNFG.all = 0; // 先清空寄存器
EPwm1Regs.HRCNFG.bit.EDGMODE = HR_FEP; // 控制下降沿位置(Falling Edge Position)
EPwm1Regs.HRCNFG.bit.CTLMODE = HR_CMP; // 由CMPAHR寄存器控制MEP
EPwm1Regs.HRCNFG.bit.HRLOAD = HR_CTR_ZERO; // 高分辨率影子加载事件:CTR=0(与CMPA保持一致)
EPwm1Regs.HRCNFG.bit.AUTOCONV = 1; // 使能自动转换!这是关键
// 注意:HRCNFG.bit.SWAPAB和HRCNFG.bit.HRBEN根据实际硬件连接和需求配置
EDIS; // 恢复寄存器保护
// 第三步:初始化MEP比例因子(HRMSTEP)
// 在使能HRPWM时钟后,需要运行SFO函数来获取并更新HRMSTEP。
// 这里先给一个典型值(例如66),后续在后台循环中更新。
// 假设SFO函数已运行并将结果存入全局变量g_MEP_ScaleFactor
EPwm1Regs.HRMSTEP = g_MEP_ScaleFactor;
// 第四步:使能HRPWM时钟(通常在系统初始化早期完成)
// 例如:SysCtrlRegs.PCLKCR0.bit.HRPWMENCLK = 1;
// 第五步:在运行中更新高分辨率占空比
// 假设目标占空比Duty为Q15格式(0~32767对应0%~100%)
// 由于使能了AUTOCONV,计算变得非常简单
}
3.2 自动转换模式下的占空比更新计算
使能
AUTOCONV
后,更新高分辨率占空比的软件计算量大大降低。你不再需要手动乘以MEP比例因子。计算流程如下:
-
计算整数部分(CMPA)
:
CMPA = (Duty * (TBPRD + 1)) >> 15。这里Duty是Q15格式,TBPRD+1是周期计数值。 -
计算分数部分(CMPAHR)
:
CMPAHR = (Duty * (TBPRD + 1)) & 0x7FFF。这得到了小数部分的Q15表示。但硬件要求CMPAHR的高8位是分数部分,所以需要左移8位:CMPAHR_Final = Fraction << 8。 -
组合写入
:许多微控制器支持将CMPA和CMPAHR作为一个32位寄存器(
CMPA:CMPAHR)来访问,这可以保证两个值的同步更新,避免中间状态产生毛刺。
// 函数:更新HRPWM占空比(自动转换模式使能)
// 输入:ui16DutyQ15 - Q15格式的占空比(0~32767)
// ui16Period - PWM周期值(TBPRD)
void HRPWM_UpdateDuty_AutoConv(uint16_t ui16DutyQ15, uint16_t ui16Period) {
uint32_t ulTemp;
uint16_t ui16CmpaInt;
uint16_t ui16CmpaHrFrac;
// 计算乘积:Duty * (Period+1), 结果在32位中
ulTemp = (uint32_t)ui16DutyQ15 * (uint32_t)(ui16Period + 1);
// 提取整数部分作为CMPA:取高17位再右移15位(因为乘积是Q30格式)
ui16CmpaInt = (uint16_t)(ulTemp >> 15);
// 提取分数部分作为CMPAHR:取低15位,然后左移8位(移到高8位)
ui16CmpaHrFrac = (uint16_t)(ulTemp & 0x7FFF);
// 左移8位,准备写入CMPAHR的高8位,低8位硬件忽略
ui16CmpaHrFrac <<= 8;
// 组合并写入。假设寄存器支持32位写入
// EPwm1Regs.CMPAHR 实际上是一个32位寄存器,其高16位是CMPA,低16位是CMPAHR
EPwm1Regs.CMPAHR.all = ((uint32_t)ui16CmpaInt << 16) | (uint32_t)ui16CmpaHrFrac;
}
实操心得 :在时间关键的控制环路(如数字电源的电流环)中,上述32位乘法仍可能消耗数十个时钟周期。为了追求极致性能,德州仪器提供了高度优化的汇编函数,仅需11个EPWMCLK周期即可完成从Q15占空比到
[CMPA:CMPAHR]的转换和写入。在项目初期可以使用C语言实现功能,在后期优化阶段,应评估是否集成这些汇编库函数以释放CPU带宽。
3.3 高分辨率周期(频率)控制配置
高分辨率周期控制允许你以远超TBCLK分辨率的精度来设定PWM频率。这对于需要频率微调或锁相的应用非常有用。配置顺序要求严格,必须遵循以下步骤:
void HRPWM_ConfigForPeriodControl(void) {
// 1. 使能ePWM和HRPWM模块时钟(通常在系统初始化完成)
// 2. 禁用TBCLKSYNC(停止所有ePWM时基时钟)
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;
// 3. 配置常规ePWM寄存器
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // 仅支持UP或UP-DOWN模式
EPwm1Regs.TBPRD = 249; // 例如,目标周期整数部分-1
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_PRD; // UP模式:在CTR=PRD时加载CMPA影子寄存器
// ... 其他AQ等配置
// 4. 配置HRCNFG寄存器
EALLOW;
EPwm1Regs.HRCNFG.all = 0;
EPwm1Regs.HRCNFG.bit.HRLOAD = HR_CTR_ZERO_PRD; // 影子加载在CTR=0或PRD
EPwm1Regs.HRCNFG.bit.AUTOCONV = 1; // 必须使能自动转换
EPwm1Regs.HRCNFG.bit.EDGMODE = HR_BEP; // 周期控制必须使用双边沿模式
EPwm1Regs.HRCNFG.bit.CTLMODE = HR_PHS; // 控制模式选择相位/周期控制(实际用TBPRDHR)
// 注意:对于周期控制,CTLMODE选择HR_PHS,但实际写入的是TBPRDHR寄存器。
EDIS;
// 5. 如果需要高分辨率相位同步,配置HRPCTL和TBCTL
EALLOW;
EPwm1Regs.HRPCTL.bit.TBPHSHRLOADE = 1; // 使能TBPHSHR影子加载
EDIS;
EPwm1Regs.TBCTL.bit.PHSEN = TB_ENABLE; // 使能相位加载
// 6. 使能高分辨率周期控制
EALLOW;
EPwm1Regs.HRPCTL.bit.HRPE = 1;
EDIS;
// 7. 使能TBCLKSYNC(启动所有ePWM时基时钟)
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;
// 8. 发出软件同步脉冲(可选,用于同步多个模块)
EPwm1Regs.TBCTL.bit.SWFSYNC = 1;
// 9. 确保HRMSTEP已由SFO函数更新为准确的MEP比例因子
// 10. 通过写入TBPRDHR寄存器来控制高分辨率周期
}
重要警告 :使能高分辨率周期控制(
HRPE=1)后,PWM输出的占空比 不能 落在周期开始或结束的3个TBCLK周期内(详见下文“占空比范围限制”)。否则会导致ePWMxA输出出现未定义行为。此外,在此模式下,同步脉冲(EPWMxSYNC)会引入±1(UP模式)或±2(UP-DOWN模式)个TBCLK周期的抖动,因此 绝不能 将EPWMxSYNCO源设置为CTR=0或CTR=CMPB,否则每个周期都会产生抖动。
4. 关键限制、问题排查与SFO软件使用
HRPWM功能强大,但也存在一些硬件限制和常见的配置陷阱。理解这些是稳定应用的前提。
4.1 占空比范围限制
这是HRPWM最重要的限制之一。MEP逻辑并非在整个PWM周期内都有效。它存在一个“激活窗口”。以最常见的、高分辨率周期控制禁用(
HRPE=0
)的情况为例:
- 在向上计数模式 :MEP在周期开始后的第3个TBCLK周期才激活,并一直工作到周期结束。这意味着,如果你的目标占空比对应的导通时间小于3个TBCLK,你将无法使用HRPWM来精确控制这个下降沿。你只能得到常规的、以TBCLK为精度的边沿。
-
影响范围
:这个限制将可用的高分辨率占空比范围限制在约
3 * TBCLK / Tpwm到100%之间。例如,PWM频率为1MHz(Tpwm=1000ns),TBCLK=10ns,那么最小高分辨率占空比约为(3*10)/1000 = 3%。也就是说,0%-3%的占空比只能使用常规精度。
表26-18量化了这个限制。当启用高分辨率周期控制(
HRPE=1
)时,限制是双向的:占空比既不能太接近0%,也��能太接近100%,必须避开周期首尾各3个TBCLK的“禁区”。
规避策略 :
- 设计规避 :在电源拓扑设计中,尽量避免让控制器工作在高分辨率不可用的极端占空比区域。例如,在Buck电路中,通常不会让占空比长期低于5%。
- 模式切换 :对于必须工作在极低占空比的应用,可以考虑在软件中设置一个阈值。当占空比命令低于最小高分辨率限值时,自动切换到常规PWM模式(通过配置HRCNFG暂时禁用HRPWM);当高于限值时再切换回来。但要注意模式切换可能带来的输出扰动。
-
使用向下计数模式
:文档提到,在
HRPE=0时,可以配置为向下计数模式并控制上升沿(REP)。这样,占空比限制会转移到最大值那一侧(例如97%-100%不可用),可能更符合某些应用的需求。
4.2 比例因子优化软件(SFO)的使用
MEP的步长(例如150ps)并非一个固定不变的常数。它会随着芯片的工艺角、工作电压(VDD)和结温(Tj)的变化而轻微漂移。为了保证HRPWM在全工作条件下的精度,必须动态地校准MEP比例因子(MEP_ScaleFactor),即每个TBCLK粗调步长内包含多少个MEP细调步长。
德州仪器提供了名为“Scale Factor Optimizer (SFO)”的软件库(例如
SFO_TI_Build_V8.lib
)来解决这个问题。它的工作原理是利用HRPWM模块内置的自检诊断电路,在后台自动测量和更新最优的
HRMSTEP
寄存器值。
使用SFO的典型流程 :
- 链接库文件 :在工程中链接TI提供的SFO库文件。
-
声明和初始化
:为每个使用的HRPWM模块声明一个
SFO状态变量(int SFO_status1;),并在初始化代码中调用SFO()函数进行首次校准。 -
后台循环调用
:在一个低速的后台任务(例如主循环或低优先级定时器中断)中,定期调用
SFO()函数。该函数会检查并更新HRMSTEP值。 -
检查状态
:
SFO()函数返回一个状态值,指示校准是否完成、进行中或出错。只有当状态为SFO_FINISHED时,HRMSTEP的值才是最新且可用的。
// 示例:在main.c或后台任务中集成SFO
#include "sfov8.h" // SFO库头文件
int SFO_status1 = SFO_INCOMPLETE; // SFO状态变量
void main(void) {
// 系统初始化...
HRPWM_ConfigForDutyControl(); // 配置HRPWM
SFO_status1 = SFO(); // 初始校准调用
while(1) {
// 主循环
// 在低速后台任务中更新SFO
SFO_status1 = SFO();
if (SFO_status1 == SFO_ERROR) {
// 处理SFO错误,例如MEP校准失败
}
// ... 其他任务
}
}
注意事项 :
SFO()函数执行需要一定的时间(数十到上百个时钟周期), 绝不能 在高速、时间关键的中断服务程序(如PWM周期中断或电流环中断)中调用它。必须放在低优先级的后台任务中。此外,要确保在SFO运行期间,对应的HRPWM通道正在输出PWM波,因为校准过程需要观察实际的边沿。
4.3 常见问题排查速查表
在实际调试中,你可能会遇到HRPWM没有输出、精度不对或输出异常的问题。下表列出了一些常见现象和排查思路:
| 现象 | 可能原因 | 排查步骤 |
|---|---|---|
| HRPWM完全无输出,或输出为固定电平 |
1. HRPWM模块时钟未使能。
2. HRCNFG配置错误,例如CTLMODE与EDGMODE不匹配。 3. 常规ePWM部分配置错误,无基础PWM波形。 |
1. 检查
PCLKCR0.HRPWMENCLK
位是否置1。
2. 仔细核对HRCNFG寄存器值:占空比控制用
HR_CMP
+
HR_REP/FEP
;周期控制用
HR_PHS
+
HR_BEP
。
3. 先用示波器检查禁用HRPWM时,常规ePWM输出是否正常。 |
| HRPWM有输出,但边沿控制不精确,像是常规PWM |
1. AUTOCONV未使能,但软件计算或写入CMPAHR的值错误。
2. HRMSTEP寄存器值为0或未初始化。 3. MEP比例因子不准确(未运行SFO或SFO失败)。 |
1. 确认HRCNFG.AUTOCONV位。如果禁用,检查软件计算流程和最终写入CMPAHR的值(高8位应为有效分数)。
2. 检查HRMSTEP寄存器,确保其为一个合理的非零值(例如对于100MHz和150ps MEP,约66)。 3. 检查SFO函数调用状态,确保其返回
SFO_FINISHED
。
|
| 使能高分辨率后,PWM输出出现毛刺或异常跳动 |
1. 影子加载模式配置错误,导致高分辨率值和常规值更新不同步。
2. 在HRPWM激活区域(首尾3个TBCLK)内更新了比较值。 3. 高分辨率周期控制模式下,占空比进入了限制区域。 |
1. 确保HRCNFG.HRLOAD与CMPCTL.LOADxMODE的加载事件一致。
2. 确保在CTR=ZERO或CTR=PRD的安全时刻更新CMPA:CMPAHR组合寄存器。 3. 检查占空比命令值,确保其避开禁用区域(参见4.1节)。 |
| 高分辨率死区控制不起作用 |
1. 未使能ePWM的死区模块,或未配置为半周期时钟模式。
2. DBRED或DBFED的值小于7。 3. HRCNFG2寄存器配置错误。 |
1. 检查DBCTL寄存器,确认死区使能且时钟模式正确。
2. 计算并确保DBRED和DBFED的整数值 >= 7。 3. 核对HRCNFG2的边沿模式和控制模式配置。 |
| 系统运行一段时间后,HRPWM精度逐渐变差 |
1. 芯片温度或电压变化导致MEP步长漂移。
2. SFO函数未在后台持续运行或运行频率过低。 |
1. 确保SFO函数在后台循环中被定期调用(例如每100ms一次)。
2. 监控SFO返回的状态和HRMSTEP值,看其是否随温度变化而调整。 |
最后一点个人体会 :HRPWM是一个“锦上添花”的功能,它的稳定运行建立在常规ePWM正确配置的坚实基础上。我的调试习惯永远是“先常规,后高分辨率”。首先,在完全禁用HRPWM的情况下,调通一个频率和占空比可变的常规PWM。用示波器确认波形完全符合预期。然后,再使能HRPWM的配置,从简单的固定值开始测试。同时,一定要善用芯片的寄存器观察窗口和SFO库提供的状态反馈,它们能帮你快速定位是配置问题、计算问题还是校准问题。当你看到PWM边沿那肉眼几乎无法察觉、但测量仪器上确凿无疑的皮秒级移动时,你会觉得这一切的深入钻研都是值得的。
406



被折叠的 条评论
为什么被折叠?



