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

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




- 周期频率:20kHz
- PWM 时钟设置为50MHz
- 向上计数模式
- 50%占空比
- 期间事件的影子加载
- 在比较器 A 递增计数周期事件上设置为低电平
- 在零事件发生时设置为高电平
我尝试将影子加载更改为零事件而不是周期事件、但它没有改变任何东西。
谢谢
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.
您好!
我在 ePWM 模块上遇到干扰问题。 如下所示、在 PWMA 通道 A 信号的每个下降沿之后、我将得到4-8 nS 的12nS 干扰。

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




我尝试将影子加载更改为零事件而不是周期事件、但它没有改变任何东西。
谢谢
您好、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