《微机接口技术及其应用》课件第7章_第1页
《微机接口技术及其应用》课件第7章_第2页
《微机接口技术及其应用》课件第7章_第3页
《微机接口技术及其应用》课件第7章_第4页
《微机接口技术及其应用》课件第7章_第5页
已阅读5页,还剩182页未读 继续免费阅读

下载本文档

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

文档简介

第7章模/数与数/模转换接口7.1概述

7.2D/A转换器

7.3A/D转换器习题与思考题

在计算机过程控制及数据采集等系统中,经常要对产生过程的参数进行测量和控制。被测或被控对象往往是连续变化的物理量,如温度、流量、压力、电压、位移量等。这些连续变化的物理量通常称为模拟量。模拟量是不能送入计算机进行运算的,因为计算机处理的是离散的二进制代码,即数字量。数字量不是连续变化的物理量,它在时间上的变化是不连续的,而且其数值在变化时每次只能增加或减少一个或几个计量单位。因此,要用微型计算机去控制和处理各种模拟量,就必须进行模拟量与数字量之间的转换。7.1概述把数字量转换为模拟量称为数/模(D/A)转换。能把数字量转换为模拟量的器件叫数/模转换器,简称DAC(DigitaltoAnalogConverter)。把模拟量转换为数字量称为模/数(A/D)转换。能把模拟量转换为数字量的器件叫模/数转换器,简称ADC(AnalogtoDigitalConverter)。

通常在一个微型计算机应用系统中,可能既要用到D/A转换又要用到A/D转换。例如,用微机去控制一个恒温箱和用微机测量温箱内的温度,都需要用A/D转换,而当微机根据测好的温度去进行恒温控制时,则又需要用D/A转换。因此,D/A和A/D转换器广泛用于计算机控制系统、测量和测试设备以及遥测、遥控技术中。图7-1所示是一个典型的数字式测控系统。这个系统中的各个被测对象的模拟参数经过模拟传感器和多路切换器后,被送至A/D转换器,A/D转换器将各个模拟参数分别转换成数字信号并由发射机发射出去。接收机将接收到的数字信号通过D/A转换成模拟信号的电压或电流,并由多路分配器送到指定的通道以驱动相应的模拟元件。这种遥测、遥控系统在航天、气象及通信中是十分重要的。

图7-1数字式测控系统示意图随着电子技术、集成技术和计算机技术的迅速发展,A/D与D/A转换技术的应用领域也在不断扩大。例如,在测量和测试设备中,广泛使用的各种数字电压表和其他数字测量仪器,其主要部件都要用到A/D转换器。又如,在通信和信号分析系统中,诸如时间的扩展、压缩、超前和滞后,信号波形的合成和分解,传递函数的合成和分析,卷积,数字滤波,加密和解密输入等都需要A/D和D/A转换器。除此之外,在多媒体技术中的声音卡、视频卡等,数字通信系统,医疗设备以及其他系统或设备中也都要用到D/A和A/D转换器。由此可见,凡是需要在计算机和模拟系统之间交换信息的场合以及需要在模拟量和数字量之间进行转换的地方,都要采用A/D和D/A转换器。所以,A/D和D/A接口就成为微机应用系统中最广泛的一类接口。通常把A/D和D/A接口又称为模拟量I/O接口。本章将对微机中常用的模拟量I/O接口的工作原理、构成、与CPU的接口方法及其应用等进行讨论。7.1.1实时闭环控制系统

图7-2所示为一个包含A/D和D/A转换器的实时闭环控制系统示意图。

图7-2实时闭环控制系统示意图在图7-2中,A/D和D/A转换器分别是模拟量输入和模拟量输出通路中的核心部件,7.1.2节和7.1.3节将对它们作较详细的讨论。如果将图7-2所示的实时闭环系统中的D/A转换器去掉,则系统将成为一个可把现场模拟信号变为数字信号,并送至计算机进行处理的数据采集系统。反之,若系统中只包含D/A转换通路,就构成了一个程序控制系统。7.1.2模拟量的输入通道

典型的模拟量输入通道由以下几部分组成。

1.传感器(Transducer)

传感器是用于将工业生产现场的某些非电物理量转换为电量(电流、电压)的器件。例如,热电偶能够将温度这个物理量转换成几毫伏或几十毫伏的电压信号,所以可用它作为温度传感器;而压力传感器可以把物理量压力的变化转换为电信号。

2.放大滤波器及信号处理

一般来讲,传感器输出的电信号都比较微弱,有些传感器的输出甚至是电阻值、电容值等非电量。为了易于与信号处理环节衔接,就需要将这些微弱电信号及电阻值等非电量转换成一种统一的电信号。变送器就是实现这一功能的器件,它可将传感器的输出信号转换成0~10mA或4~20mA的统一电流信号或者0~5V的电压信号。信号处理主要包括信号的放大及干扰信号的去除。信号处理可将变送器输出的信号进行放大或处理成与A/D(AnalogtoDigital)转换器所要求的输入相适应的电压水平。另外,传感器通常都安装在现场,环境比较恶劣,其输出常叠加有高频干扰信号。因此,信号处理环节通常是低通滤波电路,如RC滤波器或由运算放大器构成的有源滤波电路等。

3.多路转换开关(Multiplexer)

在生产过程中,要监测或控制的模拟量往往不止一个,尤其是在数据采集系统中,需要采集的模拟量一般比较多,而且不少模拟量是缓慢变化的信号。对这类模拟信号的采集可采用多路模拟开关,使多个模拟信号共用一个A/D转换器进行采样和转换,以降低成本。多路模拟开关用来切换模拟信号。对于A/D通道来说,需要用多路输入、一路输出的模拟开关,使输入的多路模拟信号轮流与A/D转换器接通。对于D/A通道,则要在D/A转换器之后加一个一路输入、多路输出的模拟开关,使输出的模拟信号轮流分配到各模拟通路中。这两种电路都已有集成电路产品,如AD7501、AD7503等都是多路输入、一路输出的多路模拟开关,CD4051、CD4052、CD4097都是可进行双向切换的多路开关,它们既可作多路输入、一路输出的模拟开关,也可作一路输入、多路输出的模拟开关。下面以8选1双向多路开关CD4051为例,介绍多路模拟开关的结构、功能和使用方法。

图7-3所示是CD4051芯片的引脚图,图7-4所示是它的内部逻辑结构图。

图7-3CD4051芯片的引脚图

