第8章 AD和DA转换模块设计_第1页
第8章 AD和DA转换模块设计_第2页
第8章 AD和DA转换模块设计_第3页
第8章 AD和DA转换模块设计_第4页
第8章 AD和DA转换模块设计_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

1、 单片机应用系统中,外部设备不一定都是数字式的,也经常 会和模拟式的设备连接。例如,当用单片机来控制温度、压 力时,温度和压力都是连续变化的,都是模拟量,在单片机 与这类外部环境通信的时候,就需要有一种转换器来把模拟 信号转换为数字信号,以便能够输入单片机进行处理。而单 片机传出的控制信号,也必须经过变换变成模拟信号,才能 被模拟电路接受。这种变换器就成为模数(AD)、数模( DA)转换器。本章将重点介绍A/D、D/A转换器接口,以及 相关应用。 8.1 串行A/DTLC1543接口电路设计 本节将介绍一种多通道串行A/D转换器TLC1543的功能特 点和工作过程,讨论了器件工作方式的选择,以

2、及器件的 工作时序,并给出了TLC1543的实际应用接口电路及软件 设计。 8.1.1 概述 TLC1543是由TI公司开发的开关电容式AD转换器,该芯 片具有如下的一些特点:10位精度、11通道、三种内建的 自测模式、提供EOC(转换完成)信号等。该芯片与单片 机的接口采用串行接口方式,引线很少,与单片机连接简 单。 TLC1543的引脚如图8-1所示。 A0A10是11路输入; Vcc和GND分别是电源引脚; REF+和REF-分别是参考电源的正负引脚,使用时一般将 REF-接到系统的地,达到一点接地的要求,以减少干扰; CS为片选端,如不需选片,可直接接地; I/O Clock是芯片的时

3、钟端; Adress是地址选择端; Data Out是数据输出端,这三根引脚分别接到CPU的三个I/O 端即可; EOC用于指示一次AD转换已完成,CPU可以读取数据,该 引脚是低电平有效,根据需要,该引脚可接入CPU的中断引 脚,一旦数据转换完成,向CPU提出中断请求;此外,也可 将该引脚接入一个普通的I/O引脚,CPU通过查询该引脚的状 态来了解当前的状态,甚至该引脚也可以不接,在CPU向 TLC154发出转换命令后,过一段固定的时间去读取数据即 可。 8.1.2 工作过程 TLC1543的工作过程分为两个周期:I/O周期和实际转换周期 。 1.I/O周期 一开始,CS为高,I/O CLO

4、CK和ADRESS被禁止以及为 DATAOUT高阻状态。当串行口使CS变低,开始转换过程, I/O CLOCK和ADRESS使能,并使DATAOUT端脱离高阻状 态。在I/O CLOCK的前4个脉冲上升沿,以MSB前导方式从 ADRESS口输入4位数据流到地址寄存器。这4位为模拟通道 地址,控制14通道模拟多路器从11个模拟输入和3个内部自 测电压中(其选择格式见表8-1),选通一路送到采样保持 电路,该电路从第4个I/O CLOCK的下降沿开始对所选模拟 输入进行采样,采样一直持续6个I/O CLOCK周期,保持到 第10个I/O CLOCK的下降沿。 同时,串口也从DATAOUT端接收前一

5、次转换的结果。它以MSD前导方式 DATAOUT输出,但MSB出现在DATAOUT端的时刻取决于串行接口时序。 TLC1543可以用6种基本串行接口时序方式,这些方式取决于I/0 CLOCK 的速度与CS的工作,如表8-2所示。 表 8- 1 工作方式 方式 CS 时钟数 DATEOUT 端的 MSB 快 速 方 式 方式 1 转换周期时为高 10 CS 下降沿 方式 2 连续低 10 EOC 上升沿 方式 3 转换周期时为高 1116 CS 下降沿 方式 4 连续低 16 EOC 上升沿 慢方 速式 方式 5 转换周期时为高 1116 CS 下降沿 方式 6 连续低 16 第 16 个时钟下

6、降沿 所用串行时钟脉冲的数目也取决于工作的方式,从10个到16个不等,但要开始进行转 换,至少需要10个时钟脉冲。在第10个时钟的下降沿EOC输出变低,而当转换完成时 回到逻辑高电平。需要说明的是:如果I/0 CLOCK的传送多于10个时钟,在第10个时 钟的下降沿内部逻辑也将DATAOUT变低以保证剩下的各位的值是零。 2.转换周期 见前所述,转换开始于第4个I/O CLOCK的下降沿之后,片内转换器对采样值进行逐 次逼近式A/D转换,其工作由I/O CLOCK同步了的内部时钟控制。转换结果锁存在输 出数据寄存器中,待下一个I/O CLOCK周期输出。 8.1.3 工作时序 其工作过程分为两

7、个周期:访问周期和采样周期。工作状态由CS使能或禁止,工作时 CS必须置低电平。CS为高电平时,I/O CLOCK、ADDRESS被禁止,同时DATAOUT 为高阻状态。当CPU使CS变低时,TLC1543开始数据转换,I/O CLOCK、ADDRESS 使能,DATAOUT脱离高阻状态。随后,CPU向ADDRESS端提供4位通道地址,控制 14个模拟通道选择器从11个外部模拟输入和3个内部自测电压中选通1路送 到采样保 持电路。同时,I/O CLOCK端输入时钟时序,CPU从DATAOUT端接收前一次A/D转换 结果。I/O CLOCK从CPU接受10个时钟长度的时钟序列。前4个时钟用4位地

8、址从 ADDRESS端装载地址寄存器,选择所需的模拟通道,后6个时钟 对模拟输入的采样提供控制时序。 模拟输入的采样起始于第4个I/O CLOCK的下降沿,而采样一直持 续6个I/O CLOCK周期,并一直保持到第10个I/O CLOCK的下降沿。转 换过程中,CS的下降沿使DATAOUT引脚脱离高阻状态并 起动一次I/O CLOCK的工作过程。CS的上升沿终止这个过程并在规定的延迟时间内 使DATAOUT引脚返回到高阻状态,经过两个系统时钟周期后禁止I/O CLOCK和ADDRESS端。 图8- 2 TLC1543时序图 【例8-1】 利用开发板,模数转换芯片采用TLC1543,试编 写程序

9、,将设定数字量转换成模拟量,从数模转换端口可测 得电压值。原理图如图8-3所示。 图8- 3 例8-1原理图 完整源程序如下: /* 实验名称:数模转换 实验现象:从数模转换端口可测得电压值 */ #include #include /移位函数头文件 unsigned int a,b; /定义变量 sbit di=P37; /定义串行输入口 sbit clock=P36; /定义时钟位 sbit cs=P35; /定义片选位 /*/ /* 延时子程序 */ /*/ void delay(unsigned int z) unsigned int x,y; for(x=z;x0;x-) for(y

10、=114;y0;y-); void _nop_(); /空操作 较短延时 /*/ /* 主程序 */ /*/ void main() while(1) unsigned char i; cs=1; /初始化 clock=0; cs=0; di=1; for(i=12;i0;) /送数 i-; if(a else di=0; clock=1; _nop_(); /调用延时 _nop_(); clock=0; _nop_(); _nop_(); a=a1; cs=1; /送数完成 b=b+1000; /送入的数字量加1 a=b; delay(500); /* 实验名称:数模转换 实验现象:从数模转

11、换端口可测得电压值 */ #include #include /移位函数头文件 unsigned int a,b; /定义变量 sbit di=P37; /定义串行输入口 sbit clock=P36; /定义时钟位 sbit cs=P35; /定义片选位 /*/ /* 延时子程序 */ /*/ void delay(unsigned int z) unsigned int x,y; for(x=z;x0;x-) for(y=114;y0;y-); void _nop_(); /空操作 较短延时 /*/ /* 主程序 */ /*/ void main() while(1) unsigned c

12、har i; cs=1; /初始化 clock=0; cs=0; di=1; for(i=12;i0;) /送数 i-; if(a else di=0; clock=1; _nop_(); /调用延时 _nop_(); clock=0; _nop_(); _nop_(); a=a1; cs=1; /送数完成 b=b+1000; /送入的数字量加1 a=b; delay(500); 实验现象如图8-4所示。 8.2 TLC5615接口电路设计 目前,数模转换器从接口上可分为两大类:并行接口数模转换 器和串行数模转换器并行接口数模转换器的引脚多、体积大, 占用单片机的口线多;而串行数模转换器可采用

13、TLC5615串行 模拟转换器产生可变基准电压来解决问题。 8.2.1 概述 TLC5615是一个串行10位DAC芯片, 性能比早期电流型输出的 DAC要好。只需要通过3根串行总线就可以完成10位数据的串 行输入,易于和工业标准的微处理器或微控制器(单片机) 接口, 适用于电池供电的测试仪表、移动电话,也适用于数字失调与增 益调整以及工业控制场合。 8脚直插式TLC5615的引脚分布如图8-5所示,各引脚功能如下: DIN ,串行二进制数输入端; SCLK ,串行时钟输入端; CS ,芯片选择,低有效; DOUT ,用于级联的串行数据输出; AGND ,模拟地; REFIN ,基准电压输入端;

14、 OUT ,DAC 模拟电压输出端; VDD ,正电源电压端。 图8- 5 引脚排列 TLC5615 的工作原理的工作原理 TLC5615 的时序 TLC5615工作时序如图8-6所示。可以看出,只有当片选CS为低电平时, 串行输入 数据才能被移入16位移位寄存器。当CS为低电平时,在每一个SCLK时钟的上升 沿将DIN的一位数据移入16位移寄存器。注意, 二进制最高有效位被导前移入。 接着,CS的上升沿将16位移位寄存器的10位有效数据锁存于10位DAC寄存器, 供 DAC电路进行转换; 当片选CS为高电平时,串行输入数据不能被移入16位移位寄 存器。注意, CS的上升和下降都必须发生在SC

15、LK为低电平期间。 当片选CS为高电平时,串行输入数据DIN不能由时钟同步送入移位寄存 器;输出数据DOUT保持最近的数值不变而不进入高阻状态。由此要想 串行输入数据和输出数据必须满足两个条件:第一时钟SCLK的有效跳变 ;第二片选CS为低电平。这里,为了使时钟的内部馈通最小,当片选CS 为高电平时,输入时钟SCLK应当为低电平。 从图中可以看出,最大串行时钟速率为: f( sclk ) max =1/ tw( CH ) + tw( CS )14MHz 图8- 6 TLC5615 的时序图 2.两种工作方式 从内部功能分析,16 位移位寄存器分为高4位虚拟位、低2位 填充位以及10位有效位。在

16、单片TLC5615工作时, 只需要向 16位移位寄存器按先后输入10位有效位和低2位填充位, 2位 填充位数据任意,这是第一种方式,即12位数据序列。第二种 方式为级联方式, 即16位数据序列, 可以将本片的DOUT接到 下一片的DIN , 需要向16位移位寄存器按先后输入高4位虚拟 位、10位有效位和低2位填充位, 由于增加了高4位虚拟位, 所 以需要16个时钟脉冲。 无论工作在哪一种方式,输出电压为: VOUT = VREFIN N / 1024 其中, VREFIN是参考电压, N为输入的二进制数。 3.TLC5615 与AT89C52 单片机接口 硬件连接: AT89C52单片机的最大

17、优点是内部具有电擦除的8kB EPROM , 易于通过ALL 03等编程与擦除,而且具有低功耗等 特点。利用AT89C52 单片机的通用I/ O口( P1 口)TLC5615 构成的DAC电路如图8-7所示。分别用P1. 0 、P1. 2模拟时钟 SCLK和片选CS , 待转换的二进制数从P1. 1输出到TLC5615 的数据输入端DIN 。 图8- 7 硬件连接图 【例8-2】利用开发板,模数转换芯片采用TLC5615,编写 程序,用数码管显示A/D转换电压值,可通过对数据输入端赋 不同值改变模拟量的不同输入方法。原理图如图8-8所示。 图8- 8 例8-2原理图 完整源程序如下: /* 实

18、验名称:模数转换 程序说明:把J4,J29,J30用短路帽短接,J1要短接左端,用数码管显示AD转换电压值, 拧动电位器R17可以得到不同的电压值 可通过对数据输入端赋不同值改变模拟量的不同输入方法 */ #include #include unsigned char led=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8, 0 x80,0 x90,0 x88,0 x83, 0 xa7,0 xa1,0 x82,0 x8e;/数码管的字符数组 sbit P2_0=P20;/数码管的位选 sbit P2_1=P21;/数码管的位选 sbit P2_2

19、=P22;/数码管的位选 sbit P2_3=P23;/数码管的位选 sbit P0_7=P07;/小数点显示位 sbit cs=P13; /片选 sbit dout=P14; /数据输出端 sbit adin=P15; /数据输入端 sbit clock=P16; /时钟端 sbit eoc=P17; /检测端 sfr16 DPTR=0 x82; /定义16位特殊功能寄存器 便于调用数据来数码管显 示 unsigned char i; /定义变量 unsigned int a,b,r,s,n,m; /*/ /* 延时子程序 */ /*/ void delay(unsigned int z)

20、/1ms的延时程序 unsigned int x,y; for(x=z;x0;x-) for(y=114;y0;y-); /*/ /* 延时子程序 */ /*/ void delay_2()/较短的延时程序 unsigned int y=300,x; while(y) for(x=2;x0;x-); y-; void _nop_(); /*/ /* 模数转换子程序 */ /*/ zcx() /有返回值子程序 cs=1; /初始化 clock=0; dout=1; adin=0; /模拟量输入端选择的第1位 cs=0; while(!eoc); /检测是否完成 _nop_(); _nop_();

21、 a=0; for(i=0;i10;) /开始读数据 i+; if(dout=0) /判断数据输出为0时存入寄存器a 并左移1位 if(i!=10) a=a1; if(dout=1) /判断数据输出为1时 取出该位数据存入寄存器a 并左移1位 a=a|0 x0001;/取出最低位的1 if(i!=10) a=a1; clock=1; _nop_(); clock=0; /数据读取完成,a中为读取的有效10位数字,且 在低位 b=a; b=b6; /读取的数右移6位,为取其高8位作准备 DPTR=b; if(i=1) adin=0; /模拟量输入端选择的第2位 if(i=2) adin=0; /

22、模拟量输入端选择的第3位 if(i=3) adin=1; /模拟量输入端选择的第4位 return(b); /*/ /* 显示子程序 */ /*/ void display() cs=1; _nop_(); delay(12); P2_1=0; /以下为数码管显示程序 r=DPH*50; r=r/255; r=r/10; P0=ledr; P0_7=0; delay_2(); P0=0 xff; P2_1=1; P2_0=0; s=DPH*50; s=s/255; s=s%10; P0=leds; delay_2(); P0=0 xff; P2_0=1; /*/ /* 主函数 */ /*/ v

23、oid main() zcx(); /调用模数转换子程序 display(); /调用显示子程序 8.2.3 并行数模转换DAC0832模拟 DAC0832是采用CMOS工艺制成的单片直流输出型8位数/模 转换器。由于其片内有输入数据寄存器,故可以直接与单片 机接口。如图8-9所示,它由倒T型R-2R电阻网络、模拟开关 、运算放大器和参考电压VREF四大部分组成。运算放大器 输出的模拟量V0为: 图8- 9 型电阻网络D/A转换器 DAC0832以电流形式输出,当需要转换为电压输出时,可外接运算放大器。属于该系列的芯片 还有DAC0830、DAC0831,它们可以相互代换。DAC0832主要特

24、性: 分辨率位; 电流建立时间S; 数据输入可采用双缓冲、单缓冲或直通方式; 输出电流线性度可在满量程下调节; 逻辑电平输入与TTL电平兼容; 单一电源供电(5V15V); 低功耗,20m。 DAC0832引脚如图8-10所示,各引脚功能: DI0DI7,数据输入线,TLL电平; ILE,数据锁存允许控制信号输入线,高电平有效; CS,片选信号输入线,低电平有效; WR1,输入寄存器的写选通信号; XFER,数据传送控制信号输入线,低电平有效; WR2,DAC寄存器写选通输入线; Iout1,电流输出线,当输入全为1时Iout1最大; Iout2,电流输出线,其值与Iout1之和为一常数; R

25、fb,反馈信号输入线,芯片内部有反馈电阻; Vcc,电源输入线(+5V+15V); Vref,基准电压输入线(-10V+10V); AGND,模拟地,模拟信号和基准电源的参考地。 1.DAC0832时序 D0-D7数据加入后,在ILE=1,CS=0,WR1由低电平向高电平 转换时,数据被锁存在8位输入寄存器中。XFER和WR2同时为 0时,数据被加到变换寄存器上,开始产生模拟输出。 若XFER和WR2均接地,第二级锁存器总是导通的,而ILE接高 电平时,只要D0-D7写入一个数据,同时给CS和WR2送一个选 通脉冲,即可完成一次新的变换。 如果系统中接有多片DAC0832,且要求各片的输出模拟

26、量,在 一次新的变换中同时发生变化,即各片的输出量在同一时刻发 生变化,则可以分别利用CS、WR1和ILE信号将各路要变换的 数据送入各自的第一级输入寄存器中,然后在所有芯片的WR2 和XFER端同时加一个负脉冲,这样在WR2的上升沿,数据将 由各输入寄存器锁存到DAC寄存器中,从而实现多片的同时变 换输出。DAC0832时序如图8-11所示。 图8- 11 DAC0832时序图 2.DAC0832与80C52单片机的接口 常用DAC0832与单片机有三种基本的接口方法:即直通方式、单级缓冲器 连接方式和双级缓冲器连接方式。 (1)直通方式 当DAC0832芯片的片选信号、写信号、及传送控制信

27、号的引脚全部接地, 允许输入锁存信号ILE引脚接5V时,DAC0832芯片就处于直通工作方式, 数字量一旦输入,就直接进入DAC寄存器,进行D/A转换。连接图如8-12所 示。 图8- 12 直通方式 (2)单缓冲工作方式 单缓冲工作方式适用于只有一路模拟量输出,或有几路模拟量输出但并不要求同步的系统 。 与单片机连接图如8-13所示。 (3)双缓冲工作方式 多路D/A转换输出,如果要求同步进行,就应该采用双缓冲器同步方式 。与单片机连接图 如8-14所示。 图8- 14 双缓冲工作方式 【例8-3】电路如图8-15所示,单片机采用AT89C52,编写 程序,模拟并行数模转换,实现输出的模拟量

28、不同可使小灯亮 度不同,电压表数值不断变化。 图8- 15 数模转换模拟电路图 完整源程序如下: /* 实验名称:仿真并行口 数模转换 实验现象:输出的模拟量不同可使小灯亮度不同 电压表数值不断变化 */ #include sbit wr=P36; /写入端位定义 sbit csda=P32; /片选端位定义 unsigned char code tab=0 xff,0 xf8,0 xf0,0 xe8,0 xe0,0 xd8,0 xd0,0 xc8,0 xc0,0 xb8; /定义输入 数字量数组 unsigned int aa,i; /变量定义 /* 赋初值子程序 */ void init(

29、) TMOD=0 x01; /设置定时器0模式 TH0=(65536-50000)/256; /赋初值 TL0=(65536-50000)%256; EA=1; /开总中断 ET0=1; /开定时器0中断 TR0=1; /开启定时器0 /* 主程序 */ void main() init(); /调用赋初值子程序 while(1) csda=0; /片选选定 wr=0; /写入条件 P0=tabi; /转换后的模拟量给P0口 /* 定时器0子程序 */ void timer0() interrupt 1 TH0=(65536-50000)/256; TL0=(65536-50000)%256;

