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.

F28335的GPIO管脚用作输出使用一段时间后发生每次上电后初始状态为上拉的故障

Other Parts Discussed in Thread: TMS320F28335

最近在用28335做电机控制器,遇到了一个比较奇怪的问题。

设计目的:

用两个GPIO管脚(GPIO45和GPIO46)做输出,分别控制两个电机的抱闸机构:

  • 当GPIO45和46的GPBDAT寄存器写1时,电机的抱闸机构松开,电机可以运行。
  • 当GPIO45和46的GPBDAT寄存器写0时,电机的抱闸机构闭合,电机被锁止。
  • 控制板上电初始化阶段,对GPIO45和46的GPBDAT寄存器写0,电机处于被锁止的状态。


遇到的问题:

控制板搭载在设备上使用约两个月的时间,出现了一个奇怪的问题,(当然,没有奇怪的问题,只有未解的谜团)。每次给设备上电后,GPIO45和46的GPBDAT状态读取出来是1,导致两个电机的抱闸机构松开,电机无法被锁止。但是只要上位机发指令操作一次GPBDAT寄存器写0,GPIO的状态就正常了,后续运行中状态也一直受控。直到断电后再次上电状态异常。

测试:

为了验证GPIO45、46管脚的状态,把GPIO45和46管脚的外围电路断开,使这两个管脚悬空。另外把预留的两个管脚GPIO40和41也配置为输出,与故障的45和46管脚状态做对比。

把GPIO40,41,45,46的GPBDAT寄存器状态都用CAN监控。得到以下结果:

(1)初始化赋值

GpioDataRegs.GPBDAT.bit.GPIO40 = 0;

GpioDataRegs.GPBDAT.bit.GPIO41 = 1

GpioDataRegs.GPBDAT.bit.GPIO45 = 0;

GpioDataRegs.GPBDAT.bit.GPIO46 = 1;

烧写程序后,给控制器断电再上电(不是仿真,是用CAN监控GPBDAT寄存器状态),如下

(2)上电后的GPIO管脚状态:

GpioDataRegs.GPBDAT.bit.GPIO40 = 0;

GpioDataRegs.GPBDAT.bit.GPIO41 = 1

GpioDataRegs.GPBDAT.bit.GPIO45 = 1;

GpioDataRegs.GPBDAT.bit.GPIO46 = 1;

(3)用CAN指令进行GpioDataRegs.GPBDAT.bit.GPIO46 = 0;的操作后:

GpioDataRegs.GPBDAT.bit.GPIO46 = 0;

(4)用CAN指令进行GpioDataRegs.GPBDAT.bit.GPIO45 = 0;的操作后:

GpioDataRegs.GPBDAT.bit.GPIO45 = 0;

(5)后续对GpioDataRegs.GPBDAT.bit.GPIO45 和46的操作均正常。

说明:

通过GPIO40,41与GPIO45,46的对比,可以看出GPIO40,41上电初始化后的状态受控。但是GPIO45,46的状态恒为1,但是程序运行中其状态也受GPBDAT寄存器的控制。

问题

上面这种情况是否说明DSP的GPIO45,46管脚已经有问题了?

如果管脚损坏了,是哪方面原因使其损坏的?该从哪方面去查原因?