《第4章单片机AD与DA转换接口技术.ppt》由会员分享,可在线阅读,更多相关《第4章单片机AD与DA转换接口技术.ppt(65页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第4章 单片机的A/D与D/A转换接口技术 4.1 A/D转换电子秤的数据采集项目设计转换电子秤的数据采集项目设计项目A/D 工作原理A/D(Analog to Digital)转换:从模拟信号转换:从模拟信号到数字信号的转换。到数字信号的转换。电压电压(3V)10010010p 逐次逼近式逐次逼近式A/D转换器转换器:一种速度较快、精度较高的转换器,一种速度较快、精度较高的转换器,其转换时间大约在几微秒到几百微秒之其转换时间大约在几微秒到几百微秒之间。间。基本原理是从高位到低位逐位试探比较,基本原理是从高位到低位逐位试探比较,好像用天平称物体,从重到轻逐级增减砝码好像用天平称物体,从重到轻逐
2、级增减砝码进行试探。进行试探。A/D转换器分类转换开始时,先将逐次逼近寄存器最高位置1,送入D/A转换器,经D/A转换后生成的模拟量送入比较器,称为o,与送入比较器的待转换的模拟量i进行比较,若oi,该位1被保留,否则被清除。置逐次逼近寄存器次高位为1,将寄存器中新的数字量送D/A转换器,若oi,该位1被保留,否则被清除。重复此过程,直至逼近寄存器最低位。转换结束后,将逐次逼近寄存器中的数字量送入缓冲寄存器,得到数字量的输出。p双积分式双积分式A/D转换器转换器:转换精度高,抗干扰性能好,价格便宜,但转换转换精度高,抗干扰性能好,价格便宜,但转换速度较慢,一般用于速度要求不高的场合。速度较慢,
3、一般用于速度要求不高的场合。双积分双积分ADC的基本原理是对输入模拟电压和参考电压分别进行两的基本原理是对输入模拟电压和参考电压分别进行两次积分,将输入电压平均值变成与之成正比的时间间隔,然后利用时钟次积分,将输入电压平均值变成与之成正比的时间间隔,然后利用时钟脉冲和计数器测出此时间间隔,进而得到相应的数字量输出。脉冲和计数器测出此时间间隔,进而得到相应的数字量输出。ADC0809电源及基准电压电源及基准电压 ADC0809ADC0809是一个是一个是一个是一个8 8位位位位8 8通道的逐次逼近式通道的逐次逼近式通道的逐次逼近式通道的逐次逼近式ADAD转换器。转换器。转换器。转换器。电源电压电
4、源电压电源电压电源电压VccVcc:5V5V 基准电压基准电压基准电压基准电压V Vrefref(+):5v(+):5v V Vrefref(-):0V(-):0V ADC0809通道选择ADDAADDA、ADDBADDB、ADDCADDC:地址:地址线IN7IN7IN0IN0:8 8个个模模拟量量输入通道。入通道。AD0809控制端CLOCK:时钟,小于时钟,小于640KHzALE(Address Lock Enable):有效时,通道选):有效时,通道选择锁存择锁存START:转换启动信号:转换启动信号EOC(End Of Conversion):转换状态转换状态OE(Out Enable
5、):输出允:输出允许许0809输出D7D00809输出:D7 D6 D5 D4 D3 D2 D1 D0ADC0809的工作时序STARTSTART:转换启启动信信号号EOC:EOC:转换状状态OEOE:输出允出允许 采用ADC0809轮流采集2路05V的电子秤传感器电路形成的模拟信号,转换为8位的数字信号00FFH后,送单片机处理,并在4个数码管上显示采集的电压值。动手做动手做 画出硬件电路图画出硬件电路图 用可调电位器构成05V调压电路,模拟电子秤传感器测量电压,本设计有IN0、IN1共2路通道,只需要单片机控制ADDA、ADDB、ADDC中的ADDA一个地址的高低电平就能实现,其它ADDB
6、、ADDC2个接地就可。所以,选择通道,只需要单片机P1.4控制ADC0809的ADDA一端,其它的ADDB、ADDC接地。ADC0809的转换的时钟信号由单片机的P1.3产生。ADC0809的转换的控制线START、EOC、OE分别与单片机的P1.2、P1.1和P1.0连接。ADC0809采集的数据送到单片机的 P3口,单片机数据处理后,再通过P0口送段码,通过P2.0P2.3送位控信号到4位数码管,显示测量结果。根据设计要求,采用ADC0809的电子秤数据采集A/D转换,其源程序如下。#include#define uchar unsigned char#define ulong unsi
7、gned longuchar led_table=0 x3f,0 x6,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x7,0 x7f,0 x6f;/0-9共9个数,用于段控uchar i,d;void T_init();/定时器初始化,为AD转化提供时钟void Display(uchar);/延时函数声明void ADC();/ADC转换函数声明void delay(uchar);/延时函数声明sbit AD_OE=P10;/单片机P1.0产生OE信号sbit AD_EOC=P11;/单片机P1.1读取EOC信号sbit AD_ST=P12;/单片机P1.2产生START
8、信号sbit AD_CLK=P13;/单片机P1.3产生时钟信号sbit ADD_A=P14;/单片机P1.4控制2路模拟信号输入sbit W1=P20;/单片机P2.0控制第1个数码管显示sbit W2=P21;/单片机P2.1控制第2个数码管显示sbit W3=P22;/单片机P2.2控制第3个数码管显示sbit W4=P23;/单片机P2.3控制第4个数码管显示/*主程序*/void main(void)T_init();/定时器初始化,为AD转化提供时钟while(1)ADC();/AD转换 /*定时器初始化*/void T_init(void)TMOD=0 x02;/定时器0工作方式
9、2TH0=TL0=0 xf6;/初值设定,10usIE=0 x82;/开中断 10000010TR0=1;/启动定时器0/*定时器0中断函数*/void T0_Int(void)interrupt 1 AD_CLK=!AD_CLK;/AD0809C0809采样时钟信号,约50KHz/*数码管显示*/void Display(uchar d)ulong c;c=d*500000/255/100;/取mv数,为减少计算误差,分子分母都放大100倍P0=led_tablec/1000|0 x80;/取千位加小数点W1=0;delay(1);W1=1;P0=led_table(c%1000)/100;
10、/取百位W2=0;delay(1);W2=1;P0=led_table(c%100)/10;/取十位W3=0;delay(1);W3=1;P0=led_tablec%10;/取个位W4=0;delay(1);W4=1;/*ADC转换*/void ADC(void)uchar temp;if(i+)%2)=0)/用于交替选择通道0和通道1 ADD_A=0;/选择通道0else ADD_A=1;/选择通道1AD_ST=0;AD_ST=1;AD_ST=0;/启动转换while(AD_EOC=0);/等待转换结束AD_OE=1;/允许输出for(temp=0;temp100;temp+)d=P3;Di
11、splay(d);delay(1);AD_OE=0;/关闭输出/*延时t(ms)*/void delay(uchar t)uchar j,k;for(j=0;jt;j+)for(k=0;k255;k+)1.时钟产生的程序设计 ADC0809所需时钟信号的典型值为640kHz,最小值为10kHz,最大值为1280Hz,本设计用单片机定时器产生该时钟50kHz。若单片机系统时钟为12MHz,采用定时器0工作方式2,10s产生一次中断,每次中断形成管脚的一次高低电平的变化,产生50kHz方波,因此,初值为:TH0=TL0=F5。2.转换工作过程的程序设计 单片机START从低到高,再到低,转换开始。
12、启动开始的程序语句为:AD0809_ST=0;AD0809_ST=1;AD0809_ST=0。单片机查询EOC输出信号由低变高,A/D转换完成。等待转换结束的程序语句为:while(AD0809_EOC=0)。单片机再控制OE高电平,将转换结果的数字量输出到数据总线上,传到单片机。允许输出的程序语句为:AD0809_OE=1;3.转换结果的显示方式 将单片机采集到的转换好的8位数字量,通过数据处理成十进制数,再采用4个共阴数码管显示05V的传感器电压值。仿真运行图仿真运行图 4.2 D/A转换的锯齿波形发生器项目设计转换的锯齿波形发生器项目设计项目单片机的D/A应用 D/A工作原理 项目:用D
13、AC0832产生任意波形 项目:用DAC0832控制直流电机转速D/A 工作原理D/A(Digital to Analog)转换:从数字信号转换:从数字信号到模拟信号的转换。到模拟信号的转换。10001010 电压电压V(2V)DA分类按输入的二进制数的位数分类,有按输入的二进制数的位数分类,有八位、十八位、十位、十二位和十六位位、十二位和十六位等。等。按输出是电流还是电压分类,分为电压输出按输出是电流还是电压分类,分为电压输出器件和电流输出器件。器件和电流输出器件。依数字量的传送方式分,有并行和串行依数字量的传送方式分,有并行和串行D/A转转换器;换器;DA分辨率 例如例如8 8位数的分辨率
14、为位数的分辨率为1/2560.0041/2560.004,1010位数分辨率为位数分辨率为1/10241/1024,约等于,约等于0.0010.001。由此可。由此可见数字量位数越多,分辨率也就越高。分辨见数字量位数越多,分辨率也就越高。分辨率通常用数字输入信号的位数表示,有率通常用数字输入信号的位数表示,有8 8位、位、1010位、位、1212位等。位等。D/A转换芯片DAC0832DAC0832主要特性:主要特性:10脚脚 DGND数字地数字地4脚脚 AGND模拟地模拟地 数字和模拟地单点连接。数字和模拟地单点连接。工作电源工作电源VCC:5V15V参考电压参考电压VREF:-10V 10
15、V数字量输入 分辨率:分辨率:8位数字输入。位数字输入。输出电流输出I1电流输出I2反馈电阻端:内部有反馈电阻,也可以外接VOUT=VOUT=VREF VREF D/25D/255 50832控制信号CS片选ILE(Input Lock Enable)输入数据锁存WR1 第1写(输入信号)WR2 第2写(输入信号)XFER 数据传送控制信号内部结构图1.LE1决定数据输入,决定数据输入,LE2决定寄存器。决定寄存器。2.LE1、LE2、WR1、WR2、CS、XFER都是低电平有效,都是低电平有效,ILE高电平有效。高电平有效。3.WR1、WR2、CS、XFER、ILE有效,则有效,则LE1、L
16、E2有效,有效,直通。直通。4.WR1、WR2、CS、XFER有个别无效,则有个别无效,则LE1、LE2无效,无效,锁存。锁存。DAC0832与8051的接口电路1.直通方式:数据直通直通方式:数据直通+寄存器直通寄存器直通 ILE接高电平,接高电平,CS、WR1、WR2和和XFER都接数字地,都接数字地,8位位数字量一旦到达数字量一旦到达DI7DI0输入端,就立即加到输入端,就立即加到8位位D/A转换器,转换器,被转换成模拟量。被转换成模拟量。2.单缓冲单缓冲 单缓冲方式是控制输入寄存器和单缓冲方式是控制输入寄存器和DAC寄存器同时接收资料,或者只用输寄存器同时接收资料,或者只用输入寄存器而
17、把入寄存器而把DAC寄存器接成直通方式。此方式适用只有一路模拟量输出。寄存器接成直通方式。此方式适用只有一路模拟量输出。或几路模拟量异步输出的情形。或几路模拟量异步输出的情形。1)数据直通)数据直通+寄存器寄存器锁存锁存 2)数据)数据锁存锁存+寄存器直通寄存器直通3)数据)数据+寄存器同时通或锁存寄存器同时通或锁存3.双缓冲双缓冲 双缓冲方式是先使输入寄存器接收资料,再控双缓冲方式是先使输入寄存器接收资料,再控制输入寄存器的输出资料到制输入寄存器的输出资料到DAC寄存器,即分两次寄存器,即分两次锁存输入资料。此方式适用于多个锁存输入资料。此方式适用于多个D/A转换同步输转换同步输出的情节。出
18、的情节。数据数据锁存锁存+寄存器寄存器锁存锁存4.输出端输出端 Iout1:电流输出:电流输出1。Iout2:电流输出:电流输出2。Iout1+Iout2=常数。常数。Rfb:反馈电阻。:反馈电阻。DAC0832是电流输出,为了取得电是电流输出,为了取得电压输出,需要在电压输出端接运放,压输出,需要在电压输出端接运放,Rfb是运放电是运放电路的反馈电阻。路的反馈电阻。动手做动手做画出硬件电路图画出硬件电路图 项目采用单缓冲工作方式,将ILE接电源,将CS、XFER接单片机同一个控制端Q0,WR1、WR2接单片机WR,这样,两个寄存器的 LE1、LE2同时同样地受控。单片机的P0口控制了74LS
19、373的输出Q0,CS、XFER 接Q0,所以P2、P0口的外部地址为0 x00fe,即二进制表达为00000000(P2)11111110(P0)时,ADC0832的 CS有效,DA启动转换。根据DAC0832的工作原理和项目设计要求,采用DAC0832的锯齿波发生器,源程序如下。#include#include#define uchar unsigned char#define DAC0832 XBYTE0 x00fe/00000000(P2)11111110(P0地址、数据复用),XBYTE定义外部16位地址,可以操作WR和RD引脚,可实现DA启动uchar num;/*主程序*/voi
20、d main(void)TMOD=0 x01;/T0工作方式1TL0=-1000%256;/1ms初值低8位TH0=-1000/256;/1ms初值高8位 IE=0 x82;/定时中断允许TR0=1;/启动定时中断while(1)DAC0832=num;/00fe、WR有效、输出电压M/*定时0中断函数*/void Time0()interrupt 1TL0=-1000%256;/T0初值重置TH0=-1000/256;num+;if(num=255)num=0;程序中,#define DAC0832 XBYTE0 x00fe 语句的XBYTE定义外部16位地址0 x00fe,用二进制表达为0
21、000 0000 1111 1110,其中高8位由P2输出,低8位由P0地址及数据复用输出,使得74LS373输出端Q0低电平有效,从而产生DAC0832的CS/XFER有效,同时通过单片机P3.6/WR引脚,可以操作DAC0832的WR1、WR2引脚有效,实现单缓冲工作方式。程序中,改变延时时间可以改变波形周期;改变输出8位的最大值,即可改变波形的幅值。仿真运行图仿真运行图 4.3 D/A转换多功能波形发生器项目设计转换多功能波形发生器项目设计项目 采用DAC0832形成多个模拟信号,模拟信号的波形为矩形波、锯齿波、三角波和正弦波等。动手做动手做画出硬件电路图画出硬件电路图 同样,采用单缓冲
22、工作方式。单片机的P0口控制了74LS373的输出Q0,CD、XFER接Q0,所以P2、P0口的外部地址为0 x00fe,即二进制表达为00000000(P2)11111110(P0)时,ADC0832 CS有效,DA启动转换。P3.0、P3.1、P3.2、P3.3接4个按键,分别控制输出矩形波、锯齿波、三角波和正弦波。采用DAC0832的多功能发生器源程序,设计源程序如下。#include#include#define uchar unsigned char#define DAC0832 XBYTE0 x00fe/00000000(P2)11111110(P0地址、数据复用),XBYTE定义
23、外部16位地址,可以操作WR和RD引脚,可实现DA启动sbit k1=P30;/矩形波按钮sbit k2=P31;/锯齿波按钮sbit k3=P32;/三角波按钮sbit k4=P33;/正弦波按钮uchar m,flag,num1,num2,num3,num4;/*正弦波数据表*/uchar code sine_tab256=0 x80,0 x83,0 x85,0 x88,0 x8A,0 x8D,0 x8F,0 x92,0 x94,0 x97,0 x99,0 x9B,0 x9E,0 xA0,0 xA3,0 xA5,0 xA7,0 xAA,0 xAC,0 xAE,0 xB1,0 xB3,0 x
24、B5,0 xB7,0 xB9,0 xBB,0 xBD,0 xBF,0 xC1,0 xC3,0 xC5,0 xC7,0 xC9,0 xCB,0 xCC,0 xCE,0 xD0,0 xD1,0 xD3,0 xD4,0 xD6,0 xD7,0 xD8,0 xDA,0 xDB,0 xDC,0 xDD,0 xDE,0 xDF,0 xE0,0 xE1,0 xE2,0 xE3,0 xE3,0 xE4,0 xE4,0 xE5,0 xE5,0 xE6,0 xE6,0 xE7,0 xE7,0 xE7,0 xE7,0 xE7,0 xE7,0 xE7,0 xE7,0 xE6,0 xE6,0 xE5,0 xE5,0 x
25、E4,0 xE4,0 xE3,0 xE3,0 xE2,0 xE1,0 xE0,0 xDF,0 xDE,0 xDD,0 xDC,0 xDB,0 xDA,0 xD8,0 xD7,0 xD6,0 xD4,0 xD3,0 xD1,0 xD0,0 xCE,0 xCC,0 xCB,0 xC9,0 xC7,0 xC5,0 xC3,0 xC1,0 xBF,0 xBD,0 xBB,0 xB9,0 xB7,0 xB5,0 xB3,0 xB1,0 xAE,0 xAC,0 xAA,0 xA7,0 xA5,0 xA3,0 xA0,0 x9E,0 x9B,0 x99,0 x97,0 x94,0 x92,0 x8F,0 x
26、8D,0 x8A,0 x88,0 x85,0 x83,0 x80,0 x7D,0 x7B,0 x78,0 x76,0 x73,0 x71,0 x6E,0 x6C,0 x69,0 x67,0 x65,0 x62,0 x60,0 x5D,0 x5B,0 x59,0 x56,0 x54,0 x52,0 x4F,0 x4D,0 x4B,0 x49,0 x47,0 x45,0 x43,0 x41,0 x3F,0 x3D,0 x3B,0 x39,0 x37,0 x35,0 x34,0 x32,0 x30,0 x2F,0X2D,0 x2C,0X2A,0 x29,0 x28,0 x26,0 x25,0 x24
27、,0 x23,0 x22,0 x21,0 x20,0 x1F,0 x1E,0 x1D,0 x1D,0 x1C,0 x1C,0 x1B,0 x1B,0 x1A,0 x1A,0 x1A,0 x19,0 x19,0 x19,0 x19,0 x19,0 x19,0 x19,0 x19,0 x1A,0 x1A,0 x1A,0 x1B,0 x1B,0 x1C,0 x1C,0 x1D,0 x1D,0 x1E,0 x1F,0 x20,0 x21,0 x22,0 x23,0 x24,0 x25,0 x26,0 x28,0 x29,0X2A,0 x2C,0X2D,0 x2F,0 x30,0 x32,0 x34,0
28、 x35,0 x37,0 x39,0 x3B,0 x3D,0 x3F,0 x41,0 x43,0 x45,0 x47,0 x49,0 x4B,0 x4D,0 x4F,0 x52,0 x54,0 x56,0 x59,0 x5B,0 x5D,0 x60,0 x62,0 x65,0 x67,0 x69,0 x6C,0 x6E,0 x71,0 x73,0 x76,0 x78,0 x7B,0 x7D;/*延时函数t(ms)*/void delay(uchar t)uchar j,k;for(j=0;jt;j+)for(k=0;k255;k+)/*矩形波子程序*/void rect(void)num1=n
29、um1+32;if(num1=255)num1=0;if(num164)DAC0832=1;/00fe,WR有效,输出电压0else DAC0832=255;/00fe,WR有效,输出电压255/*锯齿波子程序*/void saw(void)num2+;if(num2=255)num2=0;DAC0832=num2;/00fe,WR有效,输出电压M/*三角波子程序*/void tri(void)if(flag=0)num3+;if(num3=255)flag=1;DAC0832=num3;/00fe,WR有效,输出电压Melsenum3-;if(num3=0)flag=0;DAC0832=nu
30、m3;/00fe,WR有效,输出电压M/*正弦波子程序*/void sine(void)num4+;if(num4=255)num4=0;DAC0832=sine_tabnum4;/00fe,WR有效,输出电压表/*波形选择按键函数*/void key(void)while(1)if(k1=0)/检测矩形波按钮delay(10);/消抖10msif(k1=0)/如果矩形波按钮按下 m=1;while(!k1);/松开继续执行if(k2=0)/检测锯齿波按钮delay(10);/消抖10msif(k2=0)/如果按下锯齿波按钮 m=2;while(!k2);/松开后继续执行if(k3=0)/检测
31、三角波按钮delay(10);/消抖10msif(k3=0)/如果三角波按钮 m=3;while(!k3);/松开后继续执行if(k4=0)/检测正弦波按钮delay(10);/消抖10msif(k4=0)/如果按下正弦波按钮 m=4;while(!k4);/松开后继续执行/*主程序*/void main(void)TMOD=0 x01;/T0工作方式1TL0=-1000%256;/1ms初值低8位TH0=-1000/256;/1ms初值高8位 IE=0 x82;/定时中断允许TR0=1;/启动定时中断while(1)key();/*定时器0中断函数*/void Time0()interrup
32、t 1TL0=-1000%256;/T0初值重置TH0=-1000/256;switch(m)case 1:rect();break;case 2:saw();break;case 3:tri();break;case 4:sine();break;仿真运行图仿真运行图 4.4 D/A转换控制直流电机的项目设计转换控制直流电机的项目设计项目 项目采用DAC0832形成的模拟信号,控制模拟信号电压,从而控制直流电机的运转速度。动手做动手做画出硬件电路图画出硬件电路图 采用单缓冲工作方式。单片机的P3口的P3.0、P3.1、P3.2按键分别控制了加速、减速和停止。采用DAC0832控制直流电机加速
33、、减速和停止,设计源程序如下。#include#include#define uchar unsigned char#define DAC0832 XBYTE0 x00fe/00000000(P2)11111110(P0地址、数据复用),XBYTE定义外部16位地址,可以操作WR和RD引脚,可实现DA启动sbit k1=P30;/加速按钮sbit k2=P31;/减速按钮sbit k3=P32;/暂停按钮uchar m=0;/速度档置0/*延时函数t(ms)*/void delay(uchar t)uchar j,k;for(j=0;jt;j+)for(k=0;k5)m=5;DAC0832=51*m;/00fe,WR有效,输出电压:加速while(!k1);/松开继续执行if(k2=0)/检测减速按钮delay(10);/消抖10msif(k2=0)/如果按下减速按钮 m-;if(m1)m=1;DAC0832=51*m;/00fe,WR有效,输出电压:减速 while(!k2);/松开后继续执行if(k3=0)/检测停止按钮delay(10);/消抖10msif(k3=0)/如果按下停止按钮 m=0;DAC0832=0 x00;/00fe,WR有效,输出电压0:停止while(!k3);/松开后继续执行仿真运行图
限制150内