作为智能型的嵌入式“元件”MCU单片机在日常应用中(如温度、压力、流量、物位、成分、速度等监控中)往往会牵涉到A/D模数转换的问题。由于具体环境不同,A/D转换的方式及精度要求也各不相同。有的选用专用的A/D转换芯片(如TLC0834CD、TLV5617A、ADS7818P等),转换结果由MCU读取;有的则直接运用内含A/D转换功能的单片机(如SN8P2705A、PIC16C73、STC89LE54AD等)来完成。然而,从“模”的处理到“数”的获得的整个过程,都往往会引发一些有趣的小插曲, 尤其是初次接触者。
电路结构
图1是笔者几年前在研制干式变压器智能温控仪时的主电路部分。电阻R1~R4、R8与3个铂丝电阻Pt100等构成了监测变压器A、B、C三相绕组温度的电桥;而各相的检测是通过8选1多路模拟开关CD4051来分离切换的;铂丝电阻Pt100在0℃~200℃范围内其线性度很好,但0℃时其电阻值为100Ω,到了200℃时电阻值也只有175.84Ω,也就是说其温感分度阻值的变化量很小,因而这弱小的变化信号须经精密运算放大器OP07放大后才能送至片内带8位A/D转换的MCU单片机P87LPC767的18脚A/D转换模拟输入端P0.3口进行模/数转换,转换结果经系列运算及逻辑处理后从P0.0、P0.1、P0.2口输出风机、报警、跳闸等相应的控制信息;同时,A、B、C三相检测得的温度也由五位数码管“滚动”显示。

缺点现象
就图1的电路结构而言,无论是从原理上,还是从逻辑上,似乎都是合情合理的。然而,当整机组装调试完毕后,细心地观察却发现: ⑴所显示的温度值在不断波动。如显示28.5℃,过会儿可能会跳到28.2℃,再过会儿可能会跳至28.9℃…… ⑵三相数据不平衡,也就是说即使把A、B、C3个Pt100热敏探头绑在一起,检测同一点的温度,其滚动显示的3个数据却有一定的差别。
问题⑴
显示的温度值为什么经常会不断地波动呢?是不是因为加到MCU的A/D转换模拟输入端的电平不断地在变化?可是用指针式及数字式万用表进行监测却看不出问题; 是因为显示程序有问题?但当按动“功能键”查看温度记录或进行温控相关的数据设定时,数码显示却是可靠稳定的;难道是因为A/D转换程序有差错?笔者把所有A/D转换处理相关的程序段前前后后地细查后没发现什么不对,还将每一路A/D转换前后两次的结果进行平均值处理后再送去显示,可仍然没从根本上解决问题……后来还是怀疑到加至MCU的A/D转换模拟输入端的电平不稳。用示波器监测发现:A/D转换模拟输入端的电平有类似方波叠加的弱小波动。
这就难怪了,从图1的前端温感信号处理电路分析也可以理解,微弱变化的热敏传感信号是经过OP07的百余倍放大之后加到P87LPC767的18脚的。与此同时,电路中的电源噪声及环境干扰噪声同样也会被放大百余倍——经百余倍放大之后这些噪声的幅值是不难想像的,加之三路信号循环切换的因素,因而数显出现波动也就在情理之中了。原因找到后,笔者在OP07运放输出端与MCU的A/D转换模拟输入端之间加设了一个由电阻R12与电容C2构成的退耦电路(如图2右边虚线框中所示),从此,温度值的显示稳定了。实验表明该处退耦电路的电阻大一点、电容相对小一点为好,电阻大一点似乎“缓冲”作用也大了,显示也更为稳定。
问题⑵
温度显示稳定不波动了,然而进一步的观察却又看到显示的三相数值往往存在一定的差异。不管3个铂丝电阻Pt100的热敏探头A、B、C之间怎么互相调换(如原来接A输入端口的Pt100热敏探头改接到B输入端等),显示值始终有明显的差异(如原来A路显示高,B路显示低,调换Pt100热敏探头后依然A路高,B路低)。问题在哪里呢?从多次互换的实验可以感觉到程序软件的关系不大,问题可能出在三相所对应的结构路径上。首先考虑到的是各相惠斯登式电桥的桥臂上的那些精密电阻,对其进行严格筛选后再做实验,结果显示值还是有偏差。接下来怀疑多路模拟开关CD4051的切换通道,为此,笔者用稳压电源、精密电阻、高精度的万用表(电流挡)等串入其间,对CD4051的各选通通道进行实验检测,发觉CD4051的8个通道的导通电阻大多不同,有5Ω、7Ω的,也有8Ω、10Ω的。看来CD4051各通道导通电阻的不一致是问题所在。
在惠斯登电桥的桥臂电阻给定的情况下,流经“桥”上电流的大小与“桥”上的“限流电阻”相关,即注入运算放大器OP07输入端电流的大小与CD4051通道上的导通电阻有关,各通道导通电阻的偏差,导致了放大后各路模拟量的偏差——A/D转换显示结果的差异。为了弥补这个缺陷,笔者在CD4051的3脚到运放输入端的总通道电路中串入了一个电阻R9(如图2左边虚线框中所示),由于R9的阻值为1kΩ左右,远比CD4051的通道导通电阻大得多,因而从某种意义上讲,这些只有几欧姆的通道导通电阻被这1kΩ的电阻R9所“屏蔽”而起不了作用了。这样,适当调整OP07运放的放大倍数后,A、B、C各相的温度显示值的差异也就得到了显著的改善。
与本文相关的芯片的参考资料可见以下网址:
⒈ http://www.zlgmcu.com/philips/51lpc/p87lpc767/P87LPC767_cn.pdf。
⒉ http://cn.maxim-ic.com/quick_view2.cfm/qv_pk/1588。
⒊ http://www.100y.com.tw/product/5373.htm。
文/张春峰