(资料图片仅供参考)

关注+星标公众号,不错过精彩内容!

昨天解了一个BUG,一个低级错误导致的BUG,一个冗余电路导致的BUG,写写做个记录。

先说问题现象:产品偶尔温度采集异常,温度不准,系统获取到错误信息,导致出现问题。温度采集电路超级简单,如下图,热敏电阻和普通电阻分压后送入单片机的ADC管脚采集电压,然后软件换算为温度值。挂上示波器,监听温度采集管脚电压,现象明确,出现异常时,ADC管脚出现异常波动。电路超级简单两个电阻分压,分压电源也正常,怎么会有波动?虽然心里坚信热敏电阻不会损坏,但是抱着一丝希望,更换一个热敏电阻还失败。不断尝试复现问题,发现一个规律,只要板上7伏高压电打开,温度采集就出现异常,不知为何7伏电压把温度采集管脚电压抬高了许多。就是这个温度采集不准问题,软件推硬件,说硬件电路设计有问题,硬件推软件,说只有两个分压电阻,不可能是硬件问题,扯皮了两天,真是无语了。

这时候就发挥我软硬都"精通"的优势了,跟硬件要了原理图从头到尾看了一遍发现一个冗余电路,这个电路属于预留设计,并未使用。原理是在7V电压存在的情况下,经过两个电阻分压后三极管导通,送入单片机的ADC采集管脚,这里明显超范围了,单片机供电为3.3V,严重超标。管脚不损坏已经是幸运了。这个电路以前是测量3.3V电源的,直接复制粘贴就出了问题。

这个电压采集和温度采集并不是同一个管脚,采集电压有问题怎么会导致温度采集不准呢。一般单片机的GPIO内部都有以下两个保护二极管,7V高压进入单片机后经过上面的二极管顶高了VCC电压,进而导致内部ADC模块出现异常,另外一个ADC管脚电压抬升。

拆除三极管后温度采集正常。

关键词: