您好,
我正在尝试在F2.8337万D中实施HRPWM功能。 为了了解这一点,我尝试比较自动转换模式结果和手动转换结果,但结果似乎不同。 为什么CMPA和CMPAHR寄存器启用或不启用自动转换模式的结果不同? 我尝试了TI的示例(HRPWM_Duty_SFO_V8.c),也得到了以下不同的结果:
DutyFine = 0x5737
EPwm1Regs.TBPRD = 9
MEP_ScaleFactor = 64 (由SFO计算)
启用自动转换模式后,我将获得:
EPwm1Regs.CMPA.bit.CMPA=0x6
EPwm1Regs.CMPA.bit.CMPAHR=0x2100
启用手动模式后,我将获得:
EPwm1Regs.CMPA.bit.CMPA=0x6
EPwm1Regs.CMPA.bit.CMPAHR=0x0800
对于手动转换, 我看到TI用于F2.8379万D (HRPWM_Duty_SFO_V8.c)的示例:
备注:
**如果启用了自动转换,则执行以下步骤
在硬件中自动执行,可以跳过
//加上偏移和舍入
CMPAHR_REG_Val += 0x0080;
但是,在下面的TI代码中,我看不到这种偏移和舍入。 实际上,在技术参考手册中,它也不会出现,因此我不知道它是否是示例中的错误。
代码:
#IF (AUTOCONVERT) CMPAHR_REG_VAL = temp<1;//转换为Q16 CMPBRH_REG_VAL = temp<1;//转换为Q16 #else CMPAHR_REG_VAL =(temp*MEP_ScaleFactor)+(0x0080<7)>15; CMP_PVL_REG_PVREG_=<8=<MPHR_MPHR=<8<MPREG_MPHR_MPREG_PVREG_<7=<MPHR_MPREG_MPHR_MPREG_<7=8
因此,是否需要为偏移和舍入添加0x0080? 为什么两种模式的结果不同?
谢谢!
Maite