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.

[参考译文] TMS320F28377S:为 PSFB 使用 CMPSS 模块的 PCMC

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1317905/tms320f28377s-pcmc-using-cmpss-module-for-psfb

器件型号:TMS320F28377S
主题中讨论的其他器件:C2000WARE

您好  

我参考了此 TI-02000设计文档、以生成 PSFB 的峰值电流波形、  

紫色波形 是发送至 CMPINP 的斜坡信号、它处于开关频率的两倍、并且根据 DAC 值、生成跳闸事件。

在第一个案例中、我只使用了动作限定器 T1U 和 T1D 来生成动作设置/清除。 如参考文档中所述。

黄色波形 是 ePWM A 寄存器和 蓝色波形 是 ePWM B 寄存器

观察结果: 1. ePWM A 上的向上计数期间跳闸(T1U) 、发生了使用动作限定符的情况、

            但未发生跳闸事件 actionT1D (向下计数)、并且 PWM 被清除为零。

            2.对于 ePWM B,T1U 没有发生,它被设置为 PRD 并在 T1D 清零。  

在第二种情况下、我使用 Tripzone 寄存器 TZAD、TZAU、TZBU 和 TZBD 覆盖动作限定器事件。

在这里、我观察到的 PWM 基于 CMPSS 跳闸输入进行设置/复位

我的问题是:

为什么实际行动限定器 T1U 和 T1D 未根据 CMPSS 跳闸事件生成预期的操作?

是否需要进行任何特定的配置、以便在向上和向下计数时都发生跳闸操作?

