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.

[参考译文] TMS320F2.8377万S:意外的ePWM模块行为

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/573404/tms320f28377s-unexpected-epwm-module-behavior

部件号:TMS320F2.8377万S

C2000团队,

我正在使用F2.8377万S,并且从ePWM模块收到了意外行为。  我正在将ePWM2配置为向上/向下计数模式。

意外行为1:如果我使用非零值(例如1)预加载TBCTR,则计时器第一次不会在PRD开始倒计时。  它一直计数到0xFFFF,然后滚动。  之后,我相信它对周期匹配的反应是正确的。

意外行为2:我已将SOCB配置为在期间匹配时触发。  但是如果我使用TBCTR =0进行初始化,则在启用SOCB时,我会立即得到SOCB触发器。  TBCTR仍显示为零。

我有说明问题的代码,希望与他人进行WebEx交流。  请告诉我。

此致

David

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

    我对第一个问题的第一个想法是,这可能是TBPRD尚未从影子寄存器中加载。 当计数器溢出时,很可能会触发阴影到活动负载。

    对于第二个问题,我必须查看一下代码。 您能否将其脱机发送给我,我们也可以讨论如何进一步提供支持。

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

    您好,Kris,

    三大珠三角的影子实际上是这两个问题的问题。  对于第二个问题,初始活动PRD 寄存器必须为零。  因此,SOCA在ZRO上触发,SOCB在PRD上正确触发,两者同时进行。

    解决此问题的方法是在TBCTL寄存器中设置PRD寄存器的立即重新加载,写入初始PRD值,然后将TBCTL设置为 在ZRO匹配时重新加载PRD以进行正常(典型)操作。  例如:

     EPwm2Regs.TBCTL.ALL = 0x003B;   //配置计时器控制寄存器
    //位15-14    00:    空闲/软,emu halt:11 =忽略,00 =立即停止
    //位13       0:     PHSDIR,0=同步事件后倒计时
    //位12-1万    :   CLKDIV,000 => TBCLK = HSPCLK/1
    //位9-7000      :   HSPCLKDIV,000 => HSPCLK = EPWMCLK/1
    //位6        0:     SWFSYNC,0 =未生成软件同步
    //位5-4      11:    SYNCOSEL,11 =禁用同步输出
    //位3        1:     PRDLD,0 =在ZRO上重新加载PRD,1 =访问时立即重新加载
    //位2        0:     PHSEN,0=禁用相位控制
    //位1-0      11:    CTRMODE,11=定时器停止(禁用)

     EPwm2Regs.TBCTR = 0x0000;    //清除计时器计数器

     EPwm2Regs.TBPRD = ADC_SAMPLE_PERiod; //设置计时器周期
     EPwm2Regs.TBCTL.bit.PRDLD = 0;       //在ZRO上重新加载PRD

    我将关闭此线程。  谢谢!

    David

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

    很好。 我很高兴我们能提供帮助。

    克里斯
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    嗯,我的变通办法没有完全做到这一点。 似乎很容易错过第一个阶段并绕过。 我还在调查

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

    David,

    您将阴影活动加载事件设置为什么? 是否可以临时使用PHSEN并对初始卷影到活动副本执行SWFSYNC?

    编辑:抱歉-我看到您发布了它PRDLD =0,它在CTR =0上加载阴影TBPRD。  这对于您的初始问题#1是有意义的,但对于第二个问题,如果您从TBCTR =0开始,它不会立即加载影子寄存器,我对此感到惊讶。  我是否正确理解了第2项?


    此致,
    克里斯

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

    您好,Kris,

    我发现需要这样做:

       EPwm2Regs.TBCTL.ALL = 0x003B;   //配置计时器控制寄存器
    //位15-14    00:    空闲/软,emu halt:11 =忽略,00 =立即停止
    //位13       0:     PHSDIR,0=同步事件后倒计时
    //位12-1万    :   CLKDIV,000 => TBCLK = HSPCLK/1
    //位9-7000      :   HSPCLKDIV,000 => HSPCLK = EPWMCLK/1
    //位6        0:     SWFSYNC,0 =未生成软件同步
    //位5-4      11:    SYNCOSEL,11 =禁用同步输出
    //位3        1:     PRDLD,0 =重新加载PRD:0 = ZRO,1 =访问时立即
    //位2        0:     PHSEN,0=禁用相位控制
    //位1-0      11:    CTRMODE,11=定时器停止(禁用)

       EPwm2Regs.TBPRD = ADC_SAMPLE_PERiod; //设置计时器周期(活动寄存器)
       EPwm2Regs.TBCTL.bit.PRDLD = 0;         //在ZRO上重新加载活动PRD
       EPwm2Regs.TBPRD = ADC_SAMPLE_PERiod;   //设置计时器周期(阴影寄存器)

    如果将重新加载配置为立即,则实际上不会加载影子PRD。  设计必须是阴影或活动的,而不是通过阴影传递到活动的。  因此,在配置阴影模式后,您必须执行第二次写入以加载阴影。  这似乎是成功的。

    此致,

    David