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:ePWM 异常行为

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/862971/tms320f28377d-epwm-strange-behavior

器件型号:TMS320F28377D

下午好、我将尝试使用 CMP 和 AQCTLA.bit.ZRO 的值实现0%或100%占空比。 但是、我会遇到奇怪的行为。

void InitEPwm1 (void)
{
//设置 TBCLK
//根据 PWM 频率设置时基周期寄存器。
//将时基计数器相位设置为0。
//清除时基计数器。
EPwm1Regs.TBPRD = PWM_TBPRD;// 12500针对8kHz
EPwm1Regs.TBPHS.bit.TBPHS = 0x0000;
EPwm1Regs.TBCTR = 0x0000;

//清除比较值
EPwm1Regs.CMPA.ALL = 0;
EPwm1Regs.CMPB.ALL = 0;
EPwm1Regs.CMPC = 0;
EPwm1Regs.CMPD = 0;

//设置计数器模式
//将计数器模式设置为向上/向下计数模式。
//不要从时基阶段加载时基计数器(TBCTR)
//寄存器(TBPHS)。
//时基计数器等于零时同步输出(TBCTR = 0x00)
//将高速时基时钟预分频设为1。
//将时基时钟预分频设为1。
// TBCLK = EPWMCLK/(HSPCLKDIV * CLKDIV)
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;
EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO;
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;

//设置死区
//低电平有效互补 PWM
// DB 已完全启用
//低电平有效互补模式
// EPWM1A 是下降沿和上升沿延迟的源。
//死区时间为2.5us (500/TBCLK)
EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FUL_ENABLE;
EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_LOC;
EPwm1Regs.DBCTL.bit.IN_MODE = DBA_ALL;
EPwm1Regs.DBFED = 500;
EPwm1Regs.DBRED = 500;

//设置隐藏
//对 CMPA、AQCTLA 寄存器使用重影。
//当时基计数器等于零时,从影子加载到活动状态。
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm1Regs.AQCTL.bit.SHDWAQAMODE = AQ_SHADOW;
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
EPwm1Regs.AQCTL.bit.LDAQAMODE = AQ_CTR_ZERO;

//清除操作
EPwm1Regs.AQCTLA.bit.CAU = AQ_TOGGLE;
EPwm1Regs.AQCTLA.bit.CAD = AQ_TOGGLE;
EPwm1Regs.AQCTLA.bit.ZRO = AQ_NO_ACTION;
EPwm1Regs.AQCTLA.bit.PRD = AQ_NO_ACTION;

//开始
EPwm1Regs.AQCTLA.bit.ZRO = AQ_CLEAR;
EPwm1Regs.CMPA.bit.CMPA = PWM_TBPRD;
} 

为什么我看到在 PRD 处切换?

如果我设置 EPwm1Regs.CMPA.bit.CMPA = 0、我看到在零处切换、

如果我设置 EPwm1Regs.CMPA.bit.CMPA = PWM_TBPRD +一些值、我仍然会看到在周期时切换

这与 SPRUHM8I 第1896页中的内容有一定的不一致

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

    我相信您错过了事件生效的优先级。