数模转换器与模数转换器_第1页
数模转换器与模数转换器_第2页
数模转换器与模数转换器_第3页
数模转换器与模数转换器_第4页
数模转换器与模数转换器_第5页
已阅读5页,还剩99页未读 继续免费阅读

下载本文档

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

文档简介

随着数字电子技术及计算机技术的广泛普及与应用,数字信号的传输与处理日趋普遍。自然形态下的物理量多以模拟量的形式存在的,如温度、湿度、压力、流量、速度等,实际生产、生活和科学实验中还会遇到化学量、生物量(包括医学)等。从信号工程的角度来看,要进行信号的计算机处理,上述所有的物理量、化学量和生物量等都需要使用相应的传感器,将其转换成电信号(称之为模拟量)将模拟量转换为计算机能够识别处理的数字量,而后再进行信号的传输、处理、存储、显示和控制。1当前1页,总共104页。同样,计算机控制外部设备时,如电动调节阀、调速系统等,需要将计算机输出的数字信号变换成外设能够接受的模拟信号。将模拟量转换成数字量的器件称为模数转换器(AnalogtoDigitalConverter,ADC),也称为A/D转换器或者ADC器件;将数字量转换成模拟量的器件称为数模转换器(DigitaltoAnalogConverter,DAC),也称为D/A转换器。2当前2页,总共104页。以单片机为核心,具有模拟量输入和输出的应用系统结构如图所示。图9-1具有模拟量输入输出的单片机系统3当前3页,总共104页。传感器和变送器的区别检测仪表在模拟电子技术条件下,一般是包括传感器、检测点取样设备及放大器(进行抗干扰处理及信号传输),当然还有电源及现场显示部分(可选择)。传感器是一种把非电量转变成电信号的器件。电信号一般分为连续量、离散量两种,实际上还可分成模拟量、开关量、脉冲量等。4当前4页,总共104页。模拟信号一般采用4-20mADC的标准信号传输。数字化过程中,常常把传感器和微处理器及通信网络接口封装在一个器件(称为检测仪表)中,完成信息获取、处理、传输、存贮等功能。在自动化仪表中经常把检测仪表称为变送器,如温度变送器、压力变送器等。5当前5页,总共104页。本章内容安排本章首先介绍模数转换器的工作原理及性能指标;然后介绍模数转换器ADS7852与单片机的接口方法及编程应用,介绍STC15F2K60S2单片机片内集成模数转换模块的使用;最后介绍数模转换器TLV5616与单片机的接口方法及编程应用。6当前6页,总共104页。§9.1模数转换器的工作原理及性能指标一、模数转换器的工作原理根据转换的工作原理不同,模数转换器可以分为计数-比较式、逐次逼近式和双斜率积分式。计数-比较式模数转换器结构简单,价格便宜,转换速度慢,较少采用。下面主要介绍逐次逼近式和双斜率积分式模数转换器的工作原理。7当前7页,总共104页。1、逐次逼近式模数转换器的工作原理逐次逼近式模数转换器电路框图如图所示。图9-2逐次逼近式模数转换器的工作原理8当前8页,总共104页。逐次逼近式模数转换器主要由逐次逼近寄存器SAR、数字/电压转换器、比较器、时序及控制逻辑等部分组成。9当前9页,总共104页。工作过程当模数转换器收到“转换命令”并清除SAR寄存器后,控制电路先设定SAR中的最高位为“1”,其余位为“0”,此预测数据被送至D/A转换器,转换成电压Vc。然后将Vc与输入模拟电压Vx在高增益的比较器中进行比较,比较器的的输出为逻辑0或逻辑1。如果Vx≥Vc,说明此位置“1”是对的,应予保留;如果Vx<Vc,说明此位置“1”不合适,应予清除。按该方法继续对次高位进行转换、比较和判断,决定次高位应取“1”还是取“0”。重复上述过程,直至确定SAR最低位为止。该过程完成后,状态线改变状态,表示已完成一次完整的转换,SAR中的内容就是与输入的模拟电压对应的二进制数字代码。10当前10页,总共104页。2、双积分式模数转换器的工作原理双积分式模数转换器转换方法的抗干扰能力比逐次逼近式模数转换器强。该方法的基础是测量两个时间:一个是模拟输入电压向电容充电的固定时间另一个是在已知参考电压下放电所需的时间模拟输入电压与参考电压的比值就等于上述两个时间值之比。11当前11页,总共104页。双积分模数转换器的组成框图如图所示。图9-3双积分式模数转换器的组成框图12当前12页,总共104页。双积分式模数转换器优点具有精度高、抗干扰能力强的特点,在实际工程中得到了使用。由于逐次逼近式模数转换技术能很好的兼顾速度和精度,故在16位以下的模数转换器中得到了广泛应用。13当前13页,总共104页。二、模数转换器的性能指标A/D转换器是实现单片机数据采集的常用外围器件。A/D转换器的品种繁多,性能各异,在设计数据采集系统时,首先碰到的问题就是如何选择合适的A/D转换器以满足系统设计的要求。选择A/D转换器需要综合考虑多项因素,如系统技术指标、成本、功耗、安装等。14当前14页,总共104页。1、分辨率分辨率是A/D转换器能够分辨最小信号的能力,表示数字量变化一个相邻数码所需输入模拟电压的变化量。分辨率越高,转换时对输入模拟信号变化的反应就越灵敏。15当前15页,总共104页。例如,8位A/D转换器能够分辨出满刻度的1/256,若满刻度输入电压为5V,则该8位A/D转换器能够分辨出输入电压变化的最小值为19.5mV。分辨率常用A/D转换器输出的二进制位数表示。常见的A/D转换器有8位、10位、12位、14位和16位等。16当前16页,总共104页。一般把8位以下的ADC器件归为低分辨率ADC器件;9~12位的ADC器件称为中分辨率ADC器件;13位以上的ADC器件称为高分辨率ADC器件。如何选择