图7-4CD4051的内部逻辑结构图多路模拟开关的典型应用是与采样保持器和A/D转换器配合,构成多路数据采集通道。图7-5所示是用CD4051作多路开关,构成具有8个输入通道的数据采集电路的例子。经放大、滤波等预处理之后的8路模拟信号IN0~IN7分别送到CD4051的8个I/O引脚,CPU数据总线的D3~D0接到锁存器74LS273的输入端。锁存后的D3位4Q与选通端 相连,当D3=0时, =0,使CD4051选通;D2~D0位经锁存后分别与CD4051的通道号输入端A2~A0相连,实现通道选择。对于CPU来说,锁存器相当于一个输出端口,由I/O地址译码器中的一个片选信号选通,因此可用OUT指令将希望的编码经D3~D0送入锁存器后再送到多路开关的A2~A0和端。假设锁存器的I/O地址为ADPORT,若要将接在IN4端的模拟信号切换到A/D转换器中,可用如下指令实现:

MOVAL,00000100B;D3必须为0,D2D1D0=100, 表示通道4

OUTADPORT,AL

图7-58个输入通道的数据采集电路图

4.采样保持电路(SampleHolder)

在数据采样期间,保持输入信号不变的电路称为采样保持电路。由于输入模拟信号是连续变化的,因而A/D转换器完成一次转换需要一定的时间,这段时间称为转换时间。不同的A/D转换芯片,其转换时间不同。对变化较快的模拟输入信号,如果不在转换期间保持输入信号不变,就可能引起转换误差。A/D转换芯片的转换时间越长,对同样频率模拟信号的转换精度的影响就越大。所以,在A/D转换器前面要增加一级采样保持电路,以保证在转换过程中输入信号保持其采样值不变。

1)采样过程

将模拟信号转换成离散信号的采样过程如图7-6所示。

图7-6采样过程示意图图7-6中,连续的模拟信号x(t)加到采样器的输入端,采样器的输出受采样脉冲S(t)的控制,采样脉冲是一种周期为Δ,宽度为t0的矩形脉冲序列。每当采样脉冲出现时,开关S接通t0秒,输入模拟信号可以通过采样器到达输出端;采样脉冲消失时,S断开,采样器无输出。这样,从采样器输入的连续模拟信号在采样脉冲的调制下,在输出端得到宽度为t0,周期为Δ的脉冲序列x(nΔ),脉冲序列的幅度被x(t)所调制,这个过程就是采样。x(nΔ)序列就是采样所得的离散模拟量,这些离散量出现的重复频率就是采样脉冲的频率fs,称为采样率,其值为1/Δ。一个模/数转换器完成一次模/数转换时,要进行量化、编码等操作,每种操作均需花费一定的时间,这段时间称为模/数转换时间tc。在转换时间tc内,若输入模拟信号比较平坦,即x(t)的变化量Δx很小,则可认为Δx≈0。这样,由采样过程引入的误差可以忽略不计。在这种情况下,模/数转换器可直接与采样器的输出端相连。一般将采样开关制作在A/D转换器内部,使采样器和转换器合为一体。

当x(t)变化速率较高时,在转换过程中输入模拟量有一个可观的Δx,结果将会引入较大的误差。也就是说,在A/D转换过程中,加在转换器上的电平在波动,这样就很难说输出的数字量表示tc期间输入信号上哪一点的电压值,在这种情况下就要用采样保持器来解决这个问题。

2)采样保持器

使用采样保持器可以将采样和保持这两个过程分开,即在采样开关与模数转换器之间连接一个电压保持器。采样保持电路及其输入/输出波形如图7-7所示。

图7-7采样保持电路及其输入输出波形最基本的采样保持器电路如图7-7(a)所示,它由模拟开关S、保持电容CH和缓冲放大器A组成。假设控制信号Vc中的高电平为采样命令,在该控制信号作用期间,S合上,输入模拟信号Vi通过开关S向保持电容CH充电。由于缓冲放大器具有跟随特性,因此该期间输出电压Vo跟随输入电压Vi而变化。当采样脉冲命令结束后,开关S断开,电容CH上的电压能在一段时间内保持基本不变,缓冲放大器的输出电压Vo便被保持为开关断开前的瞬时值,从而实现了采样和保持的功能。采样保持器有如下三个重要的指标。

(1)孔径时间TAP。采样脉冲的结束瞬间是保持命令的开始。但是,从保持命令发出到开关完全断开需要一定的时间,这段时间称为孔径时间TAP(ApertureTime),它是模拟开关从闭合状态到断开状态的过渡时间。在TAP时间内,输出信号Vo仍跟随Vi而变。由于孔径时间的存在使希望的采样时间展宽,因而会导致实际的电压保持值与希望的保持值之间产生误差,影响转换精度。

(2)捕捉时间TAC。捕捉时间TAC也称为采集时间(AcquisitionTime),它是指控制信号Vc在保持电平转化为采样电平后,采样保持器的输出由保持值过渡到重新跟踪输入信号Vi的变化所需要的时间。TAC主要是由模拟开关S的导通延时和建立跟踪关系所需要的稳定过渡引起的。控制信号Vc中的采样脉冲宽度一定要大于TAC,才能保证采样阶段中可靠地采集到输入信号Vi。

(3)保持电压衰减速率。在保持状态下,保持电容的漏电流及其他杂散电流会引起保持电压衰减,其变化率为

式中,ID是保持期间流入或流出保持电容CH的总泄漏电流。增大CH可减小保持电压的衰减率,但会引起捕捉时间TAC增大。所以,要挑选低泄漏的电容器作保持电容,以减小保持电压的衰减速率。采样保持器一般由输入缓冲器、输出缓冲器、采样保持开关和控制逻辑、保持电容等几部分组成。目前,采样保持器已集成在一块芯片内,常用的采样保持电路有以下三类。

(1)通用型。如AD582、AD583、LF198、LF398等,它们的捕捉时间TAC在几微秒量级,孔径时间TAP约为几十纳秒到一百多纳秒。

(2)高速型。如THS-0025、THS-0060、THC-0030、THC-1500等,它们的TAC和TAP均很小,只有20~30ns。

(3)高分辨率型。如SHA1144,它是专门为14位高分辨率型的A/D转换器设计的。

5.A/D转换器

A/D转换器是模拟量输入通道的中心环节,它的作用是将输入的模拟信号转换成计算机能够识别的数字信号,以便计算机进行分析和处理。7.1.3模拟量的输出通道

计算机的输出信号是数字信号,而有的控制执行元件要求提供模拟的输入电流或电压信号,这就需要将计算机输出的数字量转换为模拟量,这个过程的实现由模拟量的输出通道来完成。输出通道的核心部件是D/A转换器。将数字量转换为模拟量同样需要一定的转换时间,这就要求在整个转换过程中待转换的数字量要保持不变。而计算机的运行速度很快,其输出的数据在数据总线上稳定的时间很短。因此,在计算机与D/A转换器之间必须加一级锁存器以保持数字量的稳定。D/A转换器的输出端一般还要加上低通滤波器,以平滑输出波形。另外,为了能够驱动执行器件,还需要将输出的小功率的模拟量加以放大。

