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.

[参考译文] TMS320F28377S:TMS320f28377 - EPWM11&12特定 DSP 批次同步信号上的干扰

Guru**** 2480475 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1007220/tms320f28377s-tms320f28377---epwm11-12-glitch-on-sync-signal-with-a-specific-dsp-batch

器件型号:TMS320F28377S

您好!

以下问题描述了我遇到的问题 以及导致我采取变通办法的调查。 我想知道我的推理是否正确,解决办法是否能够证明未来的情况。

我的设计使用 DSP 的全部12个 ePWM。 它分为2组配置、每个组具有一个生成同步信号的主器件。 PWM1与 PWM2同步到6、PWM7是 PWM 8至12的主器件。 所有从 器件都启用了相位控制(PHSEN = 1)。 要获得此配置、SYNCSELEPWM10SYNCIN = 2

我最近开始看到一些装置出现异常故障、而设计现在已经稳定了多年。 在随机模式下、PWM11或 PWM12输出将产生长脉冲。 我的 CPU 以200MHz、TBPRD=1110的频率运行、在上-下模式下工作、提供90KHz 的方波输出和稳定的50%占空比。 很多时候、输出会"跳过一个脉冲"、从而产生一个150%的脉冲。

经过调查,我 收集了所有这些事实

  1. 这只会在 PWM11和 PWM12上发生
  2. 故障模式仅在 以下条件下发生(其他经测试的值和行为稳定)
    1. 方向为低(PHSDIR=0)、相位值为0或1 (TBPHS=0、1)
    2. 方向为向上(PHSDIR=1)、相位为1110 (TBPHS=TBPRD)。
  3. 故障与 其他 PWM 模块的 CPMA、CMPB、TBPHS 寄存器的配置方式无关。
  4. 所有发生故障的设备都具有相同的 DSP 技术支持代码:YFC-94A9RPW

进一步推动调查、我开始在问题发生时监控计数器的行为。 我看到的是2种故障模式

向上向下计数模式似乎错过了 CTR=0或 CTR=PRD 事件、并将继续在超出范围[0-1110]的情况下计数、直至发生下一个同步事件。

2.第二种故障模式更令人担忧。  发生同步事件时、TBCTR 寄存器中加载的相位值看起来是随机的。  请记住、计数器应保持在0和1110内。

在手册中、我发现了这种说法

结论

在以上所有陈述中、我感觉定时器模块中存在某种比赛状态。  

就像时基模块在到达0时将计数方向从向下翻转为向上、但同步事件随后将方向重新变为向下、而不让时基模块第二次做出反应、而计时器将继续以负值(65535和更低)运行。  假设是这种情况、我可以根据 [2.1108]之间的方向轻松使相位寄存器饱和。

这种解决方案确实解决了所有问题、但我无法用这种推理来解释第二种故障模式、这让我对我使用的解决方案充满怀疑。 如果我在一个真正的硬件异步竞争条件之前、这是有道理的、但是由于我正在处理一个同步设计、所以我无法解释"随机"相位重新加载值。 但是、与一批芯片相关的事实让我认为它可能是一个异步竞争条件。

在这里、我需要 TI 的帮助来评估应对这种情况的正确方法。

