昨天老师派我搞一个小问题,大致是生产组出问题了,原本好好的程序在板子上运行出现了错误。具体错误是电机的码盘数据不对,不是连续变化了,变成上上下下的大幅度跳变了,从码盘出来的数据经过一个芯片后,输入到FPGA里面,FPGA内做格雷码转二进制,然后串口发给上位机,在上位机上显示得出现错误。当然这只是FPGA内部庞大程序的一小部分,我就去用逻辑分析仪去看看这个数据在FPGA内部是不是正常的。
期间有些小波折,我笔记本上的软件是ISE14.4,源程序是12.4的,无奈大程序包含一些别的东西,不能在14.4上面运行,否则得大动干戈了,就重新安装了12.4。装好之后,就用逻辑分析仪看信号,果然如上位机显示一样,是大幅跳变的。这就证明从FPGA到上位机的通路没有问题,问题只能在FPGA输入之前和FPGA内部逻辑了。
只好重新拿接线表查电机码盘的线接到板子的顺序是不是正确,三个人每人查了一遍后确认无误;这下蛋疼了,我表示束手无策了,因为这个程序在之前交付的机器上是没有问题的,这一次所有的程序也都没改,板子也都没变,程序逻辑不能出问题。几个人开始换板子,查断路,线都没问题。彻底无语了。
快下班了时候,大神老师来看我搞定没,让他失望了。他就自己开始搞了。
不得不承认,经验和想象力非常决定成败。听完我们的排查后,立马确定是码盘数据出来后接的一个芯片出问题了。他开始查数据输入到FPGA的14位数据的电平,果然查出有问题,有三个位电平处在不能判别的状态。之前我们只是用逻辑分析仪看,这种电平大小根本看不出来。于是他更确定是板子出问题了。就更换板子继续测,同样的问题。连换了三块后,我们都无语了,同样的问题。三块板子都坏的概率为0。好吧,大神老师开始测码盘数据输出的14位,然后自己算格雷码转二进制,并与FPGA的做对比,发现有很大不同。最后排查结束,只有是芯片有问题。从仓库领了新芯片,换上之后仍然有问题。这时候经验至上了。开始怀疑一切了,他觉得芯片是错了,用放大镜看,果然是不怎么好。电路图上是74lvt244,我们焊的是74lvt244a,就是这个a把我们坑了,应该焊74lvt244b的,真的给跪了。这俩芯片电压是不同的,一个5v,一个3.3v,是管仓库的老大为了消耗以前的芯片,出库领料弄混了,真心跪了。从别的废板子上拆下一个芯片焊上之后,所有都好使了,没有任何问题。
大神老师,果然牛逼,我们都太二了。这虽然是个小问题,但折磨了很久,还是没经验,也狠不下心去怀疑一切。
经验和想象力是调板子的不二组合。