您好!
我 在 F28379D 上尝试使用 HRPWM 时注意到了一些奇怪的东西。 下面显示了我正在使用的设置代码。 然后、我启动到一个无限循环、该循环会缓慢增大 CMPA:CMPAHR 寄存器。
奇数行为为:
如果 HRCNFG.AUTOCONV 位被置位并且 HRCNFG.HRLOAD = HR_CTR_PRD (01)、那么对 CMPAHR 的更改将无效。
如果 HRCNFG.AUTOCONV 位被置位并且 HRCNFG.HRLOAD = HR_CTR_ZERO (00)、那么一切都正常:我可以用0x0000到0xFF00的值来插入 CMPAHR、这会增加脉冲在一个 TBCLK 周期内的导通时间。
此外、如果 HRCNFG.AUTOCONV 位没有被置位、那么不管 HRCNFG.HRLOAD 是什么、一切都是正常的。 显然、在这种情况下没有缩放、因此我用0x0000到(HRMSTEP<8)的值来插入 CMPAHR、以实现与在一个 TBCLK 周期内增加的脉冲相同的效果。 HRMSTEP 在初始化期间通过调用 SFO 函数进行设置、在我的处理器上为59。
请注意,在我的设置中,我使用的是全局加载功能,因此,如果我理解正确,HRCNFG.HRLOAD 不应产生任何影响。 我已经将 CMPA:CMPAHR 的影子加载设置为在 TBCNT = TBPRD (GLDCTL = 0x83且 GLDCFG = 0x707)上发生。 但是、如果我将其更改为 TBCNT = 0 (GLDCTL = 0x81)、我观察到的行为与上面所述的完全一样。
此外:
正如参考手册中所述、HRCNFG 寄存器似乎不受 EALLOW 保护:我可以从 CCS 中的观察窗口中将其插入。
请注意、这对我来说实际上不是问题:我只需将 HRCNFG.HRLOAD 设置为0、看起来一切正常:只是对这里发生的情况以及手册中没有提到这种行为的原因感兴趣。
谢谢、
John Wilkes。
(二
下面是我的设置代码、所有其他寄存器保留为默认值:
EALLOW;
/*启用全局加载:每个计数器上的加载=周期事件*/
EPwm1Regs.GLDCTL.ALL = 0x83;
/*为 AQCSFRC、AQCTLB、AQCTLA、CMPB、CMPA 和 TBPRD 使用全局重新加载*
EPwm1Regs.GLDCFG.ALL = 0x707;
EDIS;
/* TBCTL:除/1时钟分频外的所有默认值(/2在 ePWM 之前完成*/
/*模块)并设置计数模式 */
EPwm1Regs.TBCTL.ALL = 0xC030;
/*仅输出 A - B 作为 HR 设置的一部分被设置为 A 的倒数*/
/*输出在零时变为高电平、 在 CMPA 时变为低电平;*/
EPwm1Regs.AQCTLA.ALL = 0x12;
/*周期500kHz = 199 */
EPwm1Regs.TBPRD = 199;
/*仅使用 CMPA -在应用程序中设置,但设置50%默认值*/
EPwm1Regs.CMPA.bit.CMPA = 99;
EPwm1Regs.CMPA.bit.CMPAHR =(1 << 8); //初始化 HRPWM 扩展
/*高分辨率设置*/
EALLOW;
EPwm1Regs.HRCNFG.ALL = 0x0;
EPwm1Regs.HRCNFG.bit.EDGMODE = HR_FEP; // CMPA 下降沿上的 MEP 控制
EPwm1Regs.HRCNFG.bit.CTLMODE = HR_CMP; //比较寄存器控制 MEP
EPwm1Regs.HRCNFG.bit.HRLOAD = HR_CTR_PRD; //这就是问题!!!
EPwm1Regs.HRCNFG.bit.SELOUTB = HR_INVERD_B;//从反相 A 输出生成 B 输出
EPwm1Regs.HRCNFG.bit.AUTOCONV = 1; //启用自动转换逻辑
EDIS;