我用OMAPL138的pwm0a pwm0b pwm1a pwm1b 作为驱动全桥桥臂的信号,现在做频率跟踪,一直要修改pwm0和pwm1的prd值来改变发出的信号频率,刚启动波形输出的时候使用软件触发同步让pwm0和pwm1的相位对齐了,然后在pwm0的TBCTREQUPRD事件产生中断,中断里同时更改寄存器HWREGH(SOC_EHRPWM_0_REGS + EHRPWM_TBPRD)和HWREGH(SOC_EHRPWM_1_REGS + EHRPWM_TBPRD)来同时修改两个pwm发生器的频率,但是发现一旦修改的频率前后变化较大的时候pwm0和pwm1就会一点一点产生相差,导致全桥的驱动信号不对称产生相移,我采用的是上下计数,使能了影子寄存器,但是总是会出现这种现象,能有人帮忙分析下原因吗?
Tony Tang:
PWM之间要通过sync信号来同步的。
看一下TRM的17.2.3 Time-Base(TB) Submodule
TOTORO TOTORO:
回复 Tony Tang:
我在初始化PWM0和PWM1启用了同步信号,然后初始化完成后用软件触发同步同步了两个PWM发生器,此时两个波形是同步的,但是之后在pwm0的中断里同时修改pwm0和pwm1的PRD为同一个值来同步修改两路的波形频率,使能了影子寄存器,如果PRD修改的变化量不大,还能保持两路pwm的同步,但是一旦PRD的值前后变化比较大时,两路pwm的波形就会不同步了,产生了相差,这是怎么产生的?
Tony Tang:
TOTORO TOTORO然后在pwm0的TBCTREQUPRD事件产生中断
TBCTREQUPRD是什么?在手册里搜不到相关的文字
TOTORO TOTORO:
回复 Tony Tang:
我直接贴的固件库里的寄存器,就是“EHRPWMETIntSourceSelect(SOC_EHRPWM_0_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUPRD)”这个表述,中断事件源选择计数器达到PRD时触发,每次事件都进入中断,然后计数器配置成上下计数。
Tony Tang:
回复 TOTORO TOTORO:
设成一直sync的试试。反正有这个功能。
TOTORO TOTORO:
回复 Tony Tang:
我试过了,上下计数,设成计数器为零时触发事件进入中断,然后再中断里软件触发同步,则会由于同步信号一同步就计数器为零触发事件进入中断又软同步导致无限触发中断卡死,设为计数器为PRD触发中断则会导致波形缺失;设为增计数,计数器为PRD时进入中断,中断里软件触发同步则会导致脉宽不稳定,跳来跳去。同步时设定的相位差为零。