前面介绍了A/D、D/A通道的基本概念及多路开关、采样保持器等基本部件。下面讨论模/数和数/模转换中的核心部件A/D转换器和D/A转换器。由于D/A转换器的原理比较简单,而且大部分A/D转换器内部还包含D/A转换电路,因此先介绍D/A转换器的工作原理和使用方法。7.2D/A转换器7.2.1D/A转换器的工作原理

D/A转换器是把输入的数字量转换为与输入量成比例的模拟信号的器件。多数D/A

转换器把数字量(如二进制编码)变成模拟电流,如要将其转换成模拟电压,则还要使用

电流/电压转换器(I/V)来实现。少数D/A转换器内部有I/V转换电路,可直接输出模拟电压值。I/V转换电路由运算放大器构成。

为了了解D/A转换器的工作原理,我们先分析一下图7-8所示的4路输入加法器电路,即权电阻网络D/A转换器。

图7-8权电阻网络D/A转换器图7-8中,d1~d4为4位数字量,R、2R、4R和8R为加权电阻,S1~S4是电子模拟开关,每一个开关的状态由数字量的对应位控制。当某位di=1时,相应的开关闭合,接通权电阻;当di=0时,开关断开。运算放大器的同相输入端(+)接地,由于运放的输入阻抗非常高,流入反相输入端(-)的电流几乎为0,同相端与反相端之间的电流也非常小,因此反相输入端的电位也为0,与同相端的电位相等,∑被称为虚地点。参考电压VREF为权电阻支路提供权电流,各支路中电流的大小与权电阻成反比关系。流入虚地点∑的总电流为

因为认为流入运放的电流为0,所以If=I0,又因∑点为虚地,故运放的输出电压为0,这样,对于同样的输入数据,当参考电压VREF改变时,I0和Vo均随之而改变。若固定VREF,则输出电压Vo与输入数字量成正比关系。例如,如果Rf=R/2,输入数字量d1d2d3d4=1000,VREF=+5V,则输出电压:这样,用二进制数控制开关的通断就可产生与该数相对应的输出电压信号。但是,数/模转换器中的开关和权电阻的数目是有限的,因此,D/A转换器输出的电压仅是某些固定的值。对于上面的例子,输入数字量的范围限制在0000~1111B的范围内,相应的输出电压值也只有16种,它们的大小落在0V到VREF(1~2-4)V范围内。在用D/A转换器形成一个波形时,就要每隔一定的时间Δt,由程序将一个数字量送给DAC,形成一个电压值。用示波器观察这个波形时,会发现波形上有许多台阶,它们就是这些不连续的电压值形成的。Δt越小,这些台阶就越窄;D/A转换器的位数越多,任意两个相邻的数字量形成的电压台阶之间的高度差也就越小。因此输出波形与真实的模拟信号的接近程度取决于D/A转换器的位数与转换速度。由上面的例子可以看出,D/A转换器的核心部分是一组按输入二进制数字控制开关产生二进制加权电流的部件。实现D/A转换的方案还有好几种,如R-2R梯形电阻网络DAC,2nR电阻分压式DAC等,它们都置于集成电路芯片内部。限于篇幅,在此不一一介绍。7.2.2D/A转换器的主要技术指标

1.输入数字量

输入数字量包括输入数字量的码制、数据格式和它们的逻辑电平等,手册上均有说明。多数D/A转换器只接受自然二进制编码,少数产品采用双极性二进制编码或BCD编码等。输入数据的格式一般都是并行码,输入数据的逻辑电平一般为TTL电平,少数产品还可接受CMOS或PMOS电平的数字量。

2.输出模拟量

多数D/A转换器都属于电流输出型,手册上总是给出在规定的参考电压VREF下,输入为满码时的输出电流表达式。有些器件有一对电流输出引脚I0l和I02,也记为IOUT1或IOUT2。例如,8位D/A转换器DAC0832的输出电流为式中,数值15k表示DAC内部一只2R电阻网络中的电阻阻值。为了将输出电流转换成输出电压,可在DAC的输出端加一个运算放大器A和反馈电阻Rf构成I/V转换电路。通常,Rf置于D/A转换器的内部,在D/A片子上有专门的引脚(Rf),并使Rf的大小与权电阻相同。这样只需用一个运放就能构成I/V转换电路,如图7-9所示。

图7-9I/V转换电路由图7-9中的I/V转换电路可得到如下的输出电压表达式:

由此可知,输出电压仅与参考电压和输入数字量有关。

3.分辨率(Resolution)

分辨率的概念在前面已经提到,它是指输入数据发生1

LSB的变化时所对应的输出模拟量的变化,分辨率Δ与输入数字量的位数n之间有如下关系:

式中,FSR是D/A转换器的满量程,它近似等于输入数字量为满码时的输出电压值。通常也用百分数来表示分辨率。对于8位D/A转换器,28=256,其分辨率为1/256×FSR=0.39%FSR。

对于12位D/A转换器,212=4096,其分辨率为1/4096×FSR=0.0244%FSR。

由于分辨率与转换器的位数之间具有固定的对应关系,因此一般可简单地用它们的位数来表示分辨率,如D/A转换器的分辨率可以是8、10、12或16等。

4.精度(Accuracy)

由于转换器内部电路的误差等原因,当送一个确定的数字量给DAC后,其实际输出值与该数值应产生的理想输出值之间会有一定的误差,这就是D/A转换器的精度,通常用此差值与满量程输出电压或电流的百分比来表示。例如,某一转换器的电压满量程为10

V,其精度为0.02%,则输出电压的最大误差为10.00

V×0.02%=20

mV。一般D/A转换器的误差应不大于1/2LSB。

5.线性误差(LinearityError)

D/A转换器的输入数字量都是连续的数值,每两个相邻的数据之间的差值为1。若将这些连续的数据送给DAC,则应该输出一个线性变化的模拟电压。但实际的输出并不是理想线性的,通常用偏离理想转换特性的最大偏差与满量程之间的百分比来表示线性误差。一般要求线性误差不大于1/2LSB。如8位DAC,线性误差应小于0.2%;12位DAC,则要求小于0.01%。

6.建立时间(SettingTime)

建立时间也称为稳定时间,用ts表示,它是指从数字量输入到建立稳定的输出电流的时间。超高速的DAC,ts<100ns;较高速的DAC,ts=1μs~100ns;高速的DAC,ts=10μs~1ns;低速的DAC,ts>100μs。ts的大小限制了DAC的转换速度。例如,12位D/A转换器DAC1210的ts=1μs,因此其输入数字量的转换频率应小于1MHz,这样才能使相邻两次输入数字量的时间间隔大于1

μs,从而保证在对第一次输入的数字量转换完成后再开始对第二次输入的数字量进行转换。

