上一个线程的标题为“TMS320F28379D:峰值电流控制模式下错过的 CMpss 事件”
线程中问题的解决方法不明确。 峰值控制器使我获得了大约30个无界电流脉冲。 这一问题相对较少。 它大约每2小时发生一次,同时对整个系统应用瞬变。
TI 有一份文档“SPRZ422I”。 在本文档第36页上,它涉及到这个问题,但我们无法理解它作为解决方案所提供的内容。
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:峰值电流控制模式下错过的 CMpss 事件”
线程中问题的解决方法不明确。 峰值控制器使我获得了大约30个无界电流脉冲。 这一问题相对较少。 它大约每2小时发生一次,同时对整个系统应用瞬变。
TI 有一份文档“SPRZ422I”。 在本文档第36页上,它涉及到这个问题,但我们无法理解它作为解决方案所提供的内容。
您好,维托,
我看了你提到的文档。 勘误表中的问题 是闩锁在预期时间点未被清除。 但是,您的案例似乎在达到 CMPSS 阈值时不会发生比较事件。 因此,我不太确定这是否 是根本原因。
您还提到,这个问题非常罕见,但只在嘈杂的环境中发生?
在瞬态期间(问题发生时),您是否能够提供关键 PWM 的波形和反馈电流信号?
您是否可以通过配置 PWM 和 CMSRSS 来绘制一张图片? CMPSS 是否也已重置?
是否使用了消隐?
此致,
陈

