《单片机原理及应用》第10章:单片机的扩展技术_第1页
《单片机原理及应用》第10章:单片机的扩展技术_第2页
《单片机原理及应用》第10章:单片机的扩展技术_第3页
《单片机原理及应用》第10章:单片机的扩展技术_第4页
《单片机原理及应用》第10章:单片机的扩展技术_第5页
已阅读5页,还剩68页未读 继续免费阅读

下载本文档

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

文档简介

第10章单片机的扩展技术10.1A/D转换器概述10.2D/A转换器概述习题与思考题10.1A/D转换器在单片机应用系统中,总是要对许多连续变化的模拟量(如温度、压力)等进行测量,而这些模拟量对于单片机来说是无法直接测量的,单片能够直接接收的是数字量,因此必须进行模数转换后才能送给单片机进行处理。我们把模拟量转换成数字量的过程称为A/D转换。本节主要介绍并行A/D器件ADC0809和串行A/D器件TLC1549。10.1.1几种常用的A/D方法介绍A/D转换器的种类很多,例如:计数器式A/D转换器(结构简单,但转换速度也很慢,所以很少采用)、双积分式A/D转换器(抗干扰能力强,转换精度高,但转换速度不理想)、逐次逼近式A/D转换器(既照顾了速度,又具有一定得精度,是目前应用最多的一种)、并行比较型/串并行型A/D转换器、Σ-Δ调制型A/D转换器、电容阵列逐次比较型A/D转换器、压频变换型A/D转换器。在这些转换中,主要区别是速度、精度和价格,一般来说速度越快,精度越高,则价格也越高。1、逐次逼近式A/D转换器逐次逼近式A/D转换器也称连续比较式A/D转换器是以D/A转换器为基础,加上比较器、逐次逼近式寄存器、置数选择逻辑电路以及时钟等组成。如图10.1所示在启动信号控制下,首先置数选择逻辑电路给逐次逼近式寄存器最高位置“1”,VREF经D/A转换成模拟量与输入的模拟量VIN进行比较,电压比较器给出比较结果。如果输入量大于或等于经D/A转换输出的量,则比较器输出为“1”,否则为“0”,置数选择逻辑电路根据比较器输出的结果,修改逐次逼近式寄存器中的内容,使其D/A转换后的模拟量逐次逼近输入的模拟量。这样一来,经过若干次修改后的数字量,就是A/D转换的结果量1、逐次逼近式A/D转换器逐次逼近式电路的优点是速度较高,功耗低,在低分辨率(精度)(<12位)时价格低,但高精度(>12为)时价格高。现在单片机内集成的A/D模块许多都是逐次逼近式的,其一般都可以实现8~12位的分辨率。实际得到的精度要比其分辨率低1~2位,如果要实现其更高的分辨率的采样,就需要使用Σ-Δ型A/D了。2、Σ-Δ调制型A/D转换器Σ-Δ型A/D由积分器、比较器、1位DA转换器和数字滤波器等组成。原理上近似于积分型,将输入电压转换成时间(脉冲宽度)信号,用数字滤波器处理后得到数字值。主要用于音频和测量。电路的数字部分基本上容易单片化,因此容易做到高分辨率;其缺点是转换速率较慢。3、并行比较型/串并行型A/D转换器并行比较型A/D采用多个比较器,仅作一次比较而实行转换,又称FLash(快速)型。由于转换速率极高,n位的转换需要2n-1个比较器,因此电路规模也极大,价格也高,只适用于视频A/D转换器等速度特别高的领域。它由三部分构成:分压器、比较器、编码器。这种A/D变换器的优点是转换速度快,缺点是所需比较器数目多,位数越多矛盾越突出。输入电压Ux比较器输出编码器输出ABCDEFGD2D1D0E>Ux>7E/811111111117E/8>Ux>6E/811111101106E/8>Ux>5E/811111001015E/8>Ux>4E/811110001004E/8>Ux>3E/811100000113E/8>Ux>2E/811000000102E/8>Ux>1E/810000000011E/8>Ux>000000000004、压频变换型压频变换型(Voltage-FrequencyConverter)是通过间接转换方式实现模数转换的。其原理是首先将输入的模拟信号转换成频率,然后用计数器将频率转换成数字量。从理论上讲这种A/D的分辨率几乎可以无限增加,只要采样的时间能够满足输出频率分辨率要求的累积脉冲个数的宽度。其优点是分辩率高、功耗低、价格低,但是需要外部计数电路共同完成A/D转换。10.1.2A/D转换技术指标ADC(Analog-DigitalConverter,模/数转换器)的性能指标是正确选用A/D芯片的基本依据,也是衡量A/D质量的关键问题。ADC性能指标很多,例如,线性度、偏移误差、温度灵敏度和功耗等。分辨率分辨率(Resolution)是指转换器所能分辨的被测量的最小值。对于ADC来讲,分辨率表示输出数字量变化一个相邻数码所需要输入模拟电压的最小变化量。如果数字量的位数为n,分辨率就等于1/2n满刻度值。需要注意的是,分辨率和精度并不是一个概念,精度会受到各种因素的影响。比如,一个10位分辨率的A/D转化你,其精度往往要低于10位。转换速度(ConversionRate)是指完成一次A/D转换所需时间的倒数,是一个非常重要的指标。ADC型号不同,转换速度差别很大。一般情况下,8位逐次逼近式ADC转换时间为100μs左右。选用ADC型号时,首先应看现场信号变化的频繁程度是否与ADC的速度相匹配,在被控系统控制时间允许的情况下,应尽量选用价格便宜的逐次逼近式A/D转换器。转换精度(Conversionaccuracy)由模拟误差和数字误差组成。模拟误差是比较器、解码网络中的电阻值以及基准电压波动等引起的误差。数字误差主要包括丢码误差和量化误差,前者属于非固定误差,由器件质量确定,后者和A/D转换器数字量的位数有关,位数越多,误差越小。量化间隔量化间隔是A/D转换器的主要技术指标之一,可以理解为A/D转换的“台阶”、“步长”,可由下面的式子求得:其中,n为转换器的位数。量化误差在A/D转换过程中,模拟量是一种连续变化的量,数字量是断续的量。因此,在A/D转换器位数固定的情况下,并不是所有的模拟电压都能用数字量精确表示。例如,假设2位二进制A/D转换器的满量程值VAD为3V,即输入模拟电压可以在0~3V之间连续变化,但2位数字量只能有4种组合。如果输入模拟电压为0V、1V、2V和3V,2位数字量恰好能精确表示,不会出现量化误差。如果输入模拟电压为其余值,则会出现量化误差,输入模拟电压为:0.5V、1.5V和2.5V时量化误差最大,应当是0.5V,故量化误差的定义为分辨率(A/D转换器所能分辨的最小模拟电压)的1/2。量化误差有两种表示方法:一种是绝对量化误差;另一种是相对量化误差。例如,当满量程电压为5V,采用10位A/D转换器的量化间隔、绝对量化误差、相对量化误差分别是为10.1.3并行转换芯片ADS7804ADS7804是一种新型12位A/D转换器。该A/D转换器采用逐次逼近式工作原理,单通道输入,模拟输入电压的范围为±10V,采样速率为100kHz。与8位和16位的A/D转换器相比,12位A/D转换器以其较高的性能价格比在仪器仪表中得到广泛的应用。VIN为输入的模拟信号。D11~D0(6~18脚)为数字量并行输出口,DZ(19~22脚)是为了使管脚与16位A/D转换器ADS7805兼容而设的,可悬空。控制信号类(输入)为片选信号,R/(输入)为读取结果/模数转换控制信号,(输出)用于指示转换是否完成,BYTE(输入)信号用来控制从总线读出的数据是转换结果的高字节还是低字节。将R/(pin24)低电平至少40ns(最大6μs)将启动ADC转换;引脚(pin26)将变低电平并且保持低电平直到转换完成并且输出寄存器更新;DATA将以二进制补码的形式进行输出;处于高电平的时候才可以锁存数据,当处于低电平的时候其转换结果可以忽略。ADS7804内部结构因为转换结果为12位,所以对8位单片机而言,必须分两次读入,这个功能由BYTE脚实现。当BYTE脚为高电平时,数据总线上输出高字节,反之,输出低字节。ADS7804转换得到的数字结果是以补码形式给出的,表10.3给出模拟电压和数字电压的输出关系。-10V~

9.99512V为量程,4.88mV为电压分辨率。因为ADS7804的

信号脉冲宽度要求为40ns~6μs之间,而对于单片机而言,只要对外

部设备进行读操作,即会产生脉冲,其宽度为6个振荡周期,如采用12MHz的晶振,其脉冲宽度为500ns,所以将ADS7804的接单片机的RD信号是再合适不过了。至于R/、和BYTE信号,只需连接到普通的锁存功能的端口即可。图10.7是ADS7804与单片机AT89C51的接口电路。ADS7804与51单片机的接口参考程序为每1ms采集一次数据,使用定时器0,方式1进行采样,将采样的结果按顺序存入array[N]数组中,数组N采用宏定义的方式进行定义,也可以修改N的值,但是要注意counter变量的定义范围,无符号char型的取值为0~255;如果采集的数据大于255个数据,需要改变变量的类型。其参考程序如下:#include<reg51.h>#include<absacc.h>#defineuintunsignedint#defineucharunsignedchar#defineN100/*定采样长度为100点*/sbitBYTE=P1^0;sbitRC=P1^1;sbitBUSY=P1^2;/*定义控制信号位*/intxdataarray[N];/*在外部存储器内定义长度为N的有符号整数个数*/ucharcounter;intADS7804(void);/*ADS7804底层驱动程序***/IntADS7804(void){uintUlow,Uhigh;intresult;RC=0;/*低电平,进入转换模式*/Ulow=XBYTE[0xffff];

