因为单片机烧坏这个问题,我有一段刻骨铭心的经历。
通过我的经历,你将学到最接地气的硬件调试经验。
大概是6,7年前的事了。
当时做一款产品,用STM32F103C8T6,硬件工程师设计好PCB,打板焊接。
一共焊了多少块样机我记不清了,焊好的样机里面,只有一块是好的。
好的意思是能烧录程序,程序能跑起来。
对于新产品研发初期,我习惯性地在程序里加一个功能,就是控制硬件上某个LED每秒闪1次。
为什么要加这个功能?
第一是为了判断单片机有没有正常跑起来,如果不闪,代表硬件有问题,这个时候就不要写别的程序,先停下来,把硬件问题解决了再继续调程序。
第二是为了程序在增加新功能的时候,如果出现死机问题,能及时发现,死机了LED肯定就不闪了,如果你不这样做,可能一下增加了很多新程序,不知道具体是增加哪一个之后死机的,增加了Debug的时间成本。
回到上面焊了几个样机,只有一个样机是好的问题。
这些样机的问题现象是啥呢?
我先来说其中一个现象,就是一上电单片机就慢慢发烫,注意是慢慢发烫,然后烧了。
发烫这个问题,结论就是短路造成的,不管快慢。
然后我们排查短路的原因,先把单片机拆下来测电源部分,发现没问题。
这里说个很重要的细节,样机先不要焊芯片,把电源部分测试没问题以后再焊,万一电源问题导致芯片烧了,后面至少是双倍的维修时间。
我们先单片机取下来,电源是正常的,换个新的单片机,一焊上去,又短路!用放大镜看了每个引脚又没连锡。
我们开始怀疑芯片是不是假的,又把好的那个样机单片机拆下来,换上去,又短路!
我们做了很多尝试,比如怀疑是不是电源部分有问题,到网上买了块STM32F103最小系统板,直接把我们样机的3.3V和GND拉出来接到最小系统板,结果又是正常的,说明电源没问题。
后面采购了一些新的单片机,又再焊了5-10个样机,还是会有这样的问题,而且又发现了一个新问题。
除了短路以外,还有一些下载不了程序,彻底给我俩给整懵了,有点无从下手了。
不过迫于项目压力,我们只能哼哧哼哧继续找问题。
我开始换一个角度出发,先不解决短路问题了,先解决烧录不了程序的问题,先把项目功能做点出来,好跟老板交代。
我用万用表测试了一下STM32F103的各个供电引脚,复位电路,本来想用示波器测下晶振频率,当时不知道晶振频率怎样才算正常,感觉麻烦就放弃了,都是看一些直观的问题,比如连锡、虚焊问题。
两个人搞了将近半个月,问题还是没解决,老板看不下去了,请了一个做了研发10几年的工程师过来看,结果也没解决。
这个问题解决不了,感觉很打脸(面试时吹过头了),STM32之前用过几次,从来没出现过这种问题,难道是这家公司跟我八字不合?
也怀疑是不是由于硬件工程师经验不足,PCB走线问题才搞出这种玄学…
我决定做最后的尝试,自己重新焊2块板子,如果还不行,我就提桶跑路。
整个焊板过程我都是战战兢兢的,每个贴片电阻,电容都对了好几遍,确定没问题再下烙铁。
焊完以后,准备通电,按鳄鱼夹时,手都在发抖,结果…芯片居然没发烫了!!!
再拿到电脑旁边,插上STLink,只见到Keil编译窗口底下的缓冲条拼命往前冲…烧录也成功了!LED也开始闪烁了!
要不是硬件工程师是男的,我就要把他抱起来庆祝了。
第一块成功以后,我又测了第二块,都没问题。
接着跟硬件工程师对比下,他是不是焊接过程中,哪个细节出现了问题。
对比以后,我们不一定样的地方就是,他喜欢用松香,而我从来不用。
对,问题就出在万恶的松香上!!!
原因就是烙铁经常怼到松香里面,松香里可能堆积了看不到的锡,导致芯片引脚连在一起了。
后面样机全部不用松香以后,这个问题就解决了,如果不是亲身经历,都不敢相信能碰到这种事。
下面总结一下:
1.想快速提升硬件和代码调试经验,最好的办法是完完整整去做几个项目,学完整项目可以找无际单片机的。
2.通过电流值能看出电路板是否有问题,这个我觉得非常重要,也很容易被忽视,如果只测功能,很细节的问题很难被发现,但是通过看电流很容易发现,硬件一样,功能一样,电流基本也差不多的,如果10个,有1个电流大了10个mA,说明这个板子肯定哪里有问题,特别是低功耗产品。
3.样机先测电源,电源没问题再焊接芯片。
4.芯片发烫,看电源电路和引脚有没有连锡。
5.芯片能下载程序,但是不运行,大概率是程序问题,重点排查程序,可以用最简单的让LED每秒闪烁1次程序测试。
6.头脑要清晰,可以用排除法不断缩小问题范围,先精准定位好问题,再解决问题。
暂时先说这么多,祝大家做产品,永远没BUG…