A/D: 基于STC89C52与ADC0804的A/D设计详解

发布者:EternalSmile最新更新时间:2016-03-08 来源: eefocus关键字:STC89C52  ADC0804 手机看文章 扫描二维码
随时随地手机看文章
一. 硬件设计详解

 
1)A/D转换原理
通过采样,量化和编码这三个步骤来完成, 即首先对输入的模拟电压信号采样,采样结束后进入保持时间,在
这段时间内将采样的电压量转化为数字量,并按一定的编码形式给出转换结果,然后开始下一次采样。
采样需满足采样定理,即采样频率fs要大于输入信号的最高频率分量fimax的频率,一般取fs = (2~3)fimax,
2) A/D转换器的类型
包括两类,直接A/D转换器和间接A/D转换器,
其中直接A/D转换器包括并行比较型A/D转换器和反馈比较型A/D转换器。
间接A/D转换器包括电压-时间变换型(V-T变换型)和电压-频率变换型(V-F变换型)。
a. 并行比较型A/D转换器原理图:

a.1 原理说明
三位并行比较型A/D转换器由电压比较器,寄存器和代码转换器三部分组成。用电阻链把参考电压Vref分压,
得到从1/15Vref~13/15Vref之间的7个比较电平,量化单位为2/15Vref. 然后将要输入的模拟电压同时加到
每个比较器的另一个输入端上,与这7个比较基准进行比较。
a.2 产品介绍
AD公司的AD9012(8位),AD9002(8位),AD9020(10位)。
a.3 特点
由于转换是并行的,其转换时间只受比较器,触发器和编码电路延迟时间限制,因此转换速度快;(优点)
随着分辨率的提高,元件数目要按几何级数增加。(缺点)
使用这种含有寄存器的并行A/D转换电路时,可以不用附加采样-保持电路,因为比较器和寄存器这两部分
兼有采样-保持功能。(优点)
b. 反馈比较型A/D转换器
b.1 原理说明
取一个数字量加到D/A转换器上,于是得到一个对应的输出模拟电压,将这个模拟电压和输入的模拟电压
信号比较,如果两者不相等,则调整所取的数字量,直到两个模拟电压相等为止,最后取的这个数字量
就是所求的转换结果。
b.2 实现方案
计数型和逐次比较型
计数型转换器主要由比较器C,D/A转换器,计数器,脉冲源,控制门G以及输出寄存器等几部分组成,其转换
原理是转换开始前先用复位信号将计数器置0,而且转换信号应停留在Vl=0的状态,这时门G被封锁,计数器
不工作。计时器加给D/A转换器的是全0信号,所以D/A转换器输出的模拟电压V0=0,如果Vi为正电压信号,
比较器的输出电压为1. 依同样方法比较完DA的全部位数。由于在转换过程中计数器中的数字不停地变化,
所以不宜将计数器的状态直接作为输出信号,为此在输出端设置了输出寄存器,在每次转换完成以后,用
转换控制信号的下降沿将计数器输出的数字置入输出寄存器中,而以寄存器的状态作为最终的输出信号。
这个方法问题是转换速度慢,转换时间长。适用于转换速度要求不高的场合。
逐次比较型转换器逻辑电路图

 
C为电压比较器,当Vi>=Vo时,比较器输出为0;反过来输出为1. FFa,FFb,FFc三个触发器组成了三位数码
寄存器,触发器FF1~FF5和门电路G1~G9组成控制逻辑电路。
逐次比较型A/D转换器完成一次转换所需时间与其位数和时钟脉冲频率有关,位数愈少,时钟频率越高,
转换所需时间越短。这种A/D转换器具有转换速度快,精度高的特点。其产品主要有ADC0804/0808/0809系列(8位),AD575(10位),AD574A(12位)。
c. 电压-时间变换型(v-t变换型)
其原理是把输入的模拟电压信号转换成与之成正比的时间宽度信号,然后在这个时间宽度里对固定频率的时钟
脉冲计数,计数的结果就是正比于输入模拟电压的数字信号。
d. 电压-频率变换型(v-f变换型)
其原理是把输入的模拟电压信号转换成与之成正比的频率信号,然后在一个固定的时间间隔里对得到的频率
信号计数,所得到的结果就是正比于输入模拟电压的数字量。 
3) A/D转换器的参数指标
a. 分辨率
说明A/D转换器对输入信号的分辨能力。
A/D转换器的分辨率以输出二进制数的位数表示,输出位数愈多,量化单位愈小,分辨率愈高。
b. 转换误差
表示A/D转换器实际输出的数字量与理论输出数字量之间的差别。
c. 转换精度
A/D转换器的最大量化误差和模拟部分精度的共同体现。
d. 转换时间
A/D转换器从转换控制信号到来开始,到输出端得到稳定的数字信号所经过的时间。
4) ADC0804说明
a. 引脚图

