《模数转换器与数模转换器课件.ppt》由会员分享,可在线阅读,更多相关《模数转换器与数模转换器课件.ppt(106页珍藏版)》请在三一办公上搜索。
1、1/105,第9章 数模转换器与模数转换器本章学习目标了解数模转换器的工作原理及性能指标掌握模数转换器的应用了解数模转换器的工作原理及性能指标掌握数模转换器的应用,2/105,随着数字电子技术及计算机技术的广泛普及与应用,数字信号的传输与处理日趋普遍。自然形态下的物理量多以模拟量的形式存在的,如温度、湿度、压力、流量、速度等,实际生产、生活和科学实验中还会遇到化学量、生物量(包括医学)等。从信号工程的角度来看,要进行信号的计算机处理,上述所有的物理量、化学量和生物量等都需要使用相应的传感器,将其转换成电信号(称之为模拟量)将模拟量转换为计算机能够识别处理的数字量,而后再进行信号的传输、处理、存
2、储、显示和控制。,3/105,同样,计算机控制外部设备时,如电动调节阀、调速系统等,需要将计算机输出的数字信号变换成外设能够接受的模拟信号。将模拟量转换成数字量的器件称为模数转换器(Analog to Digital Converter,ADC),也称为A/D转换器或者ADC器件;将数字量转换成模拟量的器件称为数模转换器(Digital to Analog Converter,DAC),也称为D/A转换器。,4/105,以单片机为核心,具有模拟量输入和输出的应用系统结构如图所示。,图9-1 具有模拟量输入输出的单片机系统,5/105,传感器和变送器的区别检测仪表在模拟电子技术条件下,一般是包括
3、传感器、检测点取样设备及放大器(进行抗干扰处理及信号传输),当然还有电源及现场显示部分(可选择)。传感器是一种把非电量转变成电信号的器件。电信号一般分为连续量、离散量两种,实际上还可分成模拟量、开关量、脉冲量等。,6/105,模拟信号一般采用4-20mA DC的标准信号传输。数字化过程中,常常把传感器和微处理器及通信网络接口封装在一个器件(称为检测仪表)中,完成信息获取、处理、传输、存贮等功能。在自动化仪表中经常把检测仪表称为变送器,如温度变送器、压力变送器等。,7/105,本章内容安排本章首先介绍模数转换器的工作原理及性能指标;然后介绍模数转换器ADS7852与单片机的接口方法及编程应用,介
4、绍STC15F2K60S2单片机片内集成模数转换模块的使用;最后介绍数模转换器TLV5616与单片机的接口方法及编程应用。,8/105,9.1模数转换器的工作原理及性能指标,一、模数转换器的工作原理根据转换的工作原理不同,模数转换器可以分为计数-比较式、逐次逼近式和双斜率积分式。计数-比较式模数转换器结构简单,价格便宜,转换速度慢,较少采用。下面主要介绍逐次逼近式和双斜率积分式模数转换器的工作原理。,9/105,1、逐次逼近式模数转换器的工作原理逐次逼近式模数转换器电路框图如图所示。,图9-2 逐次逼近式模数转换器的工作原理,10/105,逐次逼近式模数转换器主要由逐次逼近寄存器SAR、数字/
5、电压转换器、比较器、时序及控制逻辑等部分组成。,11/105,工作过程当模数转换器收到“转换命令”并清除SAR寄存器后,控制电路先设定SAR中的最高位为“1”,其余位为“0”,此预测数据被送至D/A转换器,转换成电压Vc。然后将Vc与输入模拟电压Vx在高增益的比较器中进行比较,比较器的的输出为逻辑0或逻辑1。如果VxVc,说明此位置“1”是对的,应予保留;如果VxVc,说明此位置“1”不合适,应予清除。按该方法继续对次高位进行转换、比较和判断,决定次高位应取“1”还是取“0”。重复上述过程,直至确定SAR最低位为止。该过程完成后,状态线改变状态,表示已完成一次完整的转换,SAR中的内容就是与输
6、入的模拟电压对应的二进制数字代码。,12/105,2、双积分式模数转换器的工作原理双积分式模数转换器转换方法的抗干扰能力比逐次逼近式模数转换器强。该方法的基础是测量两个时间:一个是模拟输入电压向电容充电的固定时间另一个是在已知参考电压下放电所需的时间模拟输入电压与参考电压的比值就等于上述两个时间值之比。,13/105,双积分模数转换器的组成框图如图所示。,图9-3 双积分式模数转换器的组成框图,14/105,双积分式模数转换器优点具有精度高、抗干扰能力强的特点,在实际工程中得到了使用。由于逐次逼近式模数转换技术能很好的兼顾速度和精度,故在16位以下的模数转换器中得到了广泛应用。,15/105,
7、二、模数转换器的性能指标A/D转换器是实现单片机数据采集的常用外围器件。A/D转换器的品种繁多,性能各异,在设计数据采集系统时,首先碰到的问题就是如何选择合适的A/D转换器以满足系统设计的要求。选择A/D转换器需要综合考虑多项因素,如系统技术指标、成本、功耗、安装等。,16/105,1、分辨率分辨率是A/D转换器能够分辨最小信号的能力,表示数字量变化一个相邻数码所需输入模拟电压的变化量。分辨率越高,转换时对输入模拟信号变化的反应就越灵敏。,17/105,例如,8位A/D转换器能够分辨出满刻度的1/256,若满刻度输入电压为5V,则该8位A/D转换器能够分辨出输入电压变化的最小值为19.5mV。
8、分辨率常用A/D转换器输出的二进制位数表示。常见的A/D转换器有8位、10位、12位、14位和16位等。,18/105,一般把8位以下的ADC器件归为低分辨率ADC器件;912位的ADC器件称为中分辨率ADC器件;13位以上的ADC器件称为高分辨率ADC器件。如何选择 10位以下的ADC器件误差较大,11位以上对减小误差并无太大贡献,但对ADC器件的要求却提得过高。因此,取10位或11位是合适的。由于模拟信号先经过测量装置,再经A/D转换器转换后才进行处理,因此,总的误差是由测量误差和量化误差共同构成的。,19/105,A/D转换器的精度应与测量装置的精度相匹配。一方面要求量化误差在总误差中所
9、占的比重要小,使它不显著地扩大测量误差;另一方面必须根据目前测量装置的精度水平,对A/D转换器的位数提出恰当的要求。,20/105,2、通道有的单芯片内部含有多个ADC模块,可同时实现多路信号的转换;常见的多路ADC器件只有一个公共的ADC模块,由一个多路转换开关实现分时转换。3、基准电压基准电压有内、外基准和单、双基准之分。,21/105,4、转换速率转换时间:A/D转换器从启动转换到转换结束,输出稳定的数字量,需要的一定的转换时间。转换速率:转换时间的倒数就是每秒钟能完成的转换次数。A/D转换器的型号不同,转换时间不同。逐次逼近式单片A/D转换器转换时间的典型值为1.0200s。,22/1
10、05,应根据输入信号的最高频率来确定ADC转换速度,保证转换器的转换速率要高于系统要求的采样频率。确定A/D转换器的转换速率时,应考虑系统的采样速率。例如,如果用转换时间为100s的A/D转换器,则其转换速率为10KHz。根据采样定理和实际需要,一个周期的波形需采10个样点,那么这样的A/D转换器最高也只有处理频率为1KHz的模拟信号。对一般的单片机而言,在如此高的采样频率下,要在采样时间内完成A/D转换以外的工作,如读取数据、再启动、保存数据、循环计数等已经比较困难了。,23/105,5、采样/保持器采样/保持也称为跟踪/保持(Track/Hold缩写T/H)。原则上采集直流和变化非常缓慢的
11、模拟信号时可不用采样保持器。对于其他模拟信号一般都要加采样保持器。如果信号频率不高,A/D转换器的转换时间短,即使用高速A/D转换器时,也可不用采样/保持器。,24/105,6、量程量程即所能转换的电压范围,如2.5V、5V和10V。7、满刻度误差满度输出时对应的输入信号与理想输入信号值之差称为满刻度误差。8、线性度实际转换器的转移函数与理想直线的最大偏移称为线性度。,25/105,9、数字接口方式根据转换的数据输出接口方式,A/D转换器可以分为并行接口和串行接口两种方式。并行方式一般在转换后可直接接收,但芯片的引脚比较多;串行方式所用芯片引脚少,封装小,但需要软件处理才能得到所需要的数据。在
12、单片机I/O引脚不多的情况下,使用串行器件可以节省I/O资源。但是并行器件具有明显的转换速度优势。在转换速度要求较高的情况下应选用并行器件。,26/105,10、模拟信号类型通常ADC器件的模拟输入信号都是电压信号。同时根据信号是否过零,还分成单极性(Unipolar)信号和双极性(Bipolar)信号。11、电源电压电源电压有单电源,双电源和不同电压范围之分,早期的ADC器件要有+15V/-15V,如果选用单+5V电源的芯片则可以使用单片机系统电源。,27/105,12、功耗一般CMOS工艺的芯片功耗较低,对于电池供电的手持系统对功耗要求比较高的场合一定要注意功耗指标。13、封装常见的封装有
13、双列直插封装(Dual In-line Package,DIP)和表贴型(Surface Mount Devices,SMD)封装。,28/105,9.2模数转换器的应用,本节首先分别介绍德州仪器公司生产的A/D转换器ADS7852的应用方法,然后介绍STC15F2K60S2单片机片内集成的ADC模块的使用。,29/105,一、12位并行A/D转换器ADS7852及其应用1、ADS7852简介ADS7852是德州仪器公司(Texas Instruments,TI)生产的一款高速逐次逼近式A/D转换器。,30/105,具有以下主要特点:带有采样保持器具有8路模拟量输入、并行12位输出内部带有2.
14、5V的参考电压源,输入的采样电压可以从0V到2倍的参考电压值500kHz的采样频率,转换时间最大只需1.75s单极性5V工作电压低功耗:13mW封装形式为TQFP工作温度为-40到+80,31/105,ADS7852的引脚图如图9-4所示。,图9-4 ADS7852的引脚图,32/105,各引脚的功能介绍如下:AIN0AIN7:8路模拟量输入引脚。DB0DB11:12位数字量输出,其中DB0为最低位,DB11为最高位。A0A2:8路模拟输入的地址选择。Vss:电源电压,正常接+5V。VREF:外接参考电压。若不用外接参考电压,可在此引脚和电源地之间接2.2F和0.1F去耦电容各一个。AGND和
15、DGND:分别为模拟地和数字地。CLK:外部时钟输入(200KHz8MHz),时钟的选择取决于采样速度fCLK=16*fSAMPLE。,33/105,:忙指示输出,低电平有效。转换期间保持低电平,转换结束后变为高电平。:片选信号,输入,低电平有效。/CS和/WR变低时,开始一次新的转换。:读信号,输入,低电平有效。/RD和/CS一起有效时用来读取转换后的数据。也用来设置使芯片工作于省电模式。:写信号,输入,低电平有效。/WR与/CS同时有效时开始一次新的转换,也用来选择模拟量输入通道。,34/105,2、ADS7852的内部结构ADS7852的内部结构如图所示。,图9-5 ADS7852的内部
16、结构图,35/105,ADS7852是逐次逼近型A/D转换器一个8通道模拟开关通信双向存取控制器(CDAC)比较器(Comparator)逐次比较逻辑寄存器(SAR)内部基准电压源参考电压缓冲器输出锁存和三态驱动器等。转换结果通过三态并行数据总线输出。,36/105,工作过程首先置低引脚,然后通过设置A2、A1和A0的值来选择输入通道(000111分别对应07通道),置低/WR引脚开始启动A/D转换。在A/D转换期间,/BUSY引脚输出低电平并保持到转换结束。转换完成后,/BUSY引脚输出变为高电平,在DB11DB0上输出12位有效数据,等待处理器读取,一次转换完成。/BUSY引脚的上升沿可以
17、锁存12位转换数据。需要注意的是,在A/D转换之后,当/RD和/CS变为高电平时,A1和A0脚应保持低电平,否则ADS7852将进入掉电模式。,37/105,3、通道选择ADS7852有8路输入,通过设置A0、A1、A2来选择哪一路输入,具体的选择控制字如表所示。,表9-1 ADS7852的通道选择控制字,38/105,4、ADS78752的接口应用【例9-1】ADS78752与STC15F2K60S2单片机的接口电路如图所示。,图9-6 ADS78752的接口连接,39/105,硬件电路说明由于ADS7852是12位输出,而STC15F2K60S2单片机的数据线只有8位,所以使用STC15F
18、2K60S2的P0口与ADS7852的低8位数据(DB0DB7)相连。ADS7852的高4位(DB8DB11)通过锁存器74LS573与STC15F2K60S2的Pl口低4位(P1.0P1.3)相连。,40/105,当A/D转换结束STC15F2K60S2读取转换结果时,数据的低8位(DB0DB7)被直接读入STC15F2K60S2内部,而在/RD信号的上升沿,数据的高4位(DB8DB11)被74HC573锁存在STC15F2K60S2的Pl口低4位(P1.0P1.3),等待被读取。STC15F2K60S2单片机的时钟输出CLKOUT0作为ADS7852的时钟,频率设置为250KHz。,41/
19、105,ADS7852的/BUSY信号与STC15F2K60S2的P3.2连接。在A/D转换结束后,通知STC15F2K60S2及时读取数据。在电路设计中,一般在Vss和地之间接一个0.1uF的瓷片电容和10uF的钽电容,起滤波和解耦的作用。,42/105,示例程序代码如下:#include stc15.h/包含STC15F2K60S2单片机寄存器定义文件/P2.7 为片选信号;P3.5/T0CLK0为提供AD转换时钟sbit busy=P32;/P3.2 为AD转换状态检测位sbit A0=P15;/P1.5,P1.6,P1.7为通道选择位sbit A1=P16;sbit A2=P17;vo
20、id main(void)int ADdata;char highdata,lowdata;char xdata*ADS7852;ADS7852=0 x7fff;/AD7852的地址TMOD=0 x02;/T0工作在方式2,8位自动重装TH0=254;/12/12/2/2=0.25MHZINT_CLKO=INT_CLKO|0 x1;/T0输出时钟TR0=1;/启动T0A0=0;A1=0;A2=0;/选择通道0*ADS7852=0 x00;/写操作,开始AD转换,43/105,while(1)if(busy=1)/判断是否转换完毕lowdata=*ADS7852;ADdata=P1;ADdata
21、=(ADdata8)+lowdata;/数据处理*ADS7852=0 x00;/开始下一次AD转换,44/105,二、STC15F2K60S2集成的A/D模块的结构及其使用STC15F2K60S2单片机集成有8路10位高速电压输入型模数转换器(ADC),速度可达到300KHz(30万次/秒),可做温度检测、压力检测、电池电压检测、按键扫描、频谱检测等。,45/105,1、模数转换器的结构及相关寄存器STC15F2K60S2单片机片内集成8通道10位模数转换器(ADC)。ADC输入通道与P1口复用,上电复位后P1口为弱上拉型I/O口,用户可以通过软件设置将8路中的任何一路设置为ADC功能,不作为
22、ADC使用的口可继续作为I/O口使用。,46/105,(1)模数转换器的结构STC15F2K60S2单片机ADC的结构如图所示。,图9-7 STC15F2K60S2单片机ADC结构图,47/105,STC15F2K60S2的ADC组成多路选择开关比较器逐次比较寄存器10位DAC转换结果寄存器(ADC_RES和ADC_RESL)ADC控制寄存器ADC_CONTR,48/105,STC15F2K60S2的ADC转换原理STC15F2K60S2的ADC是逐次比较型模数转换器。逐次比较型ADC由一个比较器和D/A转换器构成,通过逐次比较逻辑,从最高位(MSB)开始,顺序地对每一输入电压与内置D/A转换
23、器输出进行比较,经多次比较,使转换所得的数字量逐次逼近输入模拟量对应值。,49/105,(2)参考电压源STC15F2K60S2单片机ADC模块的参考电压源是输入工作电压Vcc,一般不用外接参考电压源。如果Vcc不稳定(例如电池供电的系统中,电池电压常常在5.3V-4.2V之间漂移),则可以在8路A/D转换的一个通道外接一个稳定的参考电压源,计算出此时的工作电压Vcc,再计算出其他几路A/D转换通道的电压。,50/105,(3)与ADC有关的特殊功能寄存器1)P1口模拟功能控制寄存器P1ASFP1ASF(地址为9DH,复位值为00H)各位的定义如下:,51/105,如果要使用相应口的模拟功能,
24、需将P1ASF特殊功能寄存器中的相应位置为1。如,若要使用P1.6的模拟量功能,则需要将P16ASF设置为1。注意,P1ASF寄存器不能位寻址,可以使用汇编语言指令ORL P1ASF,#40H,也可以使用C语言语句P1ASF|=0 x40;,52/105,2)ADC控制寄存器ADC_CONTRADC_CONTR(地址为BCH,复位值为00H)各位的定义如下:,ADC_POWER:ADC电源控制位。0:关闭ADC电源。1:打开ADC电源。,53/105,说明建议进入空闲模式前,将ADC电源关闭,即ADC_POWER=0。启动A/D转换前一定要确认ADC电源已打开,A/D转换结束后关闭ADC电源可
25、降低功耗,也可不关闭。初次打开内部ADC转换模拟电源,需适当延时,等内部模拟电源稳定后,再启动A/D转换。建议启动A/D转换后,在A/D转换结束之前,不改变任何I/O口的状态,有利于提高A/D转换的精度。,54/105,SPEED1、SPEED0:ADC转换速度控制位。,表9-2 ADC转换速度控制,55/105,STC15F2K60S2单片机A/D转换模块的时钟外部晶体时钟或内部R/C振荡器所产生的系统时钟,不使用时钟分频寄存器CLK_DIV对系统时钟分频后所产生的供给CPU工作所使用的时钟。优点:不仅可以让ADC用较高的频率工作,提高A/D的转换速度;而且可以让CPU用较低的频率工作,降低
26、系统的功耗。,56/105,需要注意设置ADC_CONTR控制寄存器的语句执行后,要经过4个CPU时钟的延时,其值才能够保证被设置进ADC_CONTR控制寄存器。典型代码如下:MOV ADC_CONTR,#DATA NOP NOP NOP NOP MOV A,ADC_CONTR;经过4个时钟延时,才能正确读到ADC_CONTR控制寄存器的值,57/105,ADC_FLAG:A/D转换结束标志位。A/D转换完成后,ADC_FLAG=1,要由软件清零。不管A/D转换完成后由该位申请产生中断,还是由软件查询该标志位判断A/D转换是否结束,当A/D转换完成后,ADC_FLAG=1,一定要软件清0。,5
27、8/105,CHS2、CHS1、CHS0:模拟输入通道选择,如表所示。用MOV 语句对ADC_CONTR寄存器进行赋值。,表9-3 模拟输入通道选择,59/105,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位在时钟分频寄存器CLK_DIV(也称为PCON2,地址为97H,复位值为0000 x000B)中,其各位的定义如下:,60/105,
28、ADRJ=0时,ADC_RES7:0存放高8位ADC结果,ADC_RESL1:0存放低2位ADC结果;ADRJ=1时,ADC_RES1:0存放高2位ADC结果,ADC_RESL7:0存放低8位ADC结果。,61/105,如果STC15F2K60S2单片机的10位A/D转换结果的高8位存放在ADC_RES中,低2位存放在ADC_RESL的低2位中,模/数转换结果计算公式如下:取10位结果(ADC_RES7:0,ADC_RESL1:0)=1024Vin/Vcc取8位结果 ADC_RES7:0=256Vin/Vcc Vin为模拟输入通道输入电压,Vcc为单片机实际工作电压,用单片机工作电压作为模拟参
29、考电压。,62/105,4)与A/D转换中断有关的寄存器中断允许控制寄存器IE中的EADC位(D5位)用于开放ADC中断EA位(D7位)用于开放CPU中断中断优先级寄存器IP中的PADC位(D5位)用于设置A/D中断的优先级 在中断服务程序中,要使用软件将A/D中断标志位ADC_FLAG(也是A/D转换结束标志位)清0。,63/105,2、STC15F2K60S2单片机ADC模块的使用编程要点打开ADC电源,第一次使用时要打开内部模拟电源(设置ADC_CONTR)。适当延时,等内部模拟电源稳定。一般延时1ms以内即可。设置P1口中的相应口线作为A/D转换通道(设置P1ASF寄存器)。,64/1
30、05,选择ADC通道(设置ADC_CONTR中的CHS2CHS0)。根据需要设置转换结果存储格式(设置AUXR1中的ADRJ位)。查询A/D转换结束标志ADC_FLAG,判断A/D转换是否完成,若完成,则读出结果(结果保存在ADC_RES和ADC_RESL寄存器中),并进行数据处理。,65/105,读取转换结果注意:如果是多通道模拟量进行转换,则更换A/D转换通道后要适当延时,使输入电压稳定,延时量取20s200s即可,与输入电压源的内阻有关。如果输入电压信号源的内阻在10K以下,可不加延时。如果是单通道模拟量转换,则不需要更换A/D转换通道,也就不需要加延时。,66/105,若采用中断方式,
31、还需进行中断设置(EADC置1,EA置1)。在中断服务程序中读取ADC转换结果,并将ADC中断请求标志ADC_FLAG清零。,67/105,【例9-2】编程实现利用STC15F2K60S2单片机ADC通道2采集外部模拟电压信号,8位精度,采用查询方式循环进行转换,并将转换结果保存于30H单元中。假设时钟频率为18.432MHz。解:取8位精度时,若ADRJ-0,则可直接使用转换结果寄存器ADC_RES的值。由于复位后,ADRJ=0,因此,按照ADC的编程要点进行初始化后,直接判断ADC_FLAG标志是否为1,若为1,则读出ADC_RES寄存器的值,并存入30H即可;若为0,则继续等待。,68/
32、105,汇编语言程序代码如下:$INCLUDE(STC15.INC);包含STC15单片机寄存器定义文件ADC_DAT EQU 30H;A/D转换结果 ORG 0000H LJMP MAIN ORG 0050H MAIN:MOV SP,#70H;设置堆栈 ORL ADC_CONTR,#80H;开A/D转换电源 MOV A,#20H LCALL DELAY;开电源后加适当延时,1ms以内即可 MOV P1ASF,#04H;设置P1.2的模拟量功能 MOV ADC_CONTR,#11100010B;选择P1.2作为A/D转换通道 MOV A,#05H LCALL DELAY;如果切换A/D转换通道
33、,则需要加延时,69/105,WAIT_AD:ORL ADC_CONTR,#00001000B;启动A/D转换 MOV A,#00010000B;判断A/D转换是否完成 ANL A,ADC_CONTR JZ WAIT_AD;A/D 转换尚未完成,继续等待 ANL ADC_CONTR,#11100111B;将ADC_FLAG清零 MOV A,ADC_RES;读取A/D转换结果 MOV ADC_DAT,A;保存A/D转换结果 LJMP WAIT_AD;等待下一次转换完成,70/105,DELAY:;延时子程序 PUSH 02;将寄存器组0 的 R2 入栈 PUSH 03;将寄存器组0 的 R3 入
34、栈 PUSH 04;将寄存器组0 的 R4 入栈 MOV R4,A DELAY_LOOP0:MOV R3,#200;2个时钟周期Delay_LOOP1:MOV R2,#249;2个时钟周期DELAY_LOOP:DJNZ R2,DELAY_LOOP;4个时钟周期 DJNZ R3,DELAY_LOOP1;4个时钟周期 DJNZ R4,DELAY_LOOP0;4个时钟周期 POP 04 POP 03 POP 02 RET END,71/105,C语言程序代码如下:#include“stc15.h”/包含STC15单片机寄存器定义文件unsigned char data adc_dat _at_ 0
35、x30;/A/D转换结果变量void main(void)unsigned long i;unsigned char status;ADC_CONTR|=0 x80;/开A/D转换电源 for(i=0;i10000;i+);/适当延时 P1ASF=0 x04;/选择P1.2作为A/D转换通道 ADC_CONTR=0 xE2;for(i=0;i10000;i+);/适当延时 while(1)/循环进行A/D 转换 ADC_CONTR|=0 x08;/重新启动 A/D 转换 status=0;while(status=0)/等待A/D转换结束 status=ADC_CONTR/保存A/D转换结果,
36、72/105,【例9-3】编程实现利用STC15F2K60S2单片机ADC通道2采集外部模拟电压信号,10位精度,采用中断方式进行转换,并将转换结果保存于30H和31H单元中。假设时钟频率为18.432MHz。解:ADRJ=0时,ADC结果的高8位在ADC_RES中,低2位在ADC_RESL的低2位。因此,可以在中断服务程序中读出ADC_RESL寄存器的值,屏蔽高6位后存入30H单元,读出ADC_RES寄存器的值,存入31H单元。,73/105,汇编语言程序代码如下:$INCLUDE(STC15.INC);包含STC15F2K60S2单片机寄存器定义文件 ADC_HI EQU 31H;A/D转
37、换结果高2位 ADC_LOW EQU 30H;A/D转换结果低8位 ORG 0000H LJMP MAIN ORG 002BH LJMP ADC_ISR;ADC中断服务程序入口 ORG 0050H MAIN:MOV SP,#70H;设置堆栈 ORL ADC_CONTR,#80H;开A/D转换电源 MOV A,#20H LCALL DELAY;开电源后要加适当延时,1ms以内即可 MOVP1ASF,#04H;设置P1.2的模拟量功能 MOV ADC_CONTR,#11100010B;选择P1.2作为A/D转换通道 MOV A,#05H LCALL DELAY;如果切换A/D转换通道,则需要加延时
38、ORLAUXR1,#04H;设置ADC转换结果存储格式(ADRJ=1)ORL ADC_CONTR,#00001000B;启动A/D转换 SETB EADC;EADC=1,开放ADC的中断控制位 SETB EA;开放CPU总中断 SJMP$;循环等待中断,74/105,ADC_ISR:;ADC中断服务程序入口 ANL ADC_CONTR,#11100111B;将ADC_FLAG清0 MOV A,ADC_RES;读取A/D转换结果高2位 ANL A,#03H;屏蔽高6位 MOV ADC_HI,A;保存A/D转换结果高2位 MOV A,ADC_RESL;读取A/D转换结果低8位 MOV ADC_LO
39、W,A;保存A/D转换结果低8位ORL ADC_CONTR,#00001000B;重新启动A/D转换RETI,75/105,DELAY:;延时子程序 PUSH 02;将寄存器组0 的 R2 入栈 PUSH 03;将寄存器组0 的 R3 入栈 PUSH 04;将寄存器组0 的 R4 入栈 MOV R4,A DELAY_LOOP0:MOV R3,#200;2个时钟周期Delay_LOOP1:MOV R2,#249;2个时钟周期DELAY_LOOP:DJNZ R2,DELAY_LOOP;4个时钟周期 DJNZ R3,DELAY_LOOP1;4个时钟周期 DJNZ R4,DELAY_LOOP0;4个时
40、钟周期 POP 04 POP 03 POP 02 RET END,76/105,C语言程序代码如下:#include“stc15.h”/包含STC15F2K60S2单片机寄存器定义文件unsigned char data adc_hi _at_ 0 x31;/A/D转换结果变量高2位unsigned char data adc_low _at_ 0 x30;/A/D转换结果变量低8位void main(void)unsigned long i;ADC_CONTR|=0 x80;/开A/D转换电源 for(i=0;i10000;i+);/适当延时 P1ASF=0 x04;/选择P1.2作为A/D
41、转换通道 ADC_CONTR=0 xE2;for(i=0;i10000;i+);/适当延时 AUXR1|=0 x04;/ADRJ=1 ADC_CONTR|=0 x08;/启动 A/D 转换 EADC=1;/EADC=1,开放ADC的中断控制位 EA=1;/开放CPU总中断 while(1);/循环等待ADC中断,77/105,void ADC_ISR(void)interrupt 5/ADC中断函数 ADC_CONTR/重新启动A/D转换,78/105,9.3 数模转换器的应用,单片机处理后的数字信号要转换成模拟信号才能控制相关对象。实现数字量转换成模拟量的器件称为数模转换器(DAC),简称为
42、D/A转换器。本节主要介绍D/A转换的原理及性能指标、数模转换器TLV5616与单片机的接口及编程方法。,79/105,一、模数转换器的工作原理及性能指标 1、数模转换器的分类根据解码网络结构的不同,D/A转换器可以分为T型、倒T型、权电阻和权电流等类型。根据模拟电子开关的种类不同,D/A转换器可以分为CMOS型和双极型。双极型又分为电流开关型和ECL电流开关型。,80/105,D/A转换器选择在速度要求不高的情况下,可选用CMOS开关型D/A转换器;如对转换速度要求较高,则应选用双极型电流开关D/A转换器或转换速度更高的ECL电流开关型D/A转换器。,81/105,2、D/A转换器的工作原理
43、根据分类不同,D/A转换器的工作原理也不尽相同。下面只介绍权电阻型数模转换器的工作原理,其余类型数模转换器的工作原理请读者自行查阅资料学习。权电阻型数/模转换:就是将某一数字量的二进制代码各位按它的“权”的数值转换成相应的电流,然后再把代表各位数值的电流加起来。,82/105,一个8位的权电阻D/A转换器的原理框图如图所示。,图9-8 权电阻型D/A转换器,83/105,工作原理线性电阻网络,可以应用叠加原理分析网络的输出电压先逐个求出每个开关单独接通标准电压,而其余开关均接地时网络的输出电压分量,然后将所有接标准电压开关的输出分量相加,就可以得到总的输出电压。,84/105,Di=0时,Si
44、接地。Di=1时,Si接VB(i=0,1,7)权电阻D/A转换器的简化电路如图所示。,图9-9 权电阻D/A转换器简化电路,85/105,图中 V0=a7VB,V1=a6VB,V2=a5VB,V3=a4VB,V4=a3VB,V5=a2VB,V6=a1VB,V7=a0VB,a0,a1,a7=0或1。,图9-9 权电阻D/A转换器简化电路,86/105,当R=2Rf时,代入上式得:由此得到:,87/105,3、D/A转换器的性能指标(1)分辨率分辨率是D/A转换器对输入量变化敏感程度的描述,与输入数字量的位数有关。(2)稳定时间指D/A转换器中代码有满度值的变化时,其输出达到稳定(一般稳定到与1/
45、2最低位值相当的模拟量范围内)所需的时间。一般为几十毫秒到几微秒。,88/105,(3)输出电平不同型号的D/A转换器的输出电平相差较大,一般为510V,也有一些高压输出型的为2430V。还有一些电流输出型,低的为20mA,高的可达3A。(4)转换精度转换精度是转换后所得的实际值对于理想值的接近程度。(5)输入编码如二进制、BCD码、双极性时的符号-数值码、补码、偏移二进制码等。必要时可在D/A转换前用计算机进行代码转换。,89/105,二、12位D/A转换器TLV5616及其接口技术1、TLV5616简介TLV5616是一个带有灵活的4线串行接口的12位电压输出数/模转换器(DAC)。4线串
46、行接口可以与SPI、QSPI和Microwire串行口接口。TLV5616可以用一个包括4个控制位和12个数据位的16位串行字符串来编程TLV5616采用CMOS工艺,设计成2.7V至5.5V单电源工作。,90/105,器件用8引脚封装,工业级芯片的工作温度范围从-40至85。输出电压(由外部基准决定满度电压)由下式给出:其中REF是基准电压,而CODE是数字输入值,范围从0 x000至0 xFFF。上电复位将内部锁存为一个规定的初始状态(所有各位为零)。,91/105,各引脚功能介绍如下:DIN:串行数字数据输入SCLK:串行数字时钟输入:芯片选择,低有效FS:帧同步,数字输入,用于4线串行
47、接口。,图9-10 TLV5616引脚图,92/105,AGND:模拟地REFIN:基准模拟电压输入OUT:DAC模拟电压输出VDD:正电源,图9-10 TLV5616引脚图,93/105,2、内部结构TLV5616的内部结构如图所示。,图9-11 TLV5616的内部结构,94/105,TLV5616是一个基于一个电阻串结构的12位、单电源DAC。一个并行接口速度和掉电控制逻辑一个基准输入缓冲器电阻串一个轨到轨(rail-to-rail)输出缓冲器,95/105,3、数据传输时序图TLC5616的数据传输时序图如图所示。,图9-12 TLC5616的数据传输时序图,96/105,数据传输过程
48、首先器件必须使能CS。然后在FS的下降沿启动数据的移位,在SCLK的下降沿一位接一位地传入内部寄存器。在16位已传送后或者当FS升高时,移位寄存器中的内容被移到DAC锁存器,它将输出电压更新为新的电平。,97/105,TLV5616的串行接口可以用于两种基本的方式:4线(带片选)3线(不带片选)4、数据格式TLV5616的16位数据字包括两部分:控制位 D15-D12DAC新值 D11-D0,98/105,X:任意值SPD:速度控制位 1快速方式 0慢速方式PWR:功率控制位 1掉电方式 0正常工作注:在掉电方式时,TLV5616中的所有放大器都被禁止。,99/105,4、TLV5616与单片
49、机的接口电路及应用编程TLV5616与单片机的接口连接相对简单,注意应在VDD和AGND之间应当连接一个0.1F的陶瓷旁路电容,且应当用短引线安装在尽可能靠近器件的地。使用缺氧体环(ferrite beads)可以进一步隔离系统模拟电源与数字电源。,100/105,【例9-4】使用STC15F2K60S2控制TLV5616输出正弦波。解:TLV5616与STC15F2K60S2接口的电路图如图所示。,图9-13 TLV5616与单片机的接口电路图,101/105,串行的DAC输入数据和外部控制信号由单片机的P3口完成:串行数据由RxD引脚送出,串行时钟由TxD引脚送出。P3.4和P3.5分别向
50、TLV5616提供片选和帧同步信号。使用定时器以固定的频率产生中断。在中断服务子程序中提取和写入下一个数据样本(两个字节)到DAC中。数据样本储存在常数表格中,描述了一个正弦波的全周期。,102/105,单片机的串行口工作于方式0,在RxD脚发送8位数据,同时TxD脚上送出同步时钟。需要连续两次写入才能写一个完整的字到TLV5616。输出DAC的数据是正弦波数据,一个周期的32个正弦波数据(双字节数)保存在SINEVALS为首地址的单元中(共64个字节)。,103/105,汇编语言程序代码如下:ROLL_PTREQU 30HORG0000HLJMPSTARTORG000BHLJMPINT_T0