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.

[参考译文] TMS320F28377S:ePWM 同步链会破坏 ADCSOC 事件的生成

Guru**** 2482225 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/685792/tms320f28377s-epwm-sync-chain-destroys-adcsoc-event-generation

器件型号:TMS320F28377S

您好!

我观察到以下有趣的行为:

首先、我有一个 PWM 控制任务被分成两部分、所以我使用两个 ADC 转换:一个在零事件(TBCTR = 0)上、另一个在周期事件上、而使用的两个模块的 PWM 计数器模式为上-下。 工作正常、我在每个周期获得2个 ADC 中断(比率1:1)。

其次、我必须将我的 PWM 与外部信号同步。 我使用第三个 ePWM 模块作为内部同步信号的源、该信号与使用 ECAP 的外部信号进行比较。 第三个 ePWM (EPwm1)为其他两个 ePWM (7和8)生成 SYNCI 信号。 通过调整 EPwm1的周期和同步链来实现同步(请参阅图13-7)。 TRM SPRUHX5E.pdf 中的时基计数器同步方案)将同步转发至另外两个模块。 也可以正常工作。

但是,一旦同步运行(外部信号打开),我在0上获得的 ADC 转换/中断比在0上得到的时间要少得多,现在这个比率大约为1/sqrt (2):1。 由于我使用 TBPHS = 0、所以我希望零事件(生成)在每个周期中发生(TBCTR = TBPHS = 0!)、但很明显、它不会发生。

作为一种权变措施、我将 EPwm1用于 ADCSOC 生成、一切都很好。

我在 TRM 中没有发现任何有关此行为的提示。

弗兰克

下面是一些代码片段以进行说明:

   /*时基控制寄存器(TBCTL)-设置计数器模式、分频器*/
   ePWM_regs->TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;//向上计数/向下计数*/
   ePWM_regs->TBCTL.bit.PHSEN = TB_ENABLE;        //启用相位加载
   ePWM_regs->TBCTL.bit.PRDLD = 0;                //在 CTR = 0和 SYNC */上
   ePWM_regs->TBCTL.bit.SYNCOSEL = 0;             // SYNCO = SYNCI *
   ePWM_regs->TBCTL.bit.HSPCLKDIV = TB_DIV1;      //时钟 DIVS = 1 *
   ePWM_regs->TBCTL.bit.CLKDIV = TB_DIV1;
   ePWM_regs->TBCTL.bit.free_soft = 0x02;         // 0x02 =自由运行*/
   /*时基控制寄存器2 (TBCTL2)*/
   ePWM_regs->TBCTL2.all = 0x0000;    //默认= 0 */
   /*时基计数器寄存器(TBCTR)-清除计数器*/
   ePWM_regs->TBCTR = 0x0000;
   /*时基状态寄存器(TBSTS)-清除事件*/
   ePWM_regs->TBSTS.bit.CTRMAX = 1;
   ePWM_regs->TBSTS.bit.SYNCI = 1;
   /*时基相位高(TBPHS)*/
   ePWM_regs->TBPHS.all = 0x00000000;