7.2.3D/A转换器与微机系统的连接和使用

当D/A转换器(DAC)与微机系统连接时,要注意芯片是否有内部数据锁存器。目前市场上的DAC或ADC芯片可以分为两类:一类芯片内部没有数据输入寄存器,价格也较低,如AD7520、AD7521和ADC0808等,这类芯片不能直接和总线相连,需通过并行接口芯片如74LS373、74LS273和Intel8255A等连接;另一类芯片内部有数据输入寄存器,如DAC0832、AD7524等,可以直接和总线相连。

1.不带数据输入寄存器的DAC的使用

对于一个DAC器件来说,当数据加到其输入端时,在输出端将随之建立相应的电流或电压,并随着输入数据的变化而变化。同理,当输入数据消失时,输出电流或电压也会消失。在微机系统中,由CPU向外设发送数据用输出指令,数据在总线上的保持时间只有2个时钟周期,这样模拟量在输出端的保持时间也很短。但在实际使用中却要求转换后的电流或电压保持到下次数据输入前不发生变化。为此就要求在DAC的前面增加一个数据锁存器,再与总线相连,如图7-10所示。图7-10中译码器的接法决定了锁存器的端口地址。

图7-10不带数据输入锁存器的DAC的连接对于8位数据总线的微机系统来说,如果DAC超过8位,这时用一个8位锁存器就不够了;如果是12位的DAC,就需用两个锁存器和总线相连。工作时,CPU通过两条输出指令往两个锁存器对应的端口地址中输出12位DAC的数据。具体的连接方法如图7-11所示。图7-1112位的DAC与总线的连接当采用图7-11所示的电路时,CPU要执行两次输出指令,DAC才输出所需要的电流。在第一次执行输出指令后,DAC就得到了一个局部输入,由此输出端会得到一个局部输出。实际上并不需要模拟量输出,因而就产生了一个干扰输出,显然这是不希望的。为此往往用两级数据锁存结构来解决这一问题。工作时CPU先用两条输出指令把数据送到第一级数据锁存器,然后通过第三条输出指令把数据送到第二级数据锁存器,从而使DAC一次得到12位待转换的数据。由于第二级数据锁存器并没有和数据总线相连,因此第三条输出指令仅仅是使第二级锁存器得到了一个选通信号,并使得第一级锁存器的输出数据输入第二级锁存器。

2.带有数据输入寄存器的DAC的使用

这类DAC实际上是将外围寄存器集成在同一个芯片中,使用时直接将DAC上的数据总线相连即可。下面以DAC0832为例介绍这类DAC芯片的使用方法。

DAC0832内部有一个T型电阻网络,它用来实现D/A转换,属电流型芯片,需外接运算放大器才能得到模拟电压输出。从图7-12中可以看到,在DAC0832中有二级锁存器,第一级锁存器称为输入寄存器,它的锁存信号是ILE;第二级锁存器也称为DAC寄存器,它的锁存信号是 ,也称为通道控制信号。因为有了两级锁存器,所以DAC0832可以工作在双锁存器的工作方式下,即在输出模拟信号的同时,送入下一个数据,于是有效地提高了转换速度。另外,有了两级锁存器以后,可以在多个DAC同时工作时,利用第二级锁存信号来实现多个DAC的同时输出。在图7-12中,当ILE为高电平, 和 为低电平时,ILE为1。在这种情况下,输入寄存器的输出随输入而变化。此后,当 由低电平变为高电平时,数据锁存到输入寄存器中,这时输入寄存器的输出端不再随外部数据的变化而变化。对于第二级锁存器来说,当 和 同时为低电平时,这时8位DAC寄存器的输出随输入而变化。此后当 由低电平变为高电平时,将输入锁存器中的数据锁存到DAC寄存器中。DAC0832进行D/A转换时可以使用以下两种方法对数据进行锁存。

图7-12DAC0832的外部连接图

(1)使输入寄存器工作在锁存状态,而DAC寄存器工作在不锁存状态,即 和 都为低电平。这样当

来一个负脉冲时,就可完成一次变换。

(2)使输入寄存器工作在不锁存状态,而使DAC寄存器工作在锁存状态,这样也可以达到锁存的目的。

当然,必要时输入寄存器和DAC寄存器可以同时使用。7.2.4典型的D/A转换器芯片DAC0832及其应用

当前使用的DAC器件中,既有分辨率和价格均较低的通用8位芯片,也有速度和分辨率较高,价格也较高的16位乃至20位及以上的芯片;既有电流输出型芯片,也有电压输出型芯片,即内部带有运算放大器的芯片。DAC0832是8位D/A转换器,是DAC0800系列的一种。DAC0832与微机接口方便,转换控制容易,且价格便宜,因此在实际中得到了广泛的应用。

1.D/C转换器芯片DAC0832

1)主要特性

该系列产品还有DAC0830和DAC0831,它们可以互相替换。DAC0832具有以下主要特性:

·输入端具有双重缓冲功能,可以双缓冲、单缓冲或直通数字输入。

·所有通用微处理器可直接连接。

·满足TTL电平规范的逻辑输入。

·分辨率为8位,满刻度误差为±1LSB,建立时间为1μs,功耗20mW。

·电流输出型D/A转换器。

2)

DAC0832芯片的内部结构及引脚功能

DAC0832采用T型电阻解码网络,由二级缓冲寄存器和D/A转换电路及转换控制电路组成。图7-13所示为DAC0832内部逻辑功能示意图。

图7-13DAC0832内部逻辑功能示意图

DAC0832芯片为20脚双列直插式封装,其引脚功能如下所述。

·

:片选信号,输入寄存器选择信号,低电平有效。 与允许输入锁存信号ILE合起来决定是否起作用。

·

ILE:输入锁存允许信号,高电平有效。

· :写信号1,作为第一级锁存信号将输入数据锁存到输入寄存器中, 必须 和及ILE同时有效。

·

:写信号2,将锁存在输入寄存器中的数据送到DAC寄存器中进行锁存,此时传输控制信号 必须有效。

·

:传输控制信号,用来控制 。

·

D7~D0:8位数据输入端。D7为最高位MSB,D0为最低位LSB。

·

IOUT1:模拟电流输出端。常接运算放大器反相输入端,随DAC中数据的变化而变化。

·

IOUT2:模拟电流输出端。IOUT2为一常数和IOUT1的差,即IOUT1

+

IOUT2

=

常数。

·

Rfb:反馈电阻引出端。DAC0832内部已经有反馈电阻,所以Rfb端可以直接接到外部运算放大器的输出端。

·

VREF:参考电压输入端。此端可接正电压,也可接负电压,范围为-10~+10V。

·

VCC:芯片供电电压。范围为+5~+15V,最佳工作状态是+15V。

·