注意:我已经配置了 AQTSRCSEL 寄存器、以便选择 T1的源作为 DCEAVT2。

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

    附加源代码以供参考

    void initEPWM (void)
    {
    ////禁用 EPWM11_INT
    //EPwm8Regs.ETSEL.bit.inten = per_mDISABLE_INT;
    EPwm8Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;//时钟与 SYSCLKOUT 的比率
    EPwm8Regs.TBCTL.bit.CLKDIV = TB_DIV1;
    EPwm8Regs.TBCTL.bit.PRDLD = TB_shadow;
    EPwm8Regs.TBCTL.bit.PHSEN = TB_DISABLE;//启用相位加载
    EPwm8Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;
    EPwm8Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;


    EPwm8Regs.TBPHS.bit.TBPHS = 0x0000;  


    EPwm8Regs.TBCTR = 0x0000;


    EPwm8Regs.TBPRD = 1250;

    //在零时设置影子寄存器加载
    EPwm8Regs.CMPCTL.bit.SHDWAMODE = CC_shadow;
    EPwm8Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
    EPwm8Regs.CMPCTL.bit.SHDLBMODE = CC_HOLD;
    EPwm8Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;


    // 1.667us 时钟脉冲宽度
    EPwm8Regs.CMPA.bit.CMPA = 0;
    EPwm8Regs.CMPB.bit.CMPB = 0;

    EPwm8Regs.AQTSRCSEL.bit.t1SEL = 1;  

    //对寄存器执行操作
    EPwm8Regs.AQCTLA.bit.PRD = AQ_SET;
    EPwm8Regs.AQCTLA.bit.ZRO = AQ_CLEAR;
    EPwm8Regs.AQCTLA2.bit.T1U = AQ_SET;
    EPwm8Regs.AQCTLA2.bit.T1D = AQ_CLEAR;

    //低电平有效配置
    EPwm8Regs.AQCTLB.bit.PRD = AQ_SET;  
    EPwm8Regs.AQCTLB.bit.ZRO = AQ_CLEAR;
    EPwm8Regs.AQCTLB2.bit.T1U = AQ_SET;  
    EPwm8Regs.AQCTLB2.bit.T1D = AQ_CLEAR;  


    //将 DCB 配置为 CBC
    EPwm8Regs.TZSEL.bit.dCAEVT2 = 1;

    //将 DCB 配置为 TRIP4
    EPwm8Regs.TZDCSEL.bit.dCAEVT2 = TZ_DCAH_HI;

    EPwm8Regs.DCTRIPSEL.bit.dCAHCOMPSEL = 3;

    EPwm8Regs.DCAHTRIPSEL.bit.TRIPINPUT4 = 1;

    //将 DCB 路径配置为未过滤和异步
    EPwm8Regs.DCACTL.bit.EVT2SRCSEL = DC_EVT2;
    EPwm8Regs.DCACTL.bit.EVT2FRCSYNCSEL = DC_EVT_ASYNC;


    // EPwm8Regs.DCFCTL.bit.Blanke = 1;
    // EPwm8Regs.DCFCTL.bit.PULSESEL = 2;
    // EPwm8Regs.DCFCTL.bit.SRCSEL = 3;
    // EPwm8Regs.DCFOFFSET = 0;
    // EPwm8Regs.DCFWINDOW = 100;

    //将 TRIP4配置为 CTRIP1H
    EPwmXbarRegs.TRIP4MUX0TO15CFG.bit.MUX0 = 0;

    //为输出启用 TRIP4多路复用器
    EPwmXbarRegs.TRIP4MUXENABLE。bit.MUX0 = 1;


    EPwm8Regs.TZCTL2.bit.ETZE = 1;
    //EPwm8Regs.TZCTL2.bit.TZBU = TZ_FORCE_HI;//用于测试2
    // EPwm8Regs.TZCTL2.bit.TZBU = TZ_FORCE_HI;
    // EPwm8Regs.TZCTL2.bit.TZBD = TZ_FORCE_LO;
    // EPwm8Regs.TZCTL2.bit.tZAD = TZ_FORCE_LO;
    // EPwm8Regs.TZCTL2.bit.TZAU = TZ_FORCE_HI;

    //
    // CBC 将在 CTR = 0或 CTR = PRD 时清除
    //
    EPwm8Regs.TZCLR.bit.CBCPULSE = 2;
    //
    //清除跳闸标志
    //
    EPwm8Regs.TZCLR.bit.CBC = 1;
    EPwm8Regs.TZCLR.bit.INT = 1;

    EPwm8Regs.TZCBCCLR.bit.dCAEVT2 = 1;

    //
    //启用 DCB 中断
    //
    EPwm8Regs.TZEINT.bit.CBC = 1




    void initCMPSS (void)
    {

    //
    //启用 CMPSS 并将负输入信号配置为来自
    // DAC
    //
    CMPSS_enableModule (CMPSS1_BASE);
    CMPSS_CONFIGHighComparator (CMPSS1_BASE、CMPSS_INSRC_DAC);

    //
    //使用 VDDA 作为 DAC 的基准,并将 DAC 值设置为
    //任意引用。
    //
    CMPSS_CONFIGDAC (CMPSS1_BASE、CMPSS_DACREF_VDDA | CMPSS_DACVAL_SYSCLK |
    CMPSS_DACSRC_SHDW);
    CMPSS_setDACValueHigh (CMPSS1_BASE、1000);

    //
    //配置输出信号。 CTRIPH 和 CTRIPOUTH 将由以下人员馈送:
    //异步比较器输出。
    //
    CMPSS_configOutputsHigh (CMPSS1_BASE、CMPSS_TRIP_ASYNC_COMP |
    CMPSS_TRIPOUT_ASYNC_COMP);
    //CMPSS_configOutputsHigh (CMPSS1_BASE、CMPSS_TRIP_SYNC_COMP |
    // CMPSS_TRIPOUT_SYNC_COMP);

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

    您好!

    我会努力在明天向你介绍这件事。

    此致、

    本·科利尔

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

    尊敬的 Benjamin:

    感谢您的回复。

    任何相关更新。

    此致、

    鲁帕

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

    Drups、

    我很抱歉,我还没有时间去做这件事。 将在明天与一些同事讨论此问题。  

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

    不用担心、这里我还有一个问题、如果 CMPSS 配置为生成跳闸信号、但在操作中、限定符 T1U 和 T1D 不用于 PRD 和 ZRO 事件。 动作限定器会考虑跳闸输入吗?

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

    Rupa、

    您是否愿意在 EPWM 设置中使用 driverlib 而不是 bitfield? 如果您看看 C2000WARE 中的 epwm_ex2_updown_AQ 示例、它将向您展示如何设置动作限定符。

    此致、

    本·科利尔

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

    您好!

    是的、我可以使用 driverlib 进行 EPWM 设置。 我将使用 driverlib 实现配置并检查 PWM 的生成。
    但我在这里有疑问、bitfield 中的这个动作限定器配置是否缺失了什么。  

    此致、
    鲁帕  

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

    您好、Rupa、

    您是否能够获得适用于您的应用的任何 C2000Ware 示例?

    此致、

    艾里森

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

    尊敬的 Allison:

    我仅使用了 bitfield 配置、唯一的问题是 TZCTL2寄存器配置。

    对于 PCMC 实施、我们必须强制 Hi TZBU 和 TZAU。

     TZBD 和 TZAD 必须是什么都不做的;

    我没有使用它们。

    谢谢。此

    致、 鲁帕