模数(A/D)和数模(D/A)转换11.1模数转换和数模转换概述11.1.1一个典型的计算机自动控制系统一个包含A/D和D/A转换器的计算机闭环自动控制系统如图11.1所示。图11.1典型的计算机自动控制系统在图11.1中,A/D转换器和D/A转换器是模拟量输入和模拟量输出通路中的核心部件。在实际控制系统中,各种非电物理量需要由各种传感器把它们转换成模拟电流或电压信号后,才能加到A/D转换器转换成数字量。一般来说,传感器的输出信号只有微伏或毫伏级,需要采用高输入阻抗的运算放大器将这些微弱的信号放大到一定的幅度,有时候还要进行信号滤波,去掉各种干扰和噪声,保留所需要的有用信号。送入A/D转换器的信号大小与A/D转换器的输入范围不一致时,还需进行信号预处理。在计算机控制系统中,若测量的模拟信号有几路或几十路,考虑到控制系统的成本,可采用多路开关对被测信号进行切换,使各种信号共用一个A/D转换器。多路切换的方法有两种:一种是外加多路模拟开关,如多路输入一路输出的多路开关有:AD7501,AD7503,CD4097,CD4052等。另一种是选用内部带多路转换开关的A/D转换器,如ADC0809等。若模拟信号变化较快,为了保证模数转换的正确性,还需要使用采样保持器。在输出通道,对那些需要用模拟信号驱动的执行机构,由计算机将经过运算决策后确定的控制量(数字量)送D/A转换器,转换成模拟量以驱动执行机构动作,完成控制过程。控制对象传感器传感器放大滤波放大滤波多路开关采样保持A/D转换计算机I/OS/HMUXMUXD/A转换接口多路开关执行部件I/O接口μV,mV几伏模数拟字模拟数字287第11章模数(A/D)和数模(D/A)转换11.1.2模/数转换器(ADC)的主要性能参数1.分辨率它表明A/D对模拟信号的分辨能力,由它确定能被A/D辨别的最小模拟量变化。一般来说,A/D转换器的位数越多,其分辨率则越高。实际的A/D转换器,通常为8,10,12,16位等。2.量化误差在A/D转换中由于整量化产生的固有误差。量化误差在±1/2LSB(最低有效位)之间。例如:一个8位的A/D转换器,它把输入电压信号分成28=256层,若它的量程为0~5V,那么,量化单位q为:q=2电压量程范围=2560.5V≈0.0195V=19.5mVq正好是A/D输出的数字量中最低位LSB=1时所对应的电压值。因而,这个量化误差的绝对值是转换器的分辨率和满量程范围的函数。3.转换时间转换时间是A/D完成一次转换所需要的时间。一般转换速度越快越好,常见有高速(转换时间1us)、中速(转换时间1ms)和低速(转换时间1s)等。4.绝对精度对于A/D,指的是对应于一个给定量,A/D转换器的误差,其误差大小由实际模拟量输入值与理论值之差来度量。5.相对精度对于A/D,指的是满度值校准以后,任一数字输出所对应的实际模拟输入值(中间值)与理论值(中间值)之差。例如,对于一个8位0~+5V的A/D转换器,如果其相对误差为1LSB,则其绝对误差为19.5mV,相对误差为0.39%。11.1.3数/模转换器(DAC)的主要性能参数1.分辨率分辨率表明DAC对模拟量的分辨能力,它是最低有效位(LSB)所对应的模拟量,它确定了能由D/A产生的最小模拟量的变化。通常用二进制数的位数表示DAC的分辨率,如分辨率为8位的D/A能给出满量程电压的1/28的分辨能力,显然DAC的位数越多,则分辨率越高。2.线性误差D/A的实际转换值偏离理想转换特性的最大偏差与满量程之间的百分比称为线性误差。n微型机原理及应用2883.建立时间这是D/A的一个重要性能参数,定义为:在数字输入端发生满量程码的变化以后,D/A的模拟输出稳定到最终值±1/2LSB时所需要的时间。4.温度灵敏度它是指数字输入不变的情况下,模拟输出信号随温度的变化。一般D/A转换器的温度灵敏度为±50PPM/℃。PPM为百万分之一。5.输出电平不同型号的D/A转换器的输出电平相差较大,一般为5V~10V,有的高压输出型的输出电平高达24V~30V。11.2ADC0809模/数转换器A/D转换器是用来通过一定的电路将模拟量转变为数字量。模拟量可以是电压、电流等电信号,也可以是压力、温度、湿度、位移、声音等非电信号。但在A/D转换前,输入到A/D转换器的输入信号必须经各种传感器把各种物理量转换成电压信号。A/D转换后,输出的数字信号可以有8位、10位、12位和16位等。11.2.1模/数转换器原理A/D转换器的工作原理实现A/D转换的方法很多,常用的有逐次逼近法、双积分法及电压频率转换法等。逐次逼近法:速度快、分辨率高、成本低,在计算机系统得到广泛应用。逐次逼近法原理电路类同天平称重。在节拍时钟控制下,逐次比较,最后留下的数字砝码,即转换结果。289第11章模数(A/D)和数模(D/A)转换图11.2逐次逼近法A/D转换器采用逐次逼近法的A/D转换器是由一个比较器、D/A转换器、缓冲寄存器及控制逻辑电路组成,如图10.14所示。它的基本原理是从高位到低位逐位试探比较,好像用天平称物体,从重到轻逐级增减砝码进行试探。逐次逼近法转换过程是:初始化时将逐次逼近寄存器各位清零;转换开始时,先将逐次逼近寄存器最高位置1,送入D/A转换器,经D/A转换后生成的模拟量送入比较器,称为Vo,与送入比较器的待转换的模拟量Vi进行比较,若VoVi,该位1被保留,否则被清除。然后再置逐次逼近寄存器次高位为1,将寄存器中新的数字量送D/A转换器,输出的Vo再与Vi比较,若VoVi,该位1被保留,否则被清除。重复此过程,直至逼近寄存器最低位。转换结束后,将逐次逼近寄存器中的数字量送入缓冲寄存器,得到数字量的输出。逐次逼近的操作过程是在一个控制电路的控制下进行的。11.2.2ADC0809的内部结构与引脚图ADC0809是一种普遍使用且成本较低的、由National半导体公司生产的CMOS材料A/D转换器。它具有8个模拟量输入通道,可在程序控制下对任意通道进行A/D转换,得到8位二进制数字量。其主要技术指标如下:①电源电压:5V②分辨率:8位③时钟频率:640kHZ④转换时间:100us⑤未经调整误差:1/2LSB和1LSB⑥模拟量输入电压范围:0-5V⑦功耗:15mW图11.3给出了ADC0809转换器的内部结构图。微型机原理及应用290图11.3ADC0809内部结构图图11.4ADC0809引脚图图11.3中ADC0809内部各单元的功能如下:①通道选择开关八选一模拟开关,实现分时采样8路模拟信号。②通道地址锁存和译码通过ADDA、ADDB、ADDC三个地址选择端及译码作用控制通道选择开关。③逐次逼近A/D转换器包括比较器、8位开关树型D/A转换器、逐次逼近寄存器。转换的数据从逐次逼近寄存器传送到8位锁存器后经三态门输出。④8位锁存器和三态门当输入允许信号OE有效时,打开三态门,将锁存器中的数字量经数据总线送到CPU。由于ADC0809具有三态输出,因而数据线可直接挂在CPU数据总线上。图11.4给出了ADC0809转换器的引脚图,各引脚功能如下:291第11章模数(A/D)和数模(D/A)转换IN0~IN7:8路模拟输入通道。D0~D7:8位数字量输出端。START:启动转换命令输入端,由1→0时启动A/D转换,要求信号宽度100ns。OE:输出使能端,高电平有效。ADDA、ADDB、ADDC:地址输入线,用于选通8路模拟输入中的一路进入A/D转换。其中ADDA是LSB位,这三个引脚上所加电平的编码为000~111,分别对应IN0~IN7,例如,当ADDC=0,ADDB=1,ADDA=1时,选中IN3通道。ALE:地址锁存允许信号。用于将ADDA~ADDC三条地址线送入地址锁存器中。EOC:转换结束信号输出。转换完成时,EOC的正跳变可用于向CPU申请中断,其高电平也可供CPU查询。CLK:时钟脉冲输入端,要求时钟频率不高于640KHZ。REF(+)、REF(-):基准电压,一般与微机接口时,REF(-)接0V或-5V,REF(+)接+5V或0V。11.2.3ADC0809与CPU的连接及其应用ADC0809的接口设计需考虑的问题如下:(1)DDA、ADDB、ADDC三端可直接连接到CPU地址总线A0、A1、A2三端,但此种方法占用的I/O口地址多。每一个模拟输入端对应一个口地址,8个模拟输入端占用8个口地址,对于微机系统外设资源的占用太多,因而一般ADDA、ADDB、ADDC分别接在数据总线的D0、D1、D2端,通过数据线输出一个控制字作为模拟通道选择的控制信号。(2)ALE信号为启动ADC0809选择开关的控制信号,该控制信号可以和启动转换信号START同时有效。(3)ADC0809芯片只占用一个I/O口地址,即启动转换用此口地址,输出数据也用此口地址,区别是启动转换还是输出数据用IOR,IOW信号来区分。硬件电路接线如图11.5所示。图11.5ADC0809和PC机系统总线的接线图。当A/D转换结束,ADC输出一个转换结束信号数据。CPU可有多种方法读取转换结果:①查询方式;②中断方式;③延时方式;④DMA方式;⑤时钟的提供;⑥参考电压的接法;⑦无条件传送方式下面举例说明如何编写A/D转换程序。例11.1利用图11.5,采用无条件传送方式,编写一段轮流从IN0~IN7采集8路模拟信号,并把采集到的数字量存入0100H开始的8个单元内的程序。MOVDI,0100H;设置存放数据的首址MOVBL,08H;采集8次计数器微型机原理及应用292MOVAH,00H;选0通道AA1∶MOVAL,AHMOVDX,ADPORT;设置ADC0809芯片地址OUTDX,AL;使ALE、START有效,选择模拟通道,见图11.5MOVCX,0050HWAIT∶LOOPWAIT;延时,等待A/D转换INAL,DX;使OUTPUTENABLE有效,输入数据,见图11.5MOV[DI],AL;保存数据INCAH;换下一个模拟通道INCDI;修改数据区指针DECBLJNZAA1图11.5ADC0809和PC机系统总线的连接图例11.2设某系统对8路模拟量分时进行数据采集,选用ADC0809芯片进行A/D转换,转换结果采用查询方式传送,所以除了一个传送转换结果的输入端口外,还需要传送8个模拟量的选择信号和A/D转换的状态信息。因此,可以采用8255A作为ADC0809和CPU的293第11章模数(A/D)和数模(D/A)转换连接接口,如图11.6ADC0809与总线的连接图。将A口设为方式0的输入方式,用于传送转换结果,B口不用,用C口的PC2~PC0输出8路模拟量的选择信号,PC3输出ADC0809的控制信号,而ADC0809的状态可由PC7输入,所以,将C口也设为方式0,低4位为输出方式,高4位为输入方式。现假设8255A的端口A、B、C及控制口地址分别为2F0H,2F1H,2F2H和2F3H,A/D转换结果的存储区首地址设为400H。采样顺序从IN0~IN7。程序如下:MOVDX,2F3H;2F3H是8255的控制口MOVAL,10011000B;置A组,B组为方式0,A口和C口高4位OUTDX,AL;输入,C口低4位输出MOVSI,400H;存放数据首地址MOVCX,08HMOVBH,00HLOPl:ORBH,08HMOVAL,BHMOVDX,2F2H;8255C口地址OUTDX,AL;启动A/D转换ANDBH,0F7HH;PC3置0MOVAL,BHOUTDX,AL;产生START和ALE的下降沿LOP2:INAL,DX;读入C口TESTAL,80H;测试K7JZLOP2;为0,继续查询MOVDX,2F0H;8255A口地址INAL,DX;读入A/D转换结果MOV[SI],AL;存储数据INCSIINCBHLOOPLOPl;8路没完,继续微型机原理及应用294图11.6ADC0809与总线的连接图例11.3中断方式应用(如图11.7所示)微处理器按A/D所