第10章 单片机AD及DA转换接口_第1页
第10章 单片机AD及DA转换接口_第2页
第10章 单片机AD及DA转换接口_第3页
第10章 单片机AD及DA转换接口_第4页
第10章 单片机AD及DA转换接口_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

教学基本要求:

(1)、熟悉DAC0832的内部结构及工作方式;(2)、掌握单片机与DAC0832的接口原理;(3)、熟悉ADC0809的内部结构及功能;(4)、掌握单片机与ADC0809的接口原理;教学重点:(1)、单片机与DAC0832的接口原理;(2)、单片机与ADC0809的接口原理;教学难点:(1)、单片机与DAC0832接口的程序设计;(2)、单片机与ADC0809接口的程序设计;第10章单片机A/D及D/A转换器接口10.1单片机测控系统与模拟输入通道10.1.1单片机测控系统概述 测控包含“测”与“控”两个过程。所谓“测”就是实时采集被控对象的物理参量,诸如温度、压力、流量、速度和转速等。这些参量通常都是模拟量,即连续变化的物理量。所谓“控”就是把采集的数据经单片机计算、比较等处理后得出结论,以对被控对象实施校正控制。但经单片机处理后得到的是数字量结果。

测控系统离不开模拟量与数字量的相互转换,因此,模/数(A/D)与数/模(D/A)转换也就成了测控系统的重要内容。

