事件概述:
最近,工作中出现了一个问题,耗费了我无数的脑细胞和时间精力,浪费了好几天,最终才找出原因。整个破案过程惊心动魄,心情像是在坐过山车,振幅达到几十公里,差点碎掉。
既然如此费心,不记录下来,对不起自己,保存一下,时不时看看,也算引以为戒吧。
前段时间做了个简单的项目,真的很简单,就有点麻痹大意了。几年前我做过一款仪表,是4个通道的热电偶温度测量仪表,热电偶的种类是K型。
这是一款很成功的仪表,测量精度较高,功能很多,品质稳定,连最龟毛的客户都很喜欢,算是畅销品。前几个月,应客户要求,说想要知道新的机型,保留2通道的K型热电偶测温,另外两通道使用热敏电阻测温,其余功能保持不变。
热敏电阻测温是所有测温方式中最简单的,相当于研发中的幼儿园级别,我当然很开心,原有项目简单改动一下就能卖出量,很有成就感呢!
测量原理:
测量热电偶要比测量热电阻麻烦得多,像热电偶测量,前级滤波线路就是一堆元件:
中间级还得使用运算放大器进行信号放大,因为热电偶测温的基本原理是两种不同成份的材质导体组成闭合回路,当两端存在温度梯度时,回路中就会有电流通过,此时两端之间就存在电动势——热电动势。这个热电动势很小,就K型热电偶来说,整个量程范围平均一摄氏度的温度变化,对应的电压变化只有15uV左右,这就一定要使用运算放大器了。
热电偶整个测量电路很复杂,有些半导体公司为了简化热电偶的测量线路,还专门推出有专用的测量IC,只需要极少的外围元件就能完成测量。只是,这样的专用IC成本很高,有的价格能有十几美金,所以一般中低档的测量仪表还是使用分立元件,自己搭建线路进行测量。
而热敏电阻测温,特别是NTC型的应用,就非常简单了,只需要简单使用电阻分压,其分压信号直接使用AD测量即可:
现在是去掉2路测量,线路简化不少,相当于是造惯了航空母舰,现在要用纸折一艘小舢板,so easy,所以,我直接在原有项目的基础上进行简化修改。
新旧对比:
这是原来项目的PCB layout图:
这是新项目的PCB layout图:
可以看出layout几乎没有变化,只是在PCB的下方中间部分删去了很多元件,增加了几个接插件而已。
只花了2周就完成了所有项目的设计,转给工厂进行试产了。第一批试产是20台,因为项目太简单,我也没有去工厂追踪,预测应该很顺利。
问题出现:
可是事与愿违,20台出来,经过校正检测,足足有18台仪表,其热电偶测量精度都达不到原来的设计精度要求。原来测量,从-2001375℃,误差都在1℃以内,且测量值比较稳定,跳动顶多是0.10.2℃。可是这次的18台不良品,误差基本在1.5~2℃,还不太稳定,数值跳动最大可达1℃。
我收到样品实际测试了一下,碰到的情况是时好时坏,没什么规律,但是虽然跳动状况一样,但是整体精度还在可接受的范围内,和工厂几乎全部超标还不一样。我让产线同时检查一下原有的旧机型,20台,全部合格。这就很奇怪了,热电偶的测量线路完全没有改变,相关的测量程序也和原来一模一样,似乎没有理由这样。
过程分析:
我第一个就想到是干扰。状况时好时坏且有跳动,这基本符合外界干扰的情况。再加上这个项目本就是一个很小的项目,所有的软硬件也只进行了极少量的修改,因此我让工厂第二天趁着厂里还没上班的时候,再次验证一下测量结果,因为那时各种机器还没开机,会少很多干扰。工厂照做了,可是情况依旧。
没办法,硬件线路和程序我都已经对比了快10遍了,没啥不同,以我十几年的经验来说,PCB上微小的差异,不可能对外界干扰有如此大的差别。实在是想不出招了,只能亲自到工厂看看,强烈怀疑是。我们的工厂和研发办公室在两个城市,距离一千多公里,坐飞机光来回就得浪费2天,因此选择了坐晚上的火车,睡一觉就到了,这样不浪费时间。
到了工厂,看到了产线所说的情况,确实 都超标了,也有跳动。不过如果看平均值的话,还挺一致,在及格的边缘。因为我做的部分已经反复检查过n遍了,我就把疑点放到了标准产生器上。
具体原理就不赘述了,总之一会电压输出,一会温度输出,又是 冰水混合物又是铜线K线,折腾了一天,情况还是老样子。
搞了2天,没什么进展,只能一切从头来,先重烧程序,进入debug模式看看,死马当活马医吧。连上电脑,插上仿真器,重烧程序:
输入各种温度看看,最后,在几乎绝望的时候,出现了转机。输入0℃时,显示还正常,输入-150℃时,显示是-4.7℃,输入1000℃时,显示238℃。
虽说每一台仪表都要经过校正测量值才能准确,但是,相差这么大,绝对不是正常的元器件误差造成的,所以,一定是线路的放大倍数出错了
运算放大线路如下:
放大倍数由R46和R47决定:
Vo = 1+R47/R46。
用万用表先检查这两个电阻,发现,R47只有10k欧姆,比原来小了5倍。所以整个放大倍数从48.5狂降成了9.3倍,虽然差了这么多,但是程序在进行校正的时候,硬生生的用程序补足了差值,原来AD几乎是满量程测量的,现在AD只用了9.3/48.5,约为19%的full scale。校正过后,显示值还基本正常,就是跳动被程序放大了5倍多,才出现了上述的种种情况。
将R47换成51K,问题立即得到了解决。
赶紧先检查自己给出的BOM list,发现没错,我心里恼火啊!!!
到底这个错误是如何发生的呢?生产贴片时搞错了料?想想还是挺有可能的。贴片机生产时这样的:
首先,将原件(一卷)放上搁架:
然后,在进料口排好,贴片机根据编制好的程序,自动取件贴片:
这中间,如果是领料员或是当班的插件员搞错了一个元件的话,整批产品都会出错。所以我立即去产线了解情况,得知这个过程其实是非常严谨的,至少要2个人确认物料后才会开工,以免生产出废品,几乎不可能错在这个环节。
生管调出ERP系统里的BOM表,发现,是BOM错了,里面R47就是10k。
我给出的bom没错,但是被人输入ERP的版本是错误的,这归根结底还是我的责任,因为最终输入系统之前,我是要检查并签名的。正确的做法是我需要按照BOM,对照着线路图一个一个再检查一遍才能签名,可是因为这个产品过于简单,我就偷了个懒,直接签名了,后来生产校正出来的结果也差不多,所以一直没有怀疑到用错料上来,结果花了我将近2周的时间,这都是浪费掉的啊!!
经验教训:
所以,在此再次提醒各位RDer:
- 设计无小事,不能掉以轻心
- 再简单的产品也必须按照ISO流程来做,因为ISO的初衷就是为了帮助人们规范流程,少出错,如果把ISO看成累赘,迟早会得到教训
- 产品debug时,一定要从原式的状态开始,不能经过中间校正,处理后再看,因为中间工序极有可能会掩盖住问题,使人难以发现。
祝各位RDer都能设计出无bug的产品,开开心心工作,顺顺利利偷懒~~
以上内容均由 @susiejob原创,未经许可,请勿引用,谢谢!!