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.

[参考译文] TMS320F28374D:具有消隐窗口的 ePWM 消隐跳闸区域输入

Guru**** 2430380 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/681100/tms320f28374d-epwm-blanking-trip-zone-input-with-blanking-window

器件型号:TMS320F28374D

我的消隐窗口有问题。 我将采用 Comp7的 PWM2A 作为 TZ 输入。 COMP7INP 连接到 我在评估板上跳线的 ECAP3。 每当 COMP7触发时、PWM2A 也应跳闸并附带以下注意事项。

1) 1) AQ 已用于为 PWM2A 设置最大占空比、因此即使 COMP7未跳闸、它也会跳闸至低电平。

2) 2)消隐窗口用于 PWM2A、它以 CTR = 0为中心、因此 PWM2A 不应在 CTR = 0之前或刚刚之后跳闸。 如果比较器在消隐窗口中跳闸、我希望 PWM2A 根据 AQ 跳闸。

问题是、当比较器跳闸接近消隐窗口的末尾时、我会遇到奇怪的行为。  当 COMP 输出超过 消隐窗口的末尾时、它会在变为低电平状态以保持良好状态之前进行切换。 如果在事件发生时使用 AQTSRCSEL 强制 PWM2A 为低电平、则我不会获得所需的消隐函数。 请参阅下面的比较器、PWM 和 ECAP 设置。 抱歉、示波器镜头不完美、因为 我缺少探针的接地夹。 我是否对消隐窗口执行了错误操作? 如何 通过消隐窗口获得所需的函数?  

光标测量显示的是 PWM2A 周期开始后的210ns、 这对应于消隐窗口结束。  即

(DCFOFFSET + DCFWINDOW - TBPRD)* PWM_PER =(240 + 30 - 249)*10ns = 210ns

//斜坡用于 CMPSS7

cmps7Regs.RAMPDECVALS = glbPT1RampSlope;//每个 CLK 周期从斜坡中减去的值

Cmpss7Regs.RAMPMAXREFS = glbPT1RampMax;//接收到 PWMSYNC 后预加载到斜坡中的值

cmps7Regs.RAMPDLYS.bit.DELAY = 0;//斜坡递减之前 PWMSYNC 之后的时间偏移

Cmpss7Regs.COMPCTL.bit.COMPDACE = 1;//启用比较器/DAC

Cmpss7Regs.COMPDACCTL.bit.RAMPSOURCE = 1;//确定要使用哪个 PWMSYNC 输出;n - 1的值使用 PWMSYNCn (在本例中为 PWM2)

Cmpss7Regs.COMPDACCTL.bit.RAMPLOADSEL = 0;//将 RAMPMAXREF 中的更改同步到 CLK

Cmpss7Regs.COMPDACCTL.bit.DACSOURCE = 1;//将斜升输出到 DAC 中

Cmpss7Regs.COMPDACCTL.bit.SWLOADSEL = 0;//从 SYSCLK 上的 DACHVALS 更新 DACHVALA

Cmpss7Regs.COMPCTL.bit.COMPHINV = 0;//不要反相比较器的输出;V+>V-会导致逻辑高电平、否则为低电平

Cmpss7Regs.COMPCTL.bit.COMPHSOURCE = 0;//通过比较器的负端子馈送 DAC 输出

//设置比较器输出的滤波器参数

cmps7Regs.CTRIPHFILCTL.bit.SAMPWIN = 9;//滤波器窗口将使用10个样本(SAMPWIN + 1)

Cmpss7Regs.CTRIPHFILCTL.bit.THRESH = 8;// 10个样本中的8个必须为高电平才能更改输出

cmps7Regs.CTRIPHFILCLKCTL.bit.CLKPRESCALE = 0;//使用完整的 SYSCLK 进行采样

Cmpss7Regs.CTRIPHFILCTL.bit.FILINIT = 1;//初始化所有采样到滤波器输入值-此时该值应该是低电平

Cmpss7Regs.COMPCTL.bit.CTRIPHSEL = 2;//从比较器中选择数字滤波器输出以驱动 CTRIPH

Cmpss7Regs.COMPCTL.bit.CTRIPOUTHSEL = 2;//从比较器中选择数字滤波器输出以驱动 CTRIPOUTH

 

//基本 PWM2参数

EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;//向上计数模式

EPwm2Regs.TBCTL.bit.PHSEN = TB_ENABLE;//从 PWM1同步 PWM2

EPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;//设置为0 (/1)以保持100MHz EPWMCLK 频率(这使得 TBCLK = EPWMCLK)

EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;//设置 SYNC OUT 以通过 pwm1同步

