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.

[参考译文] LAUNCHXL-F28377S:在低电平期间由 ePWM 引起的奇怪尖峰

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/568358/launchxl-f28377s-weird-spikes-caused-by-the-epwm-at-low-periods

器件型号:LAUNCHXL-F28377S

大家好!

我尝试使用 F28377S 评估板的 ePWM 模块生成高频/低占空比信号、并且在信号周期小于~900ns 时测量奇怪的干扰。

这是我的 ePWM 配置:

ClkCfgRegs.PERCLKDIVSEL.BIT.EPWMCLKDIV = 0x1;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 0x0;


EPwm6Regs.TBCTL.bit.CTRMODE = 0;//向上计数

EPwm6Regs.TBPRD = 130;
EPwm6Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;

EPwm6Regs.CMPA.bit.CMPA = 4;
EPwm6Regs.AQCTLA.bit.CAU = AQ_SET; //切换至高

EPwm6Regs.CMPB.BIT.CMPB = 8;
EPwm6Regs.AQCTLA.bit.CBU = AQ_CLEAR;//切换回低

CpuRegs.PCLKCR0.bit.TBCLKSYNC = 0x1;SysSysRegs.PCLKCR0.bit.TBCLKSYNC = 0x1; 

此外、如 spruhx5c-TRM 第2.7.6.4节所述、将时钟计算为200MHz -3%。

在离开 EPwm6Regs.TBPRD >= 130时、一切工作正常、如下图所示:

但是、一旦我更改 TBPRD=120 (或860ms)、奇怪的干扰就会开始出现:

经过一些测试后、我注意到了以下几点:

-尖峰仅出现在特定的物理时间(<900ns)以下。 将时钟速度和 TBPRD 除以2会得到相同的结果。

-它们在 TBPRD = 50和 TBPRD = 25时消失(很可能是因为它们与信号重叠)

-改变针脉冲的宽度(EPwm6Regs.CMPB.bit.CMPB)无效。