绿色轨迹是馈入 CMPIN1P 的信号。 这是我们的主要潮流。 刻度为1V = 40A。 您可以看到电压在 DACREF (即 VDDA)上运行良好。 我们对 VDDA 应用3.3V。 我们不设置 SELREF。 默认值为0,因此 DACREF 应该是 VDDA。
我们正在使用 TI 宏来执行数学——该宏称为“CNTL_2P2Z_CLA_C”。该宏要求用户为数学的最大输出输入值。
在我们的代码中,它被输入为“coeff1.Max =.8;”
我们将其乘以(216–1)并将其加载到 RAMPMAXREFS 中。
根据 SPRUHX5G 第1649页的图12-5,该值除以24,然后传输到 DACHVALA。
然后,根据 SPRUHX5G 第1647页的图12-3,该值作为电压传输到 DACOUTH。 该电压的值应遵循方程式12-4,方程式结果为2.64V。 我想,这种情况恰好是3.3中的0.8,这并不是巧合。
无论如何,无论您使用哪种数学,DACOUTH 都不可能大于3.3V。 正如您所看到的,CMPIN1P 的水平远远高于这一水平。
为供参考,蓝线是次输出电压。
请查看今天之前的两份回复。
我具有以下 CMPSSS 和 PWM 配置设置。 您还要求重置 CMPSS。 我不知道你的意思是什么。
CPMSS 配置…
(从文件 Peripheral_CNF)
Cmpss1Regs.COMPCTL.bit.COMPDACE =1; //本地通电比较器
Cmpss1Regs.COMPCTL.bit.CTRIPHSEL =3; //3数字滤波器的锁定输出驱动器 CTRIPH//2数字输出
Cmpss1Regs.COMPCTL.bit.COMPHINV =0; //比较器输出通过
Cmpss1Regs.COMPCTL.bit.ASYNCHEN = 0; //要重置锁存的 PWMSYNC 路径已启用
Cmpss1Regs.COMPDACCTL.bit.DACSOURCE =1; // DACsrc;// 0 - DACHVALA 从 DACHVALS 更新;// 1 -内部斜坡
Cmpss1Regs.COMPDACCTL.bit.RAMPSOURCE = 11; //RAMPsrc;// 0 - PMW1;1- PWM2 ...依此类推
Cmpss1Regs.RAMPDECVALS =40;
EPwm12Regs.HRPCTL.Bit.PWMSYNCSEL = 1; //在 CTR 生成 PWM 同步= ZRO 以同步内部斜坡
Cmpss1Regs.CTRIPHFILCTL.bit.FILINIT = 1;
Cmpss1Regs.CTRIPHFILCTL.bit.thrh = 3;
Cmpss1Regs.CTRIPHFILCTL.bit.SAMPWIN = 5;
Cmpss1Regs.COMPSTSCLR.bit.HSYNCCLREN = 1; // PWMSYNC 将重置锁扣
注意:Cmpss1Regs.COMPCTL.bit.COMPHSOURCE 未在代码 Default (默认值)中设置,因此正在使用斜坡发生器和 DAC。
Cmpss1Regs.COMPCTL.bit.CTRIPOUTSEL 未在代码中设置。 默认值为0。
Cmpss1Regs.COMPDACCTL.bit.SELREF 未在代码中设置。 默认值为0
Cmpss1Regs.COMPDACCTL.bit。 RAMPLOADSEL 未在代码中设置。 默认值为0
Cmpss1Regs.COMPDACCTL.bit.SWLOADSEL 未在代码中设置。 默认值为0
Cmpss1Regs.COMPDACCTL.bit.FREESOFT 未在代码中设置。 默认值为0
Cmpss1Regs.COMPHYSCTL.bit.COMPHYS 未在代码中设置。 默认值为0
PWM 配置
EPwm1Regs.TBPRD = 300;
CpuSysRegs.PCLKCR0.bit.HRPWM = 1;
EPwm1Regs.TBCTL.bit.PRDLD = 0; //设置阴影负载
EPwm1Regs.TBPHS.ALL = 0;
EPwm1Regs.TBCTR = 0;
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_updown;
EPwm1Regs.TBCTL.bit.PHSEN = 1;// TB_disable;
EPwm1Regs.TBCTL.bit.SYNCOSEL =1; //用于同步 ePWM(2-7)“下流”
EPwm1Regs.TBCTL.Bit.HSPPCLKDIV = TB_DIV1;
EPwm1Regs.TBCTL.Bit.CLKDIV = TB_DIV1;
//计数器比较子模块寄存器
EPwm1Regs.CMPCTL.Bit.SHDWAMODE = 0;//CC_Immediate;
EPwm1Regs.CMPCTL.Bit.SHDWBMODE = 0;//CC_Immediate;
//操作限定符子模块寄存器
EPwm1Regs.AQCTLA.Bit.ZRO = AQ_SET;
EPwm1Regs.AQCTLA.bit.PRD = AQ_CLEAR;
//死区控制寄存器
EPwm1Regs.DBCTL.bit.out 模式= DB_FUL_ENABLE;
EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC; //活动高可用性
EPwm1Regs.DBRED.All = PS_DT;//PS_DT_R1;//40,20; //初始值
EPwm1Regs.DBFED.all = PS_DT;//PS_DT_F1;//40,20; //初始值
EPwm12Regs.TBPRD = 299; //
EPwm12正则 TBPHS.Bit.tbPHS =5;
EPwm12Regs.TBCTR = 0;
EPwm12Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;
EPwm12Regs.TBCTL.bit.PHSEN = TB_ENABLE;
EPwm12Regs.TBCTL.bit.PHSDIR = TB_UP;
EPwm12注册器.tbctl.bit.hspcLKDIV = TB_DIV1;
EPwm12注册器.tbctl.bit.CLKDIV = TB_DIV1;
EPwm12Regs.TBCTL.bit.SYNCOSEL = 1;//TB_SYNC_In; //同步“流过”模式
//计数器比较子模块寄存器
EPwm12注册码.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
EPwm12注册码.CMPCTL.Bit.SHDWAMODE = 0;//CC_Immediate;
=========================================================================
//根据比较器1输出定义事件(DCAEVT1)
EPwm12Regs.DCTRIPSEL.Bit.DCAHCOMPSEL = 3;// DCAH = Trip4比较器1输出
EPwm12Regs.TZDCSEL.bit.DCAEVT2 = TZ_DCAH_HI; // DCAEVT1 = DCAH HIGH (将作为活动状态)
EPwm12注册器.DCACTL.Bit.EVT2SRCSEL = DC_EVT_FLT; // DCAEVT1 = DC_EVT_FLT (已过滤)
EPwm12Regs.DCACTL.Bit.EVT2FRCSYNCSEL = DC_EVT_Async; //采用异步路径
//启用 DCAEVT1作为单触发源
EPwm12Regs.TZSEL.Bit.DCAEVT2 = 1; // CBC /启用单次触发
//基于同一触发事件的同步机制的以下代码- COMPxOUT
EPwm12Regs.DCACTL.Bit.EVT1SYNCE =1; //已启用同步
// ADC SOC 生成
=========================================================================
//PWM 外部同步配置
InputXbarRegs.INPUT5SELECT =17; //将源中的 PWM 同步设置为 GPIO17
InputXbarRegs.INPUT12SELECT =17; //将 eCAP6源设置为 GPIO17
GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 0; // GPIO17 = GPIO
GpioCtrlRegs.GPADIR.bit.GPIO17 = 0; // GPIO17 =输入
GpioCtrlRegs.GPAPUD.bit.GPIO17 = 0; //启用内部上拉
EPwm12Regs.HRPCTL.Bit.PWMSYNCSEL = 1; //在 CTR 生成 PWM 同步= ZRO 以同步内部斜坡
您好,维托,
很抱歉耽误你的回答。
我没有看到 PWM 波形和反馈信号。 所以我认为 PWM 没有响应,对吗? (仅供确认)
如果您能告诉我 PWM 的外观,这将非常有帮助。 它是否已关闭并快速重新打开? 或者在这段时间里它总是打开的。
你在第一次答复中的计算对我来说是有意义的。 但这并不能解释当2.64设置为最大参考值时 PWM 为何不响应
我将看看您发布的代码。
此致,
陈
您好,维托,
您可以查看下面的主题
此外,您还可以尝试在 CMPSs 中使用数字滤波器和滞后功能,以查看是否可以消除此问题。
此致,
陈
感谢你的回复。
我们的目的是使用同步模式和数字滤波器,正如您要求我复习的线程所暗示的那样。 我希望您可以查看我之前发送的比较器和 PWM 设置,看看您是否同意它们是合适的。 TI 确实要求我提供这些信息。 我假设 TI 的某人会考虑他们所要求的。
如果 TI 没有资源来审查这一问题,我会理解,但请让我了解您的计划。
或者,如果 TI 不能花时间审查他们所要求的信息,我希望 TI 能提供一个能够更具交互作用的第三方联系人。
峰值 CMC 的外围配置相当复杂,最佳策略是按块验证。
在这种情况下,您是否曾尝试观察比较器的原始输出? 您可以通过输出 XBAR 将比较器的输出(CTRIPOUTH/L)输出到 GPIO 引脚。 但请记住,CTRIPOUTH/L 信号不一定与 CTRIPH/L 信号相同(这些信号可以通过 PWM XBAR 路由到 ePWM)。 确保使用相同的 mux 设置设置 CTRIPH/L 和 CTRIPOUTH/L。