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.

TMS320F28035芯片似乎受到干扰,求教导致问题的原因

Other Parts Discussed in Thread: TMS320F28035, CONTROLSUITE

我正在调试一块数控电源,采用的TMS320F28035芯片在运行过程中时常出现宕机现象,采用仿真器跟踪发现,在芯片出错后,程序似乎从头开始执行,并停止在了InitSysCtrl()函数中的InitPLL()函数里,具体卡死的语句为

 while(SysCtrlRegs.PLLSTS.bit.PLLLOCKS != 1)
      {
          // Uncomment to service the watchdog
          // ServiceDog();
      }

我用示波器观察过复位引脚和电源的波形,没有发现明显毛刺,在走线上也采用了功率地和信号地分开走线、单点接地的方式,附上PCB图(PCB比较渣,各位轻拍)

功率地在顶层接地

信号地在底层接地

各电源引脚去耦电容采用的是10uF(1.8V)和2.2uF(3.3V),小弟愚笨,对于导致这个问题的原因百思不得其解,希望各位能够为我解答,先行谢过各位。

  • 你采用内部晶振试试看?

  • 降频率试试。

  • DSP复位一定有原因的,楼上教你这样做那样试有什么用?解决不了你的问题。

    1、检查你的程序,先排除所有可能会是软件的问题;

    2、如果开启了看门狗,禁用后再测试是否仍然会复位;

    3、示波器测3.3V电源,采用触发模式,看电源是否会瞬间跌落;

    4、如果以上都确认了问题还是复现,那一定是芯片受干扰了。等到了这一步,我教你最后一招。

  • 或许不是您板子硬件的问题,关于c2000时钟锁相环的配置可以参考下帖子:

    https://e2e.ti.com/support/microcontrollers/c2000/f/171/t/116252

    检查下仿真器连接是否加载了gel文件,或者外部拉低xrsn引脚,看是否可以通过while()等待。

  • Young Hu 说:

    你采用内部晶振试试看?

    您好,谢谢回复。我采用内部晶振后问题似乎解决了,单片机运行了一段比较长的时间也没有宕机,能否请您告诉我做出这一判断的理由呢,是因为外部晶振受到了干扰吗?

  • Jun Zhang10 说:

    DSP复位一定有原因的,楼上教你这样做那样试有什么用?解决不了你的问题。

    1、检查你的程序,先排除所有可能会是软件的问题;

    2、如果开启了看门狗,禁用后再测试是否仍然会复位;

    3、示波器测3.3V电源,采用触发模式,看电源是否会瞬间跌落;

    4、如果以上都确认了问题还是复现,那一定是芯片受干扰了。等到了这一步,我教你最后一招。

    您好,谢谢您的详细解答。根据您所说的,我已经尽可能检查过程序,没有发现明显问题。附上我的主函数代码,目前仅仅只输出一个简单的PWM波进行开环的测试,主循环是空的:

    void main(void)
    {
    	float duty = 0;
    	memcpy((uint16_t *)&RamfuncsRunStart,(uint16_t *)&RamfuncsLoadStart, (unsigned long)&RamfuncsLoadSize);
    	InitSysCtrl();
    	DINT;
    	InitPieCtrl();
    	IER = 0x0000;
    	IFR = 0x0000;
    	Interrupt_Init();
    	InitFlash();
    	HAL_ePWM_Init();
    	HAL_ADC_Init();
    	EINT;
    	ERTM;
    	for(;;)
    	{
    
    	}
    }

    目前程序中的看门狗处于禁用状态。我也进行了3.3V电源的观察,采用单次触发的方式,在3.3V以下多个触发电平位置尝试之后(最大值设置在3V左右,再大会被开关干扰触发),均没有在出现宕机现象时捕捉到电压跌落。我尝试着换成内部晶振后,问题似乎得到了解决,这个问题似乎只在使用外部晶振的情况下出现,我还是不太清楚原因,能否请您再给我一些建议呢,谢谢!

  • mangui zhang 说:

    降频率试试。

    您好,感谢回复。在更换为内部晶振后问题似乎得到了解决,考虑到控制速度和精度的原因,我暂时不考虑降低频率的方法,之后可能会进行尝试,谢谢您的解答!

  • Seven Han 说:

    或许不是您板子硬件的问题,关于c2000时钟锁相环的配置可以参考下帖子:

    https://e2e.ti.com/support/microcontrollers/c2000/f/171/t/116252

    检查下仿真器连接是否加载了gel文件,或者外部拉低xrsn引脚,看是否可以通过while()等待。

    您好,感谢您的解答。我浏览了帖子,主要讲的是PLL配置在脱离仿真器后可能不正确的问题,在我的程序代码中采用的是TI ControlSuite例程中采用的初始化代码,我想应该不会出现这个问题。关于GEL文件,在CCS里找了一圈也没有找到GEL文件……囧(我的版本是CCS V6.2.0)。在芯片宕机后,外部复位的确可以使得MCU恢复正常,这一点我也不是很能想明白。目前通过采用内部晶振,问题似乎已经得到了解决,我正在考虑是不是因为外部晶振受到了干扰。再次感谢!

  • 楼上各位,其实楼主给的测试结果以及PCB的layout其实是可以大概确定问题点的。如果卡死在下面这句话中,可能就是晶振部分的问题,或者起振不正常。

    while(SysCtrlRegs.PLLSTS.bit.PLLLOCKS != 1)
         {
             // Uncomment to service the watchdog
             // ServiceDog();
         }
    之所以让你改成内部晶振,目的是为了确定我的猜测。你的晶振部分的layout需要修改的。
  • Young Hu 说:

    楼上各位,其实楼主给的测试结果以及PCB的layout其实是可以大概确定问题点的。如果卡死在下面这句话中,可能就是晶振部分的问题,或者起振不正常。

    while(SysCtrlRegs.PLLSTS.bit.PLLLOCKS != 1)
         {
             // Uncomment to service the watchdog
             // ServiceDog();
         }
    之所以让你改成内部晶振,目的是为了确定我的猜测。你的晶振部分的layout需要修改的。

    非常感谢!能否请您具体一点呢,是走线太长了吗?我的晶振是20MHz的,按照数据手册上的要求没有串联电阻,不知道这样会不会有影响?

  • 请问这个晶振的layout怎么修改的呢?

    我也遇到了类似的问题,在系统上12pcs模块,有时DSP会切换的内部晶振,但是没有找到晶振是如何被干扰的。

  • 请您重新发帖说明下您的问题,不要跟踪旧帖
  • 请问,我们以上4种情况都以排除,但还是进入死循环,请大佬指教! TI忠实粉丝