30、 aa+; if(aa=20) /定时器计时1s aa=0; i=i+1; if(i=10) /扫描10次 i=0; /清零循环 8.2.4 ADC0804转换芯片 ADC0804是用CMOS集成工艺制成的逐次比较型摸数转换芯片。分辨率8位 ,转换时间100s,输入电压范围为05V,增加某些外部电路后,输入模拟 电压可为 5V。该芯片内有输出数据锁存器,当与计算机连接时,转换电路 的输出可以直接连接在CPU数据总线上,无须附加逻辑接口电路。 ADC0804芯片外引脚图如8-16所示。引脚名称及意义如下: AGND:模拟信号地。 DGND:数字信号地。 CLKIN:外电路提供时钟脉冲输入端 CL

31、KR:内部时钟发生器外接电阻端,与CLKIN端配合可由芯片自 身产生时钟脉冲,其频率为1/1.1RC。 CS:片选信号输入端,低电平有效,一旦CS有效,表明A/D转换器 被选中,可启动工作。WR:写信号输入,接受微机系统或其它数字系统控 制芯片的启动输入端,低电平有效,当CS、WR同时为低电平时,启动转换 。 RD:读信号输入,低电平有效,当CS、RD同时为低电平时,可读 取转换输出数据。 INTR:转换结束输出信号,低电平有效。输出低电平表示本次转换 已完成。该信号常作为向微机系统发出的中断请求信号。 ADC0804时序 当CS与WR同为低电平时,A/D转换被启动而在WR上升沿后100s模数 完成转换,转换结果存入数据锁存器,同时INTR自动变为低电平,表示 本次转换已结束。如CS、RD同时来低电平,则数据

温馨提示

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

评论

0/150

提交评论