《[信息与通信]电子设计创新训练提高第三章常用AD与DA.ppt》由会员分享,可在线阅读,更多相关《[信息与通信]电子设计创新训练提高第三章常用AD与DA.ppt(48页珍藏版)》请在三一办公上搜索。
1、第三章 常用A/D、D/A转换器应用介绍,3-1 常用A/D转换器,作为智能设备,经常需要处理模拟量的前向通道与后向通道(即输入与输出),这两个环节需要使用模/数与数/模转换器。,一、分类 从接口类型分类,分为并口、串口方式及非标准接口;从转换原理分类,又分为比较型与积分型。1、接口方式简介 常用的嵌入式系统外围芯片,包括A/D及D/A芯片,大体上使用三类接口规范:并口、串口方式及非标准接口。,(1)并口 此类接口为计算机硬件典型接口。需要含有:电源、数据总线(一般8位)、地址总线(宽度依据器件存储器数量而定)、控制总线(读、写、片选、时钟、中断、复位等)。此类芯片能够与典型的系统外部总线直接
2、无缝接口(如同8255芯片一样)。如果嵌入式系统没有扩展外部总线,亦可以使用I/O口来模拟总线进行接口。特点是读写控制速度快,控制软件简单;缺点是占用总线,使用了大量的I/O,芯片尺寸大,线路板布线复杂。(2)串口 考虑到大部分外设都不需要很高的速度,同时也为节省MCU的I/O,目前多种外设:EEPROM、数字传感器芯片、A/D及D/A芯片、显示模块等都采用串行接口。,常用的串行接口有移位寄存器、SPI、I2C、1线接口等。特点是读写控制速度相对较慢,需要一定的控制软件开销;优点是仅使用了少量的I/O,最少只需要1根I/O;芯片尺寸校,线路板布线简单。,2、转换原理分类 从转换原理分类,分为比
3、较型与积分型。(一)比较型ADC 比较型ADC可分为反馈比较型及非反馈(直接)比较型两种。比较型ADC优点是速度快,缺点是很难做到高的位数。高速的并行比较型ADC是非反馈的,N位2进制A/D转换器就需要2(N-1)个比较器。制作工艺困难,价格比较高,仅用于视频等告诉信号处理场合。(简单介绍4个比较器工程3位2进制ADC的原理)智能仪器中常用到的中速中精度的逐次逼近型ADC是反馈型。仅使用一个比较器,采用类似与对分搜索的方法工作。,图3-1 逐次逼近式转换器原理,(二)积分型型ADC 常用双积分、V/F、-等类型,以双积分型为例。,图3-2 双积分ADC,双积分式ADC的优点:对R、C及时钟脉冲
4、Tc的长期稳定性无过高要求即可获得很高的转换精度。微分线性度极好,不会有非单调性。因为积分输出是连续的,因此,计数必然是依次进行的,即从本质上说,不会发生丢码现象。积分电路为抑制噪声提供了有利条件。双积分式ADC是测量输入电压在定时积分时间T1内的平均值,对干扰有很强的抑制作用,尤其对正负波形对称的干扰信号抑制效果更好,典型的是抗工频干扰。,二、ADC特性参数1、量化特性与量化误差,图3-3 量化特性及量化误差,数字量化最小分辨率=1;一般最小量化误差=1/2。,图3-4 理想ADC的传输特性和量化误差,2、常用性能衡量指标 A/D转换器常用以下几项技术指标来评价其质量水平。(1)分辨率 AD
5、C的分辨率定义为ADC所能分辨的输入模拟量的最小变化量。(2)转换时间 A/D转换器完成一次转换所需的时间定义为A/D转换时间。(3)精度 绝对精度 绝对精度定义为:对应于产生一个给定的输出数字码,理想模拟输入电压与实际模拟输入电压的差值。绝对精度由增益误差、偏移误差、非线性误差以及噪声等组成。相对精度 相对精度定义为在整个转换范围内,任一数字输出码所对应的模拟输入实际值与理想值之差与模拟满量程值之比。,偏移误差。ADC的偏移误差定义为使ADC的输出最低位为1,施加到ADC模拟输入端的实际电压与理论值1/2(Vr2n)(即0.5LSB所对应的电压值)之差(又称为偏移电压)。增益误差 增益误差是
6、指ADC输出达到满量程时,实际模拟输入与理想模拟输入之间的差值,以模拟输入满量程的百分数表示。线性度误差 ADC的线性度误差包括积分线性度误差和微分线性度误差两种。a积分线性度误差 积分线性度误差定义为偏移误差和增益误差均已调零后的实际传输特性与通过零点和满量程点的直线之间的最大偏离值,有时也称为线性度误差。b微分线性度误差 积分线性度误差是从总体上来看ADC的数字输出,表明其误差最大值。但是,在很多情况下往往对相邻状态间的变化更感兴趣。微分线性度误差就是说明这种问题的技术参数,它定义为,ADC传输特性台阶的宽度(实际的量子值)与理想量子值之间的误差,也就是两个相邻码间的模拟输入量的差值对于V
7、r/2n的偏离值。,图3-5 ADC的积分线性度误差 图3-6 ADC的微分线性度误差,与微分线性度误差直接关联的一个ADC的常用术语是失码(Missing Cord)或跳码(Skipped Cord),也叫做非单调性。这个特性决定了ADC的分辨率高并不一定代表它的先进性度高或者微分非线性小。,图3-7 ADC的失码现象,温度对误差的影响 环境温度的改变会造成偏移、增益和线性度误差的变化。一般来讲,目前的芯片制造技术能够对温度漂移进行较好的控制。,三、常用ADC芯片接口方法(一)AD574A及其与微处理器的接口,图3-8 AD57A的管脚图,AD574是美国AD公司生产的12位高速逐次逼近型模
8、数变换器,图3-8所示片内自备时钟基准源,变换时间快(25s),数字量输出具有三态缓冲器,可直接与微机的总线接El,又可直接采用双极性模拟信号输入,有着广泛的应用场合,供电电源为1 5 V,逻辑电源为+5 V。引脚:CS:片选,低有效;CE:片允许,高有效。RC:读变换,高为读AD变换结果,低为启动AD变换;128:数据格式,高为12位并行输出,低为8位(或4位)并行输出;,A0:字节地址短周期,高为8位变换输出低4位,低为12位变换输出高8位;STS:变换状态,高为正在变换,低为变换结束STS总共有三种接法:(1)空着:只能在启动变换,25 s以后读AD结果;(2)接静态端口线:可用查询方法
9、,待STS为低后再读AD变换结果;(3)接外部中断线:可引起中断后,读AD变换结果;REFIN:基准输入REFOUT:内部10V基准输出;BIP OFF:双极性方式时,偏置电压输入端(10V基准);,DBIIDB0:12位数据总线10VIN:单极性010 V模拟量输入;双极性0 5 V模拟量输入;20VIN:单极性020 V模拟量输入;双极性0 10 V模拟量输入;AGND:模拟地,图3-9 ADC574A单极性和双极性输入接法,表3.10 AD574的控制状态表及8位数据输出数据格式,图3-11 AD574A启动转换和读数据时序,对芯片的使用要点:必须清晰读懂时序才能编程控制!,图3-12
10、AD574A与8031的接口,如图3-12是8051单片机与AD574A的接口电路,其中还使用了三态锁存器74LS373和74LS00与非门电路,逻辑控制信号由(、和A0)有8051的数据口P0发出,并由三态锁存器74LS373锁存到输出端Q0、Q1和Q2上,用于控制AD574A的工作过程。AD转换器的数据输出也通过P0数据总线连至8051,由于我们只使用了8位数据口,12位数据分两次读进8051,所以接地。当8051的P3.0查询到STS端转换结束信号后,先将转换后的12位A/D数据的高8位读进8051,然后再将低4位读进8051。其实这里也可以直接采用延时25s后立即采样的方法读取数据。这
11、里不管AD574A是处在启动、转换和输出结果,使能端CE都必须为1,因此将8051的写控制线和读控制线通过与非门74LS00与AD574A的使能端CE相连。实际操作的时候,也可以直接连接到+5V电源。扩展空间为外部RAM8位寻址。启动一次12位ADC转换时,写命令地址:XXXXX000H;读出高8位数据地址:XXXXX010H;读出低8位数据地址为XXXXX011H。因为只扩展了一个器件,不需要考虑重叠地址问题,此处X可以取任意值,一般取0。,编程举例:采用延时取样,读取AD574结果。条件:图3-12,默认MCU为12MHz时钟。,#include#include unsigned int
12、get_ad574()unsigned char pdata*data p;unsigned int x;unsigned char i;*p=0 x00;i=25;While(i0)/延时25微秒_nop_();i=i-1;p=0 x02;x=(*p)*256;/读高位p=0 x03;x=x+*p;/并入低位,return x4;/清除低四位0返回void main()unsigned int y;y=get_ad574;while(1)此程序仅为一个采样示例,主函数实际没有使用意义。,(二)8路8位分辨率ADC0809及与MCU的直接I/O接口1、简介,ADC0809芯片有28条引脚,采用
13、双列直插式封装,如图3-13所示。下面说明各引脚功能。IN0IN7:8路模拟量输入端。2-12-8:8位数字量输出端。ADDA、ADDB、ADDC:3位地址输入线,用于选通8路模拟输入中的一路。ALE:地址锁存允许信号,输入,高电平有效。START:AD转换启动信号,输入,高电平有效。EOC:AD转换结束信号,输出,当AD转换结束时,此端输出一个高电平(转换期间一直为低电平)。OE:数据输出允许信号,输入,高电平有效。当AD转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。CLK:时钟脉冲输入端。要求时钟频率不高于640KHZ(典型500KHZ,转换时间小于100s)。REF(+
14、)、REF(-):基准电压。Vcc:电源,单一5V。GND:地。,图3-13 ADC0809引脚图,ADC0809的工作过程是:首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入之一到比较器。START上升沿将逐次逼近寄存器复位。下降沿启动 AD转换,之后EOC输出信号变低,指示转换正在进行。直到AD转换完成,EOC变为高电平,指示AD转换结束,结果数据已存入锁存器,这个信号可用作中断申请。当OE输入高电平 时,输出三态门打开,转换结果的数字量输出到数据总线上。,图3-14 ADC0809内部逻辑图与通道选择表,图3-15 典型总线方式的ADC0809接口,
15、如图3-15,是一个典型的0809总线方式接口电路。需要使用相当多的额外门电路配合,同时占用了MCU的I/O数个接口,在有时这样做是得不偿失的。大多数情况下,可以使用图3-16的I/O模拟总线接口方法。,图3-16 I/O模拟总线方式的ADC0809接口电路,如图3-16,采用延时100微秒读取结果的采样方法,使用10条I/O模拟总线与0809接口。四分频器将MCU的2MHz的ALE信号分频为500KHz,采用计数器或者74LS74分频。,2、编程举例:读取8个通道的输入。条件:图3-16。,#include#include unsigned char out8;/8个输入缓冲sbit sta
16、rt_ale=P30;sbit oe=P31;get_adc0809()unsigned char I,j;for(j=0,j0)/延时100微秒_nop_();i=i-1;,P2=0 xff;/输入口置1 oe=1;outj=P2;oe=0;void main()start_ale=0;oe=0;get_adc0809();whlie(1),(三)串行接口8位分辨率AD转换器TLC549(TLC548),TLC548和TLC549是以8位开关电容逐次逼近A/D转换器为基础而构造的CMOS A/D转换器。它们设计成能通过3态数据输出和模拟输入与微处理器或外围设备串行接口。TLC548和TLC5
17、49仅用输入/输出时钟(I/O CLOCK)和芯片选择(CS)输入作数据控制。TLC548 和 TLC549提供了片内系统时钟,它通常工作在4MHz且不需要外部元件。片内系统时钟使内部器件的操作独立于串行输入/输出的时序并允许 TLC548 和TLC549 象许多软件和硬件所要求的那样工作。I/O CLOCK 和内部系统时钟一起可以实现高速数据传送以及对于TLC548为每秒45,500次转换、对于TLC549为每秒40,000次转换的转换速度。,图3-17 TLC549引脚图,特点:8位分辨率A/D转换器微处理器外设或独立工作差分基准输入电压(2.5VVCC)转换时间 17s Max每次总存取
18、与转换周期数 TLC548 高达45,500 TLC549 高达40,000片内软件可控采样!保持总不可调整误差(Total Unadjusted Error)0.5LSB Max4MHz典型内部系统时钟宽电源范围 3V至6V低功耗 15mW Max能理想地用于包括电池供电便携式仪表的低成本、高性能应用引脚和控制信号与TLC540、TLC545 8位A/D转换器以及 TLC1540 10位A/D转换器兼容CMOS工艺,图3-18 TLC549转换时序(读取当前结果同时启动下一次转换),转换周期需要36个系统时钟周期(最大为17s),它开始于CS变为低电平之后I/O CLOCK 的第8个下降沿,
19、这适用于该时刻其地址存在于存储器中的通道。在CS变为低电平之后,最高有效位(A7)自动被放置在DATA OUT总线上。其余的7位(A6-A0)在前7个I/O CLOCK下降沿由时钟同步输出。B7-B0以同样的方式跟在其后。,/TLC549转换驱动函数:使用前请定义ad_cs,ad_clk,ad_dat等硬件I/O。unsigned char ad_ctr()unsigned char data i,j,k;ad_dat=1;ad_clk=0;ad_cs=0;for(i=0;i8;i+)j=j1;k=ad_dat;/共移出8位数据 ad_clk=1;ad_clk=0;j=j+k;ad_cs=1;
20、return j;/返回转换结果,(四)双积分ADC转换芯片ICL71351、简介,ICL7135是四位半双积分型A/D转换器,具有精度高和价格低的特点,多年来获得了广泛应用,芯片管脚见图3-19,具体详细资料可以在著名芯片商MAXIM公司的网站www.maxim-上查到(或者在上查找)。它最初的设计目的主要是为了数字测量仪表应用的,主要提供了与LED数码显示器的扫描接口,因此它没有设计与MCU的标准接口,而仅是提供出有限的A/D转换过程信号。大多数书籍在介绍ICL7135与MCU接口电路时,基本都是使用8255或者8155提供多条I/O来对接它的BCD码输出线和万、千、百、十和个位选通线等信
21、号,占用过多I/O口线,实际接口复杂。,图3-19 ICL7135管脚图,图3-20 ICL7135时序图,2、接口与编程设计举例 本设计则独辟蹊径,仅使用三根I/O口线就实现了ICL7135与51单片机的接口。本例默认ICL7135为连续转换方式,如果需要控制它的转换起始过程,则还需要一根I/O口线来控制它的R/H端。接口及BUSY信号波形参见图3-21,具体是利用了ICL7135的BUSY信号输出端,它指示了芯片的积分过程。芯片的积分过程包括了对测量信号的积分阶段及对基准电压的放电阶段,对测量信号积分时间固定为10000个时钟周期,而对基准放电的时间计数就是A/D转换结果。只要对BUSY信
22、号的高电平进行时钟同步计数,再减掉10000就能够得到A/D结果。具体的设计是使用单片机T0计数,INT0接BUSY做门控,同时使用INT0的后沿中断获得A/D转换结果。具体程序如下:,图3-21 ICL7135管脚排列、接口及积分波形图,图3-22 ICL7135应用时钟计数输出电气连接图,图3-23 ICL7135利用获得时钟的原理图,/程序举例:条件:图3-19#include int data addat;/定义A/D采样结果变量bit adover=0;/定义A/D结束标志sbit pol=P10;/定义A/D结果符号输入接口/INT0中断服务程序,获得A/D结果,同时置标志通知主程
23、序。void ad_t0_int()interrupt 0 addat=256*TH0+TL0;/BUSY后沿引发A/D结束中断,获得采样结果 TH0=55536/256;/重新置T0计数器,置-10000,省略减法操作 TL0=55536%256;if(pol=0)/如果符号采样为负,结果加负号 addat=0-addat;adover=1;/置位采样结束标志,通知主函数,/主函数初始化部分void main()TMOD=0 x0d;/T0设置为方式1,门控计数方式 TH0=55536/256;/初值为-10000 TL0=55536%256;EA=1;IT0=1;EX0=1;本例的硬件接口
24、和驱动程序都十分简洁,但需要指出的是,简洁的表面下是有代价的,那就是占用了MCU的一个定时/计数器和一个外部中断源。,3-2 常用D/A转换器,一、分类1、原理 数字量是用代码按数位组合起来表示的,对于有权码,每位代码都有一定的位权。为了将数字量转换成模拟量,必须将每1位的代码按其位权的大小转换成相应的模拟量,然后将这些模拟量相加,即可得到与数字量成正比的总模拟量,从而实现了数字模拟转换。这就是组成D/A转换器的基本指导思想。D/A转换器由数码寄存器、模拟电子开关电路、解码网络、求和电路及基准电压几部分组成。数字量以串行或并行方式输入、存储于数码寄存器中,数字寄存器输出的各位数码,分别控制对应
25、位的模拟电子开关,使数码为的位在位权网络上产生与其权值成正比的电流值,再由求和电路将各种权值相加,即得到数字量对应的模拟量。,2、类型(1)、按输出分类电流输出型、电压型输出型(2)、接口分类并口、串口,二、常用DAC芯片接口方法(一)ADC0832及其与微处理器的接口略(二)MAX531及其接口 串行接口,电压输出型,内置2.048V基准,可设置两倍基准输出,单5V供电,上电自动输出清零。,图3-24 MAX531管脚及内部结构图,图3-25 数据写入时序图,此芯片允许多级芯片级联,实现多路模拟输出同时刷新。,图3-26 简易数控直流电压源原理图(0.520V/2A),1、电源 电源采用串联
26、稳压电源,变压器为双绕组,功率大于40W。一组输入输出电压比为220:9,为控制器系统供电。全桥指标为1A/50V,或由4只1N400X系列整流二极管组成;滤波电容采用普通铝电解电容,原则上容量大于或等于220uF即可,耐压需要不低于25V;稳压器采用通用的TO-220封装形式的7805T即可;考虑到稳压后主要电流用户为LED,它为扫描脉动工作,100多mA,输出滤波电容容量宜偏大一些,具体使用了容量为100 uF的铝电解,耐压需要不低于10V。另外一组为数控输出部分供电,输入输出电压比为220:22,为系统输出供电。全桥指标为3A/50V,或由4只1N540X系列整流二极管组成;滤波电容采用
27、普通铝电解电容,原则上容量大于或等于4700uF即可,耐压需要不低于35V,实际使用了两只;稳压器采用运放跟随器方式,具体采用两级放大器,第一级将D/A输出最大量程扩大到20V,第二级运放采用跟随方式,使用两级三极管扩流。末级使用多管并联,实际三极管全部加了射极负反馈以保证均流;考虑到稳压后要作为1A电源使用,输出滤波电容容量宜偏大一些,具体使用了容量为4700 uF的铝电解,耐压需要不低于35V,实际使用了两只。2、MCU及D/A 考虑到实际问题简单,这里采用普通89C51芯片,单芯片系统。D/A选择了MAXIM公司的MAX531,为电压输出,串行接口的12位D/A转换器。它内置2.048V
28、基准,支持2倍基准电压输出。3、复位电路 考虑到系统的工作稳定性及参数存储需要,这里选择了X5045。4、显示电路及键盘 采用4只LED做显示器,动态扫描方式。设计了3个按键,用来进行初始时间设置。,/DA输出函数,使用前需要进行I/O定义!void da_out(unsigned int dat)unsigned char data i;unsigned int data j;j=dat;da_sclk=0;da_cs=0;for(i=0;i16;i+)da_din=j,(三)使用MCU定时器设计PWM式D/A 在某些特殊应用中,需要为外界提供高精度D/A输出,但考虑成本及功耗,不允许使用现
29、成的D/A芯片,此时就可以使用单片机的定时器来设计PWM发生器,再经过滤波产生直流输出来完成D/A功能。如果有的MCU直接支持PWM,则软件更简单。,图3-27 使用MCU定时器设计PWM式D/A,如图3-27就是一个PWM式D/A电路。PWM信号从单片机的P1.3输出,由LM285-12转换为高电平稳定的1.25V的PWM调制波形。再经过TLC2252运算放大器构成的二阶低通滤波器和一阶低通滤波器并放大后获得直流输出。本设计中,MCU电源VCC的范围可以在2.7V5V之间,整个D/A转换器功耗低于200A。由于使用了单电源供电,这个电路只能输出15V的工业标准信号。如果需要输出420mA直流
30、信号,只需要把第二级放大器改为可变恒流源电路即可。如果需要双极性信号,则需要配负电源,并使用加法器做电平移动。单片机使用标准8051内核的芯片,时钟为12MHz。使用T0设计PWM发生器,设计周期为5ms,单周期为5000个计数。分为两个半周期,由T0两次中断来生成。两个半周期的时间有主程序运算决定,通过调用output_dat(unsigned int dat)函数实现对两个半周期定时系数的赋值。具体程序如下:,#include bit out_flag;/D/A输出高低标志sbit out=P13;/PWM式D/A输出I/Odata union unsigned int word;stru
31、ctunsigned char hi;unsigned char lo;byte;outdatah;data union unsigned int word;structunsigned char hi;unsigned char lo;byte;outdatal;/脉冲高低占空时间变量定义/T0中断函数,完成PWM式DA输出t0_server()interrupt 1TR0=0;/关闭定时器out_flag=!out_flag;/输出标志取反out=!out;/PWM输出取反,获得方波if(out_flag=0)/下一个半周期应该输出高电平,置初值 TH0=outdatah.byte.hi;
32、TL0=outdatah.byte.lo;TR0=1;else/下一个半周期应该输出低电平,置初值 TH0=outdatal.byte.hi;TL0=outdatal.byte.lo;TR0=1;,/输出赋值函数,D/A输出满度最大默认5000void output_dat(unsigned int dat)outdatah.word=-dat;/51单片机为加计数器,因此送负数初值 outdatal.word=-(5000-dat);/主函数初始化部分void main()out_flag=0;/初始化输出状态 out=1;TMOD=0 x01;/T0设置为16位计数方式 EA=1;PT0=1;/T0设置为高优先级中断 ET0=1;,需要指出的是,为保证程序正常运行,本例中output_dat(unsigned int dat)函数的输入值dat范围必须限定在1004900之间。对应图3-28的电路,要获得15V输出,dat的实际取值大约在11004700之间,能够获得约12位的D/A输出精度。读者还能够发现,为了使制作PWM波形的T0中断简洁高效,高低电平时间变量单元采用了联合体内置结构体的方式定义,这样做能够使赋值操作变得十分精简。,