2.2 项目二:A-D转换器及其在计算机控制系统中的应用

2.2.1 任务1:ADC0809及其接口电路应用

1.ADC0809芯片介绍

ADC0809为8位逐位逼近式A-D转换器,分辨率为1/28≈0.39%,模拟电压转换范围为0~5V,标准转换时间为100μs,采用28脚双立直插式封装,其内部结构及引脚如图2-8所示。

图2-8 ADC0809内部结构及引脚

ADC式在逐位逼近式A-D转换原理基础上,增加了一个8路模拟开关、一个用来选择通道的地址锁存与译码电路和一个三态输出锁存缓冲器,其引脚功能如下:

VIN0~VIN7:8路模拟量输入端。允许8路模拟量分时输入,共用一个A-D转换器。

ALE:地址锁存允许信号,输入线,高电平有效。上升沿时锁存3位通道选择信号。

A、B、C:3位地址线,即模拟量通线道选择线。ALE为高电平时,被选通道和地址的关系见表2-1。

表2-1 被选通道和地址的关系

START:A-D转换启动信号,输入线,高电平有效。上升沿时将转换器内部清零,下降沿时启动A-D转换。

EOC:转换结束信号,输出线,高电平有效。平时EOC为高电平,A-D转换期间为低电平,A-D转换结束后又变为高电平。EOC可用作向主机申请中断的信号,或供主机查询A-D转换是否结束的信号。

OE:输出允许信号,输出线,高电平有效。该信号用来打开三态输出锁存缓冲器,将A-D转换得到的8位数字量送到数据总线上。

DO0~DO7:8位数字量输出。DO0为最低位,DO7为最高位。由于有三态输出锁存,可与主机数据总线相连。

CLOCK:外部时钟脉冲输入端。当脉冲频率为640kHz时,A-D转换时间为100μs。

VR+、VR-:基准电源正端、负端。取决于被转换的模拟电压范围,通常,VR+=5V(DC),VR-=0V(DC)。

VCC:工作电源,5V(DC)。

GND:电源地。

了解ADC0809的内部转换时序非常重要,这是设计硬件和软件时的主要依据。如图2-9所示,其转换过程如下:首先ALE的上升沿将地址代码锁存、译码后选通模拟开关中的某一路,使该路模拟量进入到A-D转换器中。同时START的上升沿将转换器内部清零,下降沿启动A-D转换,即在时钟的作用下,逐位逼近过程开始,转换结束信号EOC即变为低电平。当转换结束后,EOC恢复高电平,此时,如果对输出允许信号OE输入一高电平命令,则可读出数据。

图2-9 ADC00809的转换时序

上述过程说明,判断A-D转换器是否完成一次转换,可以依据转换结束信号EOC电平的高低,或者根据输入时钟频率计算出转换芯片的转换时间。因此,读取A-D转换数可以采用程序查询、定时采样、中断采样和CPU等待等多种方式。

另外,ADC0809这种芯片输出端具有可控的缓冲锁存门,易于直接与主机进行接口。在有一类芯片内部没有缓冲锁存门,不能直接与主机连接。这样,在A-D转换器与主机之间的数据线连接上也出现了直接连接、通过8255或锁存器间接连接的几种情形。

2.ADC0809接口电路

ADC0809接口电路主要是解决如何分时采集多路模拟量输入信号的,即主机如何启动A-D转换,如何判断A-D完成一次模-数转换,如何读入并存转换结果的。下面仅介绍两种典型的接口电路。

(1)采用程序查询方式读A-D转换数

图2-10为采用程序查询方式读A-D转换数的接口电路,由PC总线、ADC0809以及74LS138译码器、74LS02非与门与74LS126三态缓冲器组成。图中,启动转换的板址PA=01000000,每一路口地址分别为000~111,故8路转换地址为40H~47H。

图2-10 采用程序查询方式读A-D转换数的接口电路

接口程序如下:

先说明启动转换过程:首先主机执行一条启动转换第1路的输出指令,把AL中的数据送到地址为PA的接口电路中,此时AL中的内容无关紧要,而地址PA=40H使74LS138译码器的输出一个低电平,连同OUT输出指令造成的低电平,从而使非与门74LS02(3)产生脉冲信号到引脚ALE和START,ALE的上升沿将通道地址代码000锁存并进行译码,选通模拟开关中的第1路VIN0使该路模拟量进入8位A-D转换器中;同时,START的上升沿使ADC0809中的逐位逼近清零,下降沿启动A-D转换,即在时钟的作用下,逐位逼近A-D转换过程开始。

接着,主机查询转换结束信号EOC的状态,通过执行输入指令,把地址为PB的转换接口电路的数据读入AL中,此时地址PB=01001000(48H),使74LS138译码器的输出一个低电平,连同IN输入指令造成的低电平,从而使非与门74LS02(1)产生脉冲信号并选通74LS126三态缓冲器,使EOC电平状态出现在数据线D0上。然后将读入的8位数据进行带位循环右移,以判断EOC的电平状态。如果EOC为“0”,则表示A-D转换正在进行,程序再跳回REOC,反复检查;如果EOC为“1”,则表示A-D转换结束。

然后,主机执行一条输入指令,把接口地址为P A的转换数据读入AL中,输出一个低电平,连同IN输入指令造成低电平,从而使非与门74LS02(2)产生脉冲信号,即产生输出允许信号到OE,使ADC0809内部的三态输出锁存缓存器释放转换数据到数据线上,并被读入到AL中。

接下来,把A-D转换数据存入寄存器BX所指的数据区首地址0000H中,数据区地址加1,为第2路A-D转换数据的存放做准备;接口地址加1,准备接通第2路模拟量信号;计数器减1,不为0则返回START,继续进行下一路的A-D转换。如此循环,直到完成8路A-D转换。

(2)采用定时方式读A-D转换数

采用定时方式读A-D转换数的接口电路如图2-11所示,它与查询方式不同之处仅仅在于启动A-D转换后,无需查询EOC引脚状态而只需等待转换时间,然后读取A-D转换数。因此,硬件电路可以取消74LS126三态缓冲器及其控制电路,软件上也相应地去掉查询EOC电平的REOC程序段,而换之以调用定时子程序(CALL DELAY)即可。

图2-11 采用定时方式读A-D转换数的接口电路

这里的定时时间应略大于ADC0809的实际转换时间,图2-10中ADC0809的CLOCK引脚(输入时钟频率)为640kHz,因此转换时间为8×8个时间周期,相当于100μs。

显然,定时方式比查询方式简单,但前提必须预先精确地知道A-D转换芯片完成一次A-D转换所需的时间。

这两种方法的共同点是硬件、软件接口简单,但在转换期间独占了CPU时间,好在这种逐位逼近式A-D转换的时间只在微秒数量级。当选用双积分式A-D转换器时,因其转换时间在毫秒级,因此采用中断法读A-D转换数的方式更为适宜。因此,在设计数据采集系统时,究竟采用何种接口方式要根据A-D转换器芯片而定。8位A-D转换器的分辨率约为0.0039,转换精度在0.4%以下,这对一些精度要求比较高的控制系统是不够的,因此要采用更多位的A-D转换器,如10位、12位、14位等A-D转换器。下面以AD574A为例介绍12位A-D转换器及其接口电路。