在C2000 DSP的ePWM模块与EV模块有很大的差别,EV模块各路PWM共用一个时基,而ePWM模块则有各自的时基,通过同步信号来同步。但同步是有时间开销的:
The delay from internal master module to slave modules is given by:
– if ( TBCLK = EPWMCLK): 2 x EPWMCLK
– if ( TBCLK != EPWMCLK):1 TBCLK
这个开销表现为主模块已经计数到1或者2了,才发出同步信号,这时从模块其实也已经计数到1或者2了,但在接收到同步信号以后从模块又把TBPHS寄存器的值Load到TBCTR,造成从模块与主模块之间的相位延时,同时周期也会发生异常(多了两个时钟)。因此在这种应用场合下不能把TBPHS设成0(官方文档示例代码),而要根据分频设置把TBPHS设成1或者2.
对F28075芯片来说上述引用的文字也不正确,F28075的TBCLK实际上经过了三级分频:
SysClk------ClkCfgRegs.PERCLKDIVSEL.bit.EPWMCLKDIV------EPWMCLK---TBCTL.HSPCLKDIV-----Clk1-------TBCTL.CLKDIV---------TBCLK
而当TBCLK!=EPWMCLK时的1个时钟延时并不是1个TBCLK,而是1个Clk1,但是TBPHS的单位又是TBCLK,因而如果要做这个延时补偿一定要把TBCTL.CLKDIV设成0,否则无法补偿