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:使用跳闸区域和 CMPSS 的逐周期跳闸

Guru**** 2394305 points
Other Parts Discussed in Thread: UCC2895

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1314705/tms320f28377s-cycle-by-cycle-trip-using-trip-zone-and-cmpss

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

我想使用 CMPSS 和 ePWM 模块实现逐周期跳闸。 其中 CMPIN1P 由外部馈送、并且与 DAC 值进行比较、以生成跳闸信号。  我将 CMPSS 的示例代码称为一次性跳闸、并对其进行了修改以适用于逐周期。

对于一次性跳闸代码

我为 CMPIN1P 使用了固定的直流值、当生成跳闸信号时、一次性跳闸强制 PWM 脉冲变为高电平。

当没有跳闸信号时、PWM 按预期正常。

对于逐周期跳闸

这里还用于生成的 CMPIN1P 跳闸的固定直流值和 PWM 脉冲变为高电平、而不是逐周期跳闸。

我在这里遗漏了一些配置吗?

 规范如下:

void initEPWM (void)
{
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_CTR_ZERO;//禁用相位同步
EPwm8Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;//递增/递减计数模式


EPwm8Regs.TBPHS.bit.TBPHS = 0x0000;//相位为120


EPwm8Regs.TBCTR = 0x0000;

//开关频率= 80kHz
EPwm8Regs.TBPRD = 1250;//设置 UCC2895时钟

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

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

//低电平有效配置
EPwm8Regs.AQCTLB.bit.CBU = AQ_SET;
EPwm8Regs.AQCTLB.bit.ZRO = AQ_CLEAR;

//
//将 EPWM8B 配置为在 TZB 跳闸上输出高电平
//
EPwm8Regs.TZCTL.bit.TZB = TZ_FORCE_HI;  


EPwm8Regs.TZSEL.bit.DCBEVT2 = 1;

EPwm8Regs.TZCLR.bit.CBCPULSE = 0;
EPwm8Regs.TZDCSEL.bit.dCBEVT2 = TZ_DCBH_HI;
EPwm8Regs.DCTRIPSEL.bit.dCBHCOMPSEL = 0xF;
EPwm8Regs.DCBHTRIPSEL.bit.TRIPINPUT4 = 1;


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


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


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


//清除跳闸标志
EPwm8Regs.TZCLR.bit.CBC = 1;
EPwm8Regs.TZCLR.bit.INT = 1;
EPwm8Regs.TZCBCCLR.bit.DCBEVT2 = 1;


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、500);

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

//
//将输出 X-BAR 设置为 OUTPUTXBAR3上的输出 CTRIPOUTH
//
XBAR_setOutputMuxConfig (XBAR_OUTPUT3、XBAR_OUT_MUX00_CMPSS1_CTRIPOUTH);
XBAR_enableOutputMux (XBAR_OUTPUT3、XBAR_MUX00);

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

    您能详细说明一下哪里出了问题吗? 您说过跳闸导致 PWM 信号按预期变为高电平、但问题是即使跳闸条件配置为在下一个零脉冲事件时恢复(根据您的 CBCPULSE 设置)、跳闸条件即使在您移除跳闸条件后仍保持高电平吗?

    您的代码不会出现任何问题、这对我来说很重要。 您能不能看看比较器状态和 CBC 跳闸标志寄存器、以及它们在发生这种情况时所处的状态?

    惠特尼

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

    我在此处分享为 CBC 功能检查捕获的波形

    当 CMPSS 没有跳闸信号时便会出现这种情况。  

    斜坡信号是我们连接到 CMPIN1P 以生成跳闸信号的信号。

    在第一种情况下、我没有将任何东西连接到 CMPIN1P。

    当我将斜坡信号连接到 CMPIN1P 时、PWM 信号变为高电平、而不是每个 PWM 周期进行复位。

    我检查了 CBC 跳变标志寄存器

    (TZFLG.bit.CBC)它正在 0和1之间切换。

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

    我看到、您也有连接到输出交叉开关的跳闸输出。 您是否要将其引出至引脚? 如果您将其放在示波器上、在给定您的斜坡信号的情况下、它看起来是否符合预期?

    惠特尼