ADC0804工作原理及过程

ADC0804

前言:本文详细说明了ADC0804工作原理及过程,还附有一个ADC0804在单片机中的典型应用,包含原理图,源程序,程序注释详细清楚,这有助于更好地理解与应用ADC0804芯片。

本文引用了百度文库一篇文章,原文链接:
https://wenku.baidu.com/view/823c5913964bcf84b9d57b78.html?wkts=1672974785358

A/D转换概念

即模数转换(Analog to DigitalConversion),输入模拟量(比如电压信号),输出一个与模拟量相对应的数字量(常为二进制形式)。例如参考电压VREF为5V,采用8位的模数转换器时,当输入电压为0V时,输出的数字量为0000 0000,当输入的电压为5V时,输出的数字量为1111 1111。当输入的电压从从0V到5V变化时,输出的数字量从0000 0000到1111 1111变化。这样每个输入电压值对应一个输出数字量,即实现了模数转换。

分辨率概念

分辨率是指使输出数字量变化1时的输入模拟量,也就是使输出数字量变化一个相邻数码所需输入模拟量的变化值。

分辨率与A/D转换器的位数有确定的关系,可以表示成FS / 2 n 。FS表示满量程输入值,n为A/D转换器的位数。

例如,对于5V的满量程,采用4位的ADC时,分辨率为5V/16=0.3125V (也就是说当输入的电压值每增0.3125V,输出的数字量增加1);采用8位的ADC时,分辨率为5V/256=19.5mV(也就是说当输入的电压值每增加19.5mV,则输出的数字量增加1);当采用12位的ADC时,分辨率则为5V/4096=1.22mV(也就是说当输入的电压值每增加1.22mV ,则输出的数字量增加1)。显然,位数越多,分辨率就越高。

ADC0804引脚功能

在这里插入图片描述
CS: 芯片片选信号,低电平有效。即=0时,该芯片才能正常工作,高电平时芯片不工作。在外接多个ADC0804芯片时,该信号可以作为选择地址使用,通过不同的地址信号使能不同的ADC0804芯片,从而可以实现多个ADC通道的分时复用。
)

WR:启动ADC0804进行ADC采样,该信号低电平有效,即信号由低电平变成高电平时,触发一次ADC转换。

RD:低电平有效,即=0时,DAC0804把转换完成的数据加载到DB口,可以通过数据端口DB0~DB7读出本次的采样结果。

VIN(+)和VIN(-):模拟电压输入端,单边输入时模拟电压输入接VIN(+)端,VIN(-)端接地。双边输入时VIN(+)、VIN(-)分别接模拟电压信号的正端和负端。当输入的模拟电压信号存在“零点漂移电压”时,可在VIN(-)接一等值的零点补偿电压,变换时将自动从VIN(+)中减去这一电压。

VREF/2:参考电压接入引脚,该引脚可外接电压也可悬空,若外接电压,则ADC的参考电压为该外界电压的两倍,如不外接,则VREF与Vcc共用电源电压,此时ADC的参考电压即为电源电压Vcc的值。

CLKIN和CLKR:外接RC振荡电路产生模数转换器所需的时钟信号,时钟频率CLK = 1/1.1RC,一般要求频率范围100KHz~1460KHz。

AGND和DGND:分别接模拟地和数字地。

INTR:转换结束输出信号,低电平有效,当一次A/D转换完成后,将引起=0,实际应用时,该引脚应与微处理器的外部中断输入引脚相连(如51单片机的,中断脚),当产生信号有效时,还需等待=0才能正确读出A/D转换结果,若ADC0804单独使用,则可以将引脚悬空。

DB0~DB7:输出A/D转换后的8位二进制结果。
补充说明:ADC0804片内有时钟电路,只要在外部“CLKIN(引脚4)”和“CLKR(引脚19)”两端外接一对电阻电容即可产生A/D转换所要求的时钟,其振荡频率为fCLK≈1/1.1RC。其典型应用参数为:R=10KΩ,C=150PF,fCLK≈640KHz,转换速度为100μs。若采用外部时钟,则外部fCLK可从CLKIN端送入,此时不接R、C。允许的时钟频率范围为100KHz~1460KHz。

ADC0804工作过程

时序:
ADC0804手册给出的ADC转换时序图
在这里插入图片描述

ADC0804手册给出的电器特性表
在这里插入图片描述
实现一次ADC转换主要包含下面三个过程:

1.启动转换:由时序图中的上部“FIGURE 10A”可知,在信号为低电平的情况下,将引脚先由高电平变成低电平,经过至少tW(WR)I 延时后,再将引脚拉成高电平,即启动了一次AD转换。

注:ADC0804使用手册中给出了要正常启动AD转换的低电平保持时间tW(WR)I的最小值为100ns,即拉低后延时大于100ns即可以,具体做法可通过插入NOP指令或者调用delay()延时函数实现,不用太精确,只要估计插入的延时大于100ns即可。

2.延时等待转换结束:依然由时序图中的上部“FIGURE 10A”可知,由拉低信号启动AD采样后,经过1到8个Tclk+INTERNAL Tc延时后,AD转换结束,因此,启动转换后必须加入一个延时以等待AD采样结束。

注:手册中给出了内部转换时间“INTERNAL Tc”的时间范围为62~73个始终周期,因此延时等待时间应该至少为8+73=81个时钟周期。比如,若R为150K, C为150pF,则时钟频率为Fclk=1/1.1RC=606KHz,因此时钟周期约为Tclk=1/Fclk=1.65us。所以该步骤至少应延时81*Tclk=133.65us. 具体做法可通过插入NOP指令或者调用delay()延时函数实现,不用太精确,只要估计插入的延时大于133.65us即可。

