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.

[参考译文] TMS320F28035:HRPWM 示例代码

Guru**** 2556860 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/929951/tms320f28035-hrpwm-example-code

器件型号:TMS320F28035
主题中讨论的其他器件:C2000WARE

您好!

我将在 C2000WARE 中测试我们的 HRPWM 示例代码。

对于以下代码、我进行了少量修改。

C:\ti\c2000Ware_3_02_00_00\device_support\f2803x\examples\c28\HRPWM

我发现、当 DutyFine 介于0-255之间时、PWM1A 的实际占空比为50%至70%。  

在此示例代码中、PWM1周期=10、PWM1 CMPA=5。

我的问题是:我们不知道 MEP_ScaleFactor 值,如果 CMPAHR=DutyFine>MEP_ScaleFactor,会发生什么情况?

然后、我们测试下面的下一个示例代码:

C:\ti\c2000Ware_3_02_00_00\device_support\f2803x\examples\c28\HRPWM_Duty_SFO_v6

PRD=10、CMPA=5、MEP_ScaleFactor=128。

时间

CMPAHR=0X0100、我们得到50%占空比。

CMPAHR=0x8000、我们得到55%的占空比。

CMPAHR=0XFF00时、我们得到60%占空比。

因此、MEP_ScaleFactor 似乎是255 (0xFF)而不是128、这里有什么问题?

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

    Howard、

    您是否在运行 SFO? 运行 SFO 将把 MEP 换算系数设置为正确的大小。 之后、您应该能够简单地写入一个介于0和255之间的值、HRPWM 将使用计算正确数量的 MIP。

    我认为 CMHR 和换算系数的大小没有任何限制、换算系数只是用于将您输入的值缩放到正确的硬件条件。

    此致、
    Cody   

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

    Cody、

    对于第一个示例、我不运行 SFO。

    我的问题是:  

    1.如果 MEPScaleFactor=100、如果我写入 CMPAHR=110、CMPA=5、那么生效的比较值将是5+110/100=6.1、对吧?

    我的第二个问题与第二个示例代码有关、我们运行 SFO 和 MEPScaleFactor=128。

    CMPAHR=0X0100、我们得到50%占空比。

    CMPAHR=0x8000、我们得到55%的占空比。 我们假设它获得60%的占空比、因为 CMPA=5、perspo=10、占空比=(5+0x80/128)/10 = 6/10=60%

    CMPAHR=0XFF00时、我们得到60%占空比。

    这就是为什么我说 MEPScaleFactor=128、但效果值似乎是256、这是我不理解的。

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

    我发现第二个问题只在何时发生  

    HRCNFG.bit.AUTOCONV=1。

    如果它为0。

    CMPAHR=0X0100、我们得到50%占空比。

    CMPAHR=0x8000、我们得到60%占空比。 这是我们应该得到的结果。

    CMPAHR=0XFE00时、我们得到70%占空比。 这是我们应该得到的结果。  

    CMPAHR=0XFF00时、我们得到50%占空比。 这意味着 CMPAHR 寄存器被忽略、为什么?

    为什么占空比不是我们在 HRCNFG.bit.AUTOCONV=1时应该得到的结果呢?

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

    在 TRM 中、它说:

    如果 AUTOCONV 位(HRCNFG.6)被置位并且 MEP_ScaleFactor 位于 HRMSTEP 中
    寄存器、然后 CMPAHR 寄存器值= FRAC (PWMDuty* PWMPeriod<8)。 其余部分
    转换计算在硬件中自动执行、并且正确的 MEPScaled
    信号沿出现在 ePWM 通道输出上。 如果未设置 AUTOCONV、则
    上述计算必须由软件执行。

    我的问题是:

    如果 PWMPeriod=10、PWMDuty=0.55。

    我是否应该写入 CMPAHR=FRAC (10*0.55)<<8=0.5<8=0.5*256=128?

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

    Howard、  

    如果要计算代码中的值、请勿使用 AUTOCONV。 请按照以下步骤操作:

    如果您使用的是 AUTOCONV、请按照以下说明操作:

    启用 AUTOCONV 后、可用的最大值为0xFE、0xFF 和0x00无效。  

    我没有验证您的上述计算、但请记住您需要乘以您的 MEP_ScaleFactor、这在计算中看起来不正确。 有关如何计算的更多信息、请参阅上图。 它是一个粗略步进(一个 SYSCLK 周期)中 MEP 步进的数量。

    此致、
    Cody  

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

    Cody、

    启用 AUTOCONV 后、它与 MEP_ScaleFactor 无关

    我的问题是:

    如果 PWMPeriod=10、PWMDuty=0.55。

    我是否应该写入 CMPAHR=FRAC (10*0.55)<<8=0.5<8=0.5*256=128=0x0080?

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

    Howard、

    是的、如果您使用的是 AUTOCONV、则数学计算看起来是正确的。

    此致、
    Cody

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

    Howard、

    请允许我在某个时间确认启用 AUTOCONV 后、低8位不会被忽略。

    此致、
    Cody  

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

    Howard、

    我可以确认 CMPAHR 寄存器的低8位被忽略。

    请注意 、您预制的计算结果(0x0080)应写入 CMPAHR 寄存器的 CMPAHR 位。 这些是 CMPAHR 寄存器的高8位。 (0x8000)将是从 CMPAHR 寄存器中读取的值。 如果您查看 CMPAHR.CMPAHR、您应该会看到值0x80。

    此致、
    Cody