10.1.2模拟输入通道模拟输入通道的工作从采集信号开始。由于传感器采集到的模拟信号幅值通常很小,而且连续变化的信号容易受到干扰,因此,要对传感器采集到的原始信号进行放大、采样、保持、滤波等处理后,才能送给A/D转换器。这一系列的处理过程构成了模拟输入通道,如下图。1.传感器传感器的主要功能是采集信号,也兼有信号转换功能,即把采集到的非电信号转换为电信号(电压或电流),以便于后续处理。传感器的种类繁多,常用的传感器有如下几种:①温度传感器:用于将温度转换为电信号。②光电传感器:利用光电效应将光信号转换为电信号。③湿度传感器:常用的湿度传感器有毛发湿度计、干湿球湿度计、金属氧化物湿敏元件等。④流量传感器:用于测量液体和气体的流量。常用的流量传感器有速度式流量计和容积式流量计等。⑤压力传感器:用于大气压力(气压)测量和容器壁压力测量等。⑥机械量传感器:常用的机械量有拉力、压力、位移、速度、加速度、扭矩及荷重等。常见的机械量传感器有电阻应变片、力传感器、荷重传感器、位移传感器和转速传感器等。⑦成分分析传感器:用于对混合气体或混合物的成分进行自动分析。⑧pH值传感器:用于测量水溶液的酸碱度。2.放大器传感器得到的电压或电流信号往往幅度较小,难以直接进行A/D转换,需要使用放大器对模拟信号进行放大处理。放大器的种类很多,但在模拟输入通道中使用的是一种具有高放大倍数并带深度负反馈的直接耦合放大器,由于它可以对输入信号进行多种数学运算(例如比例、加、减、积分和微分等),所以称为运算放大器。运算放大器具有输入阻抗高,增益大,可靠性高,价格低和使用方便等特点。现在已有各种专用或通用的运算放大器可供选择。3.采样/保持电路采样是为了跟踪输入信号的变化,其实质是将一个连续变化的模拟信号转换为时间上离散的采样信号,采样频率要远高于模拟信号中的最高频率成分(一般为2.5倍)。保持则是为了把采样信号保持一段时间,因为其后的A/D转换需要有一个时间过程。在保持期间要维持信号的稳定,尽可能保持信号不变。在模拟输入通道中,采样电路和保持电路是合在一起的,称为采样/保持电路。如下图所示。4.滤波器滤波可分为模拟滤波和数字滤波两种。模拟滤波由电子元器件搭建的滤波电路完成,模拟滤波又可分为无源和有源两种。无源滤波是使用无源器件(电感、电容和电阻)构成的滤波电路。有源滤波器则是用放大器和电容、电阻构成的滤波电路。数字滤波,就是通过程序对采样信号进行平滑加工,以提高其有用信号,消除或抑制干扰信号。有多种数字滤波程序,例如,程序判断滤波程序、中值滤波程序、算术平均滤波程序、加权平均滤波程序、一阶滞后滤波程序以及复合滤波程序等。与模拟滤波相比,数字滤波具有众多优点,所以在现代测控系统中广泛使用数字滤波。数字滤波不但不需要硬件设备,而且使用也很方便,只需在程序进入数据处理或控制算法前,附加一段滤波程序即可。A/D转换器:实现模拟量→数字量的转换。1.按原理划分的芯片类型积分型A/D转换器。也称双斜率或多斜率A/D转换器。应用最为广泛,具有精度高、抗干扰能力强等优点。逐次逼近型A/D转换器。原理简单,便于实现,不存在时间延迟问题。闪烁型A/D转换器。最大特点是速度快,但功耗大且电路复杂,所以芯片尺寸也比较大。∑△型A/D转换器。又称为过采样A/D转换器。虽然出现得较晚,但却具有分辨率高,价格便宜以及抗干扰能力强等优点。10.2A/D转换器2.输入电压信号形式单极性电压信号,各种A/D转换芯片都具有这种输入形式。一般可允许电压变化范围是0~+5V、0~+10V和0~+20V等。双极形式的电压信号,可正可负,虽然还是通过一条引线输入,但芯片上需要有一对极性相反的工作电源与之配合。差分信号是不共地的电压信号,两个极性的差分信号需要两条信号线输入,在芯片上表示为VIN+和VIN-。差分电压信号可以从非0V开始,其变化范围可以是±2V、±4V、±5V和±10V等。3.输出二进制代码形式二进制码A/D转换芯片输出的是二进制代码,其位数可分为8位、10位、12位、14位、16位、20位和24位等。BCD码A/D转换芯片输出的是多位BCD码,这类转换芯片的典型应用是在数字电压表中,输出的BCD码可直接送LED或LCD进行显示。常见的BCD码A/D转换芯片的位数有3位半、4位半和5位半等。4.A/D转换器分辨率A/D转换器,被转换量是电压,所以分辨率是对输入电压信号变化的分辨能力,A/D转换器位数越多,分辨率的值越小,分辨能力就越强,亦即转换器对输入量变化的敏感程度也就越高。所以选择A/D转换器时,要把位数放在重要的位置。5.A/D转换器的控制信号A/D转换芯片中有一些控制信号,包括时钟信号、转换启动信号和转换结束信号等,接口连接时要对这些信号进行处理。(1)时钟信号时钟信号A/D转换需要时钟信号的配合,有些A/D转换芯片(例如AD571等)内部有时钟电路。另外一些A/D转换芯片(例如ADC0808/0809等)内部没有时钟电路,所需时钟信号由外界提供。(2)转换启动信号转换启动信号转换启动信号应由CPU提供,不同型号的A/D转换芯片对转换启动信号的要求不尽相同。有的要求脉冲信号启动,例如ADC0804、ADC0809等芯片,而有的芯片则要求电平信号启动,例如AD570、AD571和AD574等。6.转换结束与数据读取A/D转换后得到的数字量数据应及时传送给单片机进行处理,在数据转换完成后,进行读取。(1)定时等待方式对于一个A/D转换芯片来说,转换时间作为一项技术指标是已知且固定的,可用延时的方法等待转换结束,此即定时等待方式。(2)查询方式A/D转换芯片都提供表明转换完成的状态信号,可以用查询方式,通过测试状态就可以知道转换是否完成。(3)中断方式表明转换是否完成的状态信号(ADC0809为EOC)都可作为中断请求信号使用,从而可采用中断方式进行转换数据的传送。10.2.18位A/D转换器芯片与80C51接口

