最近我的学生频繁出现“卡壳”现象:看似很简单的设计,却死活调不出来,人都快疯掉了。大约一周前,小陈来找我的时候,一副悬崖上抓不牢树枝,就想自己松手跳崖的样子,猴急的都想给我说难听话了。这两天,小陈的问题找到了,解决了,又快乐了。但是常伟的问题又来啦。
用MSP430F169单片机给程控增益放大器PGA280实施SPI控制,正常,同一个单片机给一个24位ADS1259实施控制,也正常。但是两个同时都焊上,用CS片选分别控制,就不行了。问题就这么简单,却让他焦头烂额。
解决问题是迟早的事情,我不担心,并且发现问题解决问题,本身就是对他们的锻炼,我才高兴呢。但是,我发现他们无一例外的,都陷入了一种混乱的状态:出现问题,开始左试试,右试试,有时成功了,高兴了,吃饭回来,又不行了,接着试。就这么反复折腾,总有崩溃的时候,就开始发火,焦躁,然后满世界找人帮忙,特别像落水以后找稻草。这种状态持续3天以上,他们就开始对我发火了。
我告诉他们:故障出现是好事,第一锻炼了你们,第二排除了隐患。不到万不得已的时候,我是不会出马的,我只需要教会他们排查故障的三大必须,就可以了。
排查故障是一门学问,深得很。但笼而统之,就三大必须,有了这三条,没有排查不了的故障:第一、心态。第二、策略。第三、耐心。
第一条心态。你必须对出现的故障,有强烈的感激。谢谢上天给了我这个机会,我要牢牢把握住。你可以想象自己是福尔摩斯,已经好几个月没有接活了,和华生天天闲聊已经没有意思了,急切希望有个案子,苏格兰场束手无策了,等着你出马了。只有这种心态,才能让你能够在后续的长期斗争中保持亢奋的头脑、缜密的思路以及足够的耐心。
我最大的特点就在于此。学生给我汇报故障的时候,我通常是特别兴奋,一字一句听,像听考题一样,他们漫不经心的,我的眼睛却犀利如刀。我特别希望我的学生能够学会这一点。
第二条策略。这是技术活。细讲太多,粗粗说点儿。
1)让故障重复出现,避免随机性故障。对随机性故障,我找机会另说。
2)保护故障现场,不轻易乱动。动的无论是软件还是硬件,都应保证可以恢复。因此,别随意焊下芯片,焊下的芯片也要放好,能找回来。另外,软件一定要按照序号备份。
3)不要一次做两个以上的改变。
4)养成习惯,用个小本记录所有的动作和事实。换了个电源,看似小事,有可能由A故障变成了B故障,你脑子就乱了。因此,如果要换电源,也要记录。
5)重视仪器和操作方法。每次记录事实,一定要确保事实是真的。
6)学会用逻辑的思维。主要是,造成这种故障现象的可能性有多少种,一一列出,可能性最大的到可能性最小的。
7)学会排查次序。影响排查次序的有两个主要因素,第一故障可能性,第二排查难度。我们当然要先试探可能性最大的,且排查难度最小的。但是两者并不总是这么巧。比如,你怀疑是A芯片坏了,这可能性最大。但是把它焊下来很费劲,排查实施难度较大,就可以先排查别的可能。这一项有点运气成分,也有点经验成分。
8)学会二分法并巧妙使用。二分法,就是把故障分为两部分(或者三部分,别太多,否则会乱),然后制造一些情况,想办法确定是哪部分,然后再细分,逐渐缩小包围圈。以前日本鬼子查城区里面哪里在发报,就用这方法:一个区域一个区域停电,看哪里一停电就导致电报信号消失,就能确定发报者在哪个区域,然后再缩小区域停电,最终找到我们的地下工作者。几句话还是说不清,我找机会再说吧。
当按照这种缜密的思维方式,罗列了所有故障可能性,且一一排查均无结果的时候,你应该更加亢奋。就像给一个1k电阻加了一个1V直流电压,测量的电流却不是1mA一样,你应该有这种心态:活见鬼了,难道欧姆定律都不成立了吗?
此时,找老师,找朋友,找什么人都行。但是,有谁做到这一步呢?多数学生都在这个阶段,彻底崩溃了。
因此,第三条,足够的耐心。
我曾遇到一个故障,就是电源电流太大。密密麻麻一大堆芯片,工作也算正常着,就是电源指示电流偏大,我知道一定是哪里短路了或者临近短路了。但是怎么查啊?关键是整个系统工作是正常的。
当时我自己告诫自己,要耐心,我不同于一般人,我有足够的耐心一定能查到。于是,我先用放大镜把板子上所有位置都看了一遍,看有没有焊接短路或者飞溅焊锡,花了很久时间,记不得了。然后,我看着电脑上的PCB图,把所有在10mil附近的间距,都用万用表查了一遍,还是没有。有点恼火了,于是我又告诫自己,不是一般人,不是一般人,接着来。
这次我干什么了呢?谁也不会想到我有多大的恒心:我计划把芯片的每一个管脚,或者叫电路板中的每一个节点,都和其它不应该连接的节点,都测一遍。这得测量多少次啊?但我豁出去了。于是,我开始干了。好在当时的芯片,都是DIP封装的,管脚不是甚多,我一个个查,终于查到了。其实时间也不是太长,一两个小时而已。
结果是,两根完全不相干的输出线,短接了,而电阻不是0,记不得是多少,大约就是几个欧姆的样子。我左看右看,他们都不会相连,只有一段大约几个厘米的区间,它们两根线平行走过。我割断,不短路了,短路局限在10cm左右了,再割断,最后局限在1cm左右的空间中,两线平行,但是短路。而两线的间距有差不多3个mm。
这板子已经被我折腾的不成样子了,但留下了一个千古疑问:两根间距3mm的线,在1cm长度内,居然短路了。我用放大镜看着,没有痕迹。我举起来对着刺眼的台灯,仔细看,一条细细的痕迹出现了,那么细,那么曲里拐弯,就有一根不透明的细线。
我举起割刀,在3mm的间距中深深的割了几刀,短路消失了。
这是上世纪九十年代中期的故事,我记忆犹新。
没有如我当时之耐心,这样的故障是难以查到的。
可能会有人说,这是一个个案,印制板的质量不好,你查到又有什么用呢?板子已经废了。但我有不同的认识,查到了,我就可以拍胸脯了,自信心比什么都重要。至今我仍然能够保持足够的自信,学生遇到问题,我不急,慢慢查着去,过了我的期限,我绝不相信,到我这里还查不出来。
心态好,有缜密的策略,有足够的超乎寻常的耐心,是排查故障的三大必须。很多人可能会注重技术性的策略,这当然很重要。但我发现,最重要的恰恰是第一条和第三条,它们不是想学就能学到的,而是要悟要养的。