引用一下类似的帖子,并基于此展开讨论。
虽然是基于F280025 TRM和测试的,原理相同,ePWM Type应该也是完全相同的。
1、赞同关于原贴作者关于demo code bug的观点,在up-down计数时,TBPRD是不需要减1的,见F280025 TRM 17.4.3 Calculating PWM period and Frequency 章节描述,这个bug在最新的CCS ware上都没有消除。
2、原贴内容:
【TI的HRPWM真是一个好功能,解决了我面临的一个大问题。但目前遇到一个关于HRPWM配置的问题:
EPWM1和EPWM2计数器工作于UP-DOWN模式,来产生对称的PWM波。在UP-DOWN模式下,HRCNFG的EDGMODE应为both edges模式。如Handbook所述,在HRPWM的both edges模式下,
TBCTL的PHASEN必须设定为1(实验中也发现设定为1之后PWM的精度最高)。对于EPWM2,PHASEN设定为1没问题,但EPWM1就不行了,因为EPWM1需工作为MASTER。
请问TI:这种情况下到底该如何配置EPWM1,使其可产生高精度PWM呢?
目前想到2个解决方案:
1)让EPWM1和EPWM工作与UP 模式,然后让HRPWM工作于falling edge模式。但这会产生不对称PWM波形,影响控制性能;
2)改变电路设计,让EPWM2和EPWM3产生HRPWM,EPWM1作为同步用的MASTER。改板的时间较长。
有没有别的方法解决这个问题呢?】
【上面的问题我后来解决了,解决方案供其他人参考:在设置EPWM为UP-DOWN计数模式时,一定要根据数据手册设置PHSEN和TBPHSHRLOADE为1。然后启动EPWM,并施加SWFSYNC信号。
施加完SWFSYNC信号后,再将Master EPWM的PHSEN设为0。这样产生的HRPWM的频率和占空比都跟期望值相同。
采用上述方案,在500kHz的开关频率下,最终功率器件可以产生精度为0.2ns左右的斩波波形,十分接近F28379D的150ps理论值。】
这里想表达2个观点。
第1,在Type1 ePWM中,PWM sync信号是串联的,PWM1的SYNC.OUT连到PWM2的SYNC.IN 所有才有master-slave说法。在F280025上Sync信号有了很大的变化,由串联变成了并联。
比如PWM1可以发出Sync.OUT信号,而PWM2~PWMn都可以接收PWM1的Sync.OUT信号作为Sync.IN而产生SYNC动作,见EPWMSYNCINSEL和EPWMSYNCOUTEN寄存器描述。
我没有细读2837x的TRM,不知道是否也变成了这样。如果是,那就没有所谓的master-slave一说了,随便哪个PWM都可以作为发出SyncOUT信号,其余PWM以此同步即可。
第2,同步是一个动态的过程,也就是只要PWM运行,就要主动进行同步。因为不同步的产生就是由于各PWM运行久了就会产生偏差所以才要同步。
按照原贴作者的解决办法,先进行一次软件同步,然后PHSEN=OFF,这是大聪明吗?TRM 17.15.1.5.4.1 第6点指出,如要TBPHSHR也完全同步,PHSEN要设置为1。我想这里
的描述应该是有些歧义?我的理解是说这个PWM要跟其他PWM同步,包括HRPRD也同步,那自然是要跟TBPRD一样要在某个时刻去同步加载。差别在于TBPRD是从TBPHS加载的,
而HRPRD则同时从shadow reg加载到active reg,与TBPRD从特定的TBPHS reg加载是有区别的。请TI确认一下是不是这样?
对于原贴作者用PWM1 和PWM2同步,其实完全就可以设置PWM1的PHSEN=FALSE,它就是你所说的master,它不需要SYNCIN源来做同步的。
hrpwm_ex3_prd_updown_sfo例子中,虽然用了5对PWM来进行测试,但并没有考虑同步的问题。包括上面说的关于PHSEN,所有PWM的PHSEN都没有开启。