ADC0809采用逐次逼近式A/D转换原理,可实现8路模拟信号的分时采集,片内有8路模拟选通开关,以及相应的通道地址锁存与译码电路,转换时间为100μs左右。ADC0809的内部逻辑结构如下图所示。图中多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用一个A/D转换芯片进行转换。地址锁存与译码电路完成对A、B、C3个地址位进行锁存和译码,其译码输出用于通道选择。8位A/D转换器是逐次逼近式。输出锁存器用于存放和输出转换得到的数字量。2、信号引脚ADC0809转换器芯片为28引脚,双列直插式(DIP)封装。(1)、IN7~IN0:模拟量输入通道;ADC0809对输入模拟量的要求主要有:信号单极性,电压范围0~5V,若信号过小还需进行放大。另外,在A/D转换过程中,模拟量输入的值不应变化太快,因此,对变化速度快的模拟量,在输入前应增加采样保持电路。(2)、A、B、C:地址线;A为低位地址,C为高位地址,用于对模拟通道进行选择;CBA选择的通道000001010011100101110111IN0IN1IN2IN3IN4IN5IN6IN7(3)、ALE:地址锁存允许信号;在对应ALE上跳沿,A、B、C地址状态送入地址锁存器中;(4)、START:转换启动信号;START上跳沿时,所有内部寄存器清0;START下跳沿时,开始进行A/D转换;在A/D转换期间,START应保持低电平;(5)、D7~D0:数据输出线;(6)、OE:输出允许信号;用于控制三态输出锁存器向单片机输出转换得到的数据。OE=0,输出数据线呈高电阻;OE=1,输出转换得到的数据;(7)、CLK:时钟信号,通常使用频率为500kHz的时钟信号;(8)、EOC:转换结束状态信号。EOC=0,正在进行转换;EOC=1,转换结束。该状态信号既可作为查询的状态标志,又可以作为中断请求信号使用;(9)、VCC:+5V电源;(10)、Vref:参考电源。参考电压用来与输入的模拟信号进行比较,作为逐次逼近的基准。其典型值为+5V(Vref(+)=+5V,Vref(-)=0V)。10.2.2、MCS-51单片机与ADC0809接口8路模拟通道选择信号A、B、C分别接最低3位地址A0、A1、A2(即P0.0、P0.1、P0.2),而地址锁存允许信号ALE由P2.0控制,则8路模拟通道的地址为FEF8H~FEFFH。4、应用举例设计一个8路模拟量输入的巡回检测系统,采样数据依次存放在片外RAM0A0H~0A7H单元中,ADC0809的8路通道IN0~IN7的地址分别为FEF8H~FEFFH,其数据采样的初始化程序和中断服务程序如下:设计思路:执行一条“MOVX@DPTR,A”指令,产生WR信号,使ALE和START有效,就可以启动一次A/D转换。但一次启动只能进行一个通道的转换,8个通道的A/D转换需按通道顺序逐个进行。为此,在程序中应当有改变通道号的指令,并且每改变一次就执行一次启动A/D转换指令。初始化程序:

ORG0000HLJMPMAINORG0013H LJMPADC ORG0100HMAIN:MOVR0,#0A0H;数据存储区首址 MOVR2,#08H;通道计数 SETBIT1;边沿触发方式,下降沿 SETBEA;中断允许 SETBEX1;外部中断1允许 MOVDPTR,#0FEF8H;通道首地址LOOP:MOVX@DPTR,A;启动A/D转换LCALLDELY1MSDJNZR2,LOOP LJMPMAIN中断服务程序: ORG0500HADC:MOVXA,@DPTR;读A/D转换结果 MOVX@R0,A;存数INC DPTR ;更新通道INC R0;更新暂存单元RETI ;返回#include<absacc.h>#include<reg51.h>#defineucharunsignedchar#defineIN0XBYTE[0x7ff8]/*设置AD0809的通道0地址*/uchark;ucharxdata*ad_adr;ucharidataad[10]; voidmain(){ uchari;while(1) { IT1=1; EA=1; EX1=1; ad_adr=&IN0; k=0; for(i=0;i<8;i++)/*处理8通道*/ { *ad_adr=0;/*启动转换*/ daly1ms(); } }}voidINTT1()interrupt2{ ad[k]=*ad_adr; ad_adr++;/*下一通道*/ k++;}ORG 0000HLJMP MAIN ORG 0100HMAIN:MOV R0, #0A0H; MOV R2, #08H;MOV DPTR, #0FEF8H;LOOP:MOVX @DPTR, A;启动转换LOOPP:JB P3.3, LOOPP查询转换是否结束MOVX A, @DPTR;读A/D转换结果MOVX @R0, A;存数INC DPTR ;更新通道INC R0 ;更新暂存单元DJNZ R2, LOOPLJMP MAINEND用查询法实现:采用查询方式,采集结果放在数组ad中:#include<absacc.h>#include<reg51.h>#defineucharunsignedchar#defineIN0XBYTE[0x7ff8]/*设置AD0809的通道0地址*/sbitad_busy=P3^3;/*即EOC状态*/voidad0809(ucharidata*x)/*采样结果放指针中的A/D采集函数*/{uchari;ucharxdata*ad_adr;ad_adr=&IN0;for(i=0;i<8;i++)/*处理8通道*/{*ad_adr=0;/*启动转换*/

i=i;/*延时等待EOC变低*/i=i;while(ad_busy==1);/*查询等待转换结束*/x[i]=*ad_adr;/*存转换结果*/ad_adr++;/*下一通道*/}}voidmain(void){staticucharidataad[10]; while(1) { ad0809(ad);/*采样AD0809通道的值*/ }}利用ADC0809转换器,轮流采集模拟量输入电压信号,并将模拟量转换成数字量,通过数码管显示器显示(P1接段控,P2接位控)(1)延时法MAIN: MOV SP, #2FHMOV DPTR, #0FEF8H MOVX @DPTR, A LCALL DELAY MOVX A, @DPTR MOV B, #51 DIV AB MOV R0, A MOV A, B MOV B, #5 DIV AB MOV R1, A MOV A, B MOV R2, A MOV DPTR, #TAB MOV A, R0 MOVC A, @A+DPTR MOV P2, #04H MOV P1, A LCALL DELAY MOV A, R1 MOVC A, @A+DPTR MOV P2, #08H MOV P1, A LCALL DELAY MOV A, R2 MOVC A, @A+DPTR MOV P2, #10H MOV P1, A LCALL DELAY LJMP MAINDELAY:。。。。。 RETTAB: DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90HEND(2)中断法 ORG 0000H LJMP MAIN ORG 0013H LJMP INTT1MAIN:MOV SP, #3FH MOV DPTR, #0FEF8H SETB EA SETB EX1 MOVX @DPTR, A HERE: LJMP HEREINTT1:MOVX A, @DPTR MOV B, #51 DIV AB MOV R0, A MOV A, B MOV B, #5 DIV AB MOV R1, A MOV A, B MOV R2, A MOV DPTR, #TAB MOV A, R0 MOVC A, @A+DPTR MOV P2, #04H MOV P1, A LCALL DELAY MOV A, R1 MOVC A, @A+DPTR MOV P2, #08H MOV P1, A LCALL DELAY MOV A, R2 MOVC A, @A+DPTR MOV P2, #10H MOV P1, A LCALL DELAY MOV DPTR, #0FEF8H MOVX @DPTR, A RETIDELAY:。。。。。。 RETTAB: DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90HEND(3)查询法MAIN:MOV SP, #2FH MOV DPTR, #0FEF8H CLR EALOOP0:MOVX @DPTR, A LOOP:JB P3.3, LOOP MOVX A, @DPTR MOV B, #51 DIV AB MOV R0, A MOV A, B MOV B, #5 DIV AB MOV R1, A MOV A, B MOV R2, A 。。。。#include<reg52.h>#include<absacc.h>#defineucharunsignedchar#defineuintunsignedint#defineADC0809XBYTE[0xFEF8]sbitEOC=P3^3;charcodedis_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};charfind_code[]={10,10,10,10};voidDelayX1ms(uintcount){uintj;while(count--!=0){for(j=0;j<80;j++);}}voidmain(){uintdata1; ADC0809=0; while(1) { do{display();}while(EOC); ADC0809=0; data1=ADC0809;find_code[0]=data1/51; //个位 find_code[1]=data1%51*10/51;//小数点后第一位 find_code[2]=data1%51*10%51*10/51;//小数点后两位 display();

} } }voiddisplay(){chark;P2=0x10; k=find_code[2]; P1=dis_code[k]; DelayX1ms(1); P2=0x08; k=find_code[1]; P1=dis_code[k]; DelayX1ms(1); P2=0x04; k=find_code[0]; P1=dis_code[k]; DelayX1ms(1);}10.3D/A转换器接口10.3.1D/A转换芯片1、概述D/A转换器输入的是数字量,经转换后输出的是模拟量。D/A转换器按输出形式可分为:(1)、电压输出形式输入:二进制数或BCD码数输出:电压(2)、电流输出形式输入:二进制数或BCD码数输出:电流D/A转换器按其内部是否含有锁存器可分为:(1)、内部无数据锁存器的D/A转换器(2)、内部有数据锁存器的D/A转换器2、技术指标