10位以下的ADC器件误差较大,11位以上对减小误差并无太大贡献,但对ADC器件的要求却提得过高。因此,取10位或11位是合适的。由于模拟信号先经过测量装置,再经A/D转换器转换后才进行处理,因此,总的误差是由测量误差和量化误差共同构成的。17当前17页,总共104页。A/D转换器的精度应与测量装置的精度相匹配。一方面要求量化误差在总误差中所占的比重要小,使它不显著地扩大测量误差;另一方面必须根据目前测量装置的精度水平,对A/D转换器的位数提出恰当的要求。18当前18页,总共104页。2、通道有的单芯片内部含有多个ADC模块,可同时实现多路信号的转换;常见的多路ADC器件只有一个公共的ADC模块,由一个多路转换开关实现分时转换。3、基准电压基准电压有内、外基准和单、双基准之分。19当前19页,总共104页。4、转换速率转换时间:A/D转换器从启动转换到转换结束,输出稳定的数字量,需要的一定的转换时间。转换速率:转换时间的倒数就是每秒钟能完成的转换次数。A/D转换器的型号不同,转换时间不同。逐次逼近式单片A/D转换器转换时间的典型值为1.0~200μs。20当前20页,总共104页。应根据输入信号的最高频率来确定ADC转换速度,保证转换器的转换速率要高于系统要求的采样频率。确定A/D转换器的转换速率时,应考虑系统的采样速率。例如,如果用转换时间为100μs的A/D转换器,则其转换速率为10KHz。根据采样定理和实际需要,一个周期的波形需采10个样点,那么这样的A/D转换器最高也只有处理频率为1KHz的模拟信号。对一般的单片机而言,在如此高的采样频率下,要在采样时间内完成A/D转换以外的工作,如读取数据、再启动、保存数据、循环计数等已经比较困难了。21当前21页,总共104页。5、采样/保持器采样/保持也称为跟踪/保持(Track/Hold缩写T/H)。原则上采集直流和变化非常缓慢的模拟信号时可不用采样保持器。对于其他模拟信号一般都要加采样保持器。如果信号频率不高,A/D转换器的转换时间短,即使用高速A/D转换器时,也可不用采样/保持器。22当前22页,总共104页。6、量程量程即所能转换的电压范围,如2.5V、5V和10V。7、满刻度误差满度输出时对应的输入信号与理想输入信号值之差称为满刻度误差。8、线性度实际转换器的转移函数与理想直线的最大偏移称为线性度。23当前23页,总共104页。9、数字接口方式根据转换的数据输出接口方式,A/D转换器可以分为并行接口和串行接口两种方式。并行方式一般在转换后可直接接收,但芯片的引脚比较多;串行方式所用芯片引脚少,封装小,但需要软件处理才能得到所需要的数据。在单片机I/O引脚不多的情况下,使用串行器件可以节省I/O资源。但是并行器件具有明显的转换速度优势。在转换速度要求较高的情况下应选用并行器件。24当前24页,总共104页。10、模拟信号类型通常ADC器件的模拟输入信号都是电压信号。同时根据信号是否过零,还分成单极性(Unipolar)信号和双极性(Bipolar)信号。11、电源电压电源电压有单电源,双电源和不同电压范围之分,早期的ADC器件要有+15V/-15V,如果选用单+5V电源的芯片则可以使用单片机系统电源。25当前25页,总共104页。12、功耗一般CMOS工艺的芯片功耗较低,对于电池供电的手持系统对功耗要求比较高的场合一定要注意功耗指标。13、封装常见的封装有双列直插封装(DualIn-linePackage,DIP)和表贴型(SurfaceMountDevices,SMD)封装。26当前26页,总共104页。§9.2模数转换器的应用

