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.

[参考译文] TMS320F28377D:CMPSS 和 EPWM 配置问题

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1508097/tms320f28377d-cmpss-and-epwm-configuration-problem

器件型号:TMS320F28377D

工具/软件:

您好:

我尝试在 tms320f28377d 中设置以下配置:

-启用 CMPSS1 - 2 - 3 - 4 - 5 - 6

-启用 ePWM 7 - 8

由于某种原因、当我使用以下函数启用 CMPSS1时、ePWM 7和8会关闭。

CMPSS3 (或2 - 4 - 5 -6)使能函数不会发生这种情况。

此后、您可以找到 CMPSS1使能功能和用于启用其他5个 CMPSS 的函数。 EPWM 7和8的寄存器不会显示与其他跳闸区等的任何明显连接

void CMPSS1_Enable (enum EPWM_module mod){
易失性结构 CLK_CFG_REGS ClkCfgRegs;

CORE_Eallowext ();
CpuSysRegs.PCLKCR14.bit.CMPSS1 = 1;

CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 0;

ClkCfgRegs.PERCLKDIVSEL.bit.EPWMCLKDIV =0;
epwmRegs[mod]->TBCTL.BIT.CLKDIV = 0;
epwmRegs[mod]->TBCTL.BIT.HSPCLKDIV = 0;

epwmRegs[mod]->TBCTR = 0;
epwmRegs[mod]->TBPRD = 0xFF;

epwmRegs[mod]->TZCTL.bit.DCBEVT1 =1;// 01:强制 EPWMxA 进入高电平状态
epwmRegs[mod]->TZCTL.bit.DCAEVT2=2;// 10:强制 EPWMxB 进入低电平状态

epwmRegs[mod]->TZDCSEL.bit.DCAEVT2 =2;//010:DCBH =高电平、DCBL =无关
epwmRegs[mod]->DCTRIPSEL.bit.DCAHCOMPSEL = 0xF;
epwmRegs[mod]->DCAHTRIPSEL.bit.TRIPINPUT4 = 1;

epwmRegs[mod]->AQCTLA.bit.CAU= 2;
epwmRegs[mod]->AQCTLA.bit.ZRO= 1;

epwmRegs[mod]->DCACTL.bit.EVT2SRCSEL = 0;
epwmRegs[mod]->DCACTL.bit.EVT2FRCSYNCSEL = 1;

epwmRegs[mod]->TZDCSEL.bit.DCBEVT1=3;//001:DCAH =低电平、DCAL =无关
epwmRegs[mod]->DCTRIPSEL.bit.DCBLCOMPSEL=0xF;
epwmRegs[mod]->DCBLTRIPSEL.bit.TRIPINPUT5 = 1;


epwmRegs[mod]->AQCTLB.bit.cpu = 1;
epwmRegs[mod]->AQCTLB.bit.ZRO= 1;

epwmRegs[mod]->DCBCTL.BIT.EVT1SRCSEL = 0;
epwmRegs[mod]->DCBCTL.bit.EVT1FRCSYNCSEL = 1;

CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 1;

XBAR_setEPWMMuxConfig (XBAR_TRIP4、XBAR_EPWM_MUX00_CMPSS1_CTRIPH);
XBAR_setEPWMMuxConfig (XBAR_TRIP5、XBAR_EPWM_MUX01_CMPSS1_CTRIPL);

XBAR_enableEPWMMux (XBAR_TRIP4、XBAR_MUX00);
XBAR_enableEPWMMux (XBAR_TRIP5、XBAR_MUX01);

epwmRegs[mod]->TZCLR.bit.bcb = 1;
epwmRegs[mod]->TZCLR.bit.INT = 1;

epwmRegs[mod]->TZEINT.bit.bcb = 1;

epwmRegs[mod]->TBCTL.bit.CTRMODE =TB_COUNT_updown;

CORE_Edisext ();

CMPSS_enableModule (CMPSS1_BASE);

CMPSS_configHighComparator (CMPSS1_BASE、CMPSS_INV_INverted);

CMPSS_configLowComparator (CMPSS1_BASE、CMPSS_INSRC_DAC);

CMPSS_setDACValueHigh (CMPSS1_BASE、cmpss_Hvalue);
CMPSS_setDACValueLow (CMPSS1_BASE、cmpss_lvalue);
CMPSS_setHysteresis (CMPSS1_BASE、HYSTERESIS);

CMPSS_enableModule (CMPSS1_BASE);
EPWM_Start (mod);
}