EPwm2Regs.TBPRD = 249;//在 EPWMCLK 计数中设置周期

// PWM2A 生成 PWM/TRIP 信号

//输出在零时变为高电平有效、并且只持续到所需的最大占空比或触发区

//设置此处和 CLA 中使用的最大占空比计数

EPwm2Regs.CMPA.bit.CMPA = 229

EPwm2Regs.AQCTLA.bit.ZRO = AQ_SET;//将 PWM2A 设置为零

EPwm2Regs.AQCTLA.bit.CAU = AQ_CLEAR;//在比较 A 值时将 PWM2A 设置为低电平

//配置 PWM2A 以响应跳闸输入 TRIP4 (高优先级)

EPwm2Regs.DCTRIPSEL.bit.DCAHCOMPSEL = 3;//为 DCAH 选择 TRIPIN4

EPwm2Regs.TZDCSEL.bit.DCAEVT2 = TZ_DCAH_HI;// DCAEVT2上的 DCAH 变为高电平时跳闸 PWM

EPwm2Regs.DCACTL.bit.EVT2FRCSYNCSEL = DC_EVT_异 步;// DCAEVT2的源是异步的

EPwm2Regs.DCACTL.bit.EVT2SRCSEL = DC_EVT_FLT;//为 DCAEVT2信号选择滤波输入(使用消隐窗口)

EPwm2Regs.TZSEL.bit.DCAEVT2 = TZ_ENABLE;//启用 DCAEVT2作为 CBC 跳闸源

EPwm2Regs.TZCTL.bit.DCAEVT2 = TZ_FORCE_LO;//跳闸时强制 PWM 为低电平

EPwm2Regs.TZCTL.bit.TZA = TZ_FORCE_LO;//跳闸时强制 PWM 为低电平

EPwm2Regs.TZCLR.bit.CBCPULSE = 2;//在 PWM 计数器=周期时清除 CBC 跳闸锁存器。

//消隐有助于滤除接近 PWM2周期结束的比较器跳闸

EPwm2Regs.DCFCTL.bit.Blanke = 1;//启用消隐窗口滤波器

EPwm2Regs.DCFCTL.bit.PULSESEL = 0;//在 TBCTR = 0处对齐消隐窗口

EPwm2Regs.DCFCTL.bit.SRCSEL = 1;//滤波器源为 DCAEVT2

EPwm2Regs.DCFWINDOW= 30//应用窗口大小

EPwm2Regs.DCFOFFSET = 240//将窗口偏移一些值

//将 ECAP3设置为脉冲,并将跳线 ECAP3输出设置为 COMP7INP

TRIGRegs.SYNCSELECTB.ECAP1SYNCIN = 0;//为 ECAP1选择 EPWM1SYNCOUT

ECap3Regs.CAP3 = 499;//设置周期值

ECap3Regs.CTRPHS = 12;//将相位设置为 CMP 值、以便 PWM 开始低电平

ECap3Regs.CAP4 = 10;// PWM 将在10个时钟内保持高电平

ECap3Regs.ECCTL2.bit.CAP_APWM = 1;//在 APWM 模式下运行

ECap3Regs.ECCTL2.bit.APWMPOL = 0;//高电平有效

ECap3Regs.ECCTL2.bit.SYNCI_EN = 1;//同步输入被使用

ECap3Regs.ECCTL2.bit.SYNCO_SEL = 0;//同步输出为同步输入

ECap3Regs.ECCTL2.bit.TSCTRSTOP = 1;//允许 TSCTR 运行

OutputXbarRegs.OUTPUT1MUX0TO15CFG.bit.MUX4 = 3;//通过 X-BAR 路由 ECAP

OutputXbarRegs.OUTPUT1MUXENABLE.BIT.MUX4 = 1;//通过 X-BAR 启用 ECAP

GpioCtrlRegs.GPBGMUX2.bit.GPIO58 = 1;//使用 OUTPUTXBAR1输出配置 GMUX GPIO 引脚

GpioCtrlRegs.GPBMUX2.bit.GPIO58 = 1;//使用 OUTPUTXBAR1输出配置 MUX GPIO 引脚

