你好,我现在正尝试利用28033实现HRPWM功能。
测试的时候发现,示波器观察到的PWM脉冲频率会在设定频率附近抖动,当设定频率合适(TBPRDHR=0)时观察到输出PWM脉冲频率稳定不抖动。
程序中根据手动设定的频率计算TBPRD和TBPRDHR,HRCNFG[AUTOCONV]=1;手动修改频率时才会更新TBPRD和TBPRDHR。
下面是录制的一些波形以及DSP寄存器值(DSP运行频率120MHz):
1.设定201kHz,TBPRD=298,TBPRDHR=0x8200;可以看到示波器测量到的频率在200.66kHz~201.36kHz之间波动,平均值是201kHz

2.设定200kHz,TBPRD=300,TBPRDHR=0x0000;可以看到示波器测量到的频率稳定在200kHz

3.设定501kHz,TBPRD=119,TBPRDHR=0xC300;可以看到示波器测量到的频率在498.8kHz~503.7kHz间波动,平均值是501kHz

4.设定500kHz,TBPRD=120,TBPRDHR=0x0000;可以看到示波器测量到的频率稳定在500kHz

5.设定1001kHz,TBPRD=59,TBPRDHR=0xF100;可以看到示波器测量到的频率在993.9kHz~1.01MHz间波动,平均值是1001kHz

6.设定1000kHz,TBPRD=60,TBPRDHR=0x0000;可以看到示波器测量到的频率稳定在1000kHz

7.设定999kHz,TBPRD=59,TBPRDHR=0xF100;可以看到示波器测量到的频率在991.4kHz~1.0MHz间波动,平均值是999kHz

请问,上述情况是正常的吗?如果不正常,可能问题出现在哪里呢?
附上HRPWM相关配置代码:
EPwm1Regs.HRCNFG.all = 0; EPwm1Regs.HRCNFG.bit.EDGMODE = HR_BEP; EPwm1Regs.HRCNFG.bit.EDGMODEB = HR_BEP; EPwm1Regs.HRCNFG.bit.CTLMODE = HR_CMP; EPwm1Regs.HRCNFG.bit.CTLMODEB = HR_CMP; EPwm1Regs.HRCNFG.bit.HRLOAD = HR_CTR_ZERO_PRD; EPwm1Regs.HRCNFG.bit.HRLOADB = HR_CTR_ZERO_PRD; EPwm1Regs.HRCNFG.bit.AUTOCONV = 1; EPwm1Regs.HRPCTL.bit.HRPE = 1;