仅供个人参考
第10章 A/D转换器与D/A转换器应用
D/A转换器(Digit to Analog Converter,DAC)是一种能把数字量转换成模拟量的电子器件。
A/D转换器(Analog to Digit Converter,ADC)是一种能把模拟量转换成数字量的电子器件。
在单片机控制系统中,经常需要用到D/A 和A/D转换器。它们的功能及其在实时控制中的作用,如图10-1所示。
图10-1 单片机和被控实体间的接口示意图
其中:被控系统的过程信号可以是电量(如电流、电压、功率和开关量等),也可以是非电量(如温度、压力、流速和密度等),其数值是随时间连续变化的。过程信号可以由变送器和各类传感器变换成相应的模拟电量,然后经多路开关,输入到A/D转换器,由A/D转换器将其转换成相应的数字量送给单片机,单片机对过程信息进行相关的运算和处理。
另一方面,单片机还把处理后的数字量送给D/A转换器,变换成相应的模拟量,对被控系统实施控制和调整,使被控系统处于最佳工作状态。
上述分析表明:在单片机控制系统中,传感器和变送器主要用于数据采集,A/D转换器把采集的模拟量转换成数字量,向单片机提供被控对象的各种实时参数,以便单片机对被控对象进行监视;D/A转换器用于把单片机处理完毕的数字量转换成模拟量,作为控制信号的控制值,通过机械或电气手段对被控对象进行调整和控制。
本章介绍典型的ADC、DAC集成电路芯片,以及与单片机的硬件接口设计及软件设计。
10.1 AT89S51单片机与ADC的接口 10.1.1 A/D转换器简介
A/D转换器种类很多,但从原理上可分为四种:计数器式A/D转换器,双积分式A/D转换器,逐次逼近式A/D转换器和并行A/D转换器。
计数器式A/D转换器结构很简单,但转换速度也很慢,所以很少采用。双
不得用于商业用途
仅供个人参考
积分式A/D转换器抗干扰能力强,转换精度也很高,但速度不够理想,常用于数字式测量仪表中。计算机中广泛采用逐次逼近式A/D转换器作为接口电路,它的结构不太复杂,转换速度也高。并行A/D转换器的转换速度最快,但因结构复杂而造价较高,故只用于那些转换速度极高的场合。
【逐次比较型A/D转换器,在精度、速度和价格上都适中,是最常用的A/D转换器。】
现在部分的单片机片内集成了A/D转换器,在片内A/D转换器不能满足需要的情况下,还是需进行外扩。
10.1.2 逐次比较型A/D转换原理
逐次比较型A/D转换器也称为连续比较式A/D转换器。这是一种采用对分搜索原理来实现A/D转换的方法,逻辑框图如图10-2:
图10-2 逐次比较型A/D转换示意框图
转换原理:图中,Vx为A/D转换器需转换的模拟输入电压;Vs是“N位D/A转换网络”的输出电压,其值由“N位寄存器”中的内容决定,受控制电路控制;比较器对Vx和Vs电压进行比较,并把比较结果送给“控制电路”。整个A/D转换是在逐次比较过程中形成,形成的数字量存放在N位寄存器中,先形成最高位,然后是次高位,一位位地形成到最低位。
工作过程如下:“控制电路”从“启动”输入端收到CPU送来的“启动”脉冲后开始工作。先使“N位寄存器”中的最高位置“1”,其余位为零,“N位D/A转换网络”根据“N位寄存器”中的内容产生Vs电压,其值为满量程Vx的一半,并送入比较器进行比较。
若Vx≥Vs,则比较器输出逻辑“1”,通过“控制电路”使“N位寄存器”中最高位的“1”保留,表示输入模拟电压Vx比满量程的一半还大;
若Vx 控制电路依次对N-1、N-2、…、N-(N-1)位重复上述过程,就可使 不得用于商业用途 仅供个人参考 “N位寄存器”中得到和模拟电压Vx相对应的数字量。“控制电路”在A/D转换完成后,自动使“DONE”输出端为高电平。CPU查询DONE端的状态(或作为中断请求信号)就可以从A/D转换器读出A/D转换后的数字量。 10.1.3 A/D转换器的主要技术指标 A/D转换器按照输出数字量的有效位数分为4位、8位、10位、12位、14位、16位并行输出以及BCD码输出的3位半、4位半、5位半等多种。 A/D转换器按照转换速度可大致分为超高速(转换时间≤1ns)、高速(转换时间≤1μs)、中速(转换时间≤1ms)、低速(转换时间≤1s)等几种不同转换速度的芯片。为适应系统集成的需要,有些转换器还将多路转换开关、时钟电路、基准电压源、二-十进制译码器和转换电路集成在一个芯片内,为用户提供很多方便。 (1)转换时间和转换速率 A/D完成一次转换所需要的时间。转换速率是转换时间的倒数。是一个很重要的指标。ADC型号不同,转换速率差别很大。通常,8位逐次比较型ADC的转换时间为100μs左右。 (2)分辨率 在A/D转换器中,分辨率是衡量A/D转换器能够分辨出输入模拟量最小变化程度的技术指标。分辨率取决于A/D转换器的位数,所以习惯上用输出的二进制位数或BCD码位数表示。 例如,A/D转换器AD1674的满量程输入电压为5V,可输出12位二进制数,即用212个数进行量化,其分辨率为1LSB,也即5V/212=1.22mV,其分辨率为12位,或A/D转换器能分辨出输入电压1.22mV的变化。 ADC0809,其分辨率为1LSB,也即5V/28=0.01953V=19.53 mV. 又如,双积分型输出BCD 码的A/D转换器MC14433,其满量程输入电压为2V,其输出最大的十进制数为1999,分辨率为三位半(BCD 码),如果换算成二进制位数表示,其分辨率约为11位,因为1999最接近于211=2048。 量化过程引起的误差称为量化误差。是由于有限位数字量对模拟量进行量化而引起的误差。理论上规定为一个单位分辨率的-1/2 - +1/2LSB,提高A/D位数既可以提高分辨率,又能够减少量化误差。 (3)转换精度 A/D转换器的转换精度定义为一个实际A/D转换器与一个理想A/D转换器在量化值上的差值,可用绝对误差或相对误差表示。 10.2.2 AT89C51与逐次比较型8位A/D转换器――ADC0809的接口 1. ADC0809的内部结构 ADC0809的结构如图10-3所示。采用逐次比较法完成A/D转换,单一的+5V电源供电。片内带有锁存功能的8选1模拟开关,由C、B、A的编码来决定所选的通道。完成一次转换需100μs左右(在fCLK=640KHz时,转换时间与CLK脚的时钟频率有关),具有输出TTL三态锁存缓冲器,可直接连到单片机数据总线上。通过适当的外接电路,ADC0809可对0~5V的模拟信号进行转换。 不得用于商业用途 仅供个人参考 图10-3 ADC0809结构框图 2.ADC0809引脚及功能 ADC0809逐次比较型8路模拟输入、8位数字量输出的A/D转换器,其引脚如图10-4所示。 图10-4 ADC0809引脚图 共28个引脚,双列直插式封装。引脚功能如下: IN0~IN7:8路模拟信号输入端。用于输入要转换的模拟电压。 D0~D7:转换完后的8位数字量输出端。 C、B、A:3位地址输入线,C、B、A = 000~111分别对应IN0~IN7通道的地址(C为高位,A为低位)。各路模拟输入之间切换由软件改变C、B、A引脚的编码来实现。用于选择8路模拟输入通道的一路。 不得用于商业用途 仅供个人参考 图10-5 通道选择(C为高位,A为低位) ALE:地址(C、B、A)锁存允许信号,输入,高电平有效。在ALE的上升沿将C、B、A三条地址线上的地址锁存到内部的地址锁存器中,经译码后控制8路模拟开关。 START:A/D转换启动信号输入线,该线上的正脉冲由CPU送来。正脉冲宽度应大于100ns。下降沿启动ADC工作。 EOC:A/D转换结束信号输出线。 EOC=0,正在进行转换; EOC=1,表示一次转换完成,数字量已经锁入“三态输出锁存器”。 OE:数据输出允许信号输入线,高电平有效。当转换结束后,如果从该引脚输入高电平,则打开输出三态门,输出锁存器中保存的转换后的数据量,可以从D0~D7输出。 CLK:时钟脉冲输入端。用于为AD0809提供逐次比较所需的640KHz时钟脉冲信号。(转换时间为100μs),但实际上AD0809的时钟输入工作频率可以为10kHz~1280kHz,大于1.43MHz将停止工作。 一般可以采用单片机的ALE信号(经过分频后,几分频视振荡频率而定)。 VR(+)、VR(?):为参考电压输入端。决定输入模拟量的范围。VR(+)通常和VCC相连,VR(?)常接地。【典型值分别为+5V和0V。】 VCC:电源,接+5V。 GND:地。 【定时时间t=计数值×机器周期 =(28-初值)×(1/晶体振荡频率)×12】 10KHz(5KHz) TH=156 100KHz(50KHz) TH=256-10=246 200KHz(100KHz) TH= 300KHz(150KHz) TH= 400KHz(200KHz) TH= 500KHz(250KHz) TH= 600KHz(300KHz) TH=256-2=254 800KHz(400KHz) TH= 1280KHz(640KHz)TH= 不得用于商业用途