Vin(+),Vin(-) - 两个模拟信号输入端,用以接受单极性,双极性和差模输入信号。
DB7~DB0 - 具有三态特性数字信号输出口。
AGND - 模拟信号地
DGND - 数字信号地
CLK - 时钟信号输入端
CLKR - 内部时钟发生器的外接电阻端,与CLK端配合可有芯片自身产生时钟脉冲,其频率为1/(1.1RC)
/CS - 片选信号输入端,低电平有效,一旦有效,表明A/D转换器被选中,可启动工作。
/WR - 写信号输入,低电平启动A/D转换。
/RD - 读信号输入,低电平输出端有效。
/INTR - A/D转换结束信号,低电平表示本次转换已完成。
Vref/2 - 参考电平输入,决定量化单位。
Vcc - 芯片电源5V输入。
b.转换时序图

CS先为低电平,/WR随后置低,经过至少tw(/WR)L时间后,/WR拉高,随着A/D转换器被启动,并且在经过
(1~8个A/D时钟周期+内部Tc)时间后,模数完成转换,转换结果存入数据锁存器,同时INTR自动变为
低电平,通知单片机本次转换已结束。
读取数据时,当/INTR变为低电平后,将/CS先置低,接着再将/RD置低,在/RD置低至少经过tACC时间后,
数字输出口上的数据达到稳定状态,此时直接读取数字输出端口数据便可得到转换后的数字信号,读走
数据后,马上将/RD拉高,然后将/CS拉高,/INTR是自动变化的,当/RD置低tR1时间后,/INTR自动拉高,
我们不必认为去干涉。
上面的时序图是ADC0804启动一次和读取一次数据的时序图,当我们要连续转换并且连续读取数据时,就没有
必要每次都把/CS置低再拉高,因为/CS是片选信号,置低表示该芯片可被操作或处于能够正常工作状态,所以
在写程序时,只有一开始将/CS置低,以后当要启动转换和读取数据时只需操作/WR和/RD即可。
 
二. 程序设计详解
1. 用单片机控制ADC0804进行模数转换
程序功能:
当拧动实验板上A/D旁边的电位器Re2时,在数码管的前三位以十进制方式动态显示出A/D转换后的数字量(8位A/D转换后数值在0~255变化)。
 
程序源码:
#include
#include
 
#define uchar unsigned char
#define uint unsigned int
 
sbit dula = P2 ^ 6;
sbit wela = P2 ^ 7;
sbit adwr = P3 ^ 6;
sbit adrd = P3 ^ 7;
 
uchar code table[] = {
    0x3f,0x06,0x5b,0x4f,
    0x66,0x6d,0x7d,0x07,
    0x7f,0x6f,0x77,0x7c,
    0x39,0x5e,0x79,0x71
};
 
void delayms(uint);
void display(uint);
 
void main()
{
    uchar i, adval;
    uint num;
 
    wela = 1;
    P0 = 0x7f;
    wela = 0;
    while (1)
    {
        adwr = 1;
        _nop_();
        adwr = 0;
        _nop_();
        adwr = 1;
        for (i = 10; i > 0; i--)
            display(num);
        P1 = 0xff;
        adrd = 1;
        _nop_();
        adrd = 0;
        _nop_();
        adval = P1;
        adrd = 1;
        num = adval;
    }
}
 
void delayms(uint xms)
{
    uint i, j;
 
    for (i = xms; i > 0; i--)
        for (j = 110; j > 0; j--)
            ;
}
 