我想知道这是硬件限制还是我缺少其他东西。

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

    您好、Mario、

    您的 SYSCLK 或 EPWMCLK 是200MHz 吗?  虽然系统可以在200MHz 下运行、但请记住、PWM 限制为100MHz。  有一个名为 EPWMCLKDIV 的寄存器、如果 SYSCLK 为200MHz、该寄存器必须设置为2分频。

    编辑:我在代码中看到 EPWMCLKDIV = 1、因此 PWM 应该以100MHz 的频率运行、这是很好的。  您是否对 ePWM 执行任何其他配置、还是整个初始化代码?  当问题发生时、您能否在 CCS 的 Registers 视图中向我们展示 ePWM 寄存器的值?

    这是哪个 ePWM? 您是否启用了任何同步源?

    此致、

    Kris

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

    你好,Kris!

    感谢您的回复。 我也会使用其他(已同步) EPWM。 但是、即使我禁用了所有功能、我仍然会遇到相同的问题。

    因此、如果编写的程序仅设置时钟并初始化 EPwm6、包括其 GPIO。 下面是完整代码:

    #include "F28x_Project.h"
    
    void InitEpwm6 ();
    
    void main (void)
    {
    InitSysCtrl ();// PLL、看门狗、启用外设时钟。 在 F2837xS_SYSCTRL.c
    
    
    
    中找到的函数 InitEpwm6 ();
    InitEPwm6Gpio ();//在 F2837xS_ePWM.c
    
    中找到(;)
    {
    
    }
    
    
    void InitIpuwm6 ()
    {
    EALLOW;ClkCfgRegs.CLKPERCMP.0
    
    = 0xTBIT.TCMP0 = 0xTBIT.EPIC.0=0xTCMP0=0xTPRK = 0xTCMP0=0.TBIT.TBIT.TCMP0=0=0.TBIT.TBIT.TCMP0=0=0.TBIT.TBIT.TCMP0=0=0=0.TBIT.TBIT.TCMP0=0
    
    
    //向上计数
    EPwm6Regs.TBPRD = 16;//计时器周期
    
    EPwm6Regs.CMPA.bit.CMPA = 4;
    EPwm6Regs.AQCTLA.bit.CAU = AQ_SET;//切换到高
    
    电平 EPwm6Regs.CMPB.BIT.CMPB = 10;EPwm6LAA.bit.CAU
    =低电平;//切换到高电平 EPwm6Regs.CBRq.CLA./位
    
    EALLOW;
    CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 0x1;//启动 ePWM
    EDIS;
    }
    
    //将 CPU 时钟设置为200MHz -3%
    InitClock()
    {
    EALLOW;
    ClkCfgRegs.CLKSRCCTL1.bit.OSCCLKSRCSEL=0x0;//选择 INTOSC2作为时钟源。 注意这样做会将 FAULT 和 IMULT 复位为0
    ClkCfgRegs.SYSCLKDIVSEL.AL=0x4;//将时钟分频器设置为较低的初始频率
    
    ClkCfgRegs.SYSPLLULT.ALL |=0x326;//设置时钟乘法器
    while (ClkCfgRegs.SYSPLLML.ST.ALL
    
    =
    0x326;//设置时钟重复)
    while (ClkCfgRegs.SYSPLLSTS.bit.lock!= 1){}
    
    
    ClkCfgRegs.SYSPLLCTL1.bit.PLLCLKEN =1;//将 PLL 输出时钟(PLLRAWCLK)连接到系统
    
    ClkCfgRegs.SYSCLKDIVSEL.ALL =
    
    1;//最后一个时钟分频器= 0xfSCLK = 1;/全速率= 1;ClkSCLKDIVCLUSCI = 1。 LSPCLK = SYSCLK/(Value+1)
    EDIS;
    }
    
    
    启动程序时,示波器显示以下结果(很抱歉手机图像,但示波器无法访问 USB-Stick): 
     


    以下是 CCS6 Registers-tab 的导出值:

    R EPwm6Regs_TBCTL 0x0000000F 0x0080
    R EPwm6Regs_TBCTL2 0x0000000F 0x0000
    R EPwm6Regs_TBCTR 0x0000000F 0x000B
    R EPwm6Regs_TBSTS 0x0000000F 0x0003
    R EPwm6Regs_CMPCTL 0x0000000F 0x0000
    R EPwm6Regs_CMPCTL2 0x0000000F 0x0000
    R EPwm6Regs_DBCTL 0x0000000F 0x0000
    R EPwm6Regs_DBCTL2 0x0000000F 0x0000
    R EPwm6Regs_AQCTL 0x0000000F 0x0000
    R EPwm6Regs_AQTSRCSEL 0x0000000F 0x0000
    R EPwm6Regs_PCCTL 0x0000000F 0x0000
    R EPwm6Regs_HRCNFG 0x0000000F 0x0000
    R EPwm6Regs_HRPWR 0x0000000F 0x0000
    R EPwm6Regs_HRMSTEP 0x0000000F 0x0000
    R EPwm6Regs_HRCNFG2 0x0000000F 0x0000
    R EPwm6Regs_HRPCTL 0x0000000F 0x0000
    R EPwm6Regs_GLDCTL 0x0000000F 0x0000
    R EPwm6Regs_GLDCFG 0x0000000F 0x0000
    R EPwm6Regs_EPWMXLINK 0x0000000B 0x50055555
    R EPwm6Regs_AQCTLA 0x0000000F 0x0120
    R EPwm6Regs_AQCTLA2 0x0000000F 0x0000
    R EPwm6Regs_AQCTLB 0x0000000F 0x0000
    R EPwm6Regs_AQCTLB2 0x0000000F 0x0000
    R EPwm6Regs_AQSFRC 0x0000000F 0x0000
    R EPwm6Regs_AQCSFRC 0x0000000F 0x0000
    R EPwm6Regs_DBREDHR 0x0000000F 0x0000
    R EPwm6Regs_DBRED 0x0000000F 0x0000
    R EPwm6Regs_DBFEDHR 0x0000000F 0x0000
    R EPwm6Regs_DBFED 0x0000000F 0x0000
    R EPwm6Regs_TBPHS 0x0000000B 0x00000000
    R EPwm6Regs_TBPRDHR 0x0000000F 0x0000
    R EPwm6Regs_TBPRD 0x0000000F 0x0010
    R EPwm6Regs_CMPA 0x0000000B 0x00040000
    R EPwm6Regs_CMPB 0x0000000B 0x000A0000
    R EPwm6Regs_CMPC 0x0000000F 0x0000
    R EPwm6Regs_CMPD 0x0000000F 0x0000
    R EPwm6Regs_GLDCTL2 0x0000000F 0x0000
    R EPwm6Regs_TZSEL 0x0000000F 0x0000
    R EPwm6Regs_TZDCSEL 0x0000000F 0x0000
    R EPwm6Regs_TZCTL 0x0000000F 0x0000
    R EPwm6Regs_TZCTL2 0x0000000F 0x0000
    R EPwm6Regs_TZCTLDCA 0x0000000F 0x0000
    R EPwm6Regs_TZCTLDCB 0x0000000F 0x0000
    R EPwm6Regs_TZEINT 0x0000000F 0x0000
    R EPwm6Regs_TZFLG 0x0000000F 0x0000
    R EPwm6Regs_TZCBCFLG 0x0000000F 0x0000
    R EPwm6Regs_TZOSTFLG 0x0000000F 0x0000
    R EPwm6Regs_TZCLR 0x0000000F 0x0000
    R EPwm6Regs_TZCBCCLR 0x0000000F 0x0000
    R EPwm6Regs_TZOSTCLR 0x0000000F 0x0000
    R EPwm6Regs_TZFRC 0x0000000F 0x0000
    R EPwm6Regs_ETSEL 0x0000000F 0x0000
    R EPwm6Regs_ETPS 0x0000000F 0x0000
    R EPwm6Regs_ETFLG 0x0000000F 0x0000
    R EPwm6Regs_ETCLR 0x0000000F 0x0000
    R EPwm6Regs_ETFRC 0x0000000F 0x0000
    R EPwm6Regs_ETINTPS 0x0000000F 0x0000
    R EPwm6Regs_ETSOCPS 0x0000000F 0x0000
    R EPwm6Regs_ETCNTINITCTL 0x0000000F 0x0000
    R EPwm6Regs_ETCNTINIT 0x0000000F 0x0000
    R EPwm6Regs_DCTRIPSEL 0x0000000F 0x0000
    R EPwm6Regs_DCACTL 0x0000000F 0x0000
    R EPwm6Regs_DCBCTL 0x0000000F 0x0000
    R EPwm6Regs_DCFCTL 0x0000000F 0x0000
    R EPwm6Regs_DCCAPCTL 0x0000000F 0x0000
    R EPwm6Regs_DCFOFFSET 0x0000000F 0x0000
    R EPwm6Regs_DCFOFFSETCNT 0x0000000F 0x0000
    R EPwm6Regs_DCFWINDOW 0x0000000F 0x0000
    R EPwm6Regs_DCFWINDOWCNT 0x0000000F 0x0000
    R EPwm6Regs_DCCAP 0x0000000F 0x0000
    R EPwm6Regs_DCAHTRIPSEL 0x0000000F 0x0000
    R EPwm6Regs_DCALTRIPSEL 0x0000000F 0x0000
    R EPwm6Regs_DCBHTRIPSEL 0x0000000F 0x0000
    R EPwm6Regs_DCBLTRIPSEL 0x0000000F 0x0000



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

    我只是想为您提供一个快速更新:

    我意识到上面的代码有一个小错误,我不是实际调用函数 InitClock()。 但是、即使在解决此问题并相应地调整 EPWM 周期后、问题仍然存在。

    经过一些调试后、我发现该问题仅在某些 EPWM/引脚(即 EPWM6A、EPWM6B 和 EPWM7B)上出现。 因此、我开始怀疑这是一个与硬件相关的问题、这也可能是由于我在同一电路板上调试项目超过5个月。

    现在、我通过使用不同的 ePWM 来解决了这个问题。

    由于其他一些磨损迹象、我们无论如何都会订购一个新的电路板。 如果新硬件送达后问题仍然存在、我可以为您提供另一个更新。

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

    我很高兴您找到了该问题的解决方案。 我将继续尝试重现此问题、以进一步了解该问题。 您的软件是否具有敏感性质、会阻止您将其上传到此处? 如果是、我可以通过电子邮件与您联系、以获取必要的器件、以便直接在此处的某个器件上运行应用程序。

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

    感谢你的答复。
    我将在星期五回到实验室时上传项目的 zip 文件。

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

    谢谢! 此外、如果您有机会获得更好的示波器捕获、这也可能对我们有所帮助。 小尖峰是否可能是附近引脚或外部系统布线上的噪声?

    此致、
    Kris
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    通过使用不同的分频器、您可以在较低的输出频率下消除毛刺脉冲。
    EPwm6Regs.TBCTL.bit.HSPCLKDIV
    EPwm6Regs.TBCTL.bit.CLKDIV
    此外、仅当 TBPRD=0或 TBPRD=TBCTR 时、才更新这些分频器。
    我使用在上述任一条件下触发的 ePWM ISR。
    在 ISR 中、我检查是否需要更改分频器。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!


    感谢您的建议。 我尝试使用了几个不同的分频器、但不幸的是、它没有效果。

    复位后 TBPRD 和 TBCTR 默认为0、并且在初始化完成且 CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=1之前 TBCTR 不会改变。

    我知道我的示波器非常糟糕、但我确信尖峰不仅仅是噪声。 此外、我还使用 ePWM 触发 ADC 的转换、而尖峰额外触发 ADC。 下面是 EPWM2A (蓝色)与 EPWM6A 的对比图像。

    我可以在星期一访问不同的示波器、可以在 USB 上保存实际数据。

    这也是应该复制问题的简单项目的承诺 zip 文件。

    e2e.ti.com/.../EPWM-Glitch-Test.zip

    此致、谢谢

    Mario

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

    Mario、

    感谢您提供更多信息和代码。 我将在下周运行您的项目、看看这是否允许我们重现问题。

    此致、

    Kris