非常感谢

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

    您好!

    在我们对此进行调查时、您能否更改此配置并查看这是否会导致 ePWM 11/12上的行为:

    1. PHSDIR=0且相位值为0  
    2. PHSDIR=1、相 位值为1110

    ePWM 模块不能在这些配置下运行。

    此致、

    Marlyn

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

    您好!

    实际上、这些是我在第一篇帖子中详述的违规情况。

    要更加精确、请参阅下表。  

    此表适用于单个装置。 如果在不同的 DSP 上使用、它可能会有所不同。  当 PHSDIR=1 & TBPHS=0时、我看到一个装置出现故障。

    我有信心说,问题的情况只有以下几点:

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

    感谢您提供该表。 您是否可以提供一些初始化/配置代码、以便我们尝试复制设置?

    此致、

    Marlyn

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

    您好、Marlyn、

    共享拆分版本的代码有点困难。 如果我们可以拥有 专用通信通道、我可以很高兴地共享一些代码、甚至可以烧录到 DSP 上的二进制文件。

    PWM 的配置方式如下:  

    	pPWMRegs->TBCTL.bit.PRDLD = TB_IMMEDIATE;	
    	pPWMRegs->TBPRD = 1110; 					
    	pPWMRegs->TBCTR = 0;
    
    	pPWMRegs->TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;
    	pPWMRegs->TBCTL.bit.HSPCLKDIV = TB_DIV1;
    	pPWMRegs->TBCTL.bit.CLKDIV = TB_DIV1;
    	// Counter Compare Submodule Registers
    	pPWMRegs->CMPA.bit.CMPA = 555;	// set duty 50% initially
    	pPWMRegs->CMPB.bit.CMPB = 555;
    	pPWMRegs->CMPCTL.bit.SHDWAMODE = CC_SHADOW;
    	pPWMRegs->CMPCTL.bit.SHDWBMODE = CC_SHADOW;
    	pPWMRegs->CMPCTL.bit.LOADAMODE = CC_CTR_ZERO_PRD;
    	pPWMRegs->CMPCTL.bit.LOADBMODE = CC_CTR_ZERO_PRD;
    
    	pPWMRegs->AQSFRC.bit.RLDCSF = CC_CTR_ZERO_PRD;
    
    	if(setOnUp == true)
    	{
    		pPWMRegs->AQCTLA.bit.CAD = AQ_CLEAR;
    		pPWMRegs->AQCTLA.bit.CAU = AQ_SET;
    	}
    	else
    	{
    		pPWMRegs->AQCTLA.bit.CAD = AQ_SET;
    		pPWMRegs->AQCTLA.bit.CAU = AQ_CLEAR;
    	}
    
    	pPWMRegs->AQCTLB.bit.CBD = AQ_NO_ACTION;
    	pPWMRegs->AQCTLB.bit.CBU = AQ_NO_ACTION;
    
    	pPWMRegs->DBCTL.bit.IN_MODE = DBA_ALL;
    	pPWMRegs->DBCTL.bit.OUT_MODE = DB_FULL_ENABLE;
    	pPWMRegs->DBCTL.bit.POLSEL = DB_ACTV_HIC;
    	pPWMRegs->DBRED.bit.DBRED = 80;
    	pPWMRegs->DBFED.bit.DBFED = 80;

    setOnUp 对于 PWM 2、4、6、8、10、12为真、对于 PWM 1、3、5、7、9、11为假

    主器件按如下方式设置

    EPwm1Regs.TBCTL.bit.PHSEN = 1;
    EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO;
    EPwm7Regs.TBCTL.bit.PHSEN = 1;
    EPwm7Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO;

    从器件按如下方式进行设置。

    EPwm2Regs.TBCTL.bit.PHSEN = 1;
    EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;
    EPwm2Regs.TBPHS.bit.TBPHS = 0;
    
    EPwm3Regs.TBCTL.bit.PHSEN = 1;
    EPwm3Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;
    EPwm3Regs.TBPHS.bit.TBPHS = 0;
    
    /*
    Repeat for PWM 2,3,4,5,6, 8,9,10,11,12
    */

    此致

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

    您好!

    感谢您共享配置。 我将尽快在我的身边重复此内容、并随时向您进行更新。  

    此致、

    Marlyn

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

    谢谢您 Marlyn、

    我们是否应该考虑 向您发送一些有故障的 DSP? 正如我说过的、 这个问题 只出现在某些器件上。

    此致

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

    你(们)好

    我想 公开分享您离线提供的答案。 再次感谢您的支持和高水平的专业知识。

    因此、看起来我们在超出规格的情况下运行 DSP。

    1、有 一个5 PWM 的链、限制为4 (请参阅用户手册的第13.4.3.3节)。 有问题的链是 PWM1,7,10,11,12。  我可以通过使用 EPWM7SYNCIN = 3来解决此问题、该选项 会生成相同的行为。

    2. 200MHz 的时钟频率不正确。 根据器  件数据表(第7.9.3.2.2.1节-内部时钟频率)、TMS320f28377内部的 ePWM 模块的最大频率为100MHz。  因此  、EPWMCLKDIV 应设置为1而不是0。

    只要我有机会在几个部件上测试校正、我就会将其标记为答案。

    此致