TMS320F28379D: 将CMPSS输出连接到ePWM

Part Number: TMS320F28379D
Other Parts Discussed in Thread: SYSCONFIG

我想实现对LLC副边的高频电流过零采样实现同步整流;电流0A对应的采样基准电压为1.65v,我想在其过零附近1.6V和1.7V(由信号发生器模拟)实现控制EPWM1A和EPWM1B通道,即> 1.7V时EPWM1A 置高;≤ 1.7V时EPWM1A置低 ;< 1.6V时EPWM1B 置高;≥ 1.6V关闭下管EPWM1B 置低。

我将CMPSS2 的输出信号 CTRIPHCTRIPL 通过 EPWM XBAR 的 TRIP4和TRIP5 路由到 ePWM 模块的DCAH和DCBH;

期望当DCAH为高时触发 DCAEVT1,而当DCAEVT1触发时,使EPWM1A强制输出为高;当DCAH为低时触发 DCAEVT2,而当DCAEVT2触发时,使EPWM1A强制输出为低;

同理,当DCBH为高时触发 DCBEVT1,而当DCBEVT1触发时,使EPWM1B强制输出为高;当DCBH为低时触发 DCBEVT2,而当DCAEVT2触发时,使EPWM1B强制输出为低;

下面是我配置的部分主要程序

//CMPSS2 配置 ==========

 Cmpss2Regs.COMPCTL.bit.COMPDACE = 1;          
    Cmpss2Regs.COMPDACCTL.bit.SWLOADSEL=1;  
    Cmpss2Regs.COMPDACCTL.bit.DACSOURCE=0;  

    //高比较器配置(1.7V)
    Cmpss2Regs.DACHVALS.bit.DACVAL = 2110;           // 对应约 1.7V:2110*3.3/4096 ≈ 1.7V
    Cmpss2Regs.COMPCTL.bit.COMPHSOURCE = 0;          // 高比较器的负输入选择为内部 DAC(正输入通常接电流采样信号)。
    Cmpss2Regs.COMPCTL.bit.COMPHINV = 0;             // 不反相
    Cmpss2Regs.COMPCTL.bit.CTRIPHSEL = 0;            // 异步 CTRIPH
    Cmpss2Regs.COMPCTL.bit.CTRIPOUTHSEL = 0;         // 异步输出观察用
   //低比较器配置(1.6V)
    Cmpss2Regs.DACLVALS.bit.DACVAL = 1986;           // 对应约 1.6V
    Cmpss2Regs.COMPCTL.bit.COMPLSOURCE = 0;
    Cmpss2Regs.COMPCTL.bit.COMPLINV = 1;             // 低比较器反相,输出逻辑与上面匹配
    Cmpss2Regs.COMPCTL.bit.CTRIPLSEL = 0;            // 异步 CTRIPL
    Cmpss2Regs.COMPCTL.bit.CTRIPOUTLSEL = 0;
      OutputXbarRegs.OUTPUT3MUX0TO15CFG.bit.MUX8 = 0;
      OutputXbarRegs.OUTPUT3MUXENABLE.bit.MUX8 = 1;

      //X-bar设置,连接到EPWMX-bar
      EPwmXbarRegs.TRIP4MUX0TO15CFG.bit.MUX2 = 0; // CMPSS2.CTRIPH → MUX2 → TRIP4(即CMPSS2 的高比较器输出 CTRIPH通过MUX2接入EPWM-XBAR的TRIP4信号线上)
      EPwmXbarRegs.TRIP5MUX0TO15CFG.bit.MUX3 = 0; // CMPSS2.CTRIPL → MUX3 → TRIP5(即CMPSS2 的低比较器输出 CTRIPL通过MUX3接入EPWM-XBAR的TRIP5信号线上)

      EPwmXbarRegs.TRIP4MUXENABLE.bit.MUX2 = 1;// 启用 MUX2路由到 TRIP4
      EPwmXbarRegs.TRIP5MUXENABLE.bit.MUX3 = 1;// 启用 MUX3路由到 TRIP5

      EPwmXbarRegs.TRIPOUTINV.bit.TRIP4 = 0; // 不反相输出(默认)
      EPwmXbarRegs.TRIPOUTINV.bit.TRIP5 = 0; // 不反相输出(默认)

//EPWM1 配置 ==========
void InitEPwm1Example()  //采样和中断
{
    EPwm1Regs.TBPRD = 1000;                        // Set timer period   中断频率和采样频率100k
    EPwm1Regs.TBPHS.bit.TBPHS = 0x0000;             // Phase is 0
    EPwm1Regs.TBCTR = 0x0000;                       // Clear counter
    //EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO;
    //EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO;

    // Setup TBCLK
    EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // Count up

    EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;        // Disable phase loading
    EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;       // Clock ratio to SYSCLKOUT
    EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;

    EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;    // Load registers every ZERO
    EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;

    // Setup compare
    EPwm1Regs.CMPA.bit.CMPA = 500;

    // Set actions
    EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET;             // Set PWM1A on CAU
    EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;           // Clear PWM1A on CAD

    EPwm1Regs.ETSEL.bit.SOCAEN    = 1;    
    EPwm1Regs.ETSEL.bit.SOCASEL    = 1;   
    EPwm1Regs.ETPS.bit.SOCAPRD = 1;               

    EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; 
    EPwm1Regs.ETSEL.bit.INTEN = 1;             
    EPwm1Regs.ETPS.bit.INTPRD = ET_1ST;       
    EPwm1Regs.ETFLG.bit.INT = 1;
}