AGND:模拟地,即模拟电路接地端。

·

DGND:数字地。为保证DAC0832可靠的工作,要求 和 的宽度不小于500ns(若VCC=15V,宽度则可为100ns),输入数据的保持时间不少于90ns,这在与微机连接时都容易满足。同时,不用的数字输入端不能悬空,应根据要求接地或接VCC。

3)

DAC0832的工作方式及连接

DAC0832有以下三种工作方式。

(1)双缓冲方式:即数据经过双重缓冲后再送入D/A转换电路,执行两次写操作才能完成一次D/A转换。这种方式可在D/A转换的同时进行下一数据的输入,从而提高了转换速率。尤为重要的是,这种方式特别适用于要求同时输出多模拟量的场合。DAC0832在双缓冲方式下的工作时序如图7-14所示,其外部连接如图7-15所示。双缓冲工作方式的优点是数据接收和启动转换可以异步进行,可以在D/A转换的同时,接收下一个数据,从而提高了D/A转换的速率。

图7-14DAC0832在双缓冲方式下的工作时序图

图7-15DAC0832在双缓冲工作方式下的外部连接图第一种情况:由于这种工作方式要求先使数据锁存到输入寄存器,然后再使数据进入DAC寄存器进行数/模转换,因此在程序中需要安排两条OUT指令。把一个数据经两次锁存,通过DAC0832双缓冲方式的典型程序段如下:

MOVAL,DATA

MOVDX,PORT1

;输入寄存器端口地址送DX

OUTDX,AL ;数据送输入寄存器

MOVDX,PORT2

;DAC寄存器端口地址送DX

OUTDX,AL ;数据送DAC寄存器并启动变换

HLT第二种情况:在需要同步进行D/A转换的多路DAC系统中,采用双缓冲方式可以在不同的时刻把要转换的数据分别打入各个DAC的输入寄存器,然后由一个转换命令同时启动多个DAC的转换。双缓冲方式还可以用于多片DAC0832组成模拟输出系统,每片对应一个模拟量的场合。其外部连接如图7-16所示。

图7-16用3片DAC0832构成的3路DAC系统

(2)单缓冲方式:不需要多个模拟量同时输出时可采用此种方式。采用此方式时两个寄存器之一处于直通状态,输入数据只经过一级缓冲送入D/A转换器。这种方式只需执行一次写操作即可完成D/A转换,如图7-17所示。

图7-17单缓冲工作方式的外部连接图例如,利用DAC0832实现D/A变换。DAC0832工作在单缓冲方式下,设DAC0832端口地址为PORT,待转换数据在DATA单元中。完成D/A转换的程序段如下:

MOVAL,DATA ;要转换的数据送AL

MOVDX,PORT ;0832的端口地址送DX

OUTDX,AL ;将数字量送D/A转换器进行转 换

HLT

(3)直通型方式:在这种方式下两个寄存器均处于直通状态,因此要将 、 、 和 端都接数字地,ILE接高电平。数据直接送入D/A转换电路。这种方式可用于一些不采用微机的控制系统中,如图7-18所示。

图7-18直通型工作方式的连接示意图

4)

DAC0832的应用举例

由前面的讨论可知,DAC0832在单缓冲方式下可以直接与系统总线相连,也可以将它看做是一个输出端口。每向该端口送一个8位数据,其输出端就会有相应的输出电压,因此可以通过编写程序,利用D/A转换器产生各种不同的输出波形,如锯齿波、三角波、方波、正弦波等。

【例7-1】

根据图7-19所示的电路连接,编写一个输出锯齿波的程序,周期任意,DAC0832工作在单缓冲方式下,端口地址为0278H。

图7-19DAC0832的应用连接图

解:正向锯齿波的规律是电压从最小值开始逐渐上升,上升到最大值时立刻跳变为最小值,如此往复(反向锯齿波正好相反,先从最小值跳变为最大值,然后逐渐下降到最小值)。所以只要从0开始往DAC0832输出数据,每次加1,直到最大值FFH,然后再从0开始下一个周期。这个过程循环执行即可在DAC0832输出端得到一个正向锯齿波。下面是一个产生反向锯齿波的程序段,这里使用了一个技巧,即用0减1直接得到最大值FFH,这样在锯齿波的齿根部可以少做一次判断。

MOVDX,0278H ;端口地址送DX

MOVAL,0 ;初始值送AL

NEXT:OUTDX,AL ;输出数字量到D/A转换 器

DEC

AL ;数字量减1

JMP

NEXT ;循环

上述程序中产生的锯齿波不是平滑的波形,而是有255个小台阶,通过加滤波电路可以得到较平滑的锯齿波输出,还可以通过软件对输出波形的周期和幅度进行调整。

【例7-2】

已知DAC0832输出电压范围为0~5V,现希望输出电压为1~4V,周期任意的正向锯齿波。

解:已知当输出为5V时,输入数字量为最大值255,则

程序段如下:

MOVDX,0278H ;DAC0832的端口地址送 DX

NEXT1:MOVAL,33H ;最低输出电压对应的数 字量送AL

NEXT2:OUTDX,AL ;输出数字量到0832

INCAL ;数字量加1

CALLDELAY ;调用延时子程序

CMPAL,0CDH ;是否达到最大值(输出4 V电压)

JNANEXT2 ;若没有达到最大值,则 继续输出

JMPNEXT1 ;若达到最大输出,则重 新开始下一个周期

DELAY:MOVCX,100 ;延时子程序,延时常数 可修改

DELAY1:LOOPDELAY1

RET本例中不仅实现了波形幅度的调整,通过在延时子程序中设置不同的延时常数,还可以实现输出信号周期的调整。

2.D/C转换器芯片DAC1210

1)主要特征

DAC1210是12位高分辨率电流输出型D/A转换器,它是一种具有24引脚的双列直插式器件,也是NSC公司的产品,输入信号电平与TTL电平兼容。DAC1210的主要指标:电流建立时间ts=1μs,工作电压为

+5~+15V,参考电压范围为±25V。它的工作原理与8位的DAC0832没有多大区别。

2)

DAC1210芯片的内部结构

图7-20所示是DAC1210的内部结构图。

DAC1210的输入寄存器由8位和4位两个寄存器构成,它们都在 、 为低电平时才允许输入数据,而8位寄存器还要求BYTE1/ ( )端为高电平才能输入。DAC1210有DI11~DI4和DI3~DI0共12根数据输入线,可直接与16位总线的CPU相连,也可以与8位数据总线的CPU进行接口。

图7-20DAC1210的内部结构图图7-21所示是DAC1210与具有8位数据总线的微处理器的连接图。DI11~DI4与数据总线相连,而DI3~DI0并接到数据总线的高4位上, 和 与系统总线的 相连,12位数据应分两次写入输入寄存器,写入方法如下所述。