/*产生读脉冲,启动A/D转换*/while(BUSY==0);/*等待转换完成*/RC=1;BYTE=0;

/*进入读模式,选择低字节*/Ulow=XBYTE[0xffff];/*读转换结果低8位*/BYTE=1;/*选择高字节*/Uhigh=XBYTE[0xffff]&0x0f;/*读转换结果高4位*/result=Uhigh*256+Ulow;

/*得到12位结果*/if(result>=0x0800)result=result|0xf000;/*如为负值,则符号扩展*/return(result);/*返回转换结果*/}/***ADS7804采样程序*******/Voidmain(void){TMOD=0x01;/*定时器0,方式1*/TH0=0xFC;TL0=0x18;/每1ms采集一次数据EA=1;ET0=1;TR0=1;/*启动定时*/while(1);}/***ADS7804中断程序********/VoidTimer0()interrupt1{array[counter++]=ADS7804if(counter==N)counter=0;

TH0=0xFC;TL0=0x18}10.1.4串行转换芯片TLC15491、概述TLC1549系列是美国德州仪器公司生产的具有串行控制、连续逐次逼近型的模数转换器,它采用两个差分基准电压高阻输入和一个三态输出构成三线接口,其中三态输出分别为片选(CS低电平有效),输入/输出时钟(I/OCLOCK),数据输出(DATAOUT)。TLC1549引脚排列如图10-8所示。TLC1549能以串行方式送给单片机,其功能结构如图10-9所示。由于TLC1549采用CMOS工艺。内部具有自动采样保持、可按比例量程校准转换范围、抗噪声干扰功能,而且开关电容设计使在满刻度时总误差最大仅为±1LSB(4.8mV),因此可广泛应用于模拟量和数字量的转换电路。TLC1549在工作温度范围内的极限参数:电源电压范围:-0.5V~6.5V;125℃输入电压范围:-0.3V~VCC+0.3V;输出电压范围:-0.3~VCC+0.3V;正基准电压:VCC+0.1V;负基准电压:-0.1V;峰值输入电流:+20mA;峰值总输入电流:±30mA;工作温度范围:TLC1549M为-55℃~125℃,TLC1549C为0℃~70℃,TLC1549I为-40℃~85℃。2、TLC1549工作原理TLC1549具有6种串行接口时序模式,这些模式是由I/OCLOCK周期和CS定义。根据TLC1549的功能结构和工作时序,其工作过程可分为3个阶段:模拟量采样、模拟量转换和数字量传输。图10-8所示为TLC1549的时序图。在第3个I/OCLOCK下降沿,输入模拟量开始采样,采样持续7个I/OCLOCK周期,采样值在第10个I/OCLOCK下降沿锁存。其详细步骤为:门限检测器检测第一只电容(weight=512)的电压,该电容的节点512连接到REF+。梯型网络中,其他电容的等效节点接到REF-。如果总节点的电压大于门限检测器的电压(大约VCC的一半),“0”被送至输出寄存器,此时512-weight的电容连接到REF-。经反相后为“1”,即为最高位MSB为1;如果总节点的电压小于门限检测器的电压(大约VCC的一半),“1”被送至输出寄存器,此时512-weight的电容连接到REF+,经反相后为“0”,存为最高位MSB为0。对于256-weight的电容和128-weight的电容也要通过连续逐次逼近型的重复操作,直到确定从高位(MSB)到低位(LSB)所有数字量,即为初始的模拟电压数字量。整个转换过程调整VREF+和VREF1以便从数字0至1跳变的电压(VZT)为0.0024V,满度跳变电压(VFT)为4.908V,即1LSB=4.8mV。即CS由高变为低时,串行接口接收上一次转换结果。首先移出上一次转换结果数字量对应的最高位,下一个I/OCLOCK的下降沿驱动DATAOUT输出上一次转换结果数字量对应的次高位,第9个I/OCLOCK的下降沿将按次序驱动DATAOUT输出上一次转换结果数字量的最低位,第10个I/OCLOCK的下降沿,DATAOUT输出一个低电平,以便串行接口传输超过10个时钟;I/OCLOCK从主机串行接口接收长度在10~16个时钟的输入序列。CS的下降沿,上一次转换的MSB出现在DATAOUT端。10位数字量通过DATAOUT发送到主机串行接口。为了开始传输,最少需要10个时钟脉冲,如果I/OCLOCK传送大于10个时钟,那么在第10个时钟的下降沿,内部逻辑把DATAOUT拉至低电平以确保其余位清零。在正常转换周期内,即规定的时间内CS端由高电平至低电平的跳变可以终止该周期,器件返回初始状态(输出数据寄存器的内容保持为上一次转换结果)。由于可能破坏输出数据,所以在接近转换完成时要小心防止CS拉至低电平。例:TLC1549转换程序#include"reg51.H"

