Upload
stacia
View
110
Download
0
Embed Size (px)
DESCRIPTION
第八章 MCS-51 与 D/A 、 A/D 的接口. 8.1 MCS-51 单片机与 ADC 的接口. 8.1.1 A/D 转换器概述. 一. A/D 转换器的类型及原理. A/D 转换器( ADC )的作用是把模拟量转换成数字量,以便于计算机进行处理。 - PowerPoint PPT Presentation
Citation preview
第八章 MCS-51 与 D/A 、 A/D 的接口
第八章 MCS-51 与 D/A 、 A/D 的接口
8.1 MCS-51 单片机与 ADC 的接口
8.1.1 A/D 转换器概述
一. A/D 转换器的类型及原理 A/D 转换器( ADC )的作用是把模拟量转换成数字量,以
便于计算机进行处理。 随着超大规模集成电路技术的飞速发展,现在有很多类型的
A/D 转换器芯片,不同的芯片,它们的内部结构不一样,转换原理也不同,各种 A/D 转换芯片根据转换原理可分为计数型 A/D 转换器、逐次比较式、双重积分型和并行式 A/D 转换器等;按转换方法可分为直接 A/D 转换器和间接 A/D 转换器;按其分辨率可分为 4~16 位的 A/D 转换器芯片。
1 .计数型 A/D 转换器 计数型 A/D 转换器由 D/A 转换器、计数器和比较器组成,工作时,计数器由零开始计数,每计一次数后,计数值送往 D/A 转换器进行转换,并将生成的模拟信号与输入的模拟信号在比较器内进行比较,
第八章 MCS-51 与 D/A 、 A/D 的接口
若前者小于后者,则计数值加 1 ,重复 D/A 转换及比较过程,依此类推,直到当 D/A 转换后的模拟信号与输入的模拟信号相同,则停止计数,这时,计数器中的当前值就为输入模拟量对应的数字量。这种 A/D 转换器结构简单、原理清楚,但它的转换速度与精度之间存在矛盾,当提高精度时,转换的速度就慢,当提高速度时,转换的精度就低,所以在实际中很少使用。
2 .逐次逼近型 A/D 转换器 逐次逼近型 A/D 转换器是由一个比较器、 D/A 转换器、寄存器及控制电路组成部分。与计数型相同,也要进行比较以得到转换的数字量,但逐次逼近型是用一个寄存器从高位到低位依次开始逐位试探比较。转换过程如下:开始时寄存器各位清 0 ,转换时,先将最高位置 1 ,送 D/A 转换器转换,转换结果与输入的模拟量比较,如果转换的模拟量比输入的模拟量小,则 1 保留,如果转换的模拟量比输入模拟量大,则 1 不保留,然后从第二位依次重复上述过程直至最低位,最后寄存器中的内容就是输入模拟量对应的数字量。一个 n 位的逐次逼近型 A/D 转换器转换只须要比较 n 次,转换时间只取决于位数和时钟周期。逐次逼近型 A/D 转换器转换速度快,在实际中广泛使用。
第八章 MCS-51 与 D/A 、 A/D 的接口
双重积分型 A/D 转换器将输入电压先变换成与其平均值成正比的时间间隔,然后再把此时间间隔转换成数字量,它属于间接型转换器。它的转换过程分为采样和比较两个过程。采样即用积分器对输入模拟电压进行固定时间的积分,输入模拟电压值越大,采样值越大,比较就是用基准电压对积分器进行反向积分,直至积分器的值为 0 ,由于基准电压值固定,所以采样值越大,反向积分时积分时间越长,积分时间与输入电压值成正比,最后把积分时间转换成数字量,则该数字量就为输入模拟量对应的数字量。由于在转换过程中进行了两次积分,因此称为双重积分型。双重积分型 A/D 转换器转换精度高,稳定性好,测量的是输入电压在一段时间的平均值,而不是输入电压的瞬间值,因此它的抗干扰能力强,但是转换速度慢,双重积分型 A/D 转换器在工业上应用也比较广泛。
3 .双重积分型 A/D 转换器
二. A/D 转换器的主要性能指标1 .分辨率
2 .转换时间3 .量程
4 .转换精度
第八章 MCS-51 与 D/A 、 A/D 的接口
8.1.2 ADC0809 与 MCS-51 的接口
一. ADC0809 芯片ADC0809 是 CMOS 单片型逐次逼近型 A/D 转换器,具有 8 路模拟量输入通道,有转换起停控制,模拟输入电压范畴为 0~+5V ,转换时间为 100s ,它的内部结构如图所示。
IN0IN1IN2IN3IN4IN5IN6IN7
ADDAADDBADDCALE
通道选择开关
地址锁存和译码
定时和控 制
逐次逼近寄存器 SAR 8 位
三 态锁 存缓冲
器DAC
OE
EOC
CLOCK START
VCC GNDVREF+
VREF-
ADC0809
D0D1D2D3D4D5D6D7
第八章 MCS-51 与 D/A 、 A/D 的接口
二. ADC0809 的引脚
ADC0809 芯片有 28 个引脚,采用双列直插式封装,如图。
IN3
IN4
IN5
IN6
IN7
START
EOC
D3
OE
CLOCK
VCC
VREF+
GND
D1
IN2
IN1
IN0
ADDA
ADDB
ADDC
ALE
D7
D6
D5
D4
D0
VREF-
D2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
28
27
26
25
24
23
22
21
20
19
18
17
16
15
2
第八章 MCS-51 与 D/A 、 A/D 的接口
其中:IN0~IN7 : 8 路模拟量输入端。D0~D7 : 8 位数字量输出端。ADDA 、 ADDB 、 ADDC : 3 位地址输入线,用于选择 8 路模
拟通道中的一路,选择情况见表。
ADDC ADDB ADDA 选择通道0 0 0 IN0
0 0 1 IN1
0 1 0 IN2
0 1 1 IN3
1 0 0 IN4
1 0 1 IN5
1 1 0 IN6
1 1 1 IN7
ALE :地址锁存允许信号,输入,高电平有效。START : A/D 转换启动信号,输入,高电平有
效。
第八章 MCS-51 与 D/A 、 A/D 的接口
EOC : A/D 转换结束信号,输出。当启动转换时,该引脚为低电平,当 A/D 转换结束时,该线脚输出高电平。
OE :数据输出允许信号,输入,高电平有效。当转换结束后,如果从该引脚输入高电平,则打开输出三态门,输出锁存器的数据从 D0~D7 送出。
CLK :时钟脉冲输入端。要求时钟频率不高于 640KHZ.REF+ 、 REF- :基准电压输入端。Vcc :电源,接 +5V 电源。GND :地。
三. ADC0809 的工作流程
START/ALE 地址锁存
ADDA/B/C
EOC
OE
D0~D7
启动
转换结束
读取结果
D A T A
第八章 MCS-51 与 D/A 、 A/D 的接口
ADC0809 的工作流程如图所示:
1.输入 3 位地址,并使 ALE=1 ,将地址存入地址锁存器中,经地址译码器译码从 8 路模拟通道中选通一路模拟量送到比较器。
2.送 START 一高脉冲, START 的上升沿使逐次逼近寄存器复位,下降沿启动 A/D 转换,并使 EOC 信号为低电平。
3.当转换结束时,转换的结果送入到输出三态锁存器,并使EOC 信号回到高电平,通知 CPU已转换结束。
4.当 CPU执行一读数据指令,使 OE 为高电平,则从输出端D0~D1读出数据。
四. ADC0809 与 MCS-51 单片机的接口
下图是一个 ADC0809 与 8051 的一个接口电路图。
1 .硬件连接
第八章 MCS-51 与 D/A 、 A/D 的接口
P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7
ALE
WR P2.7RD
INTO
+
+
+5V
GND
D0D1D2D3D4D5D6D7ADDAADDBADDCCLKALESTART
OE
EOC
IN0IN1IN2IN3IN4IN5IN6IN7
VREF+
VREF-
ADC0809
8051
分频器
2 .软件编程设接口电路用于一个 8 路模拟量输入的巡回检测系统,使用中断方式采样数据,把采样转换所得的数字量按序存于片内 RAM 的 30H~37H 单元中。采样完一遍后停止采集。
第八章 MCS-51 与 D/A 、 A/D 的接口汇编语言编程:ORG 0003HLJMP INT0ORG 0100H ;主程序MOV R0 , #30H ;设立数据存储区指针MOV R2 , #08H ;设置 8 路采样计数值SETB IT0 ;设置外部中断 0 为边沿触发方式 SETB EA ; CPU 开放中断SETB EX0 ;允许外部中断 0 中断MOV DPTR , #0000H ;送入口地址并指向 IN0LOOP : MOVX @DPTR , A ;启动 A/D 转换, A 的值无意义HERE : SJMP HERE ;等待中断ORG 0200H ;中断服务程序INT0 : MOVX A , @DPTR ;读取转换后的数字量MOV @R0 , A ;存入片内 RAM 单元INC DPTR ;指向下一模拟通道INC R0 ;指向下一个数据存储单元DJNZ R2 , NEXT ; 8 路未转换完,则继续CLR EA ;已转换完,则关中断CLR EX0 ;禁止外部中断 0 中断RETI ;中断返回NEXT : MOVX @DPTR , A ;再次启动 A/D 转换RETI ;中断返回
第八章 MCS-51 与 D/A 、 A/D 的接口
C语言编程:#include <reg51.h>#include <absacc.h> // 定义绝对地址访问#define uchar unsigned char#define IN0 XBYTE[0x0000] // 定义 IN0 为通道 0 的地址static uchar data x[8]; // 定义 8 个单元的数组,存放结果uchar xdata *ad_adr; // 定义指向通道的指针uchar i=0;void main(void){IT0=1; //初始化EX0=1;EA=1;i=0;ad_adr=&IN0; //指针指向通道 0*ad_adr=i; //启动通道 0 转换for (;;) {;} // 等待中断}
第八章 MCS-51 与 D/A 、 A/D 的接口
void int_adc(void) interrupt 0 // 中断函数{x[i]=*ad_adr; // 接收当前通道转换结果i++;ad_adr++; //指向下一个通道if (i<8){*ad_adr=i; //8 个通道未转换完,启动下一个通道返回}else{EA=0;EX0=0; //8 个通道转换完,关中断返回}}
第八章 MCS-51 与 D/A 、 A/D 的接口
8.2 MCS-51 单片机与 DAC 的接口
8.2.1 D/A 转换器概述
一. D/A 转换器的性能指标
1 .分辨率。 2 .精度3 .线性度 4 .温度灵敏度5 .建立时间
二. D/A 转换的分类
D/A 转换器的品种繁多、性能各异。按输入数字量的位数分: 8 位、10 位、 12 位和 16 位等;按输入的数码分:二进制方式和 BCD 码方式;按传送数字量的方式分:并行方式和串行方式;按输出形式分:电流输出型和电压输出型,电压输出型又有单极性和双极性;按与单片机的接口分:带输入锁存的和不带输入锁存的。下面介绍几种常用的 D/A 转换芯片。
第八章 MCS-51 与 D/A 、 A/D 的接口
三. D/A 转换器与单处机的连接
1 .数据线的连接 D/A 转换器与单片机的数据线的连接主要考虑两个问题:一是位数,当高于 8 位的 D/A 转换器与 8 位数据总线的 MCS-51 单片机接口时, MCS-51 单片机的数据必须分时输出,这时必须考虑数据分时传送的格式和输出电压的“毛刺”问题;二是 D/A 转换器有无输入锁存器的问题,当 D/A 转换器内部没有输入锁存器时,必须在单片机与 D/A 转换器之间增设锁存器或 I/O 接口。
2 .地址线的连接 一般的 D/A 转换器只有片选信号,而没有地址线。这时单片机的地址线采用全译码或部分译码,经译码器输出来控制 D/A 转换器的片选信号,也可由某一位 I/O线来控制 D/A 转换器的片选信号。 3 .控制线的连接 D/A 转换器主要有片选信号、写信号及启动转换信号等,一般由单片机的有关引脚或译码器提供。
第八章 MCS-51 与 D/A 、 A/D 的接口
8.2.2 MCS-51 与 8 位 DAC0832 的接口
一. DAC0832 芯片 DAC0832 是一种电流型 D/A 转换器,数字输入端具有双重缓冲功能,可以双缓冲、单缓冲或直通方式输入,它的内部结构如图。
与
与
与
DI0~DI7
ILE
CS
WR1
WR2
XFER
输入寄存器
DAC寄存器
D/A转换器
LE1 LE2
VREF
Rfb
IOUT1
IOUT2
AGND
VCC
DGND
DAC0832
第八章 MCS-51 与 D/A 、 A/D 的接口
二. DAC0832 的引脚
DAC0832 有 20 引脚,采用双列直插式封装,如图所示。
CSWR1AGNDDI3DI2DI2DI0VREF RFB DGND
VCCILEWR2XFERDI4DI5DI6DI7IOUT1IOUT2
12345678910
20191817161514131211
其中:DI0~ DI7 ( DI0 为最低位): 8 位数字量输入
端。ILE :数据允许控制输入线,高电平有效。
:片选信号。 :写信号线 1 。
WR1
CS
第八章 MCS-51 与 D/A 、 A/D 的接口
:写信号线 2 。 WR2
:数据传送控制信号输入线,低电平有效。 XFER
IOUT1 :模拟电流输出线 1 。它是数字量输入为“ 1” 的模拟电流输出端。
IOUT2 :模拟电流输出线 2 ,它是数字量输入为“ 0” 的模拟电流输出端,采用单极性输出时, IOUT2常常接地。
Rfb :片内反馈电阻引出线,反馈电阻制作在芯片内部,用作外接的运算放大器的反馈电阻。
VREF :基准电压输入线。电压范围为- 10V~+ 10V 。VCC :工作电源输入端,可接+ 5V~+ 15V 电源。AGND :模拟地。DGND :数字地。
三. DAC0832 的工作方式
DAC0832 有三种方式:直通方式、单缓冲方式和双缓冲方式。1 .直通方式:
第八章 MCS-51 与 D/A 、 A/D 的接口
、 、 、 直接接地, ILE接电源, DAC0832工作于直通方式,此时, 8位输入寄存器和 8位 DAC寄存器都直接处于导通状态, 8位数字量到达 DI0~DI7,就立即进行 D/A转换,从输出端得到转换的模拟量。
WR1
WR2
CS XFER 当引脚
2 .单缓冲方式:
WR1
WR2
CS XFER 当连接引脚 、 、 、 ,使得两个锁存器的一个处于直通状
态,另一个处于受控制状态,或者两个被控制同时导通, DAC0832 就工作于单缓冲方式,例如下图就是一种单缓冲方式的连接
对于下图的单缓冲连接,只要数据 DAC0832写入 8 位输入锁存器,就立即开始转换,转换结果通过输出端输出。
第八章 MCS-51 与 D/A 、 A/D 的接口
Vout
-
VCC
ILECS
WR1
DI0~DI7WR2 XFERDGND AGND
VREF
Rfb
IOUT1
IOUT2
+5V
-
-5V
-
-A+
-
P2.7
WR
P0.0~P0.7
8051
3 .双缓冲方式:
当 8 位输入锁存器和 8 位 DAC 寄存器分开控制导通时, DAC0832 工作于双缓冲方式,双缓冲方式时单片机对 DAC0832 的操作分两步,第一步,使 8 位输入锁存器导通,将 8 位数字量写入 8 位输入锁存器中;第二步,使 8 位 DAC 寄存器导通, 8 位数字量从 8 位输入锁存器送入8 位 DAC 寄存器。第二步只使 DAC 寄存器导通,在数据输入端写入的数据无意义。下图就是一种双缓冲方式的连接。
第八章 MCS-51 与 D/A 、 A/D 的接口
P2.7P2.6WR
P0.0~P0.7 8051
Vout
-
VCC
ILECSXFERWR1WR2
DI0~DI7
DGND AGND
VREF
Rfb
IOUT1
IOUT2
+5V
-
-5V
-
-A+
-
四. DAC0832 的应用 D/A 转换器在实际中经常作为波形发生器使用,通过它可以产生各种各样的波形。它的基本原理如下:利用 D/A 转换器输出模拟量与输入数字量成正比这一特点,通过程序控制 CPU 向 D/A 转换器送出随时间呈一定规律变化的数字,则 D/A 转换器输出端就可以输出随时间按一定规律变化的波形。
第八章 MCS-51 与 D/A 、 A/D 的接口
【例 8-1 】 根据图 8.9编程从 DAC0832 输出端分别产生锯齿波、三角波和方波。
根据单缓冲方式图的连接, DAC0832 的口地址为 7FFFH 。汇编语言编程:锯齿波MOV DPTR , #7FFFHCLR ALOOP : MOVX @DPTR ,
AINC ASJMP LOOP三角波:MOV DPTR , #7FFFHCLR ALOOP1 : MOVX @DPTR ,
AINC ACJNE A , #0FFH , LOOP
1LOOP1 : MOVX @DPTR ,
ADEC AJNZ LOOP2
SJMP LOOP1方波:MOV DPTR , #7FFFHLOOP : MOV A , #00HMOVX @DPTR , AACALL DELAYMOV A , #FFHMOVX @DPTR , AACALL DELAYSJMP LOOPDELAY : MOV R7 , #0FFHDJNZ R7 , $RET
第八章 MCS-51 与 D/A 、 A/D 的接口
C语言编程:锯齿波:#include <absacc.h> // 定义绝对地址
访问#define uchar unsigned char#define DAC0832 XBYTE[0x7FFF]void main(){uchar i;while(1){for (i=0;i<0xff;i++){DAC0832=i;}}}
第八章 MCS-51 与 D/A 、 A/D 的接口
三角波:#include <absacc.h> // 定义绝对地址访问#define uchar unsigned char#define DAC0832 XBYTE[0x7FFF]void main(){uchar i;while(1){for (i=0;i<0xff;i++){DAC0832=i;}for (i=0xff;i>0;i--){DAC0832=i;}}}
第八章 MCS-51 与 D/A 、 A/D 的接口方波:#include <absacc.h> // 定义绝对地址访问#define uchar unsigned char#define DAC0832 XBYTE[0x7FFF]void delay(void);void main(){uchar i;while(1){DAC0832=0; // 输出低电平delay(); //延时DAC0832=0xff; // 输出高电平delay(); //延时}}void delay() //延时函数{uchar i;for (i=0;i<0xff;i++) {;}}