图7-21DACl210与8位微机的连接图先执行OUT指令,使 和 产生负脉冲,

端为高,写入高8位数据DI11~DI4。这时,因 和

为低电平,故12位数据中的高4位也写进了4位输入寄存器。再执行第二条OUT指令,使 、 变为负脉冲,并使 写入低4位数据,这时高8位输入寄存器被禁止,4位输入寄存器的内容被更新,写入了所需的低4位值。第三步再对另一个端口执行OUT指令,使 和 有效,将已存在于两个输入寄存器中的12位数据一起写入12位DAC寄存器,并启动D/A转换。经1μs后,在输出端便得到转换结果。由上可知,控制DAC1210的转换共要用到3个I/O端口,假设这三个端口的地址为220H~222H,它们由I/O端口地址译码电路形成。A0经反相后连到 端,用于选择偶地址或奇地址,A9~A1经译码电路形成端口地址。接 引脚的端口地址为220H/221H,偶地址(220H)时选通8位输入寄存器,奇地址(221H)时选通4位输入寄存器;接 引脚的端口地址为222H/223H(图中用的是222H),选择其中的任一个地址都可启动D/A转换。若待转换的数字量在BX寄存器的低12位,则完成一次D/A转换的程序如下:

START:MOVDX,220H;指向220H端口

MOVCL,4 ;移位次数

SHLBX,CL ;BX中数左移4次后向左 对齐

MOVAL,BH ;取高8位

OUTDX,AL ;写入8位输入寄存器

INCDX ;端口地址=221H

MOVAL,BL ;取低4位

OUTDX,AL ;写入4位输入寄存器

INCDX ;端口地址=222H

OUTDX,AL ;启动D/A转换,AL中可 为任意值

7.3.1A/D转换器的工作原理

A/D转换器的功能是将模拟量电信号(通常是电压或电流)转换为数字量信号,即A/D是D/A的逆过程。实现A/D转换的方法很多,有计数/比较式、双积分式、逐位逼近式、并行转换式、串/并转换式及非线性式等。对于中、低速A/D转换器,常常采用计数/比较式、双积分式和逐位逼近式三种基本类型。7.3A/D转换器计数/比较式A/D转换器的特点是速度比较慢,但是简单、便宜。双积分式A/D转换器的特点是抗干扰能力强,转换精度高,速度比较慢。逐位逼近式A/D转换器的特点是速度快,精度较高,其控制电路也不算复杂,是计算机接口中用得最普遍的一种A/D转换器。下面以逐位逼近式和双积分式为例来讲述A/D转换器的原理。

1.双积分式ADC

双积分式ADC的原理如图7-22所示,电路中的主要部件包括积分器、比较器、计数器和标准电源。

图7-22双积分式ADC的原理图其工作过程分为两段时间,即T1和Δt。

在第一段时间内,开关S1将被转换的电压Vi接到积分器的输入端,积分器从原始状态(0V)开始积分,积分时间为T1。当积分到T1时,积分器的输出电压Vo为

(7-1)第二阶段,T1结束后,开关S1断开,S2或S3将与被转换电压Vi极性相反的基准电压VREF接到积分器上,这时,积分器的输出电压开始复原,当积分器输出电压回到起点(0

V)时,积分过程结束。设这段时间为Δt,此时积分器的输出满足:

(7-2)

(7-3)如果被转换电压Vi在T1时间内是恒定值,则

(7-4)

(7-5)

式(7-5)中,T1和VREF为常量,故第二次积分时间间隔Δt与被转换电压Vi成正比。由图7-22可看出,被转换电压Vi越大,则Vo的数值越大,Δt时间间隔越长。若在Δt时间间隔内计数,则计数值即为被转换电压Vi的等效数字值。注意:图7-22中没有考虑实际积分器的负号问题。

2.逐位逼近式ADC

这种ADC是将计数式ADC中的计数器换成由控制电路控制的逼近寄存器演变而来的,是目前用得较多的一种ADC。逐位逼近式ADC在转换时,使用DAC的输出电压来驱动比较器的反相端。逐位逼近式ADC进行转换时,用一个逐位逼近寄存器存放转换出来的数字量;转换结束时,将数字量送到缓冲寄存器中,如图7-23所示。

图7-23逐位逼近式ADC原理图当启动信号由高电平变为低电平时,逐位逼近式寄存器清0,这时DAC的输出电压Vo也为0。当启动信号变为高电平时,转换开始,逐位逼近式寄存器开始计数。

逐位逼近式寄存器工作时从最高位开始,通过设置试探值来进行计数。即当第一个时钟脉冲来到时,控制电路把最高位置“1”送到逐位逼近式寄存器,使它的输出为10000000。将这个数字送入DAC,使DAC的输出电压Vo为满量程的128/255。这时,如果Vo

>

Vi,则比较器输出为低电平,使控制电路据此清除逐位逼近式寄存器的最高位,逐位逼近式寄存器中的内容变为00000000;如果Vo

<

Vi,则比较器输出高电平,使控制电路将最高位的1保留下来,逐位逼近式寄存器中的内容保持为10000000。下一个时钟脉冲使次高位为1,如果原高位被保留,则逐位逼近式寄存器的值变为11000000,DAC的输出电压Vo为满量程的192/255。将Vo再次与Vi做比较,如果Vo

>

Vi,则比较器输出的低电平使D6复位;如果Vo

<

Vi,则比较器输出的高电平保留次高位D6为1。再下一个时钟脉冲对D5位置1,然后根据对Vo和Vi的比较结果,决定保留还是清除D5位上的1,……,以此类推,重复这一过程,直到D0=1,再与输入Vi比较。最多经过数据位数次比较后,逐位逼近式寄存器中得到的值就是转换后的数据。转换结束后,控制电路送出一个低电平作为结束信号,这个信号的下降沿将逐位逼近式寄存器的数字量送入缓冲寄存器,从而得到数字量的输出。一般来说,n位逐位逼近式ADC,只用n个时钟脉冲就可以完成n位转换。n一定时,转换时间是一常数。显然逐位逼近式ADC的转换速度是比较快的。

由上可知,逐位逼近法的基本原理是:将高位置“1”,这相当于取最大允许电压的1/2与输入电压比较。如果搜索值在最大允许电压的1/2范围中,那么最高位置“0”。此后,次高位置“1”,相当于在1/2范围内再做对半搜索,根据搜索值确定次高位复位还是保留。以此类推,因此逐位逼近法也常称为二分搜索法或对半搜索法。逐位逼近式ADC每进行一次比较,即决定数字码中的一位码的去留操作,需要8个时钟脉冲。这样,一个8位转换器完成一次转换需要8×8

=