void display(uint num)
{
    dula = 1;
    P0 = table[num / 100];
    dula = 0;
    P0 = 0xff;
    wela = 1;
    P0 = 0x7e;
    wela = 0;
    delayms(5);
 
    dula = 1;
    P0 = table[num % 100 / 10];
    dula = 0;
    P0 = 0xff;
    wela = 1;
    P0 = 0x7d;
    wela = 0;
    delayms(5);
 
    dula = 1;
    P0 = table[num % 100 % 10];
    dula = 0;
    P0 = 0xff;
    wela = 1;
    P0 = 0x7b;
    wela = 0;
    delayms(5);
}
 
程序小结:
1)刚进入主程序后,首先将U2锁存器的输出口的最高位置低电平,目的是将与之相连的ADC0804的/CS片选端
置低选中,因为是连续读取数据,所以一次选中,以后再不用管它。同时要注意,以后凡是操作U2锁存端的地方
都不要再改变A/D的/CS端,在数码管显示程序中,送出位选信号时,始终保持U2锁存器的最高位为低电平,
上例数码管显示部分程序中“P0=0x7e;P0=0x7d;P0=0x7b;”即是。
2) 进入while(1)大循环后,先启动A/D转换,其中的_nop_()相当于一个机器周期的延时。
3)在启动A/D转换后,还未读取转换结果,就立即先送结果给数码管显示,这样写的目的是为了给A/D转换
留有一定时间,
4)如果拧动电位器时,数码管数字不动,只有复位一次或重新上电一次,数字才会刷新,这时因为转换
时间不够的原因,解决办法将for(a=10;a>0;a--)中的a增大。

关键字:STC89C52  ADC0804 引用地址:A/D: 基于STC89C52与ADC0804的A/D设计详解

上一篇:D/A: 基于STC89C52与DAC0832的D/A设计详解
下一篇:键盘: 基于STC89C52的键盘设计详解

推荐阅读最新更新时间:2024-03-16 14:46