GpioCtrlRegs.GPBPUD.bit.GPIO58 = 1;//禁用上拉

 

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

    这是在非常特定的周期发生还是在事件处于某个范围内的任何时候发生? 您能否尝试通过实验确定范围是多少?

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

    您好、感谢您的回复。 我没有包括 COMP7的最大基准电压或 ECAP3的相位值。 我一直在调试中更改这些值。 我可以使用以下方法重新创建上面的图解:

    cmps7Regs.RAMPMAXREFS = 35786;

    ECap3Regs.CTRPHS = 482;


    当 ECAP3相位在481到485范围内时、我可以看到切换。 对于 其他最大参考值、您仍然可以看到切换、但范围可能不同。 您实际上不需要比较器上的斜坡来查看它、我只需要将其用于我的目的、所以我将其留在了这里。

     

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

    DCAEVT2的跳闸操作似乎只在 PWM 恢复高电平之前立即生效、而在使用动作限定器配置时再次变为低电平。 您能否检查 TZFLG[DCAEVT2]和 TZFLG[CBC]值的状态?
    这是为了确保 CBC 跳闸事件被锁存并在周期结束前生效。

    Bharathi。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    两个标志都被置位:TZFLG[DCAEVT2]= 1且 TZFLG[CBC]= 1

    您能否澄清这一问题"行动限定符再次变为低电平"? 跳闸事件发生前的最后一个动作限定符是 tbprd = 0时的事件、其中 PWM 设置为高电平。 因此、如果它将遵循动作限定符配置、我认为它将保持高电平。 由于跳闸事件、它最终变为低电平。 唯一的另一个动作限定符是在 tbprd = 229的周期结束时、它被强制为低电平。

    您是说 DCAEVT2的跳闸操作导致 PWM 瞬间变为低电平、然后由于某种原因而被释放、并且 PWM 由于动作限定器配置(tbprd = 0)而变为高电平、最后它从 CBC 事件变为低电平吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="RS"]

    您是说 DCAEVT2的跳闸操作导致 PWM 瞬间变为低电平、然后由于某种原因而被释放、并且 PWM 由于动作限定器配置(tbprd = 0)而变为高电平、最后它从 CBC 事件变为低电平吗?

    [/报价]
    我怀疑这可能是发生的情况。 但是、我不会期望这种行为。  
    为了进一步调试、您是否可以使跳闸事件更长并捕获与之前相同的波形集?
    即、您是否能够从 ECAP3生成更长的脉冲以检查行为?

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

    如果我增加足够的脉冲宽度、它最终会消失。 第一个帖子中的原始捕获是 ECap3Regs.CAP4 = 10;光标显示了 ECAP3的脉冲宽度。

    这是 ECap3Regs.CAP4 = 13;

    ECap3Regs.CAP4 = 12;

    ECap3Regs.CAP4 = 11;

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

    感谢您进行此实验并确认我怀疑在这里发生的情况。
    这是否适合您?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    不是真的。 对于上面未发生切换的情况(ECap3Regs.CAP4 = 13)、如果我更改 ECAP3的相位、我可以使切换再次发生。 看起来、它不是脉冲宽度、而是脉冲如何与消隐窗口对线的时序。

    我现在将 ECAP 脉冲用作虚拟跳闸信号、因为它很容易实现、但最终比较器的输入将是斜坡信号。 我将使用另一个 PWM 门控斜坡信号、因此我应该能够门控斜坡、使其直到在消隐窗口之后才开始。 这应该可以防止这种情况发生、但人们永远不能肯定会发生一些噪声事件并导致这种切换。 如果确实发生这种情况、那么这种情况会有多糟糕、因此我想说的是、这种情况永远不会发生。 我希望利用消隐窗口、因此我不必只依赖门控、但我不确定是否希望这种切换是可能的。

    您看不到 PWM 或跳闸区域设置方式的任何问题、这可能是一个问题吗? 或任何可能阻止这种情况发生的设置?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    跳闸配置似乎正确。 我假设消隐窗口在行程到达时过期。
    在这种情况下、不应发生跳闸状态切换。 我们将尝试进一步复制和调试该内容、并返回给您。

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

    我们仍在对其进行调试。 我将在下周结束前提供更新。

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

    有人指出, 如果使用用于直流事件生成的外部跳闸输入信号、并且跳闸信号在消隐窗口结束时发生变化、则跳闸信号需要在消隐窗口结束后延长2个周期、以避免输出上出现毛刺脉冲 观察到的情况。 我们很快将对文档进行澄清、以通知此行为。
    是否可以将跳闸信号延长到消隐窗口之上最多2个周期?

    Bharathi。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    可能。 我必须对它进行一些思考。 消隐窗口可能不适用于我的应用、我将不得不仅依靠门控比较器输入。

    最后、如果我可以的话、我希望有一个比较器消隐窗口。 在此窗口期间、无论比较器输入条件如何、比较器输出都不会跳闸。 这将是峰值电流模式控制的一个非常好的功能。

    谢谢你。