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.

[参考译文] TMS320F28032:ePWM 模块生成一个假脉冲

Guru**** 2392095 points
Other Parts Discussed in Thread: TMS320F28032

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/916032/tms320f28032-epwm-module-generate-a-false-pulse

器件型号:TMS320F28032

你(们)好  

我使用 TMS320F28032的 EPWM1A 来控制我的单端逆变器、并且在运行期间捕获到一个假脉冲。

正常脉冲宽度约为5us、假脉冲宽度约为53us。

我正在使用计数器的向上计数。 当计数器为零时、PWM 输出高电平、当计数器等于 CMPA 时、它将输出低电平。 总 PWM 周期为66.7us (15kHz)、但我不使用所有周期时间。 我有一个到 EPWM1的 SYNC 信号输入、当接收到 SYNC 信号时、计数器将加载相移值以完成低于66.7us 的周期。 正常周期约为40us、脉宽约为5us。 假脉冲的宽度为50us。

我在手册"注意:EPWMxSYNCI 外部同步事件会导致 TBCTR 计数序列中断。 这可能导致跳过比较事件。 这种跳跃被认为是正常操作、必须考虑在内。" 我怀疑这可能与此相关、但无法确认。

您能帮我就我的失败给出一些建议吗?

下面是我对 EPWM1的设置和控制。

EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;//TB_SYNC_DISABLE

EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
EPwm1Regs.AQSFRC.bit.RLDCSF = CC_CTR_ZERO;

EPwm1Regs.TBPRD = PWM1_TIMER_TBPRD_10kHz;

EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;//TB_COUNT_UP;//向上计数
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;//时钟与 SYSCLKOUT 的比率
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;

EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO;//;et_CTR_PRD;//选择 INT ON 周期事件
EPwm1Regs.ETSEL.bit.INTEN = 0;//禁用 INT
EPwm1Regs.ETPS.bit.INTPRD = et_1st;//在发生第一个事件时生成 INT

EPwm1Regs.ETCLR.bit.INT = 1;
/*生成 PWM */
EPwm1Regs.CMPA.half.CMPA =(EPwm1Regs.TBPRD*3>5);
EPwm1Regs.CMPB =(EPwm1Regs.TBPRD>2);

EPwm1Regs.TBCTL.bit.PHSEN = TB_ENABLE;
u32delay =((EPwm1Regs.TBPRD>>3);
EPwm1Regs.TBPHS.Half.TBPHS = 0;
EPwm1Regs.TBPHS.half.TBPHS = u32延迟;
EPwm1Regs.TBCTL.bit.PHSDIR = TB_UP;
EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET;

EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;
EPwm1Regs.AQCTLB.bit.ZRO = AQ_SET;
EPwm1Regs.AQCTLB.bit.CAU = AQ_CLEAR;

EPwm1Regs.DBCTL.bit.HALFCYCLE = 0;
EPwm1Regs.DBCTL.bit.IN_MODE = DB_DISABLE;//DBA_RED_DBB_FED;
EPwm1Regs.DBCTL.bit.OUT_MODE = DB_DISABLE;//DB_FUL_ENABLE;
EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;
EPwm1Regs.DBRED = 0;
EPwm1Regs.DBFED = 0;

/*用于 ADC 触发器*/
#if 1.
EPwm1Regs.ETSEL.bit.SOCBEN = 1;//在 B 组上启用 SOC
EPwm1Regs.ETSEL.bit.SOCBSEL = 6;//2;//在定时器递增时选择等于 CMPB 的 SOC 时基计数器
EPwm1Regs.ETPS.bit.SOCBCNT = 1;//已发生事件。
EPwm1Regs.ETPS.bit.SOCBPRD = 1;//在发生第一个事件时生成脉冲

#define SET_PWM_Duty (X){EPwm1Regs.TBPRD = GET_15K_PWM_PRD;\
EPwm1Regs.CMPA.half.CMPA =((uint32)(Base_Time_10us *((uint32)(X))>>10);\
EPwm1Regs.CMPB = EPwm1Regs.CMPA.half.CMPA;\
EPwm1Regs.TBPHS.Half.TBPHS =((uint32)(EPwm1Regs.TBPRD-(EPwm1Regs.TBPRD>9)* DELAY_TIME);}

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

    我建议监控同步脉冲、看看"假脉冲"是否总是在一个外部同步脉冲之后出现。

    您提到的问题很常见、这取决于您的 CMPx 函数的设置方式、TBPHS 值以及同步脉冲进入时 TBCTR 的值。

    请注意、我们的 PWM 使用一个"等于"比较模块、如果 TBCTR 从45开始递增计数、并且 CMPA 为43、则 CMPA 功能将在 TBCTR 向上计数至 TBPRD、然后再次复位并计数至43之前不会生效。

    此致、
    Cody  

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

    感谢 Cody。 我监控了 SYNC 信号、发现 SYNC 信号没有异常。 对于假脉冲、在 CMPA 值之前没有发生 SYNC 信号。 因此、我想知道还有什么可能导致缺少 CMPA 比较。 我还发现、在我捕获的所有假脉冲中、脉冲宽度都大约为53us。

    周期为66.7us (15kHz)、60MHz 时总计数为4000、CMPA 值约为5us (~300计数)、PHS 值为3608。

    从电流设置中、我无法弄清为什么假脉冲宽度始终保持相同、大约为53us。 您对此有什么意见吗?

    谢谢

    费  

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

    检查 CMPx 寄存器的影子加载是否正确。 如果您在动态更改比较值、则可能会导致错过比较事件。

    您是否在数字比较或 tripzone 子模块中进行了任何设置? 它们也能够修改 PWM 的输出。

    此致、
    Cody  

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

    由于不活动、此主题将很快关闭。 如果您需要更多帮助、请告诉我。

    此致、
    Cody