C51 数模转换(AD
代码: #include reg52.h #define uchar unsigned char #define uint unsigned int uint disnum,a; sbit adrd=P3^7; sbit adwr=P3^6; sbit dula=P2^6; sbit wela=P2^7; uchar code table_du ={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d, 0x7d,0x07,0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; delay(uchar); display(uint); void main() { while(1)
[单片机]
低功耗接收机中频子系统芯片AD607
    摘要: A D607为3V低功耗接收机中频子系统芯片,带有自动增益控制(AGC)的接收信号强度指示(RSSI)功能。该器件可用于GSM,CDMA,TDMA和TETRA等通信系统的接收机、卫星终端和便携式通信设备中。文中介绍了AD607的原理、特点与性能参数,并重点介绍了应用设计中的几个问题和典型应用电路。     关键词: 接收机  中频子系统  CDMA  AGC  AD607 1 概述     AD607为3V低功耗接收机中频子系统,其输入频率高达50MHz,IF范围为400kHz到12MHz。该芯片包含了一个混频器中频放大器、IQ解调器、锁相正交振荡器、AGC检测器和一个偏置系统。
[应用]
51单片机ADC0809+AD590温度检测、报警程序
#include reg52.h //头文件 #include intrins.h #define uchar unsigned char//宏定义 #define uint unsigned int//宏定义 sbit RS=P1^0;//LCD1602定义I/O的硬件接口 sbit RW=P1^1;//LCD1602定义I/O的硬件接口 sbit E=P1^2;//LCD1602定义I/O的硬件接口 sbit key_1=P1^3;//按键1定义I/O的硬件接口////Alarm_Value;//温度报警值+1度 sbit key_2=P1^4;//按键2定义I/O的硬件接口////Alarm_Value;//温度报警值-1度
[单片机]
51单片机ADC0809+<font color='red'>AD</font>590温度检测、报警程序
pic单片机多路ad切换程序介绍
PIC单片机(Peripheral Interface Controller)是一种用来开发和控制外围设备的集成电路(IC)。一种具有分散作用(多任务)功能的CPU。与人类相比,大脑就是CPU,PIC 共享的部分相当于人的神经系统。PIC 单片机是一个小的计算机。PIC单片机有计算功能和记忆内存像CPU并由软件控制运行。然而,处理能力—般,存储器容量也很有限,这取决于PIC的类型。但是它们的最高操作频率大约都在20MHz左右,存储器容量用做写程序的大约1K—4K字节。时钟频率与扫描程序的时间和执行程序指令的时间有关系。但不能仅以时钟频率来判断程序处理能力,它还随处理装置的体系结构改变。如果是同样的体系结构,时钟频率较高的处理能力会
[单片机]
pic单片机多路<font color='red'>ad</font>切换程序介绍
采用AD7192的电子秤系统设计
  电路功能与优势   本电路为采用AD7192构建的电子秤系统。AD7192是一款超低噪声、低漂移24位 - 转换器,内置PGA。该器件将大多数系统构建模块置于芯片内,因此能够简化电子秤设计。该器件可在4.7 Hz至4.8 KHz的完整输出数据速率范围内工作,并保持良好的性能,因此可用于以较低速度工作的电子秤系统,以及料斗秤等较高速电子秤系统。      图1:采用AD7192的电子秤系统(原理示意图,未显示所有连接)   电路描述   AD7192提供一种集成式电子秤解决方案,可以直接与称重传感器接口。只需在模拟输入端用一些滤波器,在基准电压引脚上配置一些 电容 等外部元件,便可满足电磁屏蔽
[测试测量]
采用<font color='red'>AD</font>7192的电子秤系统设计
STC89C52_51单片机_串口配置_UART串口通信
寄存器配置 PCON电源管理寄存器 位序号 D7 D6 D5 D4 D3 D2 D1 D0 位符号 SM0 SM1 SM2 REN TB8 RB8 TI RI – 模式 模式 模式1直接清零 使能串口接收 模式1接收停止位 发送标志位,软件清零 接受标志位,软件清0 //不能位寻址 SCON串口控制寄存器 位序号 D7 D6 D5 D4 D3 D2 D1 D0 位符号 SM0 SM1 SM2 REN TB8 RB8 TI RI – 模式 模式 模式1直接清零 使能串口接收 模式1接收停止位 发送标志位,软件清零 接受标志位,软件清0 /* SCON */ sbit SM0 = SCON^7; sbit SM1 = SCON
[单片机]
<font color='red'>STC89C52</font>_51单片机_串口配置_UART串口通信
STM32G474评测—AD/DA模拟性能测试
手头正好有电机控制方面的项目,准备选型一款合适的MCU,而G4系列典型应用之一正是电机控制,不巧的是收到开发板时订购的BLDC评估板一时半会还到不了手,临时改变评测项目,已经量产的工业仪器MCU替换为G474,看功能和性能方面是否可以达到或超越现有的MCU。 到手的Nucleo-G474开发板,先来张特写。 Nucleo-G474的板载烧写器MCU已经不是传统的STM32F103了,而是升级到了STM32F723,唯一遗憾的是烧写器和主板是一体的了,不是传统的间断连接方式,不能和主板分离,成为一个单独的烧写器。 为方便测试,且最大限度保护好Nucleo-G474原板,不直接在原板上焊接连线,特地打了1片专用测试板。这里要
[单片机]
STM32G474评测—<font color='red'>AD</font>/DA模拟性能测试
基于AD6620的数字下变频(DDC)的频率变换器
O 引言   AD6620是一个宽带中频到基带的解调器。它的内部信号处理单元由四个串联单元组成。分别为频率变换单元、二阶固定系数梳状滤波抽取滤波器(CIC2)单元、五阶固定系数梳状滤波抽取滤波器(CIC5)单元和一个系数可编程的RAM系数抽取滤波器(RCF)单元。通过串行微处理器接口可以完成对芯片的编程和控制。   AD6620具有16位线性比特补码输入(另加3bit指数输入),其单信道实数输入模式的最大输入数据速率可高达67 Msps,双信道实数输入模式与单信道复数输入模式的最大输入数据速率高达33.5 Msps。同时,AD6620还具有可编程抽取FIR滤波器与增益控制功能,抽取率在2~163 84之间可编程;输出具有并行、
[电源管理]
基于<font color='red'>AD</font>6620的数字下变频(DDC)的频率变换器
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved