A/D转换器用于实现模拟量→数字量的转换,按转换原理可分为4种,即:计数式A/D转换器、双积分式A/D转换器、逐次逼近式A/D转换器和并行式A/D转换器。
目前最常用的是双积分式A/D转换器和逐次逼近式A/D转换器。双积分式A/D转换器的主要优点是转换精度高,抗干扰性能好,价格便宜。其缺点是转换速度较慢,因此,这种转换器主要用于速度要求不高的场合。
另一种常用的A/D转换器是逐次逼近式的,逐次逼近式A/D转换器是一种速度较快,精度较高的转换器,其转换时间大约在几μs到几百μs之间。通常使用的逐次逼近式典型A/D转换器芯片有:
(1)ADC0801~ADC0805型8位MOS型A/D转换器(美国国家半导体公司产品)。
(2)ADC0808 / 0809型8位MOS型A/D转换器。
(3) ADC0816 / 0817。这类产品除输入通道数增加至16个以外,其它性能与ADC0808 /0809型基本相同。
典型A/D转换器芯片ADC0809
ADC0809是典型的8位8通道逐次逼近式A/D转换器,CMOS工艺。
1. ADC0809的内部逻辑结构
ADC0809内部逻辑结构如图所示。
图中,多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用一个A/D转换器进行转换。地址锁存与译码电路完成对A、B、C三个地址位进行锁存和译码,其译码输出用于通道选择。
对ADC0809主要信号引脚的功能说明如下:
(1) IN7~IN0:模拟量输入通道。ADC0809对输入模拟量的要求主要有:信号单极性,电压范围0~5 V,若信号过小还需进行放大。另外,在A/D转换过程中,模拟量输入的值不应变化太快,因此,对变化速度快的模拟量,在输入前应增加采样保持电路。
(2) A、B、C:地址线。A为低位地址,C为高位地址,用于对模拟通道进行选择。图中为ADDA、ADDB和ADDC。
(3) ALE:地址锁存允许信号。在对应ALE上跳沿,A、B、C地址状态送入地址锁存器中。
(4)START:转换启动信号。START上跳沿时,所有内部寄存器清0;START下跳沿时,开始进行A/D转换;在A/D转换期间,START应保持低电平。
(5)D7~D0:数据输出线。其为三态缓冲输出形式,可以和单片机的数据线直接相连。
(6)OE:输出允许信号。其用于控制三态输出锁存器向单片机输出转换得到的数据。OE=0,输出数据线呈高电阻;OE=1,输出转换得到的数据。
(7)CLK:时钟信号。ADC0809的内部没有时钟电路,所需时钟信号由外界提供,因此有时钟信号引脚。通常使用频率为500kHz的时钟信号。
(8)EOC:转换结束状态信号。EOC=0,正在进行转换;EOC=1,转换结束。该状态信号既可作为查询的状态标志,又可以作为中断请求信号使用。
(9)VCC:+5 V电源。
(10)Vref:参考电源。参考电压用来与输入的模拟信号进行比较,作为逐次逼近的基准。其典型值为+5 V(Vref (+) =+5 V,Vref(-) =0 V)
MCS-51单片机与ADC0809接口
ADC0809与8031单片机的一种连接如图所示。
电路连接主要涉及两个问题,一是8路模拟信号通道选择,二是A/D转换完成后转换数据的传送。
8路模拟通道选择
A、B、C分别接地址锁存器提供的低三位地址,只要把三位地址写入0809中的地址锁存器,就实现了模拟通道选择。对系统来说,地址锁存器是一个输出口,为了把三位地址写入,还要提供口地址。图7.40中使用的是线选法,口地址由P2.0确定,同时和相或取反后作为开始转换的选通信号。
转换数据的传送
A/D转换后得到的是数字量的数据,这些数据应传送给单片机进行处理。数据传送的关键问题是如何确认A/D转换完成,因为只有确认数据转换完成后,才能进行传送。为此,可采用下述三种方式。
1) 定时传送方式
对于一种A/D转换器来说,转换时间作为一项技术指标是已知的和固定的。例如,ADC0809转换时间为128 μs,相当于6 MHz的MCS-51单片机R 64个机器周期。可据此设计一个延时子程序,A/D转换启动后即调用这个延时子程序,延迟时间一到,转换肯定已经完成了,接着就可进行数据传送。
2) 查询方式
A/D转换芯片有表明转换完成的状态信号,例如ADC0809的EOC端。因此,可以用查询方式,软件测试EOC的状态,即可确知转换是否完成,然后进行数据传送。
3) 中断方式
把表明转换完成的状态信号(EOC)作为中断请求信号,以中断方式进行数据传送。
在图中,EOC信号经过反相器后送到单片机的UMDJ,因此可以采用查询该引脚或中断的方式进行转换后数据的传送。
不管使用上述哪种方式,一旦确认转换完成,即可通过指令进行数据传送。
首先送出口地址,并以作选通信号,当信号有效时,OE信号即有效,把转换数据送上数据总线,供单片机接收,即:
MOV DPTR,#0000H ;选中通道0
MOVX A, @DPTR ;信号有效,输出转换后的数据到A累加器