这对于同步 ePWM 模块不起作用:

   /*在0上生成 SOC 事件*/
   ePWM_regs->ETSEL.bit.SOCAEN = 1;          //在组上启用 SOC */
   ePWM_regs->ETSEL.bit.SOCASEL = 1;          // 1 = SOC on CTR = ZRO */

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

    您好!

    我想我需要更多的细节。 您如何确定0上的 ADC 转换是在外部同步开启时错过的转换? 此外、外部同步是周期性的吗? 这个外部同步是否有可能以高于设定的 PWM 周期的速率进入?

    您是否可以为所需和观察到的结果绘制 PWM 波形以及时基计数器波形?

    谢谢。

    Hrishi

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

    Hrishni、

    回答您的问题:

    [引用 USER="Hrishi Nene"]您如何确定0上的 ADC 转换是在外部同步开启时错过的转换? [/报价]

    我只对控制任务 T1 (SOCA 在零)和 T2 (SOCB 在周期)中的中断进行计数

    [引用 USER="Hrishi Nene"]此外,外部同步是否是周期性的? 这个外部同步是否有可能以高于设定的 PWM 周期的速率进入? [/报价]

    是的、是的。 两个信号的周期几乎相同、并且由于石英时钟发生器的不同、它们之间的差异很小。

    我有以下解释:由于同步链的同步、TBCTR 7不能减至零、因为 TBPHS = 0重新加载。 如果由于 PWM1的周期调整、TBPRD1 - 1 < 2 * TBPRD7会发生这种情况。 我想(通过硬件)如果通过计数达到 CTR=0、但如果通过同步将 CTR 设置为0、则会生成 SOC 事件。 IMHO 在不更改硬件的情况下没有解决方法、但应在 TRM 中提及该行为。

    [引用 USER="Hrishi Nene"]是否可以为所需和观察到的结果绘制 PWM 波形以及时基计数器波形? [/报价]

    您可以在随附的文件中找到一个 sketch、我希望它是 readable.e2e.ti.com/.../pwm_5F00_timing_5F00_201805030907.pdf

    此致、

    弗兰克

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

    感谢您的解释和草图。 我相信、如果您使用相同的外部 SYNC 信号来同步 PWM7和 PWM8时基、SOC 的数量应该匹配。 不过、我知道这可能不是您所需要的、因为您希望捕获外部信号的周期并将其用于 PWM。 另一个选项是在 PWM7和 PWM8的 TBPHS 寄存器中使用"1"的值。 此外、选择 PWM7和 PWM8的计数器、以便在发生同步事件(TBCTL[PHSDIR])后递减计数。

    请告诉我这是怎么发生的。

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

    您好、Hrisni、

    很抱歉我的回答延迟。

    EPWM8不参与事件生成、只需用于第二个半桥(当然、它也必须同步)。

    我是按照你的建议和尝试做的

       ePWM_regs->TBCTL.bit.PHSDIR = 0;

       ePWM_regs->TBPHS.all = 0x00010000;

    对于 EPWM7和 EPWM8、我得到的 ADC SOC 数(和中断数)相同-与我以前的解决方案 EPWM1作为 SOC 源且 TBPHS = 0 DID 相同(请参阅上文)。
    我没有详细研究不同的相位负载如何影响同步算法的质量、但总的来说、这两种方法都很好。

    谢谢、此致、

    弗兰克

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

    请澄清一点。 您是否说过、使用 TBPHS 值1并配置从器件时基计数器在同步事件后进行倒计数与使用 PWM1 ADCSOC 的另一种解决方案一样?

    此外,我们是否应该认为这个问题已经解决?

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

    Hrishi、

    [引用用户="Hrishi Nene"]
    请澄清一点。 您是否说过、使用 TBPHS 值1并配置从器件时基计数器在同步事件后进行倒计数与使用 PWM1 ADCSOC 的另一种解决方案一样?
    [/报价]

    是的、在这两种情况下都会生成 ADCSOC 事件、而使用同步 EPWM 本身来生成事件可能是更通用的解决方案、而不是我的额外 EPWM1。 必须考虑不同的时序、例如从周期中减去额外周期。

    [引用用户="Hrishi Nene"]
    此外,我们是否应该认为这个问题已经解决?

    [/报价]

    从我的角度来看、是的。 您可能希望在 TRM 中注意、对于 TBCTL.BIT.PHSDIR 0和1、CTL=ZRO 的事件生成可能无法与 TBPHS = 0同步。 您的硬件设计人员可能希望在 ePWM 外设的下一个版本中进行修复。

    此致、抱歉在我的最后一封邮件中拼写错误、

    弗兰克

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

    感谢您的更新和反馈。

    Hrishi