#include"intrins.h"

externucharTLC1549_value_h;//高2位

externucharTLC1549_value_l;//低8位

sbitTLC1549_CS=P1^7;sbitTLC1549_DATA=P1^6;sbitTLC1549_CLK=P1^5;例:TLC1549转换程序voidTLC1549_conver(void){uchari;TLC1549_value_h=0;TLC1549_value_l=0;TLC1549_CS=1;//初始状态

TLC1549_CLK=0;_nop_();TLC1549_CS=0;_nop_();_nop_();_nop_();_nop_();例:TLC1549转换程序if(TLC1549_DATA==1)//bit9{TLC1549_value_h|=0x01;}else{TLC1549_value_h&=0xFE;}TLC1549_value_h=TLC1549_value_h<<1;TLC1549_CLK=1;TLC1549_CLK=0;//clk的下降沿DAYA端输出新的数据

if(TLC1549_DATA==1)//bit8{TLC1549_value_h|=0x01;}else{TLC1549_value_h&=0xFE;}例:TLC1549转换程序for(i=0;i<8;i++)//读低8位的数据

{TLC1549_CLK=1;TLC1549_CLK=0;//clk的下降沿DAYA端输出新的数据

TLC1549_value_l=TLC1549_value_l<<1;if(TLC1549_DATA==1)//bit7~0{TLC1549_value_l|=0x01;}else{TLC1549_value_l&=0xFE;}}

TLC1549_CLK=1;TLC1549_CLK=0;//TLC1549_CS=1;}

TLC154910位编程#include"reg51.H“#include"intrins.h"externuintTLC1549_value;sbitTLC1549_CS=P1^7;sbitTLC1549_DATA=P1^6;sbitTLC1549_CLK=P1^5;voidTLC1549_conver(void){uchari;TLC1549_value=0;

TLC1549_CS=1;//初始状态

TLC1549_CLK=0;_nop_();TLC1549_CS=0;_nop_();_nop_();_nop_();_nop_();for(i=0;i<10;i++)

{TLC1549_CLK=1;TLC1549_CLK=0;//clk的下降沿DAYA端输出新的数据TLC1549_value=TLC1549_value<<1;if(TLC1549_DATA==1)//bit9~0{TLC1549_value|=0x01;}} TLC1549_CLK=1;TLC1549_CLK=0;//TLC1549_CS=1;}

10.1.5设计一简易数字电压表

本方案选用了一只四联共阴极数码管作为显示器,按照动态显示原理接线,其中段码通过锁存器74LS245驱动后接于P0口,注意P0口必须接上拉电阻。位码由4只PNP型三极管驱动后接于P2.0~P2.3。A/D转换芯片采用TLC1549,以通用I/O口方式与单片机连接。图中TLC1549的3个引脚CLK、DOUT和分别于单片机的P1.0、P1.1和P1.2相连。数字电压表原理图具体的程序如下所示#include<REG51.H>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedint#definenop_nop_()charmap[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};sbitTLC1549_CLKP1.0sbitTLC1549_DOUTP1.1sbitTLC1549_CSP1.2uintADConvertor(void);voiddisplay(uintvalue);voiddelay20us(void);//用于TLC1549的转换voiddelay();/********************************主函数***************************/voidmain(){ uintvalue=0;value=ADConvertor();//TLC1543每次读取的都是上一次的转换结果,所以首次上//电需调用此函数,以保证数据读取正确。value=0; while(1){ value=ADConvertor(); display(display)}}/****TLC1549的驱动程序*****/uintADConvertor(void);{ uintresult=0;uchari; TLC1549_CS=1; nop; TLC1549_CS=0; for(i=0;i<10;i++)//读取AD数据

{

TLC1549_CLK=0;result=(result<<1)|TLC1549_DOUT; TLC1549_CLK=1; nop();}delay20us();//延时时间小于21μsTLC1549_CS=1;return(result);//返回采集的数据}/*****显示程序*****/voidprint(uintvalue){ charp_buf[4]=“

”; chari,pos=0xF7; for(i=0;i<4;i++){ p_buf[i]=value%10; value/=10; if(value==10); break;}for(i=0;i<4;i++){ P2=P2|0x0F; P2=P2&pos; P0=map[p_buf[i]]; pos=(pos>>1)|0x80; delay();}}/*****************延时函数***********************/Voiddelay(){ chari; for(i=0;i<100;i++);}/*********************延时函数***********************/voiddelay20us(void)//误差0us{unsignedchara,b;for(b=1;b>0;b--)for(a=7;a>0;a--);}10.2D/A转换器概述图10.18中,被控对象的过程信号由变送器或传感器变换成相应的模拟电量,然后经多路开关汇集给ADC,转换后的数字量送给单片机。单片机经过运算和处理,结果可有两种输出形式:通过人机交互单元(如打印、显示等)报告当前状态;通过DAC变换成模拟电量对被控对象进行调整。如此往复,以实现目标控制要求。10.2.1D/A转换原理一般情况下,由于执行机构都是电流驱动,D/A转换器输出的模拟量必须经过电压/电流转换才能驱动执行机构动作,以此控制被控实体的工作。D/A转换器的输出模拟量能随输入数字量正比地变化,使输出模拟量能直接反应数字量的大小,即有如下关系式:=式中,VR为常量,由D/A转换器的参考电压VREF决定;=权电阻网络型D/A转换器所谓“权电阻”是指电阻值的大小,与有关数字量的权重密切相关。如图10.19所示,S3、S2、S1和S0的状态分别受代码d3、d2、d1和d0的取值控制,代码为1时,开关接到参考电压Vref上,代码为0时开关接地。在运算放大器输入电流为零的条件下可得:由于V-≈0,因而各支路电流分别为:2、倒T形电阻D/A转换器如图10.20所示,由图可知,电阻网络中只有R、2R两种阻值的电阻,这给集成电路的设计和制作带来了很大的方便。如图10.21所示,从AA、BB、CC、DD每个端口向左看过去的等效电阻都是R,因此参考电源流入倒T形电阻网络的总电流为I=VREF/R,而每个支路的电流依次为:I/2,I/4,I/8,I/16。3、权电流型D/A转换器在分析电阻网络D/A转换器和倒T型电阻网络D/A转换器的过程中,都把模拟开关作为理想开关处理,但实际中每个开关都有一定的导通电阻和导通压降,而且每个开关的情况也不完全相同,这些问题的存在会引起转换误差,影响转换精度,所以出现了权电流型D/A转换器。10.2.2D/A转换技术指标1、分辨率分辨率是指D/A转换器能分辨的最小输出模拟增量,取决于输入数字量的二进制位数。一个n位的DAC所能分辨的最小电压增量定义为满量程值得2-n倍。例如,满量程为10V的8位DAC芯片的分辨率为10V2-8=39mV;一个同样量程的16位的分辨率高达10V2-16=153μV。转换精度2、转换精度转换精度和分辨率是两个不同的概念。转换精度是指满量程时DAC的实际模拟输出值和理论值的接近程度。对T型电阻网络的DAC,其转换精度与参考电压VREF、电阻值和电子开关的误差有关。例如,满量程时理论输出值为10V,实际输出值在9.99~10.01V之间,其转换精度为

10mV。通常,DAC的转换精度为分辨率的一半,即为LSB/2。LSB即为分辨率,指最低1位数字量变化引起输出电压幅度的变化量。3、偏移量误差偏移量误差是指输入数字量为零时,输出模拟量对零的偏移值。这种误差通常可以通过DAC的外接VREF和电位器加以调整。4、线性度线性度是指DAC的实际转换特性曲线和理想直线之间的最大偏差。通常,线性度不应超出

。除上述指标外,转换速度和温度灵敏度也是DAC得重要技术参数。不过,因为他们都比较小,通常情况下可以不予考虑。10.2.3并行转换芯片MAX526MAX526D/A芯片是Maxim公司生产的12位、4路高精密并行数模转换器。数据通过两次写操作(低8位LSB,高4位MSB)装入各输入寄存器。并通过异步装载输入信号将输入寄存器数据装入寄存器。建立时间为3μs,1LSB不可校正误差的优点,使其广泛地应用在工业处理控制、自动测试设备等方面。其主要性能指标如下:分辨率为12位并行输入

总不可校正线性误差为

1LSB4路单端电压输出型外接基准源,可接DC或AC信号与TCL/CMOS芯片兼容最小转换时间为3μs,由内部或外部采集控制模拟量输出,输出电压为,NB的值为000H~FFFH与VOUT的0~10V对应。主要引脚及功能:输出端:4通道电压型模拟量输出引脚VOUTA~VOUTD电源信号:AGND(模拟地)、DGND(数字地)、VSS(-5V)、VDD(+12V)控制信号:CSMSB、CSLSB(高低字节位选择,当CSLSB为0时低8位数据输出;CSMSB为0时,高4位数据输出)、LDAC(为0时将各自输入寄存器的内容转换到它各自独立的DAC寄存器中)、A0A1(通道选择)数据线:D0~D7、D8~D11与D0~D3复用基准信号源:REFAB(A、B模拟量基准输入)、REFCD(C、D模拟量基准输入)从图10.25MAX526的内部结构中可以看出此D/A数模转换器内部结构共有四组配置一样的电路。且每组电路中的12位分为低8位和高4位两个寄存器;通过A0(PIN18)和A1(PIN17)选择以便区分访问的是VOUTA~VOUTD。通过CSLSB(PIN21)、CSMSB(PIN22)、WR(PIN20)三个信号将转换数据装入各个输入寄存器,并区分写入的数据是高位还是低位输入寄存器,具体的操作参考表10.6。CSLSB、CSMSB、WR从数据总线加载到由A0和A1选择的输入寄存器。拉低CSLSB、WR可以将输入寄存器的低8位进行加载,而拉低CSMSB、WR可将高4位进行加载。数据加载到输入寄存器中的顺序并不重要。重要的是通过将CSLSB、CSMSB、WR拉低,可以同时将输入寄存器的12位进行加载。请注意,数据将分别写入4MSBs(D8~D11)和4LSBs(D3~D0)。图10.26为MAX526的输入控制逻辑。MAX526与单片机的接口电路单片机的P0口用作数据口,注意设计P0口时需要添加上拉电阻;P2口的P2.2~P2.7和MAX526的控制信号线相连接A1、A0为通道选择;A1=0,A0=0选通A通道,A1=0,A0=1选通B通道,A1=1,A0=0选通C通道,A1=1,A0=1选通D通道,DATA_M为输入的数据,先输入低8位,后输入高4位。#include<reg52.h>#include<intrins.h>#defineDATA_MP0#defineucharunsignedcharsbitWR=P2^2;sbitA0=P2^3;sbitA1=P2^4;sbitCSMSB=P2^5;sbitCSLSB=P2^6;sbitLDAC=P2^7;voidmax526()

/*驱动函数*/{DATA_M=0x0F;//可根据要求输出所需要的数据A1=1;//选择的C通道A0=0;CSMSB=0;CSLSB=0;WR=0;_nop_();_nop_();WR=1;DATA_M=0x0F;//可根据要求输出所需要的数据CSMSB=0;CSLSB=1;WR=0;_nop_();_nop_();WR=1;_nop_();_nop_();LDAC=0;}voidmain(){ max526(); while(1);}9.2.2并行D/A转换器件DAC08321、DAC0832的内部结构DAC0832是采用CMOS工艺制成的单片直流输出型8位数/模转换器。如图9-11所示,它由倒T型R-2R电阻网络、模拟开关、运算放大器和参考电压VREF四大部分组成。运算放大器输出的模拟量V0为:

主要性能指标:(1)分辨率:8位(2)输出稳定时间:1µs(3)功耗:20mw(4)工作电源:+5V~+15V(5)非线性误差:0.2%(6)工作方式:直通、单缓冲、双缓冲4、DAC0832的应用举例【例9-1】:应用DAC0832设计一个锯齿波信号发生器。#include<absacc.h>#include<reg52.h>#include<intrins.h>#defineDAC0832XBYTE[0xfeff]intnum;voidmain(){while(1){for(num=0;num<255;num++)//DAC0832=num; {P2=num;}}}【例9-2】按图9-15连接电路生成三角波。分析:三角波数据从0增加到FFH后,再依次减,减到0后再依次加,反复循环可产生三角波。程序如下:#include<absacc.h>#include<reg52.h>#include<intrins.h>intnum;voidmain(){while(1){for(num=0;num<255;num++) {P2=num;}for(num=254;num>=0;num--){P2=num;}}}9.3生成正弦波#include<absacc.h>#include<math.h>#include<reg51.h>#definepi 3.14voidmain(){ inti; floatT;

while(1) { for(i=0;i<256;i++) { T=pi*i/32; T=100*sin(T)+100; P0=(int)T; }//主函数

}}9.2.3串行D/A转换器件TLC5615TLC5615为美国德州仪器公司1999年推出的产品,是具有串行接口的数模转换器,其输出为电压型,最大输出电压是基准电压值的两倍。带有上电复位功能,即把DAC寄存器复位至全零。1、TLC5615的特点(1)10位CMOS电压输出;(2)5V单电源供电;(3)与CPU三线串行接口;(4)最大输出电压可达基准电压的二倍;(5)输出电压具有和基准电压相同极性;(6)建立时间12.5μs;(7)内部上电复位;(8)低功耗,最大仅1.75mW。

2、TLC5615引脚说明TLC5615有小型和塑料DIP封装,DIP封装的TLC5615芯片引脚排列如图所示。引脚功能说明如下:脚1DIN:串行数据输入端;脚2SCLK:串行时钟输入端;脚3CS:芯片选用通端,低电平有效;脚4DOUT:用于级联时的串行数据输出端;脚5AGND:模拟地;脚6REFIN:基准电压输入端;脚7OUT:DAC模拟电压输出端;脚8VDD:正电源端。3、TLC5615的时序分析TLC5615的时序如图所示。由时序图可以看出,当片选CS为低电平时,输入数据DIN由时钟SCLK同步输入或输出,而且最高有效位在前,低有效位在后。输入时SCLK的上升沿把串行输入数据DIN移入内部的16位移位寄存器,SCLK的下降沿输出串行数据DOUT,片选CS的上升沿把数据传送至DAC寄存器。当片选CS为高电平时,串行输入数据DIN不能由时钟同步送入移位寄存器;输出数据DOUT保持最近的数值不变而不进入高阻状态。由此要想串行输入数据和输出数据必须满足两个条件:第一时钟SCLK的有效跳变;第二片选CS为低电平。这里,为了使时钟的内部馈通最小,当片选CS为高电平时,输入时钟SCLK应当为低电平。串行数模转换器TLC5615的使用有两种方式,即级联方式和非级联方式。如不使用级联方式,DIN只需输入12位数据。DIN输入的12位数据中,前10位为TLC5615输入的D/A转换数据,且输入时高位在前,低位在后,后两位必须写入数值为零的低于LSB的位,因为TLC5615的DAC输入锁存器为12位宽。如果使用TL5615的级联功能,来自DOUT的数据需要输入16位时钟下降沿,因此完成一次数据输入需要16个时钟周期,输入的数据也应为16位。输入的数据中,前4位为高虚拟位,中间10位为D/A转换数据,最后2位为低于LSB的位即零。4、应用电路实例图给出了在开关电源中,TLC5615和51单片机的接口电路。在电路中,51单片机的P3.0-P3.2分别控制TLC5615的片选CS,串行时钟输入SCLK和串行数据输入DIN。电路的连接采用非级联方式。根据开关电源的设计要求,可变基准电压范围为0V~4V。因此,TLC5615的基准电压选为2.048V,其最大模拟输出电压为4.096V。可满足开关电源的要求。TLC5615采用非级联方式,将要输入的12位数据存在R0、R1寄存器中,其D/A转换程序如下:CLRP3.0;片选有效MOVR2,#4;将要送入的前四位数据位数MOVA,R0;前四位数据送累加器低四位SWAPA;A中高四位与低四位互换LCALLWRdata;DIN输入前四位数据MOVR2,#8;将要送入的后八位数据位数MOVA,R1;八位数据送入累加器ALCALLWRdata;DIN输入后八位数据CLRP3.1;时钟低电平SETBP3.0;片选高电平,输入的12位数据有效END

结束送数子程序如下:WRdata:NOP

;空操作LOOP:CLRP3.1;时钟低电平

RLCA;数据送入位标志位CY

MOVP3.2,C;数据输入有效

SETBP3.1;时钟高电平

DJNZR2,LOOP;循环送数

RET

;返回5、结语由于采用接口简单的模拟数字转换器TLC5615,使得开关电源的硬件电路大为简化,线路板面积缩小,成本降低。10.2.5设计一波形发生器利用单片机和TLC5615芯片设计出能产生锯齿波、正弦波、方波的信号发生器,系统中设计三个按键,分别是产生锯齿波、正弦波、方波的触发器。按下一次触发信号发生器发出相关信号,再按一下,将停止。其电路图如10.33所示。电路的P2.0~P2.2接TLC5615的DIN、SCLK、CS;P1.0~P1.2接按键。单片机与TLC5615连接图#include<reg51.h>#include<intrins.h>#include<absacc.h>#include<math.h>#defineucharunsignedchar#defineuintunsignedint#definepi3.14/**********相关端口设计*************/sbitDIN=P2^0; //TLC5615传输口sbitSCLK=P2^1; //TLC5615时钟线sbitCS=P2^2; //TLC5615片选sbitKEY1=P1^0; //方波sbitKEY2=P1^1; //锯齿波sbitKEY3=P1^2; //正弦波/*******延时函数****/voiddelayms(uintz){

uintx,y; for(x=z;x>0;x--) for(y=110;y>0;y--);}voiddelayus(uinti){

uintj; for(i=j;j>0;j--);}/**TLC5615的驱动程序****/voidoutput(uintDA_Value) {unsignedchari;DA_Value=DA_Value<<6;SCLK=0; //为低,准备输入数据CS=0;//片选for(i=12;i>0;i--)//从高位开始,连续取出12位数据{if(DA_Value&0x8000)DIN=1;elseDIN=0;

SCLK=1; //上升沿,准备输入寄存器SCLK=0;//准备下一次输入DA_Value=DA_Value<<1;}CS=1; //在SCLK为低的时候,CS上升沿,数据开始DA转化。}/*****主函数********/voidmain(){ uchari; uintj;floatT; while(1) {if(KEY1

温馨提示

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

评论

0/150

提交评论