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.
您好!
我尝试使用用户手册示例(上图)
并使用以下代码通过 CCS 运行:
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;
调试时、我获得了以下进入 CMPA CMPAHR 寄存器的值:
但使用示波器测量直流时、我得到的只有12.06%、而不是 PWMDuty 表达式下的调试图中所示的12.32%。
当我尝试手动增加 CMPHR、所以直流将达到最大表达式(0xFF00)的12.32%、我得到了上述 PWMDuty。
也许代码不是很好实现的吗? 从数据表附加示例
我会帮你的忙。
迈克尔
Michael、您好!
对延迟回复深表歉意。 您是否使用 SFO 库? 如果没有、我强烈建议这么做、这可以大大简化使用 HRPWM 的整个过程。
对于具体问题、请查看器件 TRM 的第17.15.2.1节中的以下代码片段(假设正在使用 SFO 库):
一目了然的是、您转换为长整型、而不是 uint32_t。 如果您调整计算结果以产生无符号 int 输出、会出现什么情况?
此致、
杰森·奥斯博尔恩