TankertankerDesign11.1STC89C52与A/D转换器的接口11.2STC89C52与D/A转换器的接口第十一章STC89C52与A/D、D/A转换器的接口TankertankerDesignD/A转换器(DigitaltoAnalogConverter)——能把数字量转换为模拟量的电子器件(简称为DAC)。A/D转换器(AnalogtoDigitalConverter)——能把模拟量转换成相应数字量的电子器件(简称为ADC)。TankertankerDesign11.1STC89C52与A/D转换器的接口1.概述A/D转换器把模拟量转换成数字量,以便于单片机进行数据处理。A/D转换一般要经过采样、保持、量化及编码4个过程。在实际电路中,有些过程是合并进行的,如采样和保持,量化和编码在转换过程中是同时实现的。目前单片的ADC芯片较多,对设计者来说,只需合理的选择芯片即可。现在部分的单片机片内集成了A/D转换器,仅在片内A/D转换器不能满足需要的情况下,需外扩。当然作为扩展A/D转换器的基本方法,还是应该掌握。TankertankerDesignAD转换器的分类尽管A/D转换器的种类很多,但目前广泛应用在单片机应用系统中的主要有逐次比较型转换器和双积分型转换器,此外-Δ式转换器逐渐得到重视和较为广泛的应用。逐次比较型A/D转换器,在精度、速度和价格上都适中,是最常用的A/D转换器。TankertankerDesign双积分型A/D转换器,具有精度高、抗干扰性好、价格低廉等优点,与逐次比较型A/D转换器相比,转换速度较慢,近年来在单片机应用领域中也得到广泛应用。-式ADC具有积分式与逐次比较型ADC的双重优点。它对工业现场的串模干扰具有较强的抑制能力,不亚于双积分ADC,它比双积分ADC有较高的转换速度,与逐次比较型ADC相比,有较高的信噪比,分辨率高,线性度好,不需要采样保持电路。A/D转换器按照转换速度可大致分为超高速(转换时间≤1ns)、高速(转换时间≤1s)、中速(转换时间≤1ms)、低速(转换时间≤1s)等几种不同转换速度的芯片。按照输出数字量的有效位数分为4位、8位、10位、12位、14位、16位并行输出以及BCD码输出的3位半、4位半、5位半等多种。TankertankerDesign目前,除并行输出A/D转换器外,随着单片机串行扩展方式的日益增多,带有同步SPI串行接口的A/D转换器的使用也逐渐增多。串行输出的A/D转换器具有占用端口线少、使用方便、接口简单等优点。较为典型的串行A/D转换器为美国TI公司的TLC549(8位)、TLC1549(10位)以及TLC1543(10位)和TLC2543(12位)。TankertankerDesign2.ADC主要技术指标(1)转换时间和转换速率A/D完成一次转换所需要的时间。转换时间的倒数为转换速率。(2)分辨率分辨率是衡量A/D转换器能够分辨出输入模拟量最小变化程度的技术指标。分辨率取决于A/D转换器的位数,习惯上用输出的二进制位数或BCD码位数表示。例如,AD1674的满量程输入电压为5V,可输出12位二进制数,即用212个数进行量化,其分辨率为12位,或A/D转换器能分辨出输入电压5V/212=1.22mV的变化。TankertankerDesign(3)量化误差量化过程引起的误差称为量化误差。是由于有限位数字量对模拟量进行量化而引起的误差。理论上规定为一个单位分辨率的-1/2-+1/2LSB,提高A/D位数既可以提高分辨率,又能够减少量化误差。(4)转换精度转换精度定义为一个实际A/D转换器与一个理想A/D转换器在量化值上的差值,可用绝对误差或相对误差表示。TankertankerDesign3.逐次逼近式ADC的工作原理转换过程中的逐次逼近是按照对分比较或者对分搜索的原理进行。工作原理:在时钟脉冲的同步下,控制逻辑先使N位寄存器的D7位置1(其余位为0),此时该寄存器输出的内容为10000000,此值经DAC转换为模拟量输出VN,与待转换的模拟输入信号VIN相比较,若VIN=VN,则比较器输出为1。于是在时钟脉冲的同步下,保留最高位D7=1,并使下一位D6=1,所得新值(11000000B)再经DAC转换得到新的VN,与VIN比较,重复前述过程。反之,若使D7=1后,经比较VIN=VN,则使D7=0,D6=1,所得新值VN再与VIN比较,重复前述过程。依次类推,从D7到D0都比较完毕后,控制逻辑使EOC变为高电平,表示A/D转换结束,此时的D7~D0即为对应于模拟输入信号VIN的数字量。TankertankerDesign11.1.2STC89C52与并型8位A/D转换器ADC0809的接口1.ADC0809芯片---逐次比较型ADC芯片IN7三态输出锁存器8路模拟开关地址锁存与译码8位A/D转换器IN0CBAALE3D7D0D3D5D1D2D4D6OEEOCVR(+)VR(-)STARTCLK12345678910111213142827262524232221201918171615IN3IN4IN5IN6IN7STARTEOCD3OECLKVCCVR(+)GNDD1IN2IN1IN0ABCALED7D6D5D4D0VR(-)D2ADC0809•分辨率为8位•转换时间100μS•工作量程为0~+5V•功耗为15mW•工作电压为+5V•具有锁存控制的8路模拟开关•输出与TTL电平兼容TankertankerDesign8路模拟输入信号——用三根地址线A,B,C选通IN0~IN7;A、B、C分别与单片机的三条地址线相连,三位编码对应8个通道地址端口。C、B、A=000~111分别对应IN0~IN7通道的地址。引脚——START启动AD转换,CLOCK转换时钟,VR参考电压,EOC转换结束标志,OE输出使能,ALE地址锁存。ADC0809的结构组成TankertankerDesign工作时序ALE锁存ADDA、ADDB、ADDCSTART正脉冲启动AD转换EOC由高变低(AD启动后)保持低电平(转换期间)由低变高(转换结束)OE正脉冲,打开三态门输出TankertankerDesign2.STC89C52与ADC0809的接口单片机读取ADC的转换结果时,可采用查询和中断控制两种方式。(1)查询方式查询方式是在单片机把启动信号送到ADC之后,执行其他程序,同时对ADC0809的EOC脚不断进行检测,以查询ADC变换是否已经结束,如查询到变换已经结束,则读入转换完毕的数据。TankertankerDesign由于ADC0809片内无时钟,可利用单片机提供的地址锁存允许信号ALE经D触发器二分频后获得,ALE引脚的频率是STC89C52单片机时钟频率的1/6。如果单片机时钟频率采用6MHz,则ALE引脚的输出频率为1MHz,再二分频后为500kHz,符合ADC0809对时钟频率的要求。当然,也可采用独立的时钟源输出,直接加到ADC的CLK脚。TankertankerDesignADC0809具有输出三态锁存器,其8位数据输出引脚D0~D7可直接与单片机的P0口相连。TankertankerDesign单片机的写信号和P2.7控制ADC的地址锁存和转换启动由于ALE和START连在一起,因此ADC0809在锁存通道地址的同时启动并进行转换。WRTankertankerDesign读取转换结果时,用低电平的读信号和P2.7引脚经一级“或非门”后产生的正脉冲作为OE信号,用来打开三态输出锁存器。RDTankertankerDesign【例11-1】采用ADC0809设计数据采集电路.该电路通过调节滑线变阻器,调节IN5的输入电压,A/D转换结果存放至片内数据存储器50H单元,并通过两个BCD数码管显示出来。TankertankerDesign•IN0~IN7的地址分别为0x7FF8~0x7FFF。ADC0809的EOC引脚经非门74HC14与单片机的外部中断输入引脚相连,A/D转换结束后变为低电平,单片机采用查询或中断方式读取A/D转换结果。INT1(1)查询方式#includereg52.h#includeabsacc.h#defineAD_IN0XBYTE[0X7FF8]//IN0通道地址sbitad_busy=P3^3;unsignedchardatatemp_at_0x50;voidmain(void){while(1){AD_IN0=0;//启动A/D信号,是一个虚写操作。while(ad_busy==1);//等待A/D转换结束temp=AD_IN0;//转换数据存到片内50H单元P1=temp;//转换数据显示}}KeiluVision4TankertankerDesign(2)中断方式采用中断方式完成对IN0通道的输入模拟量信号的采集,当A/D转换结束后,EOC发出一个脉冲向单片机提出中断申请,单片机响应中断请求后,由外部中断1的中断服务程序读取A/D转换结果,并启动ADC0809的下一次转换。外部中断1采用边沿触发方式。中断控制方式效率高,所以特别适合于转换时间较长的ADC。#includereg52.h#includeabsacc.h#defineAD_IN0XBYTE[0x7FF8]//IN5通道地址unsignedchartemp_at_0x50;voidmain(void){IE=0x84;//CPU开放中断,允许外部中断1中断IT1=1;//外部中断1采用边沿触发AD_IN0=0;//启动A/D信号while(1){}}TankertankerDesignvoiddata_acquisition(void)interrupt2{EA=0;temp=AD_IN0;//转换数据显示P1=temp;AD_IN0=0;//启动A/D信号EA=1;}KeiluVision4TankertankerDesign11.1.3STC89C52与并型12位A/D转换器AD1674的接口在某些应用中,8位ADC常常不够,必须选择分辨率大于8位的芯片,由于10位、16位接口与12位类似,因此仅以常用的12位A/D转换器AD1674为例进行介绍。1.AD1674简介美国AD公司12位逐次比较型A/D转换器。转换时间为10s,单通道最大采集速率100kHz。TankertankerDesign28引脚双列直插式封装图TankertankerDesign由于芯片内有三态输出缓冲电路,因而可直接与各种典型的8位或16位的单片机相连,AD1674片内集成有高精度的基准电压源和时钟电路,从而使该芯片在不需要任何外加电路和时钟信号的情况下完成A/D转换,使用非常方便。AD1674是AD574A/674A的更新换代产品。它们的内部结构和外部应用特性基本相同,引脚功能与AD574A/674A完全兼容,可以直接替换AD574、AD674使用,但最大转换时间由25s提高到10s。TankertankerDesign与AD574A/674A相比,AD1674的内部结构更加紧凑,集成度更高,工作性能(尤其是高低温稳定性)更好,而且可以使设计板面积大大减小,因而可以降低成本并提高系统的可靠性。目前,片内带有采样保持器的AD1674正以其优良的性能价格比,取代AD574A和AD674A。AD1674共有6个控制引脚,功能如下::芯片选择。CE:芯片启动信号。当CE=1时,究竟是启动转换还是读取结果与R/有关。R/:读出/转换控制信号。CSCCTankertankerDesign12/:数据输出格式选择信号引脚。当12/=1时,12条数据线并行输出转换结果;当12/=0时,与A0配合,转换结果分两次输出,即只有高8位或低4位有效。注意:12/端与TTL电平不兼容,故只能直接接至+5V或0V上。8888TankertankerDesignA0:字节选择控制。在转换期间:当A0=0时,AD1674进行全12位转换。当A0=