void CMPSS3_Enable (enum EPWM_module mod){
易失性结构 CLK_CFG_REGS ClkCfgRegs;

CORE_Eallowext ();
CpuSysRegs.PCLKCR14.bit.CMPSS3 = 1;

CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 0;

ClkCfgRegs.PERCLKDIVSEL.bit.EPWMCLKDIV =0;
epwmRegs[mod]->TBCTL.BIT.CLKDIV = 0;
epwmRegs[mod]->TBCTL.BIT.HSPCLKDIV = 0;

epwmRegs[mod]->TBCTR = 0;
epwmRegs[mod]->TBPRD = 0xFF;

epwmRegs[mod]->TZCTL.bit.DCBEVT1 =1;// 01:强制 EPWMxA 进入高电平状态
epwmRegs[mod]->TZCTL.bit.DCAEVT2=2;// 10:强制 EPWMxB 进入低电平状态

epwmRegs[mod]->TZDCSEL.bit.DCAEVT2 =2;//010:DCBH =高电平、DCBL =无关
epwmRegs[mod]->DCTRIPSEL.bit.DCAHCOMPSEL = 0xF;
epwmRegs[mod]->DCAHTRIPSEL.bit.TRIPINPUT7 = 1;

epwmRegs[mod]->AQCTLA.bit.CAU= 2;
epwmRegs[mod]->AQCTLA.bit.ZRO= 1;

epwmRegs[mod]->DCACTL.bit.EVT2SRCSEL = 0;
epwmRegs[mod]->DCACTL.bit.EVT2FRCSYNCSEL = 1;

epwmRegs[mod]->TZDCSEL.bit.DCBEVT1=3;//001:DCAH =低电平、DCAL =无关
epwmRegs[mod]->DCTRIPSEL.bit.DCBLCOMPSEL=0xF;
epwmRegs[mod]->DCBLTRIPSEL.bit.TRIPINPUT8 = 1;

epwmRegs[mod]->AQCTLB.bit.cpu = 1;
epwmRegs[mod]->AQCTLB.bit.ZRO= 1;

epwmRegs[mod]->DCBCTL.BIT.EVT1SRCSEL = 0;
epwmRegs[mod]->DCBCTL.bit.EVT1FRCSYNCSEL = 1;

CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 1;

XBP_setEPWMMuxConfig (XBAR_TRIP7、XBAR_EPWM_MUX04_CMPSS3_CTRL.h);
XBP_setEPWMMuxConfig (XBAR_TRIP8、XBAR_EPWM_MUX05_CMPSS3_CTRLIPL);

XBAR_enableEPWMMux (XBAR_TRIP7、XBAR_MUX04);
XBAR_enableEPWMMux (XBAR_TRIP8、XBAR_MUX05);

epwmRegs[mod]->TZCLR.bit.bcb = 1;
epwmRegs[mod]->TZCLR.bit.INT = 1;

epwmRegs[mod]->TZEINT.bit.bcb = 1;

epwmRegs[mod]->TBCTL.bit.CTRMODE =TB_COUNT_updown;
CORE_Edisext ();

CMPSS_configHighComparator (CMPSS3_BASE、CMPSS_INSRC_DAC);

CMPSS_configLowComparator (CMPSS3_BASE、CmpssConfig);

CMPSS_setDACValueHigh (CMPSS3_BASE、cmpss_lvalue);
CMPSS_setDACValueLow (CMPSS3_BASE、cmpss_Hvalue);
CMPSS_setHysteresis (CMPSS3_BASE、HYSTERESIS);
CMPSS_enableModule (CMPSS3_BASE);
EPWM_Start (mod);
}

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

    您好:

    CMPSS1不能按预期工作是很常见的、因为其他 CMPSS1可在同一配置下正常工作。 我看到 CMPSS1和 CMPSS3之间的唯一区别是 ePWM X-BAR 配置。 您能否试着使用其他一些跳闸信号(而不是 TRIP4和 TRIP5)来看看它是否解决了问题?  

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

    谢谢、但我通过更改 ePWM 7和8的同步传输层配置并将其设置为禁用来解决问题。