TMS320F28335的EPWM1死区模块工作异常技术求助
PMSM矢量控制EPWM1死区模块异常排查求助
EPWM2工作正常,但EPWM1B与EPWM1A信号完全一致,未生成预期的互补带死区信号。相关配置代码如下:
EPWM1配置代码
EPwm1Regs.TBPRD = PERIOD;// Period = TBCLK counts EPwm1Regs.TBPHS.half.TBPHS = 0; // Set Phase register to zero EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Symmetrical mode EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Master module EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW; EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; // Sync down-stream module EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW; EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW; EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // load on CTR=Zero EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; // load on CTR=Zero EPwm1Regs.AQCTLA.bit.CAU = AQ_SET; // set actions for EPWM1A EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR; EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; // enable Dead-band module EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC; // Active Hi complementary EPwm1Regs.DBFED = DEAD_TIME; // EPwm1Regs.DBRED = DEAD_TIME; //
EPWM2配置代码
EPwm2Regs.TBPRD = PERIOD; // Period = 1600 TBCLK counts EPwm2Regs.TBPHS.half.TBPHS = 0; // Set Phase register to zero EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Symmetrical mode EPwm2Regs.TBCTL.bit.PHSEN = TB_ENABLE; // Slave module EPwm2Regs.TBCTL.bit.PRDLD = TB_SHADOW; EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN; // sync flow-through EPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW; EPwm2Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW; EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // load on CTR=Zero EPwm2Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; // load on CTR=Zero EPwm2Regs.AQCTLA.bit.CAU = AQ_SET; // set actions for EPWM2A EPwm2Regs.AQCTLA.bit.CAD = AQ_CLEAR; EPwm2Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; // enable Dead-band module EPwm2Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC; // Active Hi complementary EPwm2Regs.DBFED = DEAD_TIME; // EPwm2Regs.DBRED = DEAD_TIME; //
比较值初始化与更新代码
初始化
EPwm1Regs.CMPA.half.CMPA = 0; // adjust duty for output EPWM1A EPwm2Regs.CMPA.half.CMPA = 0; // adjust duty for output EPWM2A
更新
EPwm1Regs.CMPA.half.CMPA = PERIOD - Sa; EPwm2Regs.CMPA.half.CMPA = PERIOD - Sb;
Sa、Sb为调制算法输出值,参考手册sprug04a的3.4示例配置,已用示波器确认信号异常,求排查方向。
排查建议
- 补全EPWM1B的动作寄存器配置:当前仅配置了
AQCTLA(EPWM1A的动作逻辑),死区模块需要EPWM1B的基础动作作为输入参考。需明确配置AQCTLB的CAU为AQ_CLEAR、CAD为AQ_SET,与EPWM1A的动作形成互补。EPWM2可能默认完成了该配置,而EPWM1未设置。 - 验证死区输入源配置:确认
DBCTL.bit.IN_MODE的取值,需确保其设置为DB_IN_SRC_A(默认值,但要排查是否被其他代码修改),否则死区模块不会以EPWM1A为基准生成互补信号。 - 检查寄存器配置生效情况:在EPWM1配置完成后,立即读取
DBCTL、DBFED、DBRED寄存器的值,对比EPWM2的对应寄存器,确认配置未被其他代码意外覆盖。 - 校验PERIOD与DEAD_TIME数值合理性:如果
DEAD_TIME数值过大(接近或超过PERIOD的一半),在对称升降计数模式下,死区模块无法正常生成互补信号;同时检查PERIOD宏定义是否符合预期值。 - 排查GPIO引脚复用配置:确认EPWM1B对应的GPIO引脚是否被正确配置为EPWM输出功能,避免被误设为通用IO或其他外设功能。
- 检查EPWM1时钟使能状态:部分TI MCU的EPWM模块死区功能需要单独的时钟使能,确认PCLKCR等全局时钟寄存器中EPWM1的时钟使能位已正确置位。
内容的提问来源于stack exchange,提问作者Muhammad
相关产品推荐
相关产品推荐

