This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] LAUNCHXL-F280025C:HRPWM CMPAHR 不包括所有范围

Guru**** 1937600 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1269082/launchxl-f280025c-hrpwm-cmpahr-doesn-t-cover-all-range

器件型号:LAUNCHXL-F280025C

您好!

我尝试使用用户手册示例(上图)

并使用以下代码通过 CCS 运行:

Fullscreen
1
2
3
4
5
6
7
8
periodVal = EPWM_getTimeBasePeriod(EPWM1_BASE);
regValCMPA = (int)(PWMDuty * periodVal);
_temp = (PWMDuty * (float)(periodVal));
_temp = (__fracf32(_temp)) ;
regValCMPAHR =( _temp * MEP_ScaleFactor + 0.5);
regValCMPAHR = (regValCMPAHR ) << 8U;
HWREG(EPWM1_BASE + HRPWM_O_CMPA) = (((long)regValCMPA) << 16U) |
regValCMPAHR;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

调试时、我获得了以下进入 CMPA CMPAHR 寄存器的值:

但使用示波器测量直流时、我得到的只有12.06%、而不是 PWMDuty 表达式下的调试图中所示的12.32%。
当我尝试手动增加 CMPHR、所以直流将达到最大表达式(0xFF00)的12.32%、我得到了上述 PWMDuty。

也许代码不是很好实现的吗?  从数据表附加示例


我会帮你的忙。
迈克尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Michael、您好!

    对延迟回复深表歉意。 您是否使用 SFO 库? 如果没有、我强烈建议这么做、这可以大大简化使用 HRPWM 的整个过程。

    对于具体问题、请查看器件 TRM 的第17.15.2.1节中的以下代码片段(假设正在使用 SFO 库):

    一目了然的是、您转换为长整型、而不是 uint32_t。 如果您调整计算结果以产生无符号 int 输出、会出现什么情况?

    此致、
    杰森·奥斯博尔恩

x 出现错误。请重试或与管理员联系。