单片机原理与接口技术第 14章,A/D与 D/A转换技术第 14章 A/D与 D/A转换技术在单片机应用系统中,输出控制是单片机实现控制运算处理后,对控制对象的输出通道接口 。 单片机主要输出三种形态的信号,数字量,开关量和频率量 。
第 14章,A/D与 D/A转换技术单片机对 模拟信号的处理被控制对象的信号除上述三种可以直接由单片机直接产生的信号外,还有模拟量控制信号,该信号通过 D/A转换产生 。
也就是说把单片机发出的数字信号转换成为模拟信号用来控制外部的设备,单片机仅能产生和处理数字信号,对于模拟信号只能借助 D/A或者 A/D转换芯片来完成 。
第 14章,A/D与 D/A转换技术
14.1 D/A,A/D转换在单片机系统中的应用
14.1,1 A/D-D/A转换的数据通道在一般的系统中通过传感器采集现场的信息也就是模拟量,模拟量经过前期电路处理再经过 A/D转换进入到单片机中第 14章,A/D与 D/A转换技术第 14章,A/D与 D/A转换技术
14.1,1 A/D-D/A转换的数据通道
单片机经过 D/A转换对现场物理量进行控制
由于单片机的工作速度很快物理量的变化速度相对比较慢故一个 A/D转换器可以通用于各现场监测点
经过多路开关的定时循环接通,各路信号依次及时可靠进入到单片机第 14章,A/D与 D/A转换技术
14.1,1 A/D-D/A转换的数据通道
多路开关循环接通电路,而现场信号通过采样保持器进行保存,以此来保证转换的通畅性。
另外采样频率必须是现场被测信号频谱中最高频率的两倍以上第 14章,A/D与 D/A转换技术
14.1,1 A/D-D/A转换的数据通道
D/A转换示意图:
第 14章,A/D与 D/A转换技术
14.1.2 D/A转换工作原理
D/A转换是一种将数字信号转换成连续模拟信号的操作,它作为单片机系统的数字信号和模拟环境的连续信号之间提供了一种接口,它工作的原理就是输入数字信号输出模拟信号。
第 14章,A/D与 D/A转换技术
A/D转换原理图第 14章,A/D与 D/A转换技术
14.1.2 D/A转换工作原理
D/A转换器的输入信号主要有两种分别为:
数字信号和基准电压。
D/A转换器的输出信号是模拟量,大部分的输出是电流,也有的输出电压。
第 14章,A/D与 D/A转换技术
14.1.2 D/A转换工作原理
D/A转换器内置运算放大器以低阻抗输出电压,称之为电压输出型 D/A转换器
D/A转换器如果采用电流开关型电路,
电流开关形电路如果直接输出生成的电流,
则为电流输出型 D/A转换器。
第 14章,A/D与 D/A转换技术
14.1.2 D/A转换工作原理
D/A转换器的输入数据是在不断变换的,
为了保持输出的稳定,须在其内部处理器与输入口之间增加锁存数据的功能。一些
D/A转换器甚至具有双重或者多重的数据缓冲结构,并具有数据锁存和地址译码电路。
这样的转换器多见于 12位甚至更高的 D/A转换器。
第 14章,A/D与 D/A转换技术
14.1.3 如何选择 D/A转换器参考指标:
分辨率:则最小输出模拟量与最大输出模拟量之比
转换时间:将一个数字量转换为稳定模拟量所需要的时间叫转换时间。一般情况下电流输出的
D/A转换时间比较短,电压输出的 D/A转换时间比较长
线性度:考虑输出的线形关系
转换精度:相对实际物理量的误差第 14章,A/D与 D/A转换技术
14.1.3 如何选择 D/A转换器
D/A转换器的类型:
– 根据输出端口是并口还是串口,可分为串型输出和并行输出器件
– 根据输出是电流还是电压,可分为电压输出型和电流输出型器件
– 根据能否进行乘法运算,可分为乘法运算型和非乘法运算型
– 根据内部是否有锁存器,可分为锁存型器件和非锁存型器件第 14章,A/D与 D/A转换技术
14.1.3 如何选择 D/A转换器在 D/A转换器中有在基准电压上加交流信号的,这样就可以得到数字输入和交流信号输入相乘的结果所以称为乘法型 D/A
转换器,这种转换器不仅可以进行乘法运算,还可以使输入信号衰减,也可以做调制器对输入信号进行调制。
第 14章,A/D与 D/A转换技术
14.2 8位 D/A芯片 DAC0832
DAC0832是由 8位输入寄存器,8位
DAC寄存器和 8位 D/A转换器组成。
DAC0832中有两级锁存器,第一级即输入寄存器,第二级为 DAC寄存器。除了能工作在单缓冲方式,通过这两级锁存器
DAC0832可以工作在双缓冲方式下,在输出模拟信号的同时可以采集下一个数字量,
提高了转换速度。
第 14章,A/D与 D/A转换技术第 14章,A/D与 D/A转换技术
14.2 8位 D/A芯片 DAC0832
利用两级转换器的作用可以让多个 D/A
转换器同时工作,再通过第二级锁存信号实现多路 D/A转换的同时输出。只要数据一进入 DAC寄存器便启动 D/A转换。
第 14章,A/D与 D/A转换技术
14.2.1 DAC0832的引脚
DAC0832的引脚如下:
DI0~DI7,8为数据输入端
ILE:输入寄存器的数据允许锁存信号第 14章,A/D与 D/A转换技术
DAC0832的引脚
,输入寄存器选择信号
,输入寄存器的数据写信号
,DAC寄存器写信号,并启动转换
,数据向 DAC寄存器传送信号,传送后即启动转换
CS
1WR
2WR
XFER
第 14章,A/D与 D/A转换技术
14.2.1 DAC0832的引脚
VREF:参考电压输入端
IOUT1,IOUT2:电流输出端
Rfb:反馈信号输入端
AGND:模拟电路地(第三脚)
DGND:数字电路地(第十脚)
VCC:芯片供电电压第 14章,A/D与 D/A转换技术
14.2.1 DAC0832的引脚注意,当 时,输入数据;当 时,数据被锁定。1LE? 0LE?
第 14章,A/D与 D/A转换技术
14.2.2 单片机与 DAC0832的接口电路第 14章,A/D与 D/A转换技术
14.2.2 单片机与 DAC0832的接口电路
DAC0832带有数据输入寄存器,是总线兼容型的,可以将 D/A芯片直接与数据总线相连,作为一个拓展的 I/O口。
第 14章,A/D与 D/A转换技术单缓冲接口方式在单缓冲接口方式下,ILE接 +5V。写信号控制数据的锁存,和相连,接单片机的,即数据同时写入两个寄存器;传送允许信号与片选相连,即选中本片 DAC0832
后,写入数据立刻启动转换。本例子
DAC0832的地址为 FFFEH。这种单缓冲方式适用于只有一路模拟信号输出的场合。
第 14章,A/D与 D/A转换技术
14.2.2 单片机与 DAC0832的接口电路本例子在运放输出端输出一个锯齿波电压信号,程序设计如下:
#include<absacc.h>
#include<reg51.h>
#define DAC0832 XBYTE[0xfffe]
#define uchar unsigned char
#define unit unsigned int
第 14章,A/D与 D/A转换技术
void star(void)
{ uchar i;
while(1)
{ for(i=0;i<=255;i++) /*形成锯齿波输出值,最大 255*/
{DAC0832=i} /*D/A转换输出 */
}
}
第 14章,A/D与 D/A转换技术
14.3 基于 MAX536的串行 D/A转换器
MAX536是一款具有 4路 12位电压输出的
D/A转换器,它包括一个 16位输入 /输出的移位寄存器,4个输入寄存器,4个 DAC寄存器和 4个输出放大器。 D/A转换器采用倒 T
型 R-2R电阻网络 D/A转换器。
第 14章,A/D与 D/A转换技术
14.3 基于 MAX536的串行 D/A转换器通过对输入参考电压分压获得模拟电压输出。其中,D/A转换器 A和 B共享 REFAB
参考电压,D/A转换器 C和 D共享 REFCD参考电压。参考电压范围为 0V到 VDD-4V。
第 14章,A/D与 D/A转换技术
14.3 基于 MAX536的串行 D/A转换器在单片机系统中,可分为硬件部分和软件部分。其中硬件部分是整个系统的实体构成,是软件系统的平台和基础,没有硬件做支撑设计出的软件就无法调试也不能得到验证。下面就是动态显示硬件设计例子,
我们给出了完整的电路图。
第 14章,A/D与 D/A转换技术
MAX
536
的内部结构图第 14章,A/D与 D/A转换技术
MAX
536
的外部引脚图第 14章,A/D与 D/A转换技术
MAX536引脚功能
– OUTB,DAC B电压输出
– OUTA,DAC A电压输出
– VSS:负电压输入
– AGND:模拟地
– REFAB,DAC A和 B参考电压输出
– DGND:数字地
–,DAC加载输入(低电平有效,将输入寄存器内容传送到 DAC寄存器)
LDAC
第 14章,A/D与 D/A转换技术
MAX536引脚功能
–SDI:串行数据输入
–,片选信号,低电平有效
–SCK:移位寄存器输入时钟
–SDO:串行数据输出
–REFCD,DAC C和 D的参考电压输出
CS
第 14章,A/D与 D/A转换技术
MAX536引脚功能
– TP:测试引脚,正常使用时连接 VDD
– VDD正电压输入( 12~15V)
– OUTD,DAC D电压输出
– OUTC,DAC C电压输出第 14章,A/D与 D/A转换技术
14.3.2 工作原理和时序
MAX536的串行接口的最高时钟为
10MHz。工作期间引脚的低电平必须保持 20微秒以上。它可以使用 3线接口或 4线接口的接口方式。在 3线接口时,它的时序如下:
第 14章,A/D与 D/A转换技术
MAX536的时序第 14章,A/D与 D/A转换技术
14.3.2 工作原理和时序引脚接地或者接 VDD。 在 为低电平期间,SDI引脚的串行输入数据由串行时钟 SCLK的上升沿逐位送入移位寄存器,转换成并行数据 。 输入数据全部进入移位寄存器后,置为高电平,利用的上升沿执行命令字,对
MAX536内部寄存器进行相应控制 。
LDAC CS
第 14章,A/D与 D/A转换技术
14.3.3 MAX536的编程方式
MAX接收的是 16位的串行数据,
高位在前,低位在后。在串行数据中包括两个地址位( A1,A0),两个控制位( C1,C0)和待转换的 12位数据( D11~D0)。
第 14章,A/D与 D/A转换技术从高到低依次排列这 16位数据从高到低依次排列为:
A1,A0,C1,C0,D11,D10,D9,
D8,D7,D6,D5,D4,D3,D2,
D1,D0。这些命令字与引脚的状态来共同控制 MAX536的转换。
第 14章,A/D与 D/A转换技术
14.3.3 MAX536的编程方式
16位串行字功能
A1 A0 C1 C0 D11~D0
0 0 0 1 12位数据 1 加载 DAC A 输入寄存器,DAC输出不变
0 1 0 1 12位数据 1 加载 DAC B 输入寄存器,DAC输出不变
1 0 0 1 12位数据 1 加载 DAC C 输入寄存器,DAC输出不变
1 1 0 1 12位数据 1 加载 DAC D 输入寄存器,DAC输出不变
0 0 1 1 12位数据 1 加载 DAC A输入寄存器,所有 DAC寄存器改变
0 1 1 1 12位数据 1 加载 DAC B输入寄存器,所有 DAC寄存器改变
1 0 1 1 12位数据 1 加载 DAC C输入寄存器,所有 DAC寄存器改变
1 1 1 1 12位数据 1 加载 DAC D输入寄存器,所有 DAC寄存器改变
x 0 0 0 12位数据 x 从移位寄存器加载所有数据到 DAC
LDAC
第 14章,A/D与 D/A转换技术
14.3.3 MAX536的编程方式第 14章,A/D与 D/A转换技术
14.3.3 MAX536的应用第 14章,A/D与 D/A转换技术
14.3.3 MAX536的应用单片机的 P2.1,P2.2,P2.3分别接
MAX536的,SCK,SDI。 MAX536采用
3线接口方式,引脚接数字地,转换器 A、
B,C,D都使用 +5V的参考电压,输出电压范围为( 0~5V)。
CS
LDAC
第 14章,A/D与 D/A转换技术单片机对 MAX536的控制本电路主要实现单片机对 MAX536的控制,并使用 MAX536进行 D/A转换。四个通道都可以输出数据,实际应用中根据具体情况可以减少通道。
第 14章,A/D与 D/A转换技术主程序
#include<absacc.h>
#include<reg51.h>
sbit cs=p2^1 //定义的控制接口
sbit sck=p2^2 //定义 SCK的控制接口
sbit sdi=p2^3 //定义 SDI的控制接口第 14章,A/D与 D/A转换技术
void data_out(unsigned char
numer,unsigned int value)
//定义 MAX536的输出函数,通道号和输出量
{ switch(numer) //numer在实际应用中可根据情况赋值
{ case1,cs=0; //置低电平,低电平有效,
开启 MAX536,可以输入数据第 14章,A/D与 D/A转换技术
w536(value|0x1000); //定义 DAC A 输出,由编程方式可以知道 A通道输出的数字编码是 0x1000,通过“或”把命令加到输出数据中。
cs=1; // 置高电平,利用的上升沿执行命令字,对 MAX536内部寄存器进行相应的控制。
break; //程序返回第 14章,A/D与 D/A转换技术
case2,cs=0; //置低电平,低电平有效,
开启 MAX536,可以输入数据
w536(value|0x5000); //定义 DAC B 输出,
由编程方式可以知道 B通道输出的数字编码是 0x5000,通过“或”把命令加到输出数据中第 14章,A/D与 D/A转换技术
cs=1; // 置高电平,利用的上升沿执行命令字,对 MAX536内部寄存器进行相应的控制。
break; //程序返回
case3,cs=0; //置低电平,低电平有效,开启 MAX536,可以输入数据第 14章,A/D与 D/A转换技术
w536(value|0x9000); //定义 DAC C 输出,
由编程方式可以知道 C通道输出的数字编码是 0x9000,通过“或”把命令加到输出数据中
cs=1; // 置高电平,利用的上升沿执行命令字,对 MAX536内部寄存器进行相应的控制。
break; //程序返回第 14章,A/D与 D/A转换技术
case4,cs=0; //置低电平,低电平有效,开启 MAX536,可以输入数据
w536(value|0xD000); //定义 DAC D 输出,编程方式可以知道 D通道输出的数字编码是 0xD000,通过“或”把命令加到输出数据中第 14章,A/D与 D/A转换技术
cs=1; // 置高电平,利用的上升沿执行命令字,对 MAX536内部寄存器进行相应的控制。
break; //程序返回
}
}
第 14章,A/D与 D/A转换技术子程序
void w536(unsigned int indata) //indata 为准备输出的数据包含了命令字
{ char n,i,j;
unsigned int in_on; //定义数据逻辑
in_on=ox0001; //初始化数据逻辑,预备输出数据,从最低位开始输出
for(n=0;n<16;n++) //预备输出 16位数据第 14章,A/D与 D/A转换技术
{ sck=0; //设置 SCK为低电平
for(i=0,i<10;i++); //延时
j=indata&in_on; //使用“与”取出准备输出那一位的值第 14章,A/D与 D/A转换技术
if(j==0001) //判断输出位
sdi=1; //输出
else
sdi=0; //输出第 14章,A/D与 D/A转换技术
for(i=0,i<10;i++); //延时
sck=1; //设置 SCK为高电平,在 SCK的上升沿由 SDI输入的一位数据进入移位寄存器。
indata=indata>>1; //数字逻辑右移,
MAX536输入下一位数据
}
}
第 14章,A/D与 D/A转换技术
14.4 A/D转换工作原理在单片机系统中,单片机所能处理的都是离散的数字信号。但是外部受控制的有关设备所产生的和接收的往往是模拟量。
例如:温度,速度,亮度等。所以必须将外部设备产生的模拟信号转换成为数字信号才能使这些信号为单片机所识别,并在单片机中进行处理。而将模拟信号转换成为数字信号的过程我们称之为模拟 /数字
( A/D)转换,所使用的器件我们就称之为模拟 /数字( A/D)转换器。
第 14章,A/D与 D/A转换技术
14.4 A/D转换工作原理
A/D转换是一种将连续的模拟信号转换成适合在单片机中处理并运行的二进制数,也就是把连续信号变成离散的信号。 A/D转换的工作原理如图所示第 14章,A/D与 D/A转换技术
14.4.1 如何选择 A/D转换器
A/D转换器的种类很多,性能也有很大的不同,在 A/D转换器的选择上不仅要考虑它的性能还要考虑具体的应用要求。下面我们来看看选择 A/D转换器的一些参考性能指标。
第 14章,A/D与 D/A转换技术
14.4.1 如何选择 A/D转换器
1.A/D转换器的位数
A/D转换器位数的确定,主要的考虑因素是转换的误差,位数越多所产生的误差和失真就越小第 14章,A/D与 D/A转换技术为了减低硬件的消耗减少成本在一般的系统中我们都选用中分辨率的 A/D转换器,而其中以 10位和 11位是最合适的。
第 14章,A/D与 D/A转换技术
14.4.1 如何选择 A/D转换器
2,A/D转换器的转换频率
A/D转换器从启动到结束总需要一定的时间,
而每秒钟所完成的转换次数就是 A/D转换器的转换频率。在确定 A/D转换器的转换频率的时候还要考虑到系统的采样频率。例如,A/D转换器的转换频率为 10KHz,而模拟信号一个周期的信号需要 10个采样点,根据采样定理这个 A/D转换器所能处理的最高频率的模拟信号仅为 1KHz当然通过提高 A/D转换器的转换频率可以提高处理的频率,但是由于单片机的处理速度有限所以在单片机系统中始终有一个瓶颈无法突破。
第 14章,A/D与 D/A转换技术
14.4.1 如何选择 A/D转换器
3,满量程误差这个指标指的是满量程输出的时候对应的输入信号和理想输入信号的差别
4,线性度本指标指的是 A/D转换器的转移函数与理想直线的最大偏移。
5,采样 /保持器对于高频信号来说是必须加采样 /保持器的。如果是低频信号并采用高速的 A/D转换器的时候是可以不用采样 /保持器的。而直流信号和变化很慢的信号也可以不使用采样 /保持器。
第 14章,A/D与 D/A转换技术
14.4.1 如何选择 A/D转换器
6,A/D转换器的量程部分 A/D转换器提供了不同量程的引脚,必须使用正确才能保证信号尽量不失真。这样的 A/D转换器不同的量程的输入电压可以从不同的引脚输入。
7,偏置极性部分 A/D转换器提供了双极性偏置控制。当该引脚接地时,
信号为单极性输入方式;当该引脚接基准电压时,信号为双极性输入方式。
第 14章,A/D与 D/A转换技术
11.7 LED动态显示及实验
2、分析:
MAX7221在使用之前必须进行初始化,即设置 MAX7221的显示模式、译码方式、亮度控制、扫描范围(扫描 LED个数)。当采用 Code B译码方式时,我们只要向数码管 0( digit0)~数码管 7( digit7)送出
0x0~0x7即可。
第 14章,A/D与 D/A转换技术
14.4.2 8位 A/D转换芯片 ADC0809
ADC0809是 8位逐次逼近型 A/D转换器,
带有 8个模拟量输入通道,芯片内带通道地址译码锁存器,输出带三态数据锁存器,
启动信号为脉冲启动方式,每一通道的转换大概需要 100微秒。
第 14章,A/D与 D/A转换技术
14.4.2 8位 A/D转换芯片 ADC0809
ADC0809由三个部分组成,第一个部分是输入部分,包括 8位模拟开关,3条地址线的通道地址锁存器和译码器,第四条为
ALE,这三个地址引脚通过编码可以用来实现 8路模拟信号输入通道的选择;第二部分是转换部分,里面是一个逐次逼近型的 A/D
转换器;第三个部分是输出部分,该部分是一个三态输出数据锁存器,有 8位数据输出最上为 LSB最下为 MSB。
第 14章,A/D与 D/A转换技术
8位 A/D转换芯片 ADC0809内部结构图第 14章,A/D与 D/A转换技术
ADC0809的外部引脚图第 14章,A/D与 D/A转换技术
ADC0809的引脚功能
IN0~IN8,8个模拟通道输入端。
START:启动转换信号
EOC:转换结束信号
OE:输出允许信号。信号由 CPU读信号和片选信号组合产生。
CLOCK:外部时钟脉冲输入端,典型值为 640KHz
ALE:地址锁存允许信号
A,B,C:通道地址线。 CBA的 8种组合状态 000~111对应了 8个通道的选择
VREF( +),VREF( — ):参考电压输入端
VCC,+5V电源
GND:地
D0~D7,D7为最高位 MSB,D0为最低位 LSB。 D7~D0组成 8位数据输出。
第 14章,A/D与 D/A转换技术
ADC0809的地址编码地址码 选通的模拟通道
C B A
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
IN0
IN1
IN2
IN3
IN4
IN5
IN6
IN7
第 14章,A/D与 D/A转换技术
ADC0809的应用
C,B,A输入的地址在 ALE有效的时候被锁存。启动信号 START上升沿到来时开始启动转换,EOC信号是在 START下降沿到的 10微秒后才变成低电平,表示转换已经结束。当单片机接收到转换结束的信号后,发送一个读的信号给 OE,然后开始从 ADC0809输入信号。
第 14章,A/D与 D/A转换技术
14.3.2 ADC0809与单片机的接口第 14章,A/D与 D/A转换技术
14.3.2 ADC0809与单片机的接口本例子数据输出端口 D7~D0接单片机的
P0^7~P0^0。启动信号 START由 P3^0产生,
ALE和 START相连,即按输入的通道地址接通模拟量并启动转换。地址选通信号 C,
B,A分别由 P2^2,P2^1,P2^0产生。输出允许信号由 P3^7产生,即通过读信号使得数据从 P0口直接输入单片机。转换结束信号 EOC与 p3^2即外部中断 0相连。
第 14章,A/D与 D/A转换技术主程序
#include<absacc.h>
#include<reg51.h>
#define uchar unsigned char
sfr p0=0x80; //定义 P0的地址
sfr p2=0xA0; //定义 P2的地址
sfr p3=0xB0; //定义 P3的地址
sbit ad_ch=p3^2; //定义查询引脚,当 0809转换结束的时候 EOC为低电平
sbit read=p3^7; //定义读信号
sbit star=p3^0 //定义启动转换信号
void main(void)
{ atatic uchar idata a[10];
a0809(a); //启动转换并采样 AD0809通道的值
}
void a0809 (uchar idata *x) //转换函数
{uchar i; uchar xdata *a_adr;
p2=0xf8; //设置 AD0809通道 0的地址
a_adr=&p2; //把通道地址值赋给 a_adr
for(i=0;i<8;i++) //处理 8个通道的数据
{ star=1; //启动转换
*a_adr=0;
i=i; i=i; i=i; //延时等待 EOC变为低电平
while(ad_ch= =0); //查询是否转换已经结束,若转换结束则读取数据
read=1; //读数据信号有效,使 OE为高电平开始读取数据
x[i]=*a_adr; //存储转换的结果
a_adr++; //进入下一通道的转换
}
}
第 14章,A/D与 D/A转换技术
14.5 12位 A/D转换芯片 ADS7804
与 8位和 16位的 A/D转换器相比,12
位 A/D转换器以其较高的性能价格比而在各类系统中中得到广泛的应用 。 下面就以 ADS7804为例子详细介绍 12位 A/D
转换器的应用 。 ADS7804为 12位的 A/D
转换器,它不仅分辨率高,转换速度快,
而且接口方便,电路简单,应用灵活,
因而具有广泛的应用前景 。
第 14章,A/D与 D/A转换技术
14.5.1 ADS7804的内部结构第 14章,A/D与 D/A转换技术
14.5.1 ADS7804的内部结构
ADS7804芯片采用 28脚 0.3英寸 PDIP( 塑料双列直插式 ) 封装,两列管脚间距为 0.3英寸,比一般
DIP28封装窄一倍,所以俗称瘦型 DIP; ADS7804采用单 5V电源供电;芯片内部含有采样保持,电压基准和时钟等电路,可极大简化用户的电路设计和硬件开锁,并可提高系统的稳定性 。 ADS7804采用 CMOS工艺制造,转 换 速 度 快,功 耗 低 ( 最 大 功 耗 为
100mW) 。 另外 ADS7804采用逐次逼近式工作原理,
单通道输入,模拟输入电压的范围为 ± 10V,采样速率为 100kHz。
第 14章,A/D与 D/A转换技术
ADS7804的外部引脚图第 14章,A/D与 D/A转换技术
ADS7804的引脚功能
VDIG 数字电源,和模拟电源 VANA通常一起接到 5V电源上
VANA 模拟电源,和数字电源 VDIG通常一起接到 5V电源上
DGND 数字地,通常与模拟地共地
AGND1,AGND2 模拟地,通常与数字地共地
REF 为参考电压端,通常对地接 2.2μF电容,芯片内部可产生 2.5V基准电压。
CAP 为参考电压所需电容,对地接 2.2μF电容
VIN 模拟信号输入端
D11~ D0 为数字量并行输出口
DZ( 19~ 22脚)是为了使管脚与 16位 A/D转换器 ADS7805兼容而设的,可悬空片选信号,与结合在下降沿有效,并持续 40ns~ 6μs可启动 A/D转换,第二个下降沿输出数据。
读取模数转换结果的控制信号转换结束信号,高电平表示转换结束,低电平表示转换进行中
BYTE 控制从总线读出的数据是转换结果的高字节还是低字节。它为低电平的时候选择低字节,为高电平的时候选择高字节。
CS
C/R
BUSY
第 14章,A/D与 D/A转换技术
14.5.2 ADS7804如何启动转换和读取转换结果首先将脚电平变低;然后在脚输入一个脉冲并在其下降沿启动 A/D转换,此脉冲的宽度要求在 40ns~ 6μs之间;这时 BUSY脚电平拉低表示正在进行转换;在经过大约 8μs以后,
转换完成,BUSY脚电平相应变高;再把 R/C
脚电平拉高,这样,脚脉冲的下降沿即把转换结果输出到数据总线上 。
第 14章,A/D与 D/A转换技术
ADS7804启动转换和读取转换结果的时序图第 14章,A/D与 D/A转换技术模拟电压和数字输出的关系模拟输入 初码形式的数字输出二进制 十六进制
9.99512V 0111 1111 1111 7FF
4.88mV 0000 0000 0001 001
0V 0000 0000 0000 000
-4.88mV 1111 1111 1111 FFF
-10V 1000 0000 0000 800
第 14章,A/D与 D/A转换技术
ADS7804的输出因为 ADS7804为 12位 A/D转换器所以它的转换结果为 12位,对 8位单片机而言,
就必须分两次读入,而这个功能是由
BYTE引脚来实现的。当 BYTE脚为高电平时,数据总线上输出高字节,当 BYTE
脚为低电平时,输出低字节。
第 14章,A/D与 D/A转换技术
14.5.3 ADS7804与单片机的接口因为 ADS7804的信号脉冲宽度要求为
40ns~ 6μs之间,而对于单片机而言,如采用 12MHz的晶振,单周期指令和双周期指令分别为 1μs和 2μs,而一个对位操作的指令为 1μs所以我们把它和单片的 P2.1端口相连,而,和 BYTE信号,则分别与 P2.0,P2.2,P2.3相连
BUSY C/R
第 14章,A/D与 D/A转换技术
ADS7804与单片机的接口电路第 14章,A/D与 D/A转换技术程序分析本数据采集系统程序如下:
单点采样子程序 SPS():用来返回一个有符号整数形式的转换结果。
定长采样子程序 DLS():根据入口参数
fixedtime(单位为 μs)给定的采样间隔采样 N
点,并采用查询单片机内置定时器的方式来控制采样时序,N点采样结果存储在外部存储器数组 array中。
第 14章,A/D与 D/A转换技术主程序 1
#include<reg51.h>
#include<absacc.h>
#define N==128 //定采样长度,每个周期内采样 128点
sfr p2=0xA0; //定义 P2的地址
sbit CS=p2^1; //定义片选地址
sbit BYTE=p2^3; //定义数据选择地址
sbit RC=P2^2; //定义读取结果地址
sbit BUSY=P2^0; //定义特殊位
int XDATA array(N); //在外部存储器内定义长度为 N的有符号整数数组
void SPS( ) //单点采样子程序
{ uint dl,dh;int dd;
RC=0; //R/C低电平,进入转换模式
cs=0; //cs为低电平一个指令的时间为 1μs,启动 A/D转换
cs=1; //cs为高电平,依据时序等待转换完成方便在下降沿输出程序
while (BUSY= =1); //等待转换完成
RC=1; //和 CS配合输出数据
cs=0; //cs为低电平,利用它的下降沿输出数据
BYTE=0; //进入读模式,选择低字节
dl=XBYTE[0xffff]; //读转换结果低 8位
BYTE=1; //选择高字节
dh=XBYTE[0xffff]&0x0f;
//读转换结果高 4位,和 0x0f相与把高位清零只保留四位有效数字
dd=dh*256+dl; //得到 12位转换结果,因为第 8位数据的权为 256,所以 dh乘以 256可以得到高四位的正确数值
return(dd); /*返回转换结果 */
}
第 14章,A/D与 D/A转换技术定长采样子程序
void DLS(uint fixedtime==1000μs) //定长采样子程序
{ uchar timeh,timel;
fixedtime=fixedtime-5;//减去 TF1清零和装载计数初值的时间 5μs
th=( 65536-fixedtime)/256; //计算计数初值
tl=(65536-fixedtime)%256; //计算计数初值
TMOD=0x10; //定时器 1,方式 1
TH1=timeh; TL1=timel; //装载计数初值
TR1=1; //启动定时
for(i=0;i<N;i++)
{ while(TF1); //查询等待 TF1复位
TF1=0; //清溢出标志
TH1=timeh;
TL1=timel; //装载计数初值
Array[i]=SPS(); //采样、存储
}
TR1=0; //停止定时
}
第 14章,A/D与 D/A转换技术注意事项:
本程序中 fixedtime和 N的大小根据实际情况来确定,fixedtime为采样的时间间隔,N为采样的点数。这两个参数的确定还要结合 ADS7804和单片机的工作频率,不能超过额定的频率。另外赋给计数寄存器 TH和 TL的值是定时器从开始计数到溢出所用的时间,这个时间再加上清 TF和装载计数初值所需的时间(共 5个机器周期,对于
12MHz晶振即为 5μs)才是所要的采样间隔,这一点在程序设计中必须注意。
第 14章,A/D与 D/A转换技术第 14章结束
第 14章,A/D与 D/A转换技术单片机对 模拟信号的处理被控制对象的信号除上述三种可以直接由单片机直接产生的信号外,还有模拟量控制信号,该信号通过 D/A转换产生 。
也就是说把单片机发出的数字信号转换成为模拟信号用来控制外部的设备,单片机仅能产生和处理数字信号,对于模拟信号只能借助 D/A或者 A/D转换芯片来完成 。
第 14章,A/D与 D/A转换技术
14.1 D/A,A/D转换在单片机系统中的应用
14.1,1 A/D-D/A转换的数据通道在一般的系统中通过传感器采集现场的信息也就是模拟量,模拟量经过前期电路处理再经过 A/D转换进入到单片机中第 14章,A/D与 D/A转换技术第 14章,A/D与 D/A转换技术
14.1,1 A/D-D/A转换的数据通道
单片机经过 D/A转换对现场物理量进行控制
由于单片机的工作速度很快物理量的变化速度相对比较慢故一个 A/D转换器可以通用于各现场监测点
经过多路开关的定时循环接通,各路信号依次及时可靠进入到单片机第 14章,A/D与 D/A转换技术
14.1,1 A/D-D/A转换的数据通道
多路开关循环接通电路,而现场信号通过采样保持器进行保存,以此来保证转换的通畅性。
另外采样频率必须是现场被测信号频谱中最高频率的两倍以上第 14章,A/D与 D/A转换技术
14.1,1 A/D-D/A转换的数据通道
D/A转换示意图:
第 14章,A/D与 D/A转换技术
14.1.2 D/A转换工作原理
D/A转换是一种将数字信号转换成连续模拟信号的操作,它作为单片机系统的数字信号和模拟环境的连续信号之间提供了一种接口,它工作的原理就是输入数字信号输出模拟信号。
第 14章,A/D与 D/A转换技术
A/D转换原理图第 14章,A/D与 D/A转换技术
14.1.2 D/A转换工作原理
D/A转换器的输入信号主要有两种分别为:
数字信号和基准电压。
D/A转换器的输出信号是模拟量,大部分的输出是电流,也有的输出电压。
第 14章,A/D与 D/A转换技术
14.1.2 D/A转换工作原理
D/A转换器内置运算放大器以低阻抗输出电压,称之为电压输出型 D/A转换器
D/A转换器如果采用电流开关型电路,
电流开关形电路如果直接输出生成的电流,
则为电流输出型 D/A转换器。
第 14章,A/D与 D/A转换技术
14.1.2 D/A转换工作原理
D/A转换器的输入数据是在不断变换的,
为了保持输出的稳定,须在其内部处理器与输入口之间增加锁存数据的功能。一些
D/A转换器甚至具有双重或者多重的数据缓冲结构,并具有数据锁存和地址译码电路。
这样的转换器多见于 12位甚至更高的 D/A转换器。
第 14章,A/D与 D/A转换技术
14.1.3 如何选择 D/A转换器参考指标:
分辨率:则最小输出模拟量与最大输出模拟量之比
转换时间:将一个数字量转换为稳定模拟量所需要的时间叫转换时间。一般情况下电流输出的
D/A转换时间比较短,电压输出的 D/A转换时间比较长
线性度:考虑输出的线形关系
转换精度:相对实际物理量的误差第 14章,A/D与 D/A转换技术
14.1.3 如何选择 D/A转换器
D/A转换器的类型:
– 根据输出端口是并口还是串口,可分为串型输出和并行输出器件
– 根据输出是电流还是电压,可分为电压输出型和电流输出型器件
– 根据能否进行乘法运算,可分为乘法运算型和非乘法运算型
– 根据内部是否有锁存器,可分为锁存型器件和非锁存型器件第 14章,A/D与 D/A转换技术
14.1.3 如何选择 D/A转换器在 D/A转换器中有在基准电压上加交流信号的,这样就可以得到数字输入和交流信号输入相乘的结果所以称为乘法型 D/A
转换器,这种转换器不仅可以进行乘法运算,还可以使输入信号衰减,也可以做调制器对输入信号进行调制。
第 14章,A/D与 D/A转换技术
14.2 8位 D/A芯片 DAC0832
DAC0832是由 8位输入寄存器,8位
DAC寄存器和 8位 D/A转换器组成。
DAC0832中有两级锁存器,第一级即输入寄存器,第二级为 DAC寄存器。除了能工作在单缓冲方式,通过这两级锁存器
DAC0832可以工作在双缓冲方式下,在输出模拟信号的同时可以采集下一个数字量,
提高了转换速度。
第 14章,A/D与 D/A转换技术第 14章,A/D与 D/A转换技术
14.2 8位 D/A芯片 DAC0832
利用两级转换器的作用可以让多个 D/A
转换器同时工作,再通过第二级锁存信号实现多路 D/A转换的同时输出。只要数据一进入 DAC寄存器便启动 D/A转换。
第 14章,A/D与 D/A转换技术
14.2.1 DAC0832的引脚
DAC0832的引脚如下:
DI0~DI7,8为数据输入端
ILE:输入寄存器的数据允许锁存信号第 14章,A/D与 D/A转换技术
DAC0832的引脚
,输入寄存器选择信号
,输入寄存器的数据写信号
,DAC寄存器写信号,并启动转换
,数据向 DAC寄存器传送信号,传送后即启动转换
CS
1WR
2WR
XFER
第 14章,A/D与 D/A转换技术
14.2.1 DAC0832的引脚
VREF:参考电压输入端
IOUT1,IOUT2:电流输出端
Rfb:反馈信号输入端
AGND:模拟电路地(第三脚)
DGND:数字电路地(第十脚)
VCC:芯片供电电压第 14章,A/D与 D/A转换技术
14.2.1 DAC0832的引脚注意,当 时,输入数据;当 时,数据被锁定。1LE? 0LE?
第 14章,A/D与 D/A转换技术
14.2.2 单片机与 DAC0832的接口电路第 14章,A/D与 D/A转换技术
14.2.2 单片机与 DAC0832的接口电路
DAC0832带有数据输入寄存器,是总线兼容型的,可以将 D/A芯片直接与数据总线相连,作为一个拓展的 I/O口。
第 14章,A/D与 D/A转换技术单缓冲接口方式在单缓冲接口方式下,ILE接 +5V。写信号控制数据的锁存,和相连,接单片机的,即数据同时写入两个寄存器;传送允许信号与片选相连,即选中本片 DAC0832
后,写入数据立刻启动转换。本例子
DAC0832的地址为 FFFEH。这种单缓冲方式适用于只有一路模拟信号输出的场合。
第 14章,A/D与 D/A转换技术
14.2.2 单片机与 DAC0832的接口电路本例子在运放输出端输出一个锯齿波电压信号,程序设计如下:
#include<absacc.h>
#include<reg51.h>
#define DAC0832 XBYTE[0xfffe]
#define uchar unsigned char
#define unit unsigned int
第 14章,A/D与 D/A转换技术
void star(void)
{ uchar i;
while(1)
{ for(i=0;i<=255;i++) /*形成锯齿波输出值,最大 255*/
{DAC0832=i} /*D/A转换输出 */
}
}
第 14章,A/D与 D/A转换技术
14.3 基于 MAX536的串行 D/A转换器
MAX536是一款具有 4路 12位电压输出的
D/A转换器,它包括一个 16位输入 /输出的移位寄存器,4个输入寄存器,4个 DAC寄存器和 4个输出放大器。 D/A转换器采用倒 T
型 R-2R电阻网络 D/A转换器。
第 14章,A/D与 D/A转换技术
14.3 基于 MAX536的串行 D/A转换器通过对输入参考电压分压获得模拟电压输出。其中,D/A转换器 A和 B共享 REFAB
参考电压,D/A转换器 C和 D共享 REFCD参考电压。参考电压范围为 0V到 VDD-4V。
第 14章,A/D与 D/A转换技术
14.3 基于 MAX536的串行 D/A转换器在单片机系统中,可分为硬件部分和软件部分。其中硬件部分是整个系统的实体构成,是软件系统的平台和基础,没有硬件做支撑设计出的软件就无法调试也不能得到验证。下面就是动态显示硬件设计例子,
我们给出了完整的电路图。
第 14章,A/D与 D/A转换技术
MAX
536
的内部结构图第 14章,A/D与 D/A转换技术
MAX
536
的外部引脚图第 14章,A/D与 D/A转换技术
MAX536引脚功能
– OUTB,DAC B电压输出
– OUTA,DAC A电压输出
– VSS:负电压输入
– AGND:模拟地
– REFAB,DAC A和 B参考电压输出
– DGND:数字地
–,DAC加载输入(低电平有效,将输入寄存器内容传送到 DAC寄存器)
LDAC
第 14章,A/D与 D/A转换技术
MAX536引脚功能
–SDI:串行数据输入
–,片选信号,低电平有效
–SCK:移位寄存器输入时钟
–SDO:串行数据输出
–REFCD,DAC C和 D的参考电压输出
CS
第 14章,A/D与 D/A转换技术
MAX536引脚功能
– TP:测试引脚,正常使用时连接 VDD
– VDD正电压输入( 12~15V)
– OUTD,DAC D电压输出
– OUTC,DAC C电压输出第 14章,A/D与 D/A转换技术
14.3.2 工作原理和时序
MAX536的串行接口的最高时钟为
10MHz。工作期间引脚的低电平必须保持 20微秒以上。它可以使用 3线接口或 4线接口的接口方式。在 3线接口时,它的时序如下:
第 14章,A/D与 D/A转换技术
MAX536的时序第 14章,A/D与 D/A转换技术
14.3.2 工作原理和时序引脚接地或者接 VDD。 在 为低电平期间,SDI引脚的串行输入数据由串行时钟 SCLK的上升沿逐位送入移位寄存器,转换成并行数据 。 输入数据全部进入移位寄存器后,置为高电平,利用的上升沿执行命令字,对
MAX536内部寄存器进行相应控制 。
LDAC CS
第 14章,A/D与 D/A转换技术
14.3.3 MAX536的编程方式
MAX接收的是 16位的串行数据,
高位在前,低位在后。在串行数据中包括两个地址位( A1,A0),两个控制位( C1,C0)和待转换的 12位数据( D11~D0)。
第 14章,A/D与 D/A转换技术从高到低依次排列这 16位数据从高到低依次排列为:
A1,A0,C1,C0,D11,D10,D9,
D8,D7,D6,D5,D4,D3,D2,
D1,D0。这些命令字与引脚的状态来共同控制 MAX536的转换。
第 14章,A/D与 D/A转换技术
14.3.3 MAX536的编程方式
16位串行字功能
A1 A0 C1 C0 D11~D0
0 0 0 1 12位数据 1 加载 DAC A 输入寄存器,DAC输出不变
0 1 0 1 12位数据 1 加载 DAC B 输入寄存器,DAC输出不变
1 0 0 1 12位数据 1 加载 DAC C 输入寄存器,DAC输出不变
1 1 0 1 12位数据 1 加载 DAC D 输入寄存器,DAC输出不变
0 0 1 1 12位数据 1 加载 DAC A输入寄存器,所有 DAC寄存器改变
0 1 1 1 12位数据 1 加载 DAC B输入寄存器,所有 DAC寄存器改变
1 0 1 1 12位数据 1 加载 DAC C输入寄存器,所有 DAC寄存器改变
1 1 1 1 12位数据 1 加载 DAC D输入寄存器,所有 DAC寄存器改变
x 0 0 0 12位数据 x 从移位寄存器加载所有数据到 DAC
LDAC
第 14章,A/D与 D/A转换技术
14.3.3 MAX536的编程方式第 14章,A/D与 D/A转换技术
14.3.3 MAX536的应用第 14章,A/D与 D/A转换技术
14.3.3 MAX536的应用单片机的 P2.1,P2.2,P2.3分别接
MAX536的,SCK,SDI。 MAX536采用
3线接口方式,引脚接数字地,转换器 A、
B,C,D都使用 +5V的参考电压,输出电压范围为( 0~5V)。
CS
LDAC
第 14章,A/D与 D/A转换技术单片机对 MAX536的控制本电路主要实现单片机对 MAX536的控制,并使用 MAX536进行 D/A转换。四个通道都可以输出数据,实际应用中根据具体情况可以减少通道。
第 14章,A/D与 D/A转换技术主程序
#include<absacc.h>
#include<reg51.h>
sbit cs=p2^1 //定义的控制接口
sbit sck=p2^2 //定义 SCK的控制接口
sbit sdi=p2^3 //定义 SDI的控制接口第 14章,A/D与 D/A转换技术
void data_out(unsigned char
numer,unsigned int value)
//定义 MAX536的输出函数,通道号和输出量
{ switch(numer) //numer在实际应用中可根据情况赋值
{ case1,cs=0; //置低电平,低电平有效,
开启 MAX536,可以输入数据第 14章,A/D与 D/A转换技术
w536(value|0x1000); //定义 DAC A 输出,由编程方式可以知道 A通道输出的数字编码是 0x1000,通过“或”把命令加到输出数据中。
cs=1; // 置高电平,利用的上升沿执行命令字,对 MAX536内部寄存器进行相应的控制。
break; //程序返回第 14章,A/D与 D/A转换技术
case2,cs=0; //置低电平,低电平有效,
开启 MAX536,可以输入数据
w536(value|0x5000); //定义 DAC B 输出,
由编程方式可以知道 B通道输出的数字编码是 0x5000,通过“或”把命令加到输出数据中第 14章,A/D与 D/A转换技术
cs=1; // 置高电平,利用的上升沿执行命令字,对 MAX536内部寄存器进行相应的控制。
break; //程序返回
case3,cs=0; //置低电平,低电平有效,开启 MAX536,可以输入数据第 14章,A/D与 D/A转换技术
w536(value|0x9000); //定义 DAC C 输出,
由编程方式可以知道 C通道输出的数字编码是 0x9000,通过“或”把命令加到输出数据中
cs=1; // 置高电平,利用的上升沿执行命令字,对 MAX536内部寄存器进行相应的控制。
break; //程序返回第 14章,A/D与 D/A转换技术
case4,cs=0; //置低电平,低电平有效,开启 MAX536,可以输入数据
w536(value|0xD000); //定义 DAC D 输出,编程方式可以知道 D通道输出的数字编码是 0xD000,通过“或”把命令加到输出数据中第 14章,A/D与 D/A转换技术
cs=1; // 置高电平,利用的上升沿执行命令字,对 MAX536内部寄存器进行相应的控制。
break; //程序返回
}
}
第 14章,A/D与 D/A转换技术子程序
void w536(unsigned int indata) //indata 为准备输出的数据包含了命令字
{ char n,i,j;
unsigned int in_on; //定义数据逻辑
in_on=ox0001; //初始化数据逻辑,预备输出数据,从最低位开始输出
for(n=0;n<16;n++) //预备输出 16位数据第 14章,A/D与 D/A转换技术
{ sck=0; //设置 SCK为低电平
for(i=0,i<10;i++); //延时
j=indata&in_on; //使用“与”取出准备输出那一位的值第 14章,A/D与 D/A转换技术
if(j==0001) //判断输出位
sdi=1; //输出
else
sdi=0; //输出第 14章,A/D与 D/A转换技术
for(i=0,i<10;i++); //延时
sck=1; //设置 SCK为高电平,在 SCK的上升沿由 SDI输入的一位数据进入移位寄存器。
indata=indata>>1; //数字逻辑右移,
MAX536输入下一位数据
}
}
第 14章,A/D与 D/A转换技术
14.4 A/D转换工作原理在单片机系统中,单片机所能处理的都是离散的数字信号。但是外部受控制的有关设备所产生的和接收的往往是模拟量。
例如:温度,速度,亮度等。所以必须将外部设备产生的模拟信号转换成为数字信号才能使这些信号为单片机所识别,并在单片机中进行处理。而将模拟信号转换成为数字信号的过程我们称之为模拟 /数字
( A/D)转换,所使用的器件我们就称之为模拟 /数字( A/D)转换器。
第 14章,A/D与 D/A转换技术
14.4 A/D转换工作原理
A/D转换是一种将连续的模拟信号转换成适合在单片机中处理并运行的二进制数,也就是把连续信号变成离散的信号。 A/D转换的工作原理如图所示第 14章,A/D与 D/A转换技术
14.4.1 如何选择 A/D转换器
A/D转换器的种类很多,性能也有很大的不同,在 A/D转换器的选择上不仅要考虑它的性能还要考虑具体的应用要求。下面我们来看看选择 A/D转换器的一些参考性能指标。
第 14章,A/D与 D/A转换技术
14.4.1 如何选择 A/D转换器
1.A/D转换器的位数
A/D转换器位数的确定,主要的考虑因素是转换的误差,位数越多所产生的误差和失真就越小第 14章,A/D与 D/A转换技术为了减低硬件的消耗减少成本在一般的系统中我们都选用中分辨率的 A/D转换器,而其中以 10位和 11位是最合适的。
第 14章,A/D与 D/A转换技术
14.4.1 如何选择 A/D转换器
2,A/D转换器的转换频率
A/D转换器从启动到结束总需要一定的时间,
而每秒钟所完成的转换次数就是 A/D转换器的转换频率。在确定 A/D转换器的转换频率的时候还要考虑到系统的采样频率。例如,A/D转换器的转换频率为 10KHz,而模拟信号一个周期的信号需要 10个采样点,根据采样定理这个 A/D转换器所能处理的最高频率的模拟信号仅为 1KHz当然通过提高 A/D转换器的转换频率可以提高处理的频率,但是由于单片机的处理速度有限所以在单片机系统中始终有一个瓶颈无法突破。
第 14章,A/D与 D/A转换技术
14.4.1 如何选择 A/D转换器
3,满量程误差这个指标指的是满量程输出的时候对应的输入信号和理想输入信号的差别
4,线性度本指标指的是 A/D转换器的转移函数与理想直线的最大偏移。
5,采样 /保持器对于高频信号来说是必须加采样 /保持器的。如果是低频信号并采用高速的 A/D转换器的时候是可以不用采样 /保持器的。而直流信号和变化很慢的信号也可以不使用采样 /保持器。
第 14章,A/D与 D/A转换技术
14.4.1 如何选择 A/D转换器
6,A/D转换器的量程部分 A/D转换器提供了不同量程的引脚,必须使用正确才能保证信号尽量不失真。这样的 A/D转换器不同的量程的输入电压可以从不同的引脚输入。
7,偏置极性部分 A/D转换器提供了双极性偏置控制。当该引脚接地时,
信号为单极性输入方式;当该引脚接基准电压时,信号为双极性输入方式。
第 14章,A/D与 D/A转换技术
11.7 LED动态显示及实验
2、分析:
MAX7221在使用之前必须进行初始化,即设置 MAX7221的显示模式、译码方式、亮度控制、扫描范围(扫描 LED个数)。当采用 Code B译码方式时,我们只要向数码管 0( digit0)~数码管 7( digit7)送出
0x0~0x7即可。
第 14章,A/D与 D/A转换技术
14.4.2 8位 A/D转换芯片 ADC0809
ADC0809是 8位逐次逼近型 A/D转换器,
带有 8个模拟量输入通道,芯片内带通道地址译码锁存器,输出带三态数据锁存器,
启动信号为脉冲启动方式,每一通道的转换大概需要 100微秒。
第 14章,A/D与 D/A转换技术
14.4.2 8位 A/D转换芯片 ADC0809
ADC0809由三个部分组成,第一个部分是输入部分,包括 8位模拟开关,3条地址线的通道地址锁存器和译码器,第四条为
ALE,这三个地址引脚通过编码可以用来实现 8路模拟信号输入通道的选择;第二部分是转换部分,里面是一个逐次逼近型的 A/D
转换器;第三个部分是输出部分,该部分是一个三态输出数据锁存器,有 8位数据输出最上为 LSB最下为 MSB。
第 14章,A/D与 D/A转换技术
8位 A/D转换芯片 ADC0809内部结构图第 14章,A/D与 D/A转换技术
ADC0809的外部引脚图第 14章,A/D与 D/A转换技术
ADC0809的引脚功能
IN0~IN8,8个模拟通道输入端。
START:启动转换信号
EOC:转换结束信号
OE:输出允许信号。信号由 CPU读信号和片选信号组合产生。
CLOCK:外部时钟脉冲输入端,典型值为 640KHz
ALE:地址锁存允许信号
A,B,C:通道地址线。 CBA的 8种组合状态 000~111对应了 8个通道的选择
VREF( +),VREF( — ):参考电压输入端
VCC,+5V电源
GND:地
D0~D7,D7为最高位 MSB,D0为最低位 LSB。 D7~D0组成 8位数据输出。
第 14章,A/D与 D/A转换技术
ADC0809的地址编码地址码 选通的模拟通道
C B A
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
IN0
IN1
IN2
IN3
IN4
IN5
IN6
IN7
第 14章,A/D与 D/A转换技术
ADC0809的应用
C,B,A输入的地址在 ALE有效的时候被锁存。启动信号 START上升沿到来时开始启动转换,EOC信号是在 START下降沿到的 10微秒后才变成低电平,表示转换已经结束。当单片机接收到转换结束的信号后,发送一个读的信号给 OE,然后开始从 ADC0809输入信号。
第 14章,A/D与 D/A转换技术
14.3.2 ADC0809与单片机的接口第 14章,A/D与 D/A转换技术
14.3.2 ADC0809与单片机的接口本例子数据输出端口 D7~D0接单片机的
P0^7~P0^0。启动信号 START由 P3^0产生,
ALE和 START相连,即按输入的通道地址接通模拟量并启动转换。地址选通信号 C,
B,A分别由 P2^2,P2^1,P2^0产生。输出允许信号由 P3^7产生,即通过读信号使得数据从 P0口直接输入单片机。转换结束信号 EOC与 p3^2即外部中断 0相连。
第 14章,A/D与 D/A转换技术主程序
#include<absacc.h>
#include<reg51.h>
#define uchar unsigned char
sfr p0=0x80; //定义 P0的地址
sfr p2=0xA0; //定义 P2的地址
sfr p3=0xB0; //定义 P3的地址
sbit ad_ch=p3^2; //定义查询引脚,当 0809转换结束的时候 EOC为低电平
sbit read=p3^7; //定义读信号
sbit star=p3^0 //定义启动转换信号
void main(void)
{ atatic uchar idata a[10];
a0809(a); //启动转换并采样 AD0809通道的值
}
void a0809 (uchar idata *x) //转换函数
{uchar i; uchar xdata *a_adr;
p2=0xf8; //设置 AD0809通道 0的地址
a_adr=&p2; //把通道地址值赋给 a_adr
for(i=0;i<8;i++) //处理 8个通道的数据
{ star=1; //启动转换
*a_adr=0;
i=i; i=i; i=i; //延时等待 EOC变为低电平
while(ad_ch= =0); //查询是否转换已经结束,若转换结束则读取数据
read=1; //读数据信号有效,使 OE为高电平开始读取数据
x[i]=*a_adr; //存储转换的结果
a_adr++; //进入下一通道的转换
}
}
第 14章,A/D与 D/A转换技术
14.5 12位 A/D转换芯片 ADS7804
与 8位和 16位的 A/D转换器相比,12
位 A/D转换器以其较高的性能价格比而在各类系统中中得到广泛的应用 。 下面就以 ADS7804为例子详细介绍 12位 A/D
转换器的应用 。 ADS7804为 12位的 A/D
转换器,它不仅分辨率高,转换速度快,
而且接口方便,电路简单,应用灵活,
因而具有广泛的应用前景 。
第 14章,A/D与 D/A转换技术
14.5.1 ADS7804的内部结构第 14章,A/D与 D/A转换技术
14.5.1 ADS7804的内部结构
ADS7804芯片采用 28脚 0.3英寸 PDIP( 塑料双列直插式 ) 封装,两列管脚间距为 0.3英寸,比一般
DIP28封装窄一倍,所以俗称瘦型 DIP; ADS7804采用单 5V电源供电;芯片内部含有采样保持,电压基准和时钟等电路,可极大简化用户的电路设计和硬件开锁,并可提高系统的稳定性 。 ADS7804采用 CMOS工艺制造,转 换 速 度 快,功 耗 低 ( 最 大 功 耗 为
100mW) 。 另外 ADS7804采用逐次逼近式工作原理,
单通道输入,模拟输入电压的范围为 ± 10V,采样速率为 100kHz。
第 14章,A/D与 D/A转换技术
ADS7804的外部引脚图第 14章,A/D与 D/A转换技术
ADS7804的引脚功能
VDIG 数字电源,和模拟电源 VANA通常一起接到 5V电源上
VANA 模拟电源,和数字电源 VDIG通常一起接到 5V电源上
DGND 数字地,通常与模拟地共地
AGND1,AGND2 模拟地,通常与数字地共地
REF 为参考电压端,通常对地接 2.2μF电容,芯片内部可产生 2.5V基准电压。
CAP 为参考电压所需电容,对地接 2.2μF电容
VIN 模拟信号输入端
D11~ D0 为数字量并行输出口
DZ( 19~ 22脚)是为了使管脚与 16位 A/D转换器 ADS7805兼容而设的,可悬空片选信号,与结合在下降沿有效,并持续 40ns~ 6μs可启动 A/D转换,第二个下降沿输出数据。
读取模数转换结果的控制信号转换结束信号,高电平表示转换结束,低电平表示转换进行中
BYTE 控制从总线读出的数据是转换结果的高字节还是低字节。它为低电平的时候选择低字节,为高电平的时候选择高字节。
CS
C/R
BUSY
第 14章,A/D与 D/A转换技术
14.5.2 ADS7804如何启动转换和读取转换结果首先将脚电平变低;然后在脚输入一个脉冲并在其下降沿启动 A/D转换,此脉冲的宽度要求在 40ns~ 6μs之间;这时 BUSY脚电平拉低表示正在进行转换;在经过大约 8μs以后,
转换完成,BUSY脚电平相应变高;再把 R/C
脚电平拉高,这样,脚脉冲的下降沿即把转换结果输出到数据总线上 。
第 14章,A/D与 D/A转换技术
ADS7804启动转换和读取转换结果的时序图第 14章,A/D与 D/A转换技术模拟电压和数字输出的关系模拟输入 初码形式的数字输出二进制 十六进制
9.99512V 0111 1111 1111 7FF
4.88mV 0000 0000 0001 001
0V 0000 0000 0000 000
-4.88mV 1111 1111 1111 FFF
-10V 1000 0000 0000 800
第 14章,A/D与 D/A转换技术
ADS7804的输出因为 ADS7804为 12位 A/D转换器所以它的转换结果为 12位,对 8位单片机而言,
就必须分两次读入,而这个功能是由
BYTE引脚来实现的。当 BYTE脚为高电平时,数据总线上输出高字节,当 BYTE
脚为低电平时,输出低字节。
第 14章,A/D与 D/A转换技术
14.5.3 ADS7804与单片机的接口因为 ADS7804的信号脉冲宽度要求为
40ns~ 6μs之间,而对于单片机而言,如采用 12MHz的晶振,单周期指令和双周期指令分别为 1μs和 2μs,而一个对位操作的指令为 1μs所以我们把它和单片的 P2.1端口相连,而,和 BYTE信号,则分别与 P2.0,P2.2,P2.3相连
BUSY C/R
第 14章,A/D与 D/A转换技术
ADS7804与单片机的接口电路第 14章,A/D与 D/A转换技术程序分析本数据采集系统程序如下:
单点采样子程序 SPS():用来返回一个有符号整数形式的转换结果。
定长采样子程序 DLS():根据入口参数
fixedtime(单位为 μs)给定的采样间隔采样 N
点,并采用查询单片机内置定时器的方式来控制采样时序,N点采样结果存储在外部存储器数组 array中。
第 14章,A/D与 D/A转换技术主程序 1
#include<reg51.h>
#include<absacc.h>
#define N==128 //定采样长度,每个周期内采样 128点
sfr p2=0xA0; //定义 P2的地址
sbit CS=p2^1; //定义片选地址
sbit BYTE=p2^3; //定义数据选择地址
sbit RC=P2^2; //定义读取结果地址
sbit BUSY=P2^0; //定义特殊位
int XDATA array(N); //在外部存储器内定义长度为 N的有符号整数数组
void SPS( ) //单点采样子程序
{ uint dl,dh;int dd;
RC=0; //R/C低电平,进入转换模式
cs=0; //cs为低电平一个指令的时间为 1μs,启动 A/D转换
cs=1; //cs为高电平,依据时序等待转换完成方便在下降沿输出程序
while (BUSY= =1); //等待转换完成
RC=1; //和 CS配合输出数据
cs=0; //cs为低电平,利用它的下降沿输出数据
BYTE=0; //进入读模式,选择低字节
dl=XBYTE[0xffff]; //读转换结果低 8位
BYTE=1; //选择高字节
dh=XBYTE[0xffff]&0x0f;
//读转换结果高 4位,和 0x0f相与把高位清零只保留四位有效数字
dd=dh*256+dl; //得到 12位转换结果,因为第 8位数据的权为 256,所以 dh乘以 256可以得到高四位的正确数值
return(dd); /*返回转换结果 */
}
第 14章,A/D与 D/A转换技术定长采样子程序
void DLS(uint fixedtime==1000μs) //定长采样子程序
{ uchar timeh,timel;
fixedtime=fixedtime-5;//减去 TF1清零和装载计数初值的时间 5μs
th=( 65536-fixedtime)/256; //计算计数初值
tl=(65536-fixedtime)%256; //计算计数初值
TMOD=0x10; //定时器 1,方式 1
TH1=timeh; TL1=timel; //装载计数初值
TR1=1; //启动定时
for(i=0;i<N;i++)
{ while(TF1); //查询等待 TF1复位
TF1=0; //清溢出标志
TH1=timeh;
TL1=timel; //装载计数初值
Array[i]=SPS(); //采样、存储
}
TR1=0; //停止定时
}
第 14章,A/D与 D/A转换技术注意事项:
本程序中 fixedtime和 N的大小根据实际情况来确定,fixedtime为采样的时间间隔,N为采样的点数。这两个参数的确定还要结合 ADS7804和单片机的工作频率,不能超过额定的频率。另外赋给计数寄存器 TH和 TL的值是定时器从开始计数到溢出所用的时间,这个时间再加上清 TF和装载计数初值所需的时间(共 5个机器周期,对于
12MHz晶振即为 5μs)才是所要的采样间隔,这一点在程序设计中必须注意。
第 14章,A/D与 D/A转换技术第 14章结束