版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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是芯片的时钟端; Adress是地址选择端;
3、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 CLOCK和ADRESS被禁止以及为DATAOUT高阻状态
4、。当串行口使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端接收前一次转换的结果。它以MSD前导方式DATAOUT输出,但MSB出现在DAT
5、AOUT端的时刻取决于串行接口时序。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 个时钟下降沿 所用串行时钟脉冲的数目也取决于工作的方式,从10个到16个不等,但要开始进
6、行转换,至少需要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 工作时序其工作过程分为两个周期:访问周期和采样周期。工作状态由CS使能或禁止,工作时 CS必须置低电平。CS为高电平时,I
7、/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位地址从 ADDRESS端装载地址寄存器,选择所需的模拟通道,后6个时钟对模拟输入的采样提供控制时序。 模拟输入
8、的采样起始于第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,试编写程序,将设定数字量转换成模拟量,从数模转换端口可测得电压值。原理图如图8-3所示。 图8- 3 例8-1原理图完整源程序如下
9、:/*实验名称:数模转换实验现象:从数模转换端口可测得电压值*/#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)u
10、nsigned char i;cs=1; /初始化clock=0;cs=0;di=1;for(i=12;i0;) /送数i-;if(a&0 x8000) /取第一位di=1;elsedi=0;clock=1;_nop_(); /调用延时_nop_();clock=0;_nop_();_nop_();a=a1;cs=1; /送数完成b=b+1000; /送入的数字量加1a=b;delay(500); /*实验名称:数模转换实验现象:从数模转换端口可测得电压值*/#include#include /移位函数头文件unsigned int a,b; /定义变量sbit di=P37; /定义
11、串行输入口 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 char i;cs=1; /初始化clock=0;cs=0;di=1;for(i=12;i0;) /送数i-;if(a&0 x8000) /取第一位di=1;elsed
12、i=0;clock=1;_nop_(); /调用延时_nop_();clock=0;_nop_();_nop_();a=a1;cs=1; /送数完成b=b+1000; /送入的数字量加1a=b;delay(500); 实验现象如图8-4所示。8.2 TLC5615接口电路设计目前,数模转换器从接口上可分为两大类:并行接口数模转换器和串行数模转换器并行接口数模转换器的引脚多、体积大,占用单片机的口线多;而串行数模转换器可采用TLC5615串行模拟转换器产生可变基准电压来解决问题。8.2.1 概述TLC5615是一个串行10位DAC芯片, 性能比早期电流型输出的DAC要好。只需要通过3根串行总线就
13、可以完成10位数据的串行输入,易于和工业标准的微处理器或微控制器(单片机) 接口, 适用于电池供电的测试仪表、移动电话,也适用于数字失调与增益调整以及工业控制场合。8脚直插式TLC5615的引脚分布如图8-5所示,各引脚功能如下:DIN ,串行二进制数输入端;SCLK ,串行时钟输入端;CS ,芯片选择,低有效; DOUT ,用于级联的串行数据输出; AGND ,模拟地; REFIN ,基准电压输入端; OUT ,DAC 模拟电压输出端; VDD ,正电源电压端。图8- 5 引脚排列 TLC5615 的工作原理的工作原理TLC5615 的时序TLC5615工作时序如图8-6所示。可以看出,只有
14、当片选CS为低电平时, 串行输入数据才能被移入16位移位寄存器。当CS为低电平时,在每一个SCLK时钟的上升沿将DIN的一位数据移入16位移寄存器。注意, 二进制最高有效位被导前移入。接着,CS的上升沿将16位移位寄存器的10位有效数据锁存于10位DAC寄存器, 供DAC电路进行转换; 当片选CS为高电平时,串行输入数据不能被移入16位移位寄存器。注意, CS的上升和下降都必须发生在SCLK为低电平期间。当片选CS为高电平时,串行输入数据DIN不能由时钟同步送入移位寄存器;输出数据DOUT保持最近的数值不变而不进入高阻状态。由此要想串行输入数据和输出数据必须满足两个条件:第一时钟SCLK的有效
15、跳变;第二片选CS为低电平。这里,为了使时钟的内部馈通最小,当片选CS为高电平时,输入时钟SCLK应当为低电平。从图中可以看出,最大串行时钟速率为:f( sclk ) max =1/ tw( CH ) + tw( CS )14MHz图8- 6 TLC5615 的时序图 2.两种工作方式 从内部功能分析,16 位移位寄存器分为高4位虚拟位、低2位填充位以及10位有效位。在单片TLC5615工作时, 只需要向16位移位寄存器按先后输入10位有效位和低2位填充位, 2位填充位数据任意,这是第一种方式,即12位数据序列。第二种方式为级联方式, 即16位数据序列, 可以将本片的DOUT接到下一片的DIN
16、 , 需要向16位移位寄存器按先后输入高4位虚拟位、10位有效位和低2位填充位, 由于增加了高4位虚拟位, 所以需要16个时钟脉冲。 无论工作在哪一种方式,输出电压为: VOUT = VREFIN N / 1024 其中, VREFIN是参考电压, N为输入的二进制数。 3.TLC5615 与AT89C52 单片机接口 硬件连接: AT89C52单片机的最大优点是内部具有电擦除的8kB EPROM , 易于通过ALL 03等编程与擦除,而且具有低功耗等特点。利用AT89C52 单片机的通用I/ O口( P1 口)TLC5615 构成的DAC电路如图8-7所示。分别用P1. 0 、P1. 2模拟
17、时钟SCLK和片选CS , 待转换的二进制数从P1. 1输出到TLC5615的数据输入端DIN 。图8- 7 硬件连接图【例8-2】利用开发板,模数转换芯片采用TLC5615,编写程序,用数码管显示A/D转换电压值,可通过对数据输入端赋不同值改变模拟量的不同输入方法。原理图如图8-8所示。图8- 8 例8-2原理图完整源程序如下:/*实验名称:模数转换程序说明:把J4,J29,J30用短路帽短接,J1要短接左端,用数码管显示AD转换电压值, 拧动电位器R17可以得到不同的电压值 可通过对数据输入端赋不同值改变模拟量的不同输入方法*/ #include#include unsigned char
18、 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=P22;/数码管的位选sbit P2_3=P23;/数码管的位选sbit P0_7=P07;/小数点显示位sbit cs=P13; /片选sbit dout=P14; /数据输出端sbit adin=P15; /数据输入端sbit clock=P16; /时钟端sbit
19、eoc=P17; /检测端sfr16 DPTR=0 x82; /定义16位特殊功能寄存器 便于调用数据来数码管显示unsigned char i; /定义变量unsigned int a,b,r,s,n,m; /*/ /* 延时子程序 */ /*/ void delay(unsigned int z) /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-);
20、 y-; void _nop_(); /*/ /* 模数转换子程序 */ /*/ zcx() /有返回值子程序 cs=1; /初始化clock=0;dout=1;adin=0; /模拟量输入端选择的第1位cs=0;while(!eoc); /检测是否完成_nop_();_nop_();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;/取出最低位的1if(i!=10)a=a1;clock=1
21、;_nop_();clock=0; /数据读取完成,a中为读取的有效10位数字,且在低位b=a; b=b6; /读取的数右移6位,为取其高8位作准备DPTR=b;if(i=1)adin=0; /模拟量输入端选择的第2位if(i=2)adin=0; /模拟量输入端选择的第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;dela
22、y_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; /*/ /* 主函数 */ /*/ void main()zcx(); /调用模数转换子程序display(); /调用显示子程序8.2.3 并行数模转换DAC0832模拟 DAC0832是采用CMOS工艺制成的单片直流输出型8位数/模转换器。由于其片内有输入数据寄存器,故可以直接与单片机接口。如图8-9所示,它由倒T型R-2R电阻网络、模拟开关、运算放大器和参考电压VREF四大部分组成。运算放大器输出的模拟量V0为:
23、图8- 9 型电阻网络D/A转换器DAC0832以电流形式输出,当需要转换为电压输出时,可外接运算放大器。属于该系列的芯片还有DAC0830、DAC0831,它们可以相互代换。DAC0832主要特性:分辨率位;电流建立时间S;数据输入可采用双缓冲、单缓冲或直通方式;输出电流线性度可在满量程下调节;逻辑电平输入与TTL电平兼容;单一电源供电(5V15V);低功耗,20m。DAC0832引脚如图8-10所示,各引脚功能:DI0DI7,数据输入线,TLL电平;ILE,数据锁存允许控制信号输入线,高电平有效;CS,片选信号输入线,低电平有效;WR1,输入寄存器的写选通信号;XFER,数据传送控制信号输
24、入线,低电平有效;WR2,DAC寄存器写选通输入线;Iout1,电流输出线,当输入全为1时Iout1最大;Iout2,电流输出线,其值与Iout1之和为一常数;Rfb,反馈信号输入线,芯片内部有反馈电阻;Vcc,电源输入线(+5V+15V);Vref,基准电压输入线(-10V+10V);AGND,模拟地,模拟信号和基准电源的参考地。1.DAC0832时序D0-D7数据加入后,在ILE=1,CS=0,WR1由低电平向高电平转换时,数据被锁存在8位输入寄存器中。XFER和WR2同时为0时,数据被加到变换寄存器上,开始产生模拟输出。若XFER和WR2均接地,第二级锁存器总是导通的,而ILE接高电平时
25、,只要D0-D7写入一个数据,同时给CS和WR2送一个选通脉冲,即可完成一次新的变换。如果系统中接有多片DAC0832,且要求各片的输出模拟量,在一次新的变换中同时发生变化,即各片的输出量在同一时刻发生变化,则可以分别利用CS、WR1和ILE信号将各路要变换的数据送入各自的第一级输入寄存器中,然后在所有芯片的WR2和XFER端同时加一个负脉冲,这样在WR2的上升沿,数据将由各输入寄存器锁存到DAC寄存器中,从而实现多片的同时变换输出。DAC0832时序如图8-11所示。图8- 11 DAC0832时序图2. DAC0832与80C52单片机的接口常用DAC0832与单片机有三种基本的接口方法:
26、即直通方式、单级缓冲器连接方式和双级缓冲器连接方式。(1)直通方式当DAC0832芯片的片选信号、写信号、及传送控制信号的引脚全部接地,允许输入锁存信号ILE引脚接5V时,DAC0832芯片就处于直通工作方式,数字量一旦输入,就直接进入DAC寄存器,进行D/A转换。连接图如8-12所示。图8- 12 直通方式(2)单缓冲工作方式单缓冲工作方式适用于只有一路模拟量输出,或有几路模拟量输出但并不要求同步的系统。 与单片机连接图如8-13所示。(3)双缓冲工作方式多路D/A转换输出,如果要求同步进行,就应该采用双缓冲器同步方式 。与单片机连接图如8-14所示。图8- 14 双缓冲工作方式【例8-3】
27、电路如图8-15所示,单片机采用AT89C52,编写程序,模拟并行数模转换,实现输出的模拟量不同可使小灯亮度不同,电压表数值不断变化。图8- 15 数模转换模拟电路图完整源程序如下:/*实验名称:仿真并行口 数模转换实验现象:输出的模拟量不同可使小灯亮度不同 电压表数值不断变化*/ #includesbit 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 a
28、a,i; /变量定义 /* 赋初值子程序*/void init() 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)/
29、256; TL0=(65536-50000)%256; 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:数字信号地。CLK
30、IN:外电路提供时钟脉冲输入端CLKR:内部时钟发生器外接电阻端,与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
提交评论