引言
我是一名嵌入式硬件工程师,平时的工作是做硬件设计,与各种元器件和电路板打交道。
以大家最熟悉的手机为例,如果你拆开过手机,会发现手机里面有一块电路板,上面焊接了各种元器件,包括各种芯片、电阻、电容,电路板就是给这些元器件提供电气通路,并给元器件提供一个固定安装的地方。而我的工作就是设计电路板,最终让这些元器件正常的运转起来。
还以手机为例,硬件工程师就是做出一个手机的物理实体,而我们的好兄弟软件工程师就是编写程序,赋予手机以灵魂。
第一阶段
问题凸现
介绍完背景后,言归正传。这篇文章我主要是记录我遇到的一个科研难题,也是我这些年遇到的一个最大挑战。
我设计的一款设备,在常温下已稳定工作2年,一切运行良好。但是在2016年底,在做一次低温环境试验时,发现设备在低温下不能正常启动。
这里先解释一下什么是低温环境试验。为了考验设备在不同的场景下的工作适应性,每款设备都会有一个正常的工作温度,我们设备的工作温度是0℃~+40℃,也就是说在这个温度范围内,设备都应该正常工作。
但如何验证呢,就需要做环境试验。简单的说就是把设备放入到环境试验箱(可以想象成一个大冰箱)内,让环境试验箱降到0℃,如果设备能够正常工作,就证明OK。
我们一共挑了6台设备,在常温下,6台设备均运行良好。但是奇怪的是,到低温0℃时,有1台设备突然不能正常工作,具体现象是操作系统无法启动,但恢复到常温就一切正常。此现象可以反复再现。
首先我对这个问题进行了分析,定位这个故障是软件引起的,还是硬件引起的。由于设备恢复到常温时,设备工作正常,所以证明软件运行良好,程序代码没有问题,还是应当从硬件入手查找原因。
如果是从硬件查找原因的话,我最直接的判断是某些器件的低温特性不好,在低温时发生了电气参数漂移,从而引发整机故障。但是我们选用的器件都是工业级芯片,工作温度都是-40℃~+85℃,理论上在0℃工作应该是小菜一碟。如果器件没有问题的话,那么还是应该从硬件设计入手进行排查。
我找出设备的原理图,寻找可能发生故障的原因,没有想到还真是有所发现。我们使用的一颗电源芯片,在低温下过流保护的阈值会变小,即在低温时更容易进入过流保护状态。而在系统启动时,电流可能会有一个较大的跳变,可能导致设备在低温下工作异常。为了验证这一点,我修改了电路,通过调整某个电阻的电阻值,提高了过流保护的阈值,重新做低温摸底实验,很遗憾,没有改善!
与之类似的还有几点猜测,做了改动后,再次把设备放入低温温箱摸底,本希望有所效果,但是设备故障依旧。
初现曙光
我梳理了一下排查的思路,发现这里面有两个问题比较棘手:一是做低温试验时,设备是放在密闭的环境试验箱内,人无法直接接触到,所以在低温下无法测量实际运行的电信号;二是在低温环境中,所有的元器件和电路板都会降温,无法准确定位是哪颗芯片或哪部分电路在低温下出了问题。
针对第二个问题,我想如何实现对某颗芯片局部降温,以便缩小范围,找到准确的故障点。根据这个思路,我于是寻找可以降温的方法。功夫不负有心人,我听人说液氮可以迅速降温。于是找来一罐液氮进行尝试。
记得我当时第一次操作时还是有些紧张的。因为在液氮的包装说明上注明,液氮可以达到-40℃的低温,可能对人体造成伤害,所以使用起来必须要小心。同时为了监测降温的效果,我还使用了一个温度探头,实时监测温度的变化情况。
实际使用起来比想象的要简单,只要用罐子的喷嘴对电路板进行喷射即可。在最开始尝试降温时,我使用液氮对处理器芯片和内存芯片分别进行喷射,温度迅速降到了-10℃以下,设备启动正常。
但是在对Flash芯片和某颗电源芯片局部降温时,竟然重现了操作系统启动停止的现象。当时我很兴奋,哈,找到问题的原因了,就是这颗Flash芯片或电源芯片的问题。当时兴冲冲的找了新的Flash和电源芯片去焊接厂家进行更换。
峰回路转
万没有想到,在请焊接厂家更换完芯片后,测试发现电路板变得更加糟糕了,怎么在常温下系统都无法启动。在更换芯片之前,设备即使在低温下有故障,但常温下都一切正常。
我深吸一口气,让自己冷静下来,仔细观察电路板有什么异常。突然发现电路板上面有一颗大电感竟然发生了破裂,应该是受到了很大的物理应力。如果电感不正常,那么与之相关的开关电源电路必然也不正常。拿万用表测量了一下相关的电压,果然如此。还好,问题总算找到了,但我还是需要把事情的前因后果弄明白。
我赶紧给焊接厂家打电话核实情况,对方倒是直言不讳,说是在更换芯片的过程中,一不小心把电路板摔到了地上。Oh,my God!真是一波未平,一波又起。本来是要解决低温下电路板的故障,现在常温下电路板都不正常了。我当时深刻的体会到了一句话:真实的生活永远比故事精彩。
没有办法,只能硬着头皮修这块摔坏的电路板。我本以为把摔坏的电感替换掉,让开关电源电路恢复正常即可。但实际上,这块电路板是从1.5米的高度摔到了地上,受了很严重的内伤。在供电恢复正常后,我发现操作系统仍然无法启动。找来仿真器对处理器芯片进行仿真,发现处理器芯片访问DDR也发现了错误,芯片本身可能摔坏了!
事到如今,没有更好的办法,只好一颗一颗的更换芯片,先更换了4片内存芯片,没有改善,再更换了处理器芯片,发现情况更加糟糕,电路板供电都不正常了。估计是在更换芯片的过程中,电路板上的电源芯片频繁受热,原先焊接良好的芯片发生了虚焊,导致了故障。
经与领导协商,认为此块电路板已没有维修价值,若继续更换芯片已不能保证修理好,而且还要花钱购买新的芯片和投入较大的人工成本,修理工作只能以失败告终。
咬牙坚持
虽然放弃了修理故障电路板,但是问题的查找不能就此结束。在电路板摔坏之前,毕竟找到了怀疑点,低温下要么是那颗Flash芯片有问题,要么是那颗电源芯片有问题。既然我无法修理把那块故障板修理好,我可以把怀疑有问题的芯片更换到其它好电路板上,如果低温能够再现故障,也可以证明我的推断。
但是接下来事情没有按照我的预期来发展,把那两颗怀疑低温有故障的芯片更换到其它电路板上,再次做低温摸底,这块更换了芯片的电路板在低温下竟然一切正常。我的推测没有得到验证,问题的排查又再次陷入了僵局!
(未完待续)