D/A转换器的技术性能指标:绝对精度、相对精度、线性度、输出电压范围、温度系数、输入数字代码种类(二进制或BCD码)等。(1)、分辩率

分辨率是D/A转换器对输入量变化敏感程度的描述,与输入数字量的位数有关。如果数字量的位数为n,则D/A转换器的分辨率为2-n。这就意味着数/模转换器能对满刻度的2-n输入量作出反应。使用时,应根据分辨率的需要来选定转换器的位数。DAC常可分为8位、10位、12位三种。(2)、建立时间建立时间是描述D/A转换速度快慢的一个参数,指从输入数字量变化到输出达到终值误差±(1/2)LSB(最低有效位)时所需的时间。通常以建立时间来表示转换速度。3、典型D/A转换器芯片DAC0832DAC0832是一个8位D/A转换器。单电源供电,从+5V~+15V均可正常工作。基准电压的范围为±10V;电流建立时间为1μs;CMOS工艺,低功耗20mW。

DAC0832转换器芯片为20引脚,双列直插式(DIP)封装。DI7~DI0:转换数据输入。CS:片选信号(输入),低电平有效。ILE:数据锁存允许信号(输入),高电平有效。WR1:第1写信号(输入),低电平有效。XFER:数据传送控制信号(输入),低电平有效。WR2:第2写信号(输入),低电平有效。IOUT1:电流输出1。当数据为全1时,输出电流最大;为全0时,输出电流最小。IOUT2:电流输出2。RFB:反馈电阻端,即运算放大器的反馈电阻端,电阻(15kΩ)已固化在芯片中。DAC0832是电流输出型D/A转换器,为得到电压的转换输出,使用时需在两个电流输出端接运算放大器,RFB即为运算放大器的反馈电阻。VREF:基准电压,是外加高精度电压源,与芯片内的电阻网络相连接,该电压可正可负,范围为-10~+10V。基准电压决定D/A转换器的输出电压范围,例如,若VREF接+10V,则输出电压范围是0~-10V。DGND:数字地。AGND:模拟地

DAC0832的内部结构框图如下图所示。输入通道由输入寄存器和DAC寄存器构成两级数据输入锁存,由3个“与”门电路组成控制逻辑,产生LE1和LE2信号,分别对两个输入寄存器进行控制。

10.3.2DAC0832单缓冲连接方式所谓单缓冲连接方式,就是使DAC0832的两个输入寄存器中有一个(多为DAC寄存器)处于直通状态,另一个处于受控的锁存状态。在实际应用中,如果只有一路模拟量输出,或虽是多路模拟量输出但并不要求输出同步的情况下,就应当采用单缓冲方式。其连接如下图所示。【例10.2】锯齿波的生成。在一些控制应用中,需要有一个线性增长的电压(锯齿波)来控制检测过程,移动记录笔或移动电子束等。对此可通过在DAC0832的输出端接运算放大器,由运算放大器产生锯齿波来实现,其电路连接如下图所示。

