前言
80C196KB是MCS-96系列产品中的采用CHMOS工艺的器件,其片内集成了A/D转换模块,包括一个8通道的模拟多路开关,一个采样和保持电路以及一个10位的逐次逼近A/D转换器。充分利用80C196KB的片上A/D转换资源即可以简化硬件,降低成本,又简单容易实现。国内供货也相对容易。本文就是利用80C196KB的片上A/D转换完成了数据采集系统。
系统的硬件结构
本系统以80C196KB为核心,进行了必要的扩展。系统结构框图如图1所示。键盘用于输入及功能选择,LCD用于显示测量结果,RAM用于存储采集的数据和处理的数据。另外,因为80C196KB本身不带ROM,所以要扩展外部ROM作为程序存储器。
A/D转换接口电路
80C196KB模拟输入端的外部电路应根据应用的需要来设计,它的好坏直接影响变换器的性能。在设计外部电路时,应当考虑到输入端的泄漏电流、采样电容的大小以及多路开关的串联电阻等重要因素。
80C196KB模拟输入端的等效电路如图2所示。V为外加信号源,Rs为信号源内阻,外部输入信号必须通过Ri才能对采样电容Cs充电。输入端的泄漏电流为Ix。就80C196KB而言。在模拟信号的输入端外接一个足够大的电容可以降低信号源内阻的影响。80C196KB片内采样电容约为2pF,外接一个0.005mF(2048×2pF)的电容时,可以提供约±0.5LSB精确度的输入电压。如果该电容本身有漏电流,应适当增加电容值以补偿漏电流。
假设只有80C196KB的3mA直流漏电流,那么这0.005mF的外接电容在1mS内仅下降0.6mV(小于0.15LSB)。因此这一外接电容一般至少为0.005mF,这样有利于提高转换精度。
图3给出了根据上述原则构成的一个简单的模拟输入接口。图中还增加了过压和反压保护二极管,起保护作用。当输入出现反压时,D2正向导通,把外部输入信号箝位于-0.6V。由于片内也设置了输入引脚最低可达-0.3V,这样,在270W的电阻上大约有0.3V的压降或大约1mA的电流,从而可对芯片起保护作用。
软件算法
数据处理的准备
读AD_RESULT寄存器可以得到A/D转换的状态。新的转换启动后,AD_RESULT被清零,所以寄存器中的值要及时读出,转换结果是输入电压与参考电压之间的比率,计算公式如(1):10位结果:
可见,标定过程用到了加法、乘法和除法。为了提高标定的精度必然要用到浮点计算。下面分析最终A/D转换结果应保留的位数:
(1)A/D转换为10位,量程为5V,5V/1023=0.00489V,这里取0.005V。
(2)浮点运算精度远高于此精度,所以最终结果保留3位小数是有意义的,再高就没意义了。
采用四字节浮点数运算对采集数据进行处理浮点数有各种各样的表示方法,为了统一浮点数的格式,IEEE提出一种浮点数标准。它有几种精度,其中包括单精度(4字节)、双精度(8字节)和扩展精度(10字节)。其中最常用的是单精度浮点数。但在编写运算程序时,IEEE标准的单精度浮点数有两个方面的问题:
(1) 阶码虽然为8位,但它的地址不为一个字节,运算寻址不太方便。
(2) 尾数为大于等于1小于2的混合小数,在执行乘法时不太方便,特别是不容易实现快速除法。
为了避免这两个问题,本文采用的是一种与IEEE标准的浮点数格式基本相同,但结构略有不同的四字节浮点数,格式如下:
该格式中,最高位为数符位,后面23位为尾数。由于该四字节浮点数必须为规格化数,所以除了零以外,尾数最高位总为1。为了节省存储空间,在存放时,采用IEEE标准的方式,不存放最高位的1。这样,23位尾数还需加上隐含的最高位1,构成一个定点原码24位小数,即尾数为小于1大于等于0.5的小数。最低8位为阶码,它采用移位,与IEEE标准相同,阶码等于实际阶码数值加上127。这种四字节浮点数的取值范围为:±(5.9×10-39~1.7×1038),精度为24位二进制数,即截断误差小于1/16777216。
单精度的浮点数运算的精度远高于80C196片上A/D转换的10位二进制数,足可以满足要求。
由于A/D转换结果的低位寄存器只用了高两位,为了方便存储,用两个字节存储。高字节存高8位,低字节只用高两位来存放转换结果的最后两位,低字节的后6位置零。
另外,因为最后结果要保留3位小数,而如果运算过程中涉及小数会使运算比较麻烦,因而将要处理的数据都扩大1000倍。这样,只要在最后结果显示时将小数点前移3位即可。综上,用浮点运算进行数据处理的流程如图4所示。
通过实验改进处理过程
按上面所描述的方法,对采集结果进行标定,由初次实验得到的实验数据发现,测得数据比实验数据偏高,进一步发现当输入电压为零时系统仍测得为0.02V,也就是说存在零点误差。而测得电压一直比实际电压高也是由此零点误差引起的。通过在软件中消去直流误差,同时从参考电压 方面考虑,为了提高测量结果的精度,采取了两种措施:①硬件上用专门的电源芯片提供高精度的参考电压。②软件上对参考电压的误差进行补偿。后者灵活性较大,简单易行。
系统完成后,由于电路上的压降及各个芯片的影响,测得进入单片机的参考电压实际只有4.91V,用这个电压值来修正开始值 ,再进行实验,其实验结果就比较理想了。最终,测量的相对误差在0.5%以内,绝对误差也不超过0.02V。
结语
在10位A/D转换满足精度要求的前提下,充分利用80C196KB的片上A/D转换,既可以简化系统又简单易行。而对高精度测试测量,浮点运算是必不可少的。而且A/D转换中,模拟信号接口电路、零点误差的消除,以及参考电压的修正都是必要的,因而本文介绍的A/D采集及数据处理有很强的通用性。尤其是对高精度测量系统,有一定参考价值。