背景介绍
最近博主在捣鼓自己的单级ACDC,拓扑是一个复用桥臂的Boost+DAB。在开关频率为150kHz的情况下,移相角和占空比的分辨率仅剩不到8位,上220VAC的时候感觉THD稍微差了一点,于是考虑开HRPWM。但是在配这个HRPWM的时候遇到了一些神秘问题,并且TI官方的文档对这方面描述非常的少,只有一些像例程一样的东西,甚至有些规则只在TI的E2E论坛上面有工程师说明。在配置的时候必须100%照着它配,只要配错其中一个HRPWM都不会起作用,而TI并没有对这些配置的原因进行进一步的解释,导致整件事情就如同这篇博客的标题所说——显得像一个规则怪谈。因此后文所述的一些配置方法博主也只在自己的应用场景下测试过,并不保证是通用的,仅作为一个经验参考。

(TI论坛上的工程师是这样说的:VERY SPECIFIC)

注意到HRPWM的框图并不是一个串在PWM信号链上的模块,而是一个虚线框把AQ后面的三个模块给框了起来,总而言之就是神秘。
开头提到博主做的是一个基于DAB的拓扑,控制策略采用两个自由度,分别为原副边的主移相角和副边的占空比。在这个场景下,为了方便做移相控制,EPWM使用的是中心对齐(Up-Down Count)模式,后面很多配置规则都是从这个计数模式出发的,向上计数模式可能有所不同。我的需求是原副边的桥臂分别做高分辨率占空比和高分辨率移相。后面依次介绍这两个功能的配置。
高分辨率占空比配置
- 规则一:中心对齐模式下MEP必须配成Both Edges。
规则二:中心对齐模式下CMPxHR和CMPx的Shadow Load事件必须配成Zero or Period。

规则三:中心对齐模式下使用高分辨率占空比必须开启High Resolution Period。E2E论坛链接

规则四:在开启了死区的情况下,仍然需要将Channel A和Channel B的高分辨率全部使能,并且尽管你实际没用到CMPB,CMPBHR寄存器里面也要写入和CMPAHR一样的值,否则只会有一路输出有高分辨率。回到规则二,实际上有四个寄存器的Shadow Load要配。E2E论坛链接

规则五:AQ必须配成ChannelA: CMPAU = set,CMPAD = clear, no actions on TBCTR=PRD or ZRO; ChannelB: CMPBU = set,CMPBD = clear, no actions on TBCTR=PRD or ZRO。(这一点在使用Sysconfig配置的时候如果配错了会弹警告,谢谢你TI)E2E论坛链接

按照上述这些规则配置的Sysconfig如下图所示,可以参考:

高分辨率移相角配置
- 规则一:使用高分辨率移相时,要把两个通道的Control Mode都配成TBPHSHR。
规则二:开启高分辨率移相之后,MEP必须配成Both Edges。

这一点比较坑,因为在笔者使用的CCS20.2.0里面,在Sysconfig中按照规则一配置之后,MEP Edge Select选项就没了,并且生成出来的初始化代码里面也没有,所以要自己手动把初始化函数加上去。
规则三:TBPHSHR只能产生延迟。
这个属于一个小坑,EPWM普通的移相是通过改变同步事件后计数方向来改变移相方向的,但是TBPHSHR的作用机制不太一样,它只能加延迟,因此在做超前相移的时候要做一点处理,E2E上面也有一个帖子写了这个问题。E2E论坛链接
遵守上述规则就可以美美把玩HRPWM了。
参考资料
TMS320x280x, 2801x, 2804x High Resolution Pulse Width Modulator (HRPWM) Reference Guide
TMS320F28004x Real-Time Microcontrollers Technical Reference Manual