3.读取转换结果:由时序图的下部“FIGURE 10B”可知,采样转换完毕后,在信号为低的前提下,将脚由高电平拉成低电平后,经过tACC的延时即可从DB脚读出有效的采样结果。

注:手册中给出了tACC的典型值和最大值分别为135ns和200ns,因此将引脚拉低后,等待大于200ns后即可从DB读出有效的转换结果。具体做法可通过插入NOP指令或者调用delay()延时函数实现,不用太精确,只要估计插入的延时大于200ns即可。

对采样值进行运算变换,换算出实际的滑动变阻器输入电压值。
对于任何一个A/D采样器而言,其转换公式如下:
在这里插入图片描述

其中:
Vout: 输入ADC的模拟电压值。
Dsample:ADC转换后的二进制值。本试验的ADC0804为八位。
Dmax:ADC能够表示的刻度总数。ADC0804为八位ADC,因此Dmax=28=256
Vref:ADC参考电压值,本试验ADC0804的Vref被设置为5V
因此,对于本试验,转换公式为
在这里插入图片描述

ADC0804在单片机中的简单应用举例

如下图所示,本例ADC0804中的VCC=5V, VREF/2引脚悬空(悬空则相当于与VCC共接5V电源),因此ADC转换的参考电压为VCC的值,即5V。VIN-接地,而VIN+连接滑动变阻器RV1的输出,因此VIN+的电压输入范围为0V~5V,正好处于参考电压范围内。
引脚接地, 和分别连接单片机的P3^6和P3^7引脚,而DB0~DB7连接单片机的P1口.
P0口接数码管的段选线,P2口低四位接数码管的位选线。
在这里插入图片描述
程序主要实现以下功能:
(1)控制ADC0804芯片对VIN(+)引脚输入的电压值进行正确采样,读取采样结果。
(2)对采样值进行模数变换,将转换后数字量后显示在4段数码管上。
C程序如下:

#include <reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit wr=P3^6;
sbit rd=P3^7;
uchar code dis[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳显示代码
void delay(uint x) //延时函数 delay(1)延时0.992ms,大约为1ms
{
 uchar i;
 while(x--)
 for(i=0;i<120;i++);	
}
void display(uchar db)	//数码管显示函数,用于显示模数转换后得到的数字量
{
    uchar bw,sw,gw;	//bw,sw,gw分别等于db百位,十位,个位上的数
	bw=db/100;
	sw=db%100/10;
	gw=db%10;
P2=0x01; //点亮第一只数码管
	P0=dis[bw]&0x7f; //最高位置0,点亮第一只数码管的小数点,
	delay(5);
	P2=0x02; //点亮第二只数码管
	P0=dis[sw];
	delay(5);
	P2=0x04;  //点亮第三只数码管
	P0=dis[gw];
	delay(5);  
	P2=0x08;   //点亮第四只数码管
	P0=dis[0]; //第四只数码管一直显示0	
	delay(5);
}  

void main()
{
	uchar i;
	while(1)
	{
		wr=0;	//在片选信号CS为低电平情况下(由于CS接地,所以始终为低电平),
		_nop_(); //WR由低电平到高电平时,即上升沿时,AD开始采样转换
		wr=1;
		delay(1); //延时1ms,等待采样转换结束		
		P1=0xff;   //这条语句不能少,我也还不知道为什么
		rd=0;	//将RD脚置低电平后,再延时大于135ns左右(这里延时1us),
		_nop_(); //即可从DB脚读出有效的采样结果,传送到P1口
		for(i=0;i<10;i++) //刷新显示一段时间
		display(P1); //显示从DB得到的数字量	
	} 
}

Proteus仿真运行结果如下:
在这里插入图片描述

上述Proteus仿真文件下载地址

链接:https://pan.baidu.com/s/1T8m7dvd1maeFnmOnoHGAKQ
提取码:o42a
–来自百度网盘超级会员V4的分享

参考文献

[1]彭伟.单片机C语言程序设计实训100例.北京:电子工业出版社.2009
[2]贾振国,许琳.智能化仪器仪表原理及应用.北京:中国水利水电出版社.2011

ADC0804是一款8位串行输入/并行输出的模拟数字转换器(ADC),广泛应用于嵌入式系统和电子设备中。该芯片具有许多特性和功能,方便用户进行模拟信号的转换和处理。 首先,ADC0804采用的是逐次逼近型转换技术,可以将模拟信号转换为相应的8位二进制数字。它的输入电压范围为0至Vref(外部提供的参考电压),适用于不同的模拟输入信号。 该芯片还具有内置的采样-保持电路,可以对输入信号进行固定时间的采样,并在转换期间保持输入信号的稳定性。这有助于提高转换准确性和抗干扰能力。 此外,ADC0804还具有8位并行输出,可以将转换结果以并行的方式输出给其他数字电路或微控制器进行进一步处理。它还带有数据状态标志,可以报告转换是否已完成,以便系统可以根据需要进行及时的操作。 为了方便软件控制和与其他数字电路的集成,ADC0804还提供了一个串行输入接口和相应的控制引脚。通过这些引脚,用户可以使用较少的引脚连接和简化系统设计。 总之,ADC0804是一款功能强大的模拟数字转换器芯片,具有广泛的应用领域。它的高精度和可靠性使其成为嵌入式系统和电子设备中信号处理的理想选择。对于需要使用ADC0804的用户,详细参考其数据手册将有助于了解其更多特性和使用细节,以便合理应用并充分发挥其功能。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

家驹嵌入式

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值