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.

[参考译文] TMS320F28375S:ePWM 干扰

Guru**** 2538950 points
Other Parts Discussed in Thread: TMS320F280049C

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/980535/tms320f28375s-epwm-glitch

器件型号:TMS320F28375S
主题中讨论的其他器件:TMS320F280049C

您好!

我在 ePWM 模块中遇到了一个奇怪的问题。 当比较值从小于最大计数器到大于最大计数器时、我会在 PWM 波形中看到毛刺脉冲。

ePWM 配置:

递增/递减计数器模式

ePWM 时钟100MHz

最大周期:2500 (这为我提供了一个 PWM 频率20kHz)

PWM 输出:低电平有效互补

我使用比较值2450在 PWM 以恒定占空比运行的情况下进行了测试、然后手动将比较值更新为2550。 我可以在信号上看到干扰。

下面的屏幕截图。  

 另一项测试是在 PWM 以恒定占空比运行、比较值为2450、然后以较小的阶跃上升、如2480,2499,2500,2501,2501和2550。 我没有在信号上看到干扰。

我在不同的 PWM 模块上尝试过这种方法、结果是相同的。 那么、这是模块中的一个错误吗?

CCS 版本10.1

我在 e2e 论坛中看到过很少有关 ePWM 干扰的帖子、但我认为我的问题不是其中的一部分。

