最近在用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管脚已经有问题了?
如果管脚损坏了,是哪方面原因使其损坏的?该从哪方面去查原因?
Shine:
TMS320F28335 属于C2000系列,有专门的C2000论坛可以咨询。
e2echina.ti.com/…/
user5897540:
回复 Shine:
谢谢