ORG 0000H LJMP DASAW ORG 0200HDASAW:MOVDPTR,#5000H ;输入寄存器地址 MOVR0,#00H ;转换初值WW: MOVA, R0 MOVX@DPTR,A ;D/A转换 INC R0 ;转换值增量 NOP ;延时 NOP NOP AJMPWWEND程序清单(假定输入寄存器地址为5000H)#include<absacc.h>#include<reg51.h>#defineDA0832XBYTE[0x7fff]#defineucharunsignedchar#defineuintunsignedintvoidmain(void){ uchari; while(1) { for(i=0;i<=255;i=i++) /*形成锯齿波输出值,最大值为255*/ { DA0832=i;/*D/A转换输出*/ } }}设计一个简单的单片机应用系统,利用DAC0832输出连续周期性信号

。按下K0,产生方波;按下K1,产生锯齿波;按下K2,产生三角波;按下K3,产生正弦波。MAIN:MOVDPTR,#7FFFH LCALLKEYMOV A,20H JB ACC.0,KEYAA JB ACC.1,KEYBB JB ACC.2,KEYCC JB ACC.3,KEYDD LJMPMAINKEYAA:MOVR0, #00HWW1:MOVA, #00H MOVX@DPTR, AINCR0 CJNER0, #8FH,WW1WW2:MOVA, #0FFH MOVX@DPTR, A DJNZR0, WW2 LCALLKEYMOV A, 20H JB ACC.1, KEYBB JB ACC.2, KEYCC JB ACC.3, KEYDD LJMPKEYAAKEYBB:MOVR0, #0FFHWW3:MOVA, R0 MOVX @DPTR, A DECR0 CJNER0, #00H,WW3 LCALLKEYMOV A, 20H JB ACC.0, KEYAA JB ACC.2, KEYCC JB ACC.3, KEYDD LJMPKEYBBKEYCC:MOVR0, #00HWW4:MOVA, R0 MOVX @DPTR, A INCR0 CJNER0, #0FFH,WW4WW5:MOVA, R0 MOVX @DPTR, A DECR0 CJNER0,#00H,WW5 LCALLKEYMOV A,20H JB ACC.0,KEYAA JB ACC.1,KEYBB JB ACC.3,KEYDDLJMPKEYCCKEYDD:MOVR7,#00H WW6:MOVDPTR,#DK MOVA,R7 MOVCA, @A+DPTRMOVDPTR, #7FFFH MOVX@DPTR, A INCR7 CJNER7, #0FFH,WW6 LCALLKEYMOV A,20H JB ACC.0,KEYAA JB ACC.1,KEYBB JB ACC.2,KEYCC LJMPKEYDD

KEY: 。。。。。。。DK: DB07FH,082H,085H,088H,08BH,08FH,092H,095H,098H,。。。。。END#include<reg52.h>#include<absacc.h>#defineucharunsignedchar#defineuintunsignedint#defineDA0832XBYTE[0x7fff]ucharkey,jskey; uinti;uintcodest[]={0x7F,0x82,0x85,……..ucharkeyscan(){uchartmp; P1=0xff;if((P1&0x0f)!=0x0f)//若有键按下{delay(1000);//延时去抖if((P1&0x0f)!=0x0f)//有键按下{ tmp=(P1&0x0f); do{}while((P1&0x0f)!=0x0f);//判键释放 tmp=~tmp; return(tmp); //还回键值 }} return(0);//无键按下,还回0}

voidmain(void){uchari,v; uchartemp; v=keyscan(); if(v==1||v==2||v==4||v==8) { while(1) { switch(v) { case1: { while(v==1||v==0) { for(i=0;i<=255;i++) { if(i<128) DA0832=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论