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.

[参考译文] TMS320F28379D:ePWMxA、ePWMxB 独立控制。

Guru**** 2604225 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/679422/tms320f28379d-epwmxa-epwmxb-individual-control

器件型号:TMS320F28379D

我希望能够单独控制 ePWMxA 和 ePWMxB。

完全停止 ePWM 的代码不会强制两个引脚都为零。 ePWMxA 引脚决定 ePWMxB 引脚。

我可能错过了一些 ePWM 设置。

void stop_pwm_gpio (void)
{
//
//设置操作
//
EPwm1Regs.AQCTLA.bit.ZRO = AQ_CLEAR;
EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR; //在事件 A 上设置 PWM1A、递增计数
EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR; //在事件 A 上清除 PWM1A,递减计数
EPwm1Regs.AQCTLA.bit.PRD = AQ_CLEAR;

EPwm1Regs.AQCTLB.bit.ZRO = AQ_CLEAR;
EPwm1Regs.AQCTLB.bit.CAU = AQ_CLEAR; //在事件 B 上设置 PWM1B,向上计数
EPwm1Regs.AQCTLB.bit.CAD = AQ_CLEAR; //在事件 B 上清除 PWM1B,倒计数
EPwm1Regs.AQCTLB.bit.PRD = AQ_CLEAR;


//
//设置操作
//
EPwm2Regs.AQCTLA.bit.ZRO = AQ_CLEAR;
EPwm2Regs.AQCTLA.bit.CAU = AQ_CLEAR; //在事件 A 上设置 PWM1A、递增计数
EPwm2Regs.AQCTLA.bit.CAD = AQ_CLEAR; //在事件 A 上清除 PWM1A,递减计数
EPwm2Regs.AQCTLA.bit.PRD = AQ_CLEAR;

EPwm2Regs.AQCTLB.bit.ZRO = AQ_CLEAR;
EPwm2Regs.AQCTLB.bit.CAU = AQ_CLEAR; //在事件 B 上设置 PWM1B,向上计数
EPwm2Regs.AQCTLB.bit.CAD = AQ_CLEAR; //在事件 B 上清除 PWM1B,倒计数
EPwm2Regs.AQCTLB.bit.PRD = AQ_CLEAR;



//
//设置操作
//
EPwm5Regs.AQCTLA.bit.ZRO = AQ_CLEAR;
EPwm5Regs.AQCTLA.bit.CAU = AQ_CLEAR; //在事件 A 上设置 PWM1A、递增计数
EPwm5Regs.AQCTLA.bit.CAD = AQ_CLEAR; //在事件 A 上清除 PWM1A,递减计数
EPwm5Regs.AQCTLA.bit.PRD = AQ_CLEAR;

EPwm5Regs.AQCTLB.bit.ZRO = AQ_CLEAR;
EPwm5Regs.AQCTLB.bit.CAU = AQ_CLEAR; //在事件 B 上设置 PWM1B,向上计数
EPwm5Regs.AQCTLB.bit.CAD = AQ_CLEAR; //在事件 B 上清除 PWM1B,倒计数
EPwm5Regs.AQCTLB.bit.PRD = AQ_CLEAR;



}

这里是我为其中一个 EPWM 所做的 EPWM 设置、

void Init_U_PWM ()
{
//
//设置 TBCLK
//
EPwm1Regs.TBPRD =计数; //设置计时器周期801 TBCLK
EPwm1Regs.TBPHS.bit.TBPHS = 0x0000; //相位为0
EPwm1Regs.TBCTR = 0x0000; //清除计数器

//
//设置比较值
//
EPwm1Regs.CMPA.bit.CMPA = 500;//设置比较 A 值-初始标称值


//
//设置计数器模式
//
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;//向上和向下计数
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; //禁用相位加载
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; //时钟与 SYSCLKOUT 的比率
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;

//
//设置隐藏
//
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;//零负载
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;

//
//设置操作
//

EPwm1Regs.AQCTLA.bit.ZRO = AQ_CLEAR;
EPwm1Regs.AQCTLA.bit.CAU = AQ_SET; //在事件 A 上设置 PWM1A、递增计数
EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR; //在事件 A 上清除 PWM1A,递减计数
EPwm1Regs.AQCTLA.bit.PRD = AQ_SET;

EPwm1Regs.AQCTLB.bit.ZRO = AQ_SET;
EPwm1Regs.AQCTLB.bit.CAU = AQ_CLEAR; //在事件 B 上设置 PWM1B,向上计数
EPwm1Regs.AQCTLB.bit.CAD = AQ_SET; //在事件 B 上清除 PWM1B,倒计数
EPwm1Regs.AQCTLB.bit.PRD = AQ_CLEAR;

//
//死区设置
//
EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FUL_ENABLE;
EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;
EPwm1Regs.DBRED.bit.DBRED = db;
EPwm1Regs.DBFED.bit.DBFED = db;

//
//中断,我们将在其中更改比较值
//
EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; //选择“零时 INT”事件
EPwm1Regs.ETSEL.bit.INTEN = 1; //启用 INT
EPwm1Regs.ETPS.bit.INTPRD = 1; //在发生第一个事件

时生成 INT }

请告诉我如何阻止 ePWMxA 在 ePWMxB 上独断。 我想在不使用 GPIO 数据零方法的情况下关闭这两个引脚。

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

    您好、Soham、

    我想您已经设置了死区以生成补码。  尝试根据您的设置通过下图跟踪您的信号路径:

    此外、您是否正在设置 ePWM clk = SYSCLK? 除非 SYSCLK <= 100MHz、否则不应执行此操作。