谢谢你。

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

    您好、Gobind、

    是否可以重新附上您的数字? 它似乎没有经过。

    您的操作限定符设置是什么?

    此致、

    Marlyn

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

    您好!  

    我已重新附加屏幕截图。 忽略紫色线。 蓝色表示 ePWMA、绿色表示 ePWMB。 它们配置为低电平有效互补模式。

    操作限定符设置:

    AQCTLA.bit.CAU = AQ_CLEAR;
    AQCTLA.bit.CAD = AQ_SET;

    谢谢你。

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

    您好、Gobind、

    感谢您重新附加图像。 我确实看到了您现在提到的干扰。 它似乎发生了两次、这是否一致?

    您还提到过手动更新比较值、是通过 CCS 中的表达式窗口执行此操作、还是在代码中比较值发生变化的位置?  

    此外、您是否正在进行影子加载? 这在零周期上发生吗? 如果我可以看到您的其余初始化代码、那会有所帮助。

    此致、

    Marlyn

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

    您好、Marlyn、

    是的、干扰非常一致。

    我通过表达式窗口更改比较值。

    它是在零和周期发生的影子加载。

    我对这个问题做了进一步的调查。 我为另一个控制器编写了 PWM 代码:TMS320F280049C。 我发现该微控制器也存在毛刺脉冲。 ePWM 模块中有一些东西。

    重要的一点是、只有当 PWM 配置为"低电平有效互补"时才会发生这种情况。 在"高电平有效互补"的情况下、ePWMA 输出上没有干扰、但 ePWMB 输出上有干扰。

    谢谢你。

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

    您好、Gobind、

    请向我提供其余的初始化代码吗? 我将尝试从我的末端重新创建它、并弄清发生了什么。

    此致、

    Marlyn

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

    您好、Marlyn、

    下面是我使用的设置。  

    TBCTL.bit.PHSDIR = 0;
    TBCTL.bit.PRDLD = 0;
    TBCTL.bit.CTRMODE = UP_DOWN_COUNT_MODE;
    TBCTL2.bit.PRDLDSYNC = LOAD_ON_ZERO;

    TBCTR = 0;
    TBPRD = 2500;

    CMPCTL.bit.LOADAMODE = C_LOAD_ON_ZERO 或_P;
    CMPCTL.bit.LOADBMODE = C_LOAD_ON_ZERO 或_P;
    CMPCTL.bit.SHDWAMODE = 0;
    CMPCTL.bit.SHDWBMODE = 0;

    DBCTL.bit.DEDB_MODE = 0;
    DBCTL.bit.IN_MODE = 0;
    DBCTL.bit.POLSEL = ACTIVE_LOW_互补;
    DBCTL.bit.OUT_MODE = 0x3;
    DBRED.bit.DBRED = DB_2us;
    DBFED.bit.DBFED = DB_2us;

    AQCTL.bit.LDAQAMODE = C_LOAD_ON_ZERO 或_P;
    AQCTL.bit.LDAQBMODE = C_LOAD_ON_ZERO 或_P;
    AQCTLA.bit.CAD = 2;
    AQCTLA.bit.CAU = 1;

    测试方案:

    (ePWM 时钟为100MHz、因此在向上/向下计数模式下的2500 TBPRD 将为我提供20kHz 的 PWM、周期为50us)

    1.以恒定占空比加载并运行代码。

    2.在表达式窗口中将比较 A 值更新为2400。 (由于低电平有效配置、这将提供占空比极低的波形-大约2us)

    3.将示波器设置为在脉冲宽度大于10us 时触发、并将其设置为单次捕获。

    4.在表达式窗口中将比较 A 值更新为2600。

    5.示波器应已触发,示波器上的最后一个脉冲宽度将略高于50us。

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

    另一个更新:

    如果按以下顺序更新 CMP 值、则会出现该干扰。

    1.2499

    2. 2501.

    但是、如果按以下顺序更新 CMP 值、则不会出现毛刺脉冲:

    1.2499

    2. 2500

    3.2501.

    谢谢你。

    Gobind Singh

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

    您好、Gobind、

    感谢您提供其余的初始化。 请给我一天时间在我的系统上测试这个。 重复此问题后、我将回复。

    此致、

    Marlyn

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

    您好、Gobind、

    我能够去实验室用示波器测试这一点、并复制您看到的干扰。   

    我认为正在发生的情况如下:

    您的影子到活动加载发生在零或周期事件期间。 您的干扰表示错过了两个事件:Cau 和 CAD。  

    现在、在您的脉冲(干扰)中、输出变为高电平(意味着发生了 CAU 事件(清零)、输出处于互补模式)。 下一个事件是 TBCTR=TBPRD、在该事件中加载新的 CMPA 值(CMPA > TBPRD)。 现在、直到下一次 TBCTR=TBPRD 时、下一个 CAU 或 CAD 事件才会发生、因为 CMPA 现在大于 TBPRD。 一旦下一个 TBCTR=TBPRD 事件发生、CAD 操作应具有优先级并生效。

    最大限度地减少这种情况的一种方法是仅在零事件而非零事件和周期上加载 CMPA、以免错过 CAD 事件。

    请告诉我、这是否不够清楚、或者您有任何疑问。

    此致、

    Marlyn

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

    您好、Marlyn、

    感谢您的详细解释。 我不理解该部分:

    [引用用户="Marlyn Rosales Castaneda20"]

    现在、直到下一次 TBCTR=TBPRD 时、下一个 CAU 或 CAD 事件才会发生、因为 CMPA 现在大于 TBPRD。 一旦下一个 TBCTR=TBPRD 事件发生、CAD 操作应具有优先级并生效。

    [/报价]

    为什么 CAD 操作在事件发生时发生(TBCTR=TBPRD)? 根据我的理解、CMPA 值被加载到(TBCTR=TBPRD)、而 CAD 或 CAU 操作只发生在(TBCTR=CMPA)。 由于 CMPA 现在高于 TBPRD、因此不应发生 CAD 或 CAU 操作、并且波形应保持高电平。

    谢谢你

    Gobind Singh

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

    您好、Gobind、

    当 CMPA 或 CMPB 被设定为比 TBPRD 高的值时、操作仍会发生、但是当 TBCTR=TBPRD 时。 查看技术参考手册(TRM)中的下表。 标题上有一个小拼写错误。 第一列应为'CAU/CBU'而不是'CAD/CBD'。

    还有一个描述事件优先级的优先级表:

    此致、

    Marlyn

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

    明白了。

    非常感谢您的快速回复。

    此致

    Gobind Singh

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

    我很高兴、希望这能解决您的问题!

    此致、

    Marlyn