64个时钟脉冲,再加上准备与结束阶段需要几个时钟脉冲,这就是转换器的转换时间tC。大致认为经64个时钟脉冲后,8次比较完成,通过缓冲器可输出数字量结果。大部分ADC的时钟是由外部提供的,也有一些片子可用外接的RC网络来设定时钟频率。很容易根据时钟频率来估计出转换器的转换时间。例如,ADC0808和ADC0809均是

8位逐位逼近式ADC,典型的工作时钟频率为640kHz,每个时钟脉冲的周期为

1/(640×103)

s。于是,完成一次转换的时间大约为如工作频率f

=

500kHz,则tC

=

128μs。

通过前面对逐位逼近式和双积分式ADC进行比较,可以看出它们的应用场合。

双积分式ADC:它在许多场合代表了一类计数式转换器,属于间接转换,采用的是积分技术,其特点是转换速度较低,精度可以做得较高,多数利用平均值转换,所以对常态干扰的抑制能力强,常用在数字电压表等低速场合。

逐位逼近式ADC:它的转换速度要比积分式的转换速度高得多,精度也可以做得较高,控制电路不算很复杂。因为它利用瞬时值进行转换,所以对常态干扰抑制能力差,适用于要求转换速度较高的情况。7.3.2A/D转换器的主要参数

1.转换精度

由于模拟量是连续的,而数字量是离散的,因此,一般是某个范围内的模拟量对应于某一个数字量,也就是说,在ADC中模拟量和数字量之间并不是一一对应的关系。例如:一个ADC在理论上应是模拟量5V电压对应数字量800H,但是实际上4.997V、4.998V和4.999V也对应数字量800H。这就存在着一个转换精度问题,这个精度反映了ADC的实际输出接近理想输出的精确程度。ADC的精度通常是用数字量的最低有效位LSB来表示的。设数字量的最低有效位对应于模拟量Δ,如果模拟量在±Δ/2范围内产生相对应的惟一的数字量,那么这个ADC的精度为0LSB。这个误差是不可避免的。

如果模拟量在±Δ3/4范围内产生相同的数字量,那么这个ADC的精度为±1/4

LSB。这是因为与精度为±0LSB(误差范围)的ADC相比,现在这个ADC的误差范围扩展了±Δ/4。以此类推,如果模拟量在±Δ范围中产生相同的数字量,那么这个ADC的精度为±1/2LSB。

2.转换速率

转换速率是用完成一次A/D转换所需要的时间的倒数来表示的,因此转换率表明了ADC的速率。

例如,完成一次A/D转换所需要的时间是100ns,那么转换率为10MHz,即每秒转换107次。

3.分辨率

ADC的分辨率表明了能够分辨最小量化信号的能力,通常用位数来表示。对于一个可以实现1位二进制转换的ADC来说,它能分辨的最小量化信号的能力为2n单位,所以,它的分辨率为2n。例如,n=12的12位的ADC,其分辨率为2n=4096单位。

注意:分辨率虽然说明了A/D变换的精度,但是并不等于A/D变换的精度。这是因为在变换时,器件的输出与输入之间并不是严格的线性关系,也就是说,实际上输出的数并不是严格按等分距离分布的。例如:某个ADC器件的分辨率是12位,但是精度可能只有0.1%,则4000与4001所代表的电压差别并不一定是1/4095(≈0.024%),而可能是0.1%以内的任何一个值。7.3.3典型的A/D转换器芯片ADC0809及其应用

ADC0808和ADC0809除精度略有差别外(前者精度为8位,后者为7位),其余各方面完全相同。它们都是CMOS器件,不仅包括一个8位逐位逼近式ADC,而且还提供一个8通道的模拟多路开关和通道寻址逻辑,因此有理由把它作为简单的“数据采集系统”。利用它可直接输入8个单端的模拟信号分时进行A/D转换,这在多点巡回检测、过程控制和机床控制中应用广泛。

1.主要技术指标和特性

·分辨率:8位。

·总的不可调误差:ADC0809为±1LSB。

·转换时间:取决于时钟频率。

·单一电源:+5V。

·模拟电压输入范围:单极性0~5V;双极性±5V、±10V(需外加一定电路)。

·具有可控的三态输出缓冲器。

·启动转换控制为脉冲式(正脉冲),上升沿时所有内部寄存器清零,下降沿时A/D转换开始。

·使用时不需进行零点和满刻度调节。

2.ADC0809的内部结构与外部引脚

为便于用户构成多通道数据采集系统,一些厂家将多路模拟开关和8位A/D转换器集成在一个芯片内,构成多通道ADC,其中以NSC公司的8通道8位ADC0809应用最为广泛。下面介绍它的基本原理和使用方法。

(1)

ADC0809的内部结构如图7-24所示。

图7-24ADC0809的内部结构

(2)

ADC0809的外部引脚如图7-25所示。从功能上看,它可看成是由ADC0809和一个8通道模拟多路开关组合而成的。各引脚的功能如下所述。

图7-25ADC0809的外部引脚

·

IN7~IN0:8通道模拟量输入端。

·

D7~D0:结果数据输出端。其中D7为最高有效位MSB,D0为最低有效位LSB。

·

START:启动转换命令输入端。在该引脚上加高电平,即开始转换。

·

EOC:转换结束指示脚。平时它为高电平,在转换开始后及转换过程中为低电平,转换一结束,它又变回高电平。

·

OE:输出使能端。此脚加高电平,即打开输出缓冲器三态门,读出数据。

·

C、B和A:通道号选择输入端。其中A是LSB位,这三个引脚上所加电平的编码为000~111时,分别对应于选通通道IN0~IN7。例如当C、B和A为100时,选中通道IN4,011时选中通道IN3。这三个引脚信号也被记做ADDC、ADDB和ADDA,可以有8种组合,每种组合表示对应的一个模拟信号,8路模拟输入通道的寻址信号通过译码器选择,如表7-1所示。

表7-10809通道选择表

·

ALE:通道号锁存控制端。当它为高电平时,将C、B和A三个输入引脚上的通道号进行锁存,也就是使相应通道的模拟开关处于闭合状态。实际使用时,常把ALE和START连在一起,在START端加高电平启动信号的同时,将通道号锁存起来。

·

CLK:ADC0809需要外接时钟,可从此脚接入。当VCC

=

+5

V时,允许的最高时钟频率是1280kHz,这时可达到tC=50μs的最快转换速率。ADC0809典型的时钟频率为

640kHz,转换时间是100μs。

REF(+)和REF(-):是两个参考电压输入脚。通常将REF(-)接模拟地,参考电压从REF(+)引入。当REF(+)

=

+5V时,输入范围为0~+5V。

(3)图7-26所示是ADC0809的工作时序图。指定某一通道采集一个数据的过程如下:

①选择当前转换的通道,即将通道号编码送到C、B和A引脚上。