//EPWM1中断 配置 ==========

__interrupt void epwm1_isr(void)
{
    EALLOW;
       // === Digital Compare 配置 ===

       // A通道:控制EPWM1A(下管),对应 CMPSS2.CTRIPOUTH(高比较器) → DCAH
       EPwm1Regs.DCAHTRIPSEL.bit.TRIPINPUT4 = 1;    // 将TRIP4信号(即 CMPSS2.CTRIPH输出),指定为ePWM1的DCAH输入源;【即当 CMPSS2高比较器输出 CTRIPH为高时,TRIP4变高,DCAH接收到高电平。】
       EPwm1Regs.DCTRIPSEL.bit.DCAHCOMPSEL = 4;     // TRIP4 -> DCAH
       EPwm1Regs.TZDCSEL.bit.DCAEVT1 = TZ_DCAH_HI;  // DCAH为高时触发 DCAEVT1
       EPwm1Regs.TZDCSEL.bit.DCAEVT2 = TZ_DCAH_LOW; // DCAH为低时触发 DCAEVT2
       EPwm1Regs.DCACTL.bit.EVT1SRCSEL = DC_EVT1;   // 0x0源是DCAEVT1;0x1源是DCEVTFILT信号
       EPwm1Regs.DCACTL.bit.EVT2SRCSEL = DC_EVT2;   // 0x0源是DCAEVT2;0x1源是DCEVTFILT信号
       EPwm1Regs.DCACTL.bit.EVT1FRCSYNCSEL = DC_EVT_ASYNC;//异步方式输出,不依赖同步信号。
       EPwm1Regs.DCACTL.bit.EVT2FRCSYNCSEL = DC_EVT_ASYNC;//异步方式输出,不依赖同步信号。

       // B通道:控制EPWM1B(下管),对应 CMPSS2.CTRIPOUTL(低比较器) → DCBH
       EPwm1Regs.DCBHTRIPSEL.bit.TRIPINPUT5 = 1;    // 将TRIP5信号(即 CMPSS2.CTRIPL输出),指定为 ePWM1的DCBH输入源;【即当 CMPSS2低比较器输出 CTRIPL为高时,TRIP5变高,DCBH接收到高电平】
       EPwm1Regs.DCTRIPSEL.bit.DCBHCOMPSEL = 5;     // TRIP5 -> DCBH
       EPwm1Regs.TZDCSEL.bit.DCBEVT1 = TZ_DCBH_HI;  // DCBH为高时触发DCBEVT1
       EPwm1Regs.TZDCSEL.bit.DCBEVT2 = TZ_DCBH_LOW; // DCBH为低时触发 DCBEVT2
       EPwm1Regs.DCBCTL.bit.EVT1SRCSEL = DC_EVT1;
       EPwm1Regs.DCBCTL.bit.EVT2SRCSEL = DC_EVT2; 
       EPwm1Regs.DCBCTL.bit.EVT1FRCSYNCSEL = DC_EVT_ASYNC;
       EPwm1Regs.DCBCTL.bit.EVT2FRCSYNCSEL = DC_EVT_ASYNC;

       // 启用 DCAEVT1 和 DCBEVT1 的“事件使能”(同时触发强制)
       EPwm1Regs.TZSEL.bit.DCAEVT1 = 1;
       EPwm1Regs.TZSEL.bit.DCAEVT2 = 1;
       EPwm1Regs.TZSEL.bit.DCBEVT1 = 1;
       EPwm1Regs.TZSEL.bit.DCBEVT2 = 1;

       EPwm1Regs.TZCTL.bit.DCAEVT1 = TZ_FORCE_HI;
       EPwm1Regs.TZCTL.bit.DCAEVT2 = TZ_FORCE_LO;
       EPwm1Regs.TZCTL.bit.DCBEVT1 = TZ_FORCE_HI;
       EPwm1Regs.TZCTL.bit.DCBEVT2 = TZ_FORCE_LO;
       EDIS;
    EPwm1Regs.ETCLR.bit.INT = 1;
    PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
我在上述代码的调试过程中将CMPSS2 的输出信号 CTRIPHCTRIPL 分别通过 output- XBAR连接到两个gpio进行观测,是可以正常看到两个基本为互补的方波信号,但是将其通过EPWM XBAR连接到EPWM1A和1B上,两个输出一直为低,这是为什么?上述代码配置能否能够符合我所描述功能的逻辑,编程是否存在问题,烦请解释原因。