下图是hrpwm的逻辑框图。可以看到涉及的主要有相位/周期/比较值/四区等高精值。
pwm的分辨率有如下图所示的两种计算方式,100%和bits。在时钟100Mhz情况下两种方式计算得到的分辨率请见下表。
在epwm波形频率低于250Khz时不需要使用hrpwm,高于250Khz时需要使用hrpwm。
下图大概解释了高精度实现原理。以比较值CMPA为例,整数倍的值放入CMPA寄存器,小数倍的值放入CMPAHR寄存器。一个整数的step中进行细分,细分为多个MEP step,计算小数部分需要多少个MEP step,将计算得到的值填入CMPAHR。
系统时钟/MEP步数/pwm频率/pwm分辨率之间的关系见下图。
设MEP步长是180ps,当pwmclk是100Mhz时,一步就是10ns,在一步之内可以划分56步(180ps * 56 = 10080ps ~= 10ns)。
下图是一个具体实例。当需要产生40.5%占空比的波形时,经计算发现普通模式下能设置到40%或41.3%。如果需要更高精度的波形,就需要使用hrpwm。hrpwm可以设置到40.495%。此时CMPA=32 CMPAHR=22。
需注意:在上升/下降/上下计算模式下,在zero和prd前后3个时钟内不能使用hrpwm。所以hrpwm无法达到0%或100%的占空比控制。
MEP步长和SFO
前面我们都是假设MEP步长是180ps。MEP步长实际会受到温度/电压/制造工艺等的影响。所以引入了SFO来自动校准MEP步长。在使用SFO模式时,HR寄存器中只需设置为小数部分,不需要设置为具体MEP步数,SFO会自动计算需要多少步数。
参考文档:
TMS320F28004x Real-Time Microcontrollers Technical Reference Manual (Rev. G)