②在START和ALE引脚上加一个正脉冲,将通道选择码锁存并启动A/D转换。可以通过执行OUT指令产生负脉冲,经反相后形成正脉冲,也可由定时电路或可编程定时器提供启动脉冲。③转换开始后,EOC变低,经过64个时钟周期后,转换结束,EOC变高。

④转换结束后,可通过执行IN指令,设法在OE引脚上形成一个高电平脉冲,打开输出缓冲器的三态门,让转换后的数字量出现在数据总线上,并被读入累加器中。

用ADC0809来设计实用的数据采集系统时,除了要考虑采样率的控制和转换结束的检测方法外,还要设计合适的通道选择方案。例如,可用软件延时、定时中断或周期脉冲控制采样率,也可用延时程序、查询EOC电平或用EOC的正跳变请求中断来判断某个通道转换的结束。而向ADC0809提供通道号的方法也有好几种。例如,可先从数据总线送出通道号,用一个锁存器将它们锁存在C、B和A引脚上后,再启动转换;也可以在进行I/O地址译码时,不让A2~A0参加译码,而将它们连到C、B和A端,当执行OUT指令启动各通道的转换时,同时将包含在端口地址中的通道号送给ADC0809。

图7-26ADC0809的工作时序图假设8个通道均接有模拟输入信号,可以编写一个循环程序,从通道0开始,依次启动各通道转换并读取数据,通常将这样的操作称为进行一遍扫描。多通道ADC工作时,必须等一个通道转换结束后,才能启动另一个通道转换,因此扫描一遍,也就是每个通道都采集一个数据,至少需要8倍的转换时间,这就限制了多通道ADC的最高采样率。在同样的时钟频率下,8通道均使用时,ADC0809的最高采样率是单通道时的1/8。

3.ADC0809应用举例

(1)用定时中断控制采样率,用地址信号选择通道的方案。

【例7-3】

如果要在PC/XT机上采用ADC0809设计一块8通道的数据采集卡,则要求以200Hz的速率对每个通道均采集1024个数据,也就是每隔5ms对各通道轮流采集一个数据,然后将它们存到数据段中以DBUF为起始地址的数据缓冲区。数据存放的次序需与通道号一致,即从通道0开始,先依次存入每个通道的第一个数据,再存入各通道的第二个数据,直到各通道都存满1024个数据为止。

解:我们可以选用8253芯片来产生定时脉冲,以控制采样率。假设加到8253的CLK0=1MHz,编程使通道0工作于方式2。由于采样率fs=200Hz,因此选用时间常数为1MHz

/200Hz

=

5000。当8253工作时,可从OUT0端输出200Hz的负脉冲序列,即每隔5ms会从8253的OUT0引脚输出一个正跳变脉冲,该脉冲加到PC机上为用户保留的IRQ2中断请求输入端,即加到系统板8259A的IR2引脚上,在8259A的控制下定时向CPU发送中断请求,在每次中断时进行采样。每次中断出现后,在中断服务程序中用OUT指令启动转换,然后查询EOC引脚的状态,当EOC为高时,表示转换结束,这时可用IN指令读入结果。轮流启动各通道的转换并读取数据,存入数据缓冲区,就完成了一次扫描。这样可获得精确的采样间隔。

采样电路如图7-27所示,图中仅画出了ADC0809部分的电路,因8253部分的电路较简单,故图中没有画出来。

图7-27用ADC0809设计的多路数据采样电路由图7-27可见,地址总线A9~A3经I/O地址译码器形成片选信号 ,选中8个I/O地址300H~307H,地址线A2~A0接到ADC的C、B和A引脚,使每个I/O端口地址对应于一个模拟量输入通道。接到ADC的时钟信号CLK是从系统时钟分频而来的,频率为500

kHz。ADC的数据输出线与CPU的数据总线相连。当CPU执行OUT指令时,只要端口地址范围在300H~307H之内, 和

便有效,或非门2输出高电平脉冲,加在START和ALE引脚上,启动A/D转换,同时还将A2~A0的编码也就是通道号锁存,选择OUT指令指定的输入通道上的模拟信号进行转换。EOC引脚通过一个三态门接到数据总线中的D7,构成一个状态端口,它的地址为308H。在启动脉冲结束后,先查EOC状态是否为低电平,若为低表示已开始转换,再查EOC是否变高,若高说明转换已结束,可用IN指令读取结果。

PC/XT机中8259A的端口地址为20H和21H,设数据采集卡上8253的通道0和控制寄存器的端口地址分别为318H和31BH。完成上述功能的程序如下:

DATASEGMENT ;数据段

DBUFDB8*1024DUP(?) ;数据区(8×1024字节)

DATAENDS

… ;堆栈段

;数据采集子程序

CODESEGMENT ;代码段

ASSUMECS:CODE,DS:DATA

AD8PROCFAR

MOVAX,DATA

MOVDS,AX ;DS指向数据区段址

CLI ;禁止中断

CLD ;清方向标志;设置0AH号中断矢量的段地址和偏移量,使ES:DI=0000:(4×0AH)

MOVAX,0

MOVES,AX ;ES指向中断矢量表段 址0000

MOVDI,4*0AH ;DI=中断IR2的偏移地址

MOVAX,OFFSETADINT ;AX为中断服务 子程序偏移地址

STOSW ;放入中断矢量表

MOVAX,SEGADINT;取中断矢量段地址

STOSW ;放入中断矢量表中;对8253进行初始化编程,使通道0的控制字为:方式2,先读写低字节,后高字节,BCD计数;定时时间常数为5000

MOVDX,31BH ;DX指向8253控制寄存器

MOVAL,00110101B ;通道0控制字

OUTDX,AL ;输出控制字

MOVDX,318H ;DX指向8253通道0

MOVAX,5000H ;时间常数

OUTDX,AL ;先送低8位

MOVAL,AH

OUTDX,AL ;后送高8位;对8259A设置屏蔽字,仅允许8259A的IR2和键盘中断,其余禁止

MOVAL,11111001B ;屏蔽字

OUT21H,AL ;向屏蔽寄存器输出屏蔽字

;设置数据缓冲区起始地址到SI中,计数初值到BX中,等待中断,每通道采完1024个数后结束中断

MOVSI,OFFSETDBUF;SI指向数据缓冲区起 始地址

MOVBX,1024 ;BX中存数据计数器初值

STI ;开中断,等待中断

AGAIN:CMPBX,0 ;每中断一次BX减1,BX减1后是否为0

JNZAGAIN ;BX≠0,未采完,循环等待中断

MOVAL,11111101B

OUT21H,AL ;禁止IR2中断

MOVAH,4CH

INT21H ;返回DOS

RET ;从子程序返回

AD8ENDP ;

温馨提示

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

评论

0/150

提交评论