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.

TMS320F280049C: EPWMxA和EPWMxB同时产生高精度PWM波配置咨询

Part Number: TMS320F280049C

从TRM上来看,F280049的EPWMxA和EPWMxB可以单独配置HRPWM。在我们的应用中需要产生带死区的互补的两路HREPWM波形。原始波形AQ模块,EPWM1A和EPWM1B波形均由CMPA比较产生,配置示意图如下图1所示。请问是可以在此基础上进一步通过CMPAHR同时实现对EPWM1A和EPWM1B的高精度调节吗?另外,如图2所示,如何理解 CMPBHR is for use with the AQ output of Channel B ,and is not related to CMPB? 是说如果需要在OUTB上独立产生高精PWM波,必须用CMPA+CMPBHR或者CMPB+CMPBHR来实现吗?期待专家的回复,谢谢!

 图1

 图2

  • 您好我们已收到您的问题并升级到英文论坛寻求帮助,如有答复将尽快回复您。谢谢!

  • 您好,

    请问是可以在此基础上进一步通过CMPAHR同时实现对EPWM1A和EPWM1B的高精度调节吗?

    不可以,CMPAHR 不是与 CMPA 绑定,而是与channel A 绑定。

    CMP< channel > HR

    与 CMPA 相反,它与 CHANNELA 无关。

    因此您可以将 CMPBHR 设置为与 CMPHR 相同的值。

  • 您好,感谢回复!

    可以将 CMPBHR 设置为与 CMPHR 相同的值。

    您的意思是可以通过CMPA+CMPBHR(CMPBHR设置为CMPAHR相同的值)来实现EPWM1B通道的高精PWM波吗?

  • 和工程师确认下哦,有答复尽快给到您。

  • 您好,

    您的意思是可以通过CMPA+CMPBHR(CMPBHR设置为CMPAHR相同的值)来实现EPWM1B通道的高精PWM波吗?

    对的。

  • 好的,感谢!我这两天测试一下,有问题再请教一下~

  • 您好!我在测试HRPWM时遇到一个问题想请教一下:我在程序中按照TRM中的说明配置CMPA和CMPAHR,测试中发现无论duty设置为什么值,CMPAHR寄存器中的值始终为0,若在此基础上再将u16CMPFracVal2左移8位复制给CMPAHR,则可以产生HRPWM。想问一下这是什么原因呢?CMPAHR是16位的寄存器,低8位忽略,应该只需要左移8为就可以。另外,使用HRPWM时,CMPAHR是不是不能为0?例程中设置CMPAHR至少为1是处于什么考虑呢?麻烦帮忙卡一下,谢谢!

  • 我们跟进给工程师看下哈,应该下个工作日给到您答复。

  • 您好,

    1) 对于 CMPAHR来说,只需填充upper 8 bit即可。

    2)不想让CMPAHR 为0,请至少使用1。

    这是一个非常易于使用的代码片段。 遵循此步骤,应该可以正常工作。 

  • 您好,

    1)

    1) 对于 CMPAHR来说,只需填充upper 8 bit即可。

    只需填充upper 8 bit,那应该就是<<8位即可,但是测试时发现,如果只是把比较器小数部分的数值<<8位,则CMPAHR数值始终为0,左移16位才可以,请问是那里有问题吗?

    2)

    2)不想让CMPAHR 为0,请至少使用1。

    对于高精寄存器,CMPAHR/CMPBHR/TBPRDHR/TBPHSHR,使用时都需要使其至少为1吗?实测时发现如果CMPAHR有为0的情况,则出来的驱动duty不对。请问至少为1的原因是什么呢?

  • 我们和工程师确认下哈。

  • 您好,

    只需填充upper 8 bit,那应该就是<<8位即可,但是测试时发现,如果只是把比较器小数部分的数值<<8位,则CMPAHR数值始终为0,左移16位才可以,请问是那里有问题吗?

    如果在调试期间在寄存器视图中查看:CMPAHR = 0xXYZW,那么您只想要使用 XY。 

    对于高精寄存器,CMPAHR/CMPBHR/TBPRDHR/TBPHSHR,使用时都需要使其至少为1吗?实测时发现如果CMPAHR有为0的情况,则出来的驱动duty不对。请问至少为1的原因是什么呢?

    工程师这边唯一确定的是, CMPAHR/CMPBHR必须使用1或更高。