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.

[参考译文] TMS320F28379D:下降沿上的 ePWM 干扰

Guru**** 2589265 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1110563/tms320f28379d-epwm-glitches-on-falling-edge

器件型号:TMS320F28379D

您好!  

我在 ePWM 模块上遇到干扰问题。 如下所示、在 PWMA 通道 A 信号的每个下降沿之后、我将得到4-8 nS 的12nS 干扰。

以下是我的寄存器配置的片段:

  • 周期频率:20kHz
    • PWM 时钟设置为50MHz
  • 向上计数模式
  • 50%占空比
  • 期间事件的影子加载  
  • 在比较器 A 递增计数周期事件上设置为低电平
  • 在零事件发生时设置为高电平

我尝试将影子加载更改为零事件而不是周期事件、但它没有改变任何东西。

谢谢

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

    您好、Braden、

     您是否在程序执行期间更改了任何参数、例如周期、CMPA、AQ 设置? 如果没有、您可以共享您的初始化代码吗? 这样我们就可以更轻松地复制您的配置和测试。  

    此致、

    Marlyn

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

    您好、Marlyn、

    初始化并启动 PWM 后、我不会更改任何设置。 下面是我的初始化代码:

    //向上计数
    gEPwmPhaseARef->TimeBaseCtrl.bit.CounterMode = 0;

    //将周期频率设置为20kHz
    gEPwmPhaseARef->TimeBaseCtrl.bit.TbClkDiv = 0;
    gEPwmPhaseARef->TimeBaseCtrl.bit.HsTbClkDiv = 0;
    gEPwmPhaseARef->TimeBasePeriod.bit.Period = 2499;

    //期间事件上的影子加载
    gEPwmPhaseARef->CountCompCtrl.bit.ShadowImage = false;
    gEPwmPhaseARef->CountCompCtrl.bit.LoadAMode = 1;
    gEPwmPhaseARef->CountCompCtrl.bit.LoadASync = 0;

    //将占空比设置为50%
    gEPwmPhaseARef->CountCompA.bit.Comp = 1249;

    //在比较器 A 递增计数周期事件上设置为低电平/在零事件上设置为高电平
    gEPwmPhaseARef->ActionQualACtrl.bit.CompAUp = 1;
    gEPwmPhaseARef->ActionQualACtrl.bit.Zero = 2;

    //重置计数和相位方向
    gEPwmPhaseARef->TimeBaseCtrl.bit.PhaseDir = 0;
    gEPwmPhaseARef->TimeBaseCtrl.bit.CounterMode = 0;

    gEPwmPhaseARef->TimeBaseCount.bit.Count = 0;

    //启用 EnableEpwmTbClock
    EPwmModule::InitializationFined();

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

    此外、如果我使用具有400nS 死区的 PWM1通道 A 启用互补对、我会看到在两个输出通道之间传播了一些噪声。 如图所示、一个 PWM 信号的每个上升沿都会在另一个通道上引起4 - 8ns 的毛刺脉冲。  

    以下是我针对这种情况的初始化代码:

    //向上计数
    gEPwmPhaseARef->TimeBaseCtrl.bit.CounterMode = 0;

    //将周期频率设置为20kHz
    gEPwmPhaseARef->TimeBaseCtrl.bit.TbClkDiv = 0;
    gEPwmPhaseARef->TimeBaseCtrl.bit.HsTbClkDiv = 0;
    gEPwmPhaseARef->TimeBasePeriod.bit.Period = 2499;

    //期间事件上的影子加载
    gEPwmPhaseARef->CountCompCtrl.bit.ShadowImage = false;
    gEPwmPhaseARef->CountCompCtrl.bit.LoadAMode = 1;
    gEPwmPhaseARef->CountCompCtrl.bit.LoadASync = 0;

    //将占空比设置为50%
    gEPwmPhaseARef->CountCompA.bit.Comp = 1249;

    //在比较器 A 递增计数周期事件上设置为低电平/在零事件上设置为高电平
    gEPwmPhaseARef->ActionQualACtrl.bit.CompAUp = 1;
    gEPwmPhaseARef->ActionQualACtrl.bit.Zero = 2;

    //重置计数和相位方向
    gEPwmPhaseARef->TimeBaseCtrl.bit.PhaseDir = 0;
    gEPwmPhaseARef->TimeBaseCtrl.bit.CounterMode = 0;

    gEPwmPhaseARef->TimeBaseCount.bit.Count = 0;

    //强制通道 B 关闭
    gEPwmPhaseARef->QualActionContactSoftForce.bit.ContSoftForceB = 1;

    //在期间启用去带阴影加载模式
    gEPwmPhaseARef->DeadBandCtrl2.bit.ShadowImage 模式= true;
    gEPwmPhaseARef->DeadBandCtrl2.bit.LoadBCtrlMode = 1;

    gEPwmPhaseARef->DeadBandCtrl.bit.ShadowImage FedMode = false;
    gEPwmPhaseARef->DeadBandCtrl.bit.LoadFedMode = 1;

    gEPwmPhaseARef->DeadBandCtrl.bit.ShadowImage = true;
    gEPwmPhaseARef->DeadBandCtrl.bit.LoadRedMode = 1;

    //将 aband 设为400nS
    gEPwmPhaseARef->DeadBandRed.bit.delay = 20;
    gEPwmPhaseARef->DeadBandFed.bit.delay = 20;

    //通道 A / B 上的输出互补对
    gEPwmPhaseARef->DeadBandCtrl.bit.InputMode = 0;
    gEPwmPhaseARef->DeadBandCtrl.bit.OutputMode = 3;
    gEPwmPhaseARef->DeadBandCtrl.bit.OutputSwap = 0;
    gEPwmPhaseARef->DeadBandCtrl.bit.PolaritySel = 2;

    //启用 EnableEpwmTbClock
    EPwmModule::InitializationFined();

    如果有用、下面显示的蓝色路径是基于上述初始化代码的死区子模块所采用的配置。

     这些只是 PWM 信号彼此相邻布线的伪影吗?我需要在硬件中进行滤波? 或者这是软件中的问题吗?

    谢谢!

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

    您好、Braden、

    我认为您设置软件的方式没有任何问题。 我甚至运行了您的确切配置、但我没有看到任何问题:

    正确的频率、无干扰

    400nsec 死区的更近视图

    使用的代码 I:

        EPwm1Regs.TBPRD = 2499;
        EPwm1Regs.TBPHS.bit.TBPHS = 0x0000;
        EPwm1Regs.TBCTR = 0x0000;
    
        EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;
        EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;
        EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
        EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;
    
        EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_IMMEDIATE;
        EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_IMMEDIATE;
        EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
        EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
    
        EPwm1Regs.CMPA.bit.CMPA = 1249;
    
        EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;
        EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET;
        EPwm1Regs.AQCTLB.bit.CAU = AQ_CLEAR;
        EPwm1Regs.AQCTLB.bit.ZRO = AQ_SET;
    
        EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE;
        EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;
        EPwm1Regs.DBCTL.bit.IN_MODE = DBA_ALL;
        EPwm1Regs.DBRED.bit.DBRED = 20;
        EPwm1Regs.DBFED.bit.DBFED = 20;

    我会检查这是否是硬件问题。 如果可以、请探测器件中的引脚。

    此致、

    Marlyn

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

    您好、Marlyn、

    它看起来只是我的逻辑分析仪探头设置的产物。 使用 O 示波器、我可以看到没有干扰。  

    感谢您的帮助!