基于51单片机——AD转换电路设计(采用AD0809芯片)
一、设计要求
采用AD0809对输入的模拟量进行转化,转化完成后将数字量通过LED进行二进制显示。电路图如下。
二、AD0809芯片介绍
AD0809是8位并行A/D转换芯片。该芯片应用时,IN0~IN7共八路模拟输入引脚,通过地址A、B、C选择其中一路将模拟信号送入芯片中,当转换结束后,数字量从D7~D0以8位二进制形式输出,同时E0C引脚输出高电平,表示转换结束。如图为AD0809内部逻辑结构。
由上图可以看到,AD0809由一个8路模拟量开关、一个地址锁存与译码器、一个A/D转换器和一个三态输出锁存器组成。多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。三态输出锁存器用于锁存A/D转换完的数字量,当OE为高电平时,才可以从三态输出锁存器取走转换完的数据。
AD0809对输入模拟量要求:信号单极性,电压范围0~5V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,若模拟量变化太快,则需要在输入前添加一个采样保持电路。
ALE1为地址锁存允许输入线,高电平有效。当ALE线为高电平时,地址锁存与译码器将A,B,C三条地址线的地址信号进行锁存,经过译码后被选中的通道的模拟量进转换器进行转换。A,B,C为地址输入线,用于选通IN0~IN7上的一路模拟量输入。
ST为转换启动信号。当ST为上升沿时,所有内部寄存器清零。当ST为下降沿时,开始A/D转换。在转换期间,ST保持为低电平。
EOC为转换结束信号。当EOC为高电平时,标明转换结束;否则,表示正在进行A/D转换。
OE为输入允许信号,用于控制三条输出锁存器想单片机输出转换得到的数据。OE = 1时,输出转换得到的信号;OE = 0时,输出数据线呈高阻态状态。D7~D0为数字量输出线。
clk时钟输入信号线。AD0809内部没有时钟电路,所需时钟信号必须由外部提供。
VREF(+),VREF(-)为参考电压输入。
三、AD08009应用说明
1.AD0809内部带有输出锁存器,可以直接和单片机相连。
2.初始化时,将ST和OE置为低电平。
3.将要转换的通道信息传给A,B,C端口。注意,C为高位,A为低位。
4.在ST端给出一个至少有100ns宽的正脉冲。
5.根据EOC的信号状态判断是否转换完毕。若EOC = 1,表示转换完毕。
6.当EOC为高电平,这时给OE一个高电平,转换数据输出给单片机。
四、输出数字量计算
N = (Ui *255)/5,Ui为输入模拟量。
五、程序
#include <reg52.h> #define uchar unsigned char sbit clk = P1^3; sbit start = P1^2; //start和ALE都连接在P1.2 sbit EOC = P1^1; sbit OE = P1^0; sbit a = P1^4; sbit b = P1^5; sbit c = P1^6; void delay(unsigned char xms) { unsigned char i, j; while(xms) { i = 2; j = 239; do { while (--j); } while (--i); xms--; } } void ADC_init() { P2 = 0xff; //产生clock信号 EA = 1; TMOD = 0x02; //定时器0,方式2,8位自动重装载 ET0 = 1; //允许定时器0中断 TR0 = 1; TH0 = 216; TL0 = 216; start = 0; OE = 0; a = 1; //通道3 b = 1; c = 0; } void ad_3() { OE = 0; EOC = 1; start = 0; a = 1; //通道3 b = 1; c = 0; delay(10); start = 1; //上升沿 delay(10); start = 0; //下降沿 while(!EOC);//等待转换完成 delay(10); OE = 1; delay(5); P0 = P2; OE = 0; } void main() { ADC_init(); while(1) { ad_3(); } } void t0(void) interrupt 1 { TH0 = 216; TL0 = 216; clk = ~clk; }