本节首先分别介绍德州仪器公司生产的A/D转换器ADS7852的应用方法,然后介绍STC15F2K60S2单片机片内集成的ADC模块的使用。27当前27页,总共104页。一、12位并行A/D转换器ADS7852及其应用1、ADS7852简介ADS7852是德州仪器公司(TexasInstruments,TI)生产的一款高速逐次逼近式A/D转换器。28当前28页,总共104页。具有以下主要特点:带有采样保持器具有8路模拟量输入、并行12位输出内部带有2.5V的参考电压源,输入的采样电压可以从0V到2倍的参考电压值500kHz的采样频率,转换时间最大只需1.75μs单极性5V工作电压低功耗:13mW封装形式为TQFP工作温度为-40℃到+80℃29当前29页,总共104页。ADS7852的引脚图如图所示。图9-4ADS7852的引脚图30当前30页,总共104页。各引脚的功能介绍如下:AIN0~AIN7:8路模拟量输入引脚。DB0~DB11:12位数字量输出,其中DB0为最低位,DB11为最高位。A0~A2:8路模拟输入的地址选择。Vss:电源电压,正常接+5V。VREF:外接参考电压。若不用外接参考电压,可在此引脚和电源地之间接2.2μF和0.1μF去耦电容各一个。AGND和DGND:分别为模拟地和数字地。CLK:外部时钟输入(200KHz~8MHz),时钟的选择取决于采样速度fCLK=16*fSAMPLE。31当前31页,总共104页。

:忙指示输出,低电平有效。转换期间保持低电平,转换结束后变为高电平。:片选信号,输入,低电平有效。/CS和/WR变低时,开始一次新的转换。:读信号,输入,低电平有效。/RD和/CS一起有效时用来读取转换后的数据。也用来设置使芯片工作于省电模式。:写信号,输入,低电平有效。/WR与/CS同时有效时开始一次新的转换,也用来选择模拟量输入通道。32当前32页,总共104页。2、ADS7852的内部结构ADS7852的内部结构如图所示。图9-5ADS7852的内部结构图33当前33页,总共104页。ADS7852是逐次逼近型A/D转换器一个8通道模拟开关通信双向存取控制器(CDAC)比较器(Comparator)逐次比较逻辑寄存器(SAR)内部基准电压源参考电压缓冲器输出锁存和三态驱动器等。转换结果通过三态并行数据总线输出。34当前34页,总共104页。工作过程首先置低引脚,然后通过设置A2、A1和A0的值来选择输入通道(000~111分别对应0~7通道),置低/WR引脚开始启动A/D转换。在A/D转换期间,/BUSY引脚输出低电平并保持到转换结束。转换完成后,/BUSY引脚输出变为高电平,在DB11~DB0上输出12位有效数据,等待处理器读取,一次转换完成。/BUSY引脚的上升沿可以锁存12位转换数据。需要注意的是,在A/D转换之后,当/RD和/CS变为高电平时,A1和A0脚应保持低电平,否则ADS7852将进入掉电模式。35当前35页,总共104页。3、通道选择ADS7852有8路输入,通过设置A0、A1、A2来选择哪一路输入,具体的选择控制字如表所示。A2A1A0通道号000通道0001通道1010通道2011通道3100通道4101通道5110通道6111通道7表9-1ADS7852的通道选择控制字36当前36页,总共104页。4、ADS78752的接口应用【例9-1】ADS78752与STC12C5A60S2单片机的接口电路如图所示。图9-6ADS78752的接口连接37当前37页,总共104页。硬件电路说明由于ADS7852是12位输出,而STC12C5A60S2单片机的数据线只有8位,所以使用STC12C5A60S2的P0口与ADS7852的低8位数据(DB0~DB7)相连。ADS7852的高4位(DB8~DB11)通过锁存器74LS573与STC12C5A60S2的Pl口低4位(P1.0~P1.3)相连。38当前38页,总共104页。当A/D转换结束STC12C5A60S2读取转换结果时,数据的低8位(DB0~DB7)被直接读入STC12C5A60S2内部,而在/RD信号的上升沿,数据的高4位(DB8~DB11)被74HC573锁存在STC12C5A60S2的Pl口低4位(P1.0~P1.3),等待被读取。STC15F2K60S2单片机的时钟输出CLKOUT0作为ADS7852的时钟,频率设置为250KHz。39当前39页,总共104页。ADS7852的/BUSY信号与STC15F2K60S2的P3.2连接。在A/D转换结束后,通知STC15F2K60S2及时读取数据。在电路设计中,一般在Vss和地之间接一个0.1uF的瓷片电容和10uF的钽电容,起滤波和解耦的作用。40当前40页,总共104页。示例程序代码如下:#include"stc15.h"//包含STC15F2K60S2单片机寄存器定义文件//P2.7为片选信号;P3.5/T0CLK0为提供AD转换时钟sbitbusy=P3^2;//P3.2为AD转换状态检测位sbitA0=P1^5;//P1.5,P1.6,P1.7为通道选择位sbitA1=P1^6;sbitA2=P1^7; voidmain(void){intADdata; charhighdata,lowdata; charxdata*ADS7852;ADS7852=0x7fff; //AD7852的地址

TMOD=0x02; //T0工作在方式2,8位自动重装

TH0=254; //12/12/2/2=0.25MHZ INT_CLKO=INT_CLKO|0x1; //T0输出时钟

TR0=1; //启动T0 A0=0;A1=0;A2=0; //选择通道0 *ADS7852=0x00; //写操作,开始AD转换41当前41页,总共104页。while(1) {if(busy==1) //判断是否转换完毕

{ lowdata=*ADS7852; ADdata=P1; ADdata=(ADdata<<8)+lowdata; //数据处理*ADS7852=0x00; //开始下一次AD转换

} }}42当前42页,总共104页。二、STC15F2K60S2集成的A/D模块的结构及其使用STC15F2K60S2单片机集成有8路10位高速电压输入型模数转换器(ADC),速度可达到300KHz(30万次/秒),可做温度检测、压力检测、电池电压检测、按键扫描、频谱检测等。43当前43页,总共104页。1、模数转换器的结构及相关寄存器STC15F2K60S2单片机片内集成8通道10位模数转换器(ADC)。ADC输入通道与P1口复用,上电复位后P1口为弱上拉型I/O口,用户可以通过软件设置将8路中的任何一路设置为ADC功能,不作为ADC使用的口可继续作为I/O口使用。44当前44页,总共104页。(1)模数转换器的结构STC15F2K60S2单片机ADC的结构如图所示。图9-7STC15F2K60S2单片机ADC结构图

45当前45页,总共104页。STC15F2K60S2的ADC组成多路选择开关比较器逐次比较寄存器10位DAC转换结果寄存器(ADC_RES和ADC_RESL)ADC控制寄存器ADC_CONTR46当前46页,总共104页。STC15F2K60S2的ADC转换原理STC15F2K60S2的ADC是逐次比较型模数转换器。逐次比较型ADC由一个比较器和D/A转换器构成,通过逐次比较逻辑,从最高位(MSB)开始,顺序地对每一输入电压与内置D/A转换器输出进行比较,经多次比较,使转换所得的数字量逐次逼近输入模拟量对应值。47当前47页,总共104页。(2)参考电压源STC15F2K60S2单片机ADC模块的参考电压源是输入工作电压Vcc,一般不用外接参考电压源。如果Vcc不稳定(例如电池供电的系统中,电池电压常常在之间漂移),则可以在8路A/D转换的一个通道外接一个稳定的参考电压源,计算出此时的工作电压Vcc,再计算出其他几路A/D转换通道的电压。48当前48页,总共104页。(3)与ADC有关的特殊功能寄存器1)P1口模拟功能控制寄存器P1ASFP1ASF(地址为9DH,复位值为00H)各位的定义如下:位号D7D6D5D4D3D2D1D0位名称P17ASFP16ASFP15ASFP14ASFP13ASFP12ASFP11ASFP10ASF49当前49页,总共104页。如果要使用相应口的模拟功能,需将P1ASF特殊功能寄存器中的相应位置为1。如,若要使用P1.6的模拟量功能,则需要将P16ASF设置为1。注意,P1ASF寄存器不能位寻址,可以使用汇编语言指令ORLP1ASF,#40H,也可以使用C语言语句P1ASF|=0x40;位号D7D6D5D4D3D2D1D0位名称P17ASFP16ASFP15ASFP14ASFP13ASFP12ASFP11ASFP10ASF50当前50页,总共104页。2)ADC控制寄存器ADC_CONTRADC_CONTR(地址为BCH,复位值为00H)各位的定义如下:位号D7D6D5D4D3D2D1D0位名称ADC_POWERSPEED1SPEED0ADC_FLAGADC_STARTCHS2CHS1CHS0①ADC_POWER:ADC电源控制位。0:关闭ADC电源。1:打开ADC电源。51当前51页,总共104页。说明建议进入空闲模式前,将ADC电源关闭,即ADC_POWER=0。启动A/D转换前一定要确认ADC电源已打开,A/D转换结束后关闭ADC电源可降低功耗,也可不关闭。初次打开内部ADC转换模拟电源,需适当延时,等内部模拟电源稳定后,再启动A/D转换。建议启动A/D转换后,在A/D转换结束之前,不改变任何I/O口的状态,有利于提高A/D转换的精度。52当前52页,总共104页。②SPEED1、SPEED0:ADC转换速度控制位。SPEED1SPEED0A/D转换所需时间1190个时钟周期转换一次,CPU工作频率21MHz时,A/D转换速度约300KHz,9位精度10180个时钟周期转换一次,可达到10位精度01360个时钟周期转换一次,可达到10位精度00540个时钟周期转换一次,可达到10位精度位号D7D6D5D4D3D2D1D0位名称ADC_POWERSPEED1SPEED0ADC_FLAGADC_STARTCHS2CHS1CHS0表9-2ADC转换速度控制53当前53页,总共104页。STC15F2K60S2单片机A/D转换模块的时钟外部晶体时钟或内部R/C振荡器所产生的系统时钟,不使用时钟分频寄存器CLK_DIV对系统时钟分频后所产生的供给CPU工作所使用的时钟。优点:不仅可以让ADC用较高的频率工作,提高A/D的转换速度;而且可以让CPU用较低的频率工作,降低系统的功耗。54当前54页,总共104页。需要注意设置ADC_CONTR控制寄存器的语句执行后,要经过4个CPU时钟的延时,其值才能够保证被设置进ADC_CONTR控制寄存器。典型代码如下:

MOVADC_CONTR,#DATANOPNOPNOPNOPMOVA,ADC_CONTR

;经过4个时钟延时,才能正确读到ADC_CONTR控制寄存器的值55当前55页,总共104页。③ADC_FLAG:A/D转换结束标志位。

A/D转换完成后,ADC_FLAG=1,要由软件清零。不管A/D转换完成后由该位申请产生中断,还是由软件查询该标志位判断A/D转换是否结束,当A/D转换完成后,ADC_FLAG=1,一定要软件清0。位号D7D6D5D4D3D2D1D0位名称ADC_POWERSPEED1SPEED0ADC_FLAGADC_STARTCHS2CHS1CHS056当前56页,总共104页。⑤CHS2、CHS1、CHS0:模拟输入通道选择,如表所示。用MOV语句对ADC_CONTR寄存器进行赋值。位号D7D6D5D4D3D2D1D0位名称ADC_POWERSPEED1SPEED0ADC_FLAGADC_STARTCHS2CHS1CHS0CHS2CHS1CHS0模拟输入通道选择000选择P1.0作为A/D输入来用001选择P1.1作为A/D输入来用010选择P1.2作为A/D输入来用011选择P1.3作为A/D输入来用100选择P1.4作为A/D输入来用101选择P1.5作为A/D输入来用110选择P1.6作为A/D输入来用111选择P1.7作为A/D输入来用表9-3模拟输入通道选择57当前57页,总共104页。3)A/D转换结果存储格式控制及A/D转换结果寄存器ADC_RES、ADC_RESL特殊功能寄存器ADC_RES(地址为BDH,复位值为00H)和ADC_RESL(地址为BEH,复位值为00H)用于保存A/D转换结果。特殊功能寄存器CLK_DIV中的ADRJ位用于设置A/D转换结果的存储格式。ADRJ=0时,ADC_RES[7:0]存放高8位ADC结果,ADC_RESL[1:0]存放低2位ADC结果;ADRJ=1时,ADC_RES[1:0]存放高2位ADC结果,ADC_RESL[7:0]存放低8位ADC结果。58当前58页,总共104页。如果STC15F2K60S2单片机的10位A/D转换结果的高8位存放在ADC_RES中,低2位存放在ADC_RESL的低2位中,模/数转换结果计算公式如下:取10位结果(ADC_RES[7:0],ADC_RESL[1:0])=1024×Vin/Vcc取8位结果

ADC_RES[7:0]=256×Vin/Vcc

Vin为模拟输入通道输入电压,Vcc为单片机实际工作电压,用单片机工作电压作为模拟参考电压。59当前59页,总共104页。4)与A/D转换中断有关的寄存器中断允许控制寄存器IE中的EADC位(D5位)用于开放ADC中断EA位(D7位)用于开放CPU中断中断优先级寄存器IP中的PADC位(D5位)用于设置A/D中断的优先级在中断服务程序中,要使用软件将A/D中断标志位ADC_FLAG(也是A/D转换结束标志位)清0。60当前60页,总共104页。2、STC15F2K60S2单片机ADC模块的使用编程要点打开ADC电源,第一次使用时要打开内部模拟电源(设置ADC_CONTR)。适当延时,等内部模拟电源稳定。一般延时1ms以内即可。设置P1口中的相应口线作为A/D转换通道(设置P1ASF寄存器)。61当前61页,总共104页。选择ADC通道(设置ADC_CONTR中的CHS2~CHS0)。根据需要设置转换结果存储格式(设置AUXR1中的ADRJ位)。查询A/D转换结束标志ADC_FLAG,判断A/D转换是否完成,若完成,则读出结果(结果保存在ADC_RES和ADC_RESL寄存器中),并进行数据处理。62当前62页,总共104页。读取转换结果注意:如果是多通道模拟量进行转换,则更换A/D转换通道后要适当延时,使输入电压稳定,延时量取20μs~200μs即可,与输入电压源的内阻有关。如果输入电压信号源的内阻在10K以下,可不加延时。如果是单通道模拟量转换,则不需要更换A/D转换通道,也就不需要加延时。63当前63页,总共104页。若采用中断方式,还需进行中断设置(EADC置1,EA置1)。在中断服务程序中读取ADC转换结果,并将ADC中断请求标志ADC_FLAG清零。64当前64页,总共104页。【例9-2】编程实现利用STC12C5A60S2单片机ADC通道2采集外部模拟电压信号,8位精度,采用查询方式循环进行转换,并将转换结果保存于30H单元中。假设时钟频率为18.432MHz。解:取8位精度时,若ADRJ-0,则可直接使用转换结果寄存器ADC_RES的值。由于复位后,ADRJ=0,因此,按照ADC的编程要点进行初始化后,直接判断ADC_FLAG标志是否为1,若为1,则读出ADC_RES寄存器的值,并存入30H即可;若为0,则继续等待。65当前65页,总共104页。汇编语言程序代码如下:$INCLUDE(STC15.INC);包含STC15F2K60S2单片机寄存器定义文件ADC_DATEQU30H;A/D转换结果

ORG0000HLJMPMAINORG0050HMAIN:MOVSP,#70H;设置堆栈

ORLADC_CONTR,#80H;开A/D转换电源

MOVA,#20HLCALLDELAY;开电源后加适当延时,1ms以内即可

MOV P1ASF,#04H ;设置P1.2的模拟量功能

MOVADC_CONTR,#11100010B;选择P1.2作为A/D转换通道

MOVA,#05HLCALLDELAY;如果切换A/D转换通道,则需要加延时66当前66页,总共104页。WAIT_AD:ORLADC_CONTR,#00001000B;启动A/D转换

MOVA,#00010000B;判断A/D转换是否完成

ANLA,ADC_CONTRJZWAIT_AD;A/D转换尚未完成,继续等待

ANLADC_CONTR,#11100111B;将ADC_FLAG清零

MOVA,ADC_RES;读取A/D转换结果

MOVADC_DAT,A;保存A/D转换结果

LJMPWAIT_AD;等待下一次转换完成67当前67页,总共104页。DELAY:;延时子程序

PUSH02;将寄存器组0的R2入栈

PUSH03;将寄存器组0的R3入栈

PUSH04;将寄存器组0的R4入栈

MOVR4,ADELAY_LOOP0:MOVR3,#200;2个时钟周期Delay_LOOP1:MOVR2,#249;2个时钟周期DELAY_LOOP:DJNZR2,DELAY_LOOP;4个时钟周期

DJNZR3,DELAY_LOOP1;4个时钟周期

DJNZR4,DELAY_LOOP0;4个时钟周期

POP04POP03POP02RETEND68当前68页,总共104页。C语言程序代码如下:#include“stc12.h”//包含STC12C5A60S2单片机寄存器定义文件unsignedchardataadc_dat_at_0x30;//A/D转换结果变量voidmain(void){unsignedlongi;unsignedcharstatus;ADC_CONTR|=0x80;//开A/D转换电源

for(i=0;i<10000;i++);//适当延时

P1ASF=0x04;//选择P1.2作为A/D转换通道

ADC_CONTR=0xE2;for(i=0;i<10000;i++);//适当延时

while(1)//循环进行A/D转换

{ADC_CONTR|=0x08;//重新启动A/D转换

status=0;while(status==0)//等待A/D转换结束

{status=ADC_CONTR&0x10;}ADC_CONTR&=0xE7;//将ADC_FLAG清零

adc_dat=ADC_RES;//保存A/D转换结果

}}69当前69页,总共104页。【例9-3】编程实现利用STC12C5A60S2单片机ADC通道2采集外部模拟电压信号,10位精度,采用中断方式进行转换,并将转换结果保存于30H和31H单元中。假设时钟频率为18.432MHz。解:ADRJ=0时,ADC结果的高8位在ADC_RES中,低2位在ADC_RESL的低2位。因此,可以在中断服务程序中读出ADC_RESL寄存器的值,屏蔽高6位后存入30H单元,读出ADC_RES寄存器的值,存入31H单元。70当前70页,总共104页。汇编语言程序代码如下:$INCLUDE(STC15.INC);包含STC15F2K60S2单片机寄存器定义文件

ADC_HIEQU31H;A/D转换结果高2位

ADC_LOWEQU30H;A/D转换结果低8位

ORG0000HLJMPMAINORG 002BHLJMPADC_ISR;ADC中断服务程序入口

ORG0050HMAIN:MOVSP,#70H;设置堆栈

ORLADC_CONTR,#80H;开A/D转换电源

MOVA,#20HLCALLDELAY;开电源后要加适当延时,1ms以内即可

MOV P1ASF,#04H ;设置P1.2的模拟量功能

MOVADC_CONTR,#11100010B;选择P1.2作为A/D转换通道

MOVA,#05HLCALLDELAY;如果切换A/D转换通道,则需要加延时

ORL AUXR1,#04H ;设置ADC转换结果存储格式(ADRJ=1)

ORLADC_CONTR,#00001000B;启动A/D转换

SETBEADC;EADC=1,开放ADC的中断控制位

SETBEA;开放CPU总中断

SJMP$;循环等待中断71当前71页,总共104页。ADC_ISR:;ADC中断服务程序入口

ANLADC_CONTR,#11100111B;将ADC_FLAG清0MOVA,ADC_RES;读取A/D转换结果高2位

ANLA,#03H;屏蔽高6位

MOVADC_HI,A;保存A/D转换结果高2位

MOVA,ADC_RESL;读取A/D转换结果低8位

MOVADC_LOW,A;保存A/D转换结果低8位

ORLADC_CONTR,#00001000B;重新启动A/D转换RETI72当前72页,总共104页。DELAY:;延时子程序

PUSH02;将寄存器组0的R2入栈

PUSH03;将寄存器组0的R3入栈

PUSH04;将寄存器组0的R4入栈

MOVR4,ADELAY_LOOP0:MOVR3,#200;2个时钟周期Delay_LOOP1:MOVR2,#249;2个时钟周期DELAY_LOOP:DJNZR2,DELAY_LOOP;4个时钟周期

DJNZR3,DELAY_LOOP1;4个时钟周期

DJNZR4,DELAY_LOOP0;4个时钟周期

POP04POP03POP02RETEND73当前73页,总共104页。C语言程序代码如下:#include“stc15.h”//包含STC15F2K60S2单片机寄存器定义文件unsignedchardataadc_hi_at_0x31;//A/D转换结果变量高2位unsignedchardataadc_low_at_0x30;//A/D转换结果变量低8位voidmain(void){unsignedlongi;ADC_CONTR|=0x80;//开A/D转换电源

for(i=0;i<10000;i++);//适当延时

P1ASF=0x04;//选择P1.2作为A/D转换通道

ADC_CONTR=0xE2;for(i=0;i<10000;i++);//适当延时

AUXR1|=0x04; //ADRJ=1ADC_CONTR|=0x08;//启动A/D转换

EADC=1;//EADC=1,开放ADC的中断控制位

EA=1;//开放CPU总中断

while(1);//循环等待ADC中断}74当前74页,总共104页。voidADC_ISR(void)interrupt5//ADC中断函数{ADC_CONTR&=0xE7;//将ADC_FLAG清0adc_hi=ADC_RES&0x03;//保存A/D转换结果高2位

adc_low=ADC_RESL;//保存A/D转换结果低8位

ADC_CONTR|=0x08;//重新启动A/D转换}75当前75页,总共104页。§9.3数模转换器的应用单片机处理后的数字信号要转换成模拟信号才能控制相关对象。实现数字量转换成模拟量的器件称为数模转换器(DAC),简称为D/A转换器。本节主要介绍D/A转换的原理及性能指标、数模转换器TLV5616与单片机的接口及编程方法。76当前76页,总共104页。一、模数转换器的工作原理及性能指标1、数模转换器的分类根据解码网络结构的不同,D/A转换器可以分为T型、倒T型、权电阻和权电流等类型。根据模拟电子开关的种类不同,D/A转换器可以分为CMOS型和双极型。双极型又分为电流开关型和ECL电流开关型。77当前77页,总共104页。D/A转换器选择在速度要求不高的情况下,可选用CMOS开关型D/A转换器;如对转换速度要求较高,则应选用双极型电流开关D/A转换器或转换速度更高的ECL电流开关型D/A转换器。78当前78页,总共104页。2、D/A转换器的工作原理根据分类不同,D/A转换器的工作原理也不尽相同。下面只介绍权电阻型数模转换器的工作原理,其余类型数模转换器的工作原理请读者自行查阅资料学习。权电阻型数/模转换:就是将某一数字量的二进制代码各位按它的“权”的数值转换成相应的电流,然后再把代表各位数值的电流加起来。79当前79页,总共104页。一个8位的权电阻D/A转换器的原理框图如图所示。图9-8权电阻型D/A转换器80当前80页,总共104页。工作原理线性电阻网络,可以应用叠加原理分析网络的输出电压先逐个求出每个开关单独接通标准电压,而其余开关均接地时网络的输出电压分量,然后将所有接标准电压开关的输出分量相加,就可以得到总的输出电压。81当前81页,总共104页。Di=0时,Si接地。Di=1时,Si接VB(i=0,1,…,7)权电阻D/A转换器的简化电路如图所示。图9-9权电阻D/A转换器简化电路82当前82页,总共104页。图中

V0=a7•VB,V1=a6•VB,V2=a5•VB,V3=a4•VB,V4=a3•VB,V5=a2•VB,V6=a1•VB,V7=a0•VB,a0,a1,…,a7=0或1。图9-9权电阻D/A转换器简化电路83当前83页,总共104页。当R=2Rf时,代入上式得:由此得到:84当前84页,总共104页。3、D/A转换器的性能指标(1)分辨率分辨率是D/A转换器对输入量变化敏感程度的描述,与输入数字量的位数有关。(2)稳定时间指D/A转换器中代码有满度值的变化时,其输出达到稳定(一般稳定到与±1/2最低位值相当的模拟量范围内)所需的时间。一般为几十毫秒到几微秒。85当前85页,总共104页。(3)输出电平不同型号的D/A转换器的输出电平相差较大,一般为5~10V,也有一些高压输出型的为24~30V。还有一些电流输出型,低的为20mA,高的可达3A。(4)转换精度转换精度是转换后所得的实际值对于理想值的接近程度。(5)输入编码如二进制、BCD码、双极性时的符号-数值码、补码、偏移二进制码等。必要时可在D/A转换前用计算机进行代码转换。86当前86页,总共104页。二、12位D/A转换器TLV5616及其接口技术1、TLV5616简介TLV5616是一个带有灵活的4线串行接口的12位电压输出数/模转换器(DAC)。4线串行接口可以与SPI、QSPI和Microwire串行口接口。TLV5616可以用一个包括4个控制位和12个数据位的16位串行字符串来编程TLV5616采用CMOS工艺,设计成2.7V至5.5V单电源工作。87当前87页,总共104页。器件用8引脚封装,工业级芯片的工作温度范围从-40℃至85℃。输出电压(由外部基准决定满度电压)由下式给出:其中REF是基准电压,而CODE是数字输入值,范围从0x000至0xFFF。上电复位将内部锁存为一个规定的初始状态(所有各位为零)。88当前88页,总共104页。各引脚功能介绍如下:DIN:串行数字数据输入SCLK:串行数字时钟输入:芯片选择,低有效FS:帧同步,数字输入,用于4线串行接口。图9-10TLV5616引脚图89当前89页,总共104页。AGND:模拟地REFIN:基准模拟电压输入OUT:DAC模拟电压输出VDD:正电源图9-10TLV5616引脚图90当前90页,总共104页。2、内部结构TLV5616的内部结构如图所示。图9-11TLV5616的内部结构91当前91页,总共104页。TLV5616是一个基于一个电阻串结构的12位、单电源DAC。一个并行接口速度和掉电控制逻辑一个基准输入缓冲器电阻串一个轨到轨(rail-to-rail)输出缓冲器92当前92页,总共104页。3、数据传输时序图TLC5616的数据传输时序图如图所示。图9-12TLC5616的数据传输时序图93当前93页,总共104页。数据传输过程首先器件必须使能CS。然后在FS的下降沿启动数据的移位,在SCLK的下降沿一位接一位地传入内部寄存器。在16位已传送后或者当FS升高时,移位寄存器中的内容被移到DAC锁存器,它将输出电压更新为新的电平。94当前94页,总共104页。TLV5616的串行接口可以用于两种基本的方式:4线(带片选)3线(不带片选)4、数据格式TLV5616的16位数据字包括两部分:控制位D15-D12DAC新值

温馨提示

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

评论

0/150

提交评论