Ch.8 模拟量的输入输出
? 本章内容
? 模拟量输入输出通道的组成
? D/A转换器
? 原理及连接使用方法
? A/D转换器
? 原理及连接使用方法
? 模拟量 I/O接口的作用:
? 实际工业生产环境 ——连续变化的模拟量
? 例如:电压、电流、压力、温度、位移、流量
? 计算机内部 ——离散的数字量
? 二进制数、十进制数
? 工业生产过程的闭环控制
概述
模拟量 D/A传感器 执行元件A/D 数字量 数字量 模拟量
模拟量输入
(数据采集 )
模拟量输出
(过程控制 )
计算机
8.1 模拟量 I/O通道的组成
模拟接口电路的任务模拟电路的任务
00101101
10101100工








放大
滤波
多路转换
&
采样保持
A/D
转换
放大
驱动
D/A
转换
输出
接口





执行
机构
输入
接口
物理量
变换
信号
处理
信号
变换
I/O
接口
输入通道
输出通道
模拟量输入通道
? 传感器( Transducer)
? 非电量 → 电压、电流
? 变送器( Transformer)
? 转换成标准的电信号
? 信号处理( Signal Processing)
? 放大、整形、滤波
? 多路转换开关( Multiplexer)
? 多选一
? 采样保持电路( Sample Holder,S/H)
? 保证变换时信号恒定不变
? A/D变换器( A/D Converter)
? 模拟量转换为数字量
模拟量输出通道
? D/A变换器( D/A Converter)
? 数字量转换为模拟量
? 低通滤波
? 平滑输出波形
? 放大驱动
? 提供足够的驱动电压,电流
8.2 数 /模( D/A)变换器
? 8.2.1 D/A变换器的基本原理及技术指标
? D/A变换器的基本工作原理
? 组成:模拟开关,电阻网络,运算放大器
? 两种电阻网络:权电阻网络,R-2R梯形电阻网络
? 基本结构如图:
Vref
Rf
模拟开关
电阻网络
VO
数字量 ∑
D/A变换原理
? 运放的放大倍数足够大时,输出电压 Vo与输
入电压 Vin的关系为:
f
O in
RV = - V
R
式中,Rf 为反馈电阻
R为输入电阻 Vin
Rf
Vo

R
? 若输入端有 n个支路,则输出电压 VO与输入
电压 Vi的关系为:
?
n
0 f in
i =1 i
1
V = - R V
R
Vin
Rf
VO

R1式中,Ri 为第 i支路的输
入电阻
Rn

? 令每个支路的输入电阻为 2iRf,并令 Vin为一
基准电压 Vref,则有
? 如果每个支路由一个开关 Si控制,Si=1表示
Si合上,Si=0表示 Si断开,则上式变换为
??
nn
0 f re f re fii
i = 1 i = 1f
11V = - R V = - V
2 R 2
?
n
0 i re fi
i = 1
1
V = - S V
2
若 Si=1,该项对 VO有贡献
若 Si=0,该项对 VO无贡献
2R
4R
8R
16R
32R
64R
128R
256R
Vref
Rf
VO
S1
S2
S3
S4
S5
S6
S7
S8
? 与上式相对应的电路如下 (图中 n=8):
? 图中的电阻网络就称为 权电阻网络
? 如果用 8位二进制代码来控制图中的 S1~
S8(Di=1时 Si闭合; Di=0时 Si断开 ),那么根
据二进制代码的不同,输出电压 VO也不同,
这就构成了 8位的 D/A转换器。
? 可以看出,当代码在 0~ FFH之间变化时,
VO相应地在 0~ -(255/256)Vref之间变化。
? 为控制电阻网络各支路电阻值的精度,实
际的 D/A转换器采用 R-2R梯形电阻网络 (见
下页 ),它只用两种阻值的电阻 (R和 2R)。
R-2R梯形电阻网络
R
f
V
i
V
0

V
re f
n - 1
2 1 0
?
2 R 2 R 2 R2 R
R R
R
V
n -1
V
2
V
1
V
0
2 R
+
-
D/A转换器的主要技术指标
? 分辨率( Resolution)
? 输入的二进制数每 ± 1个最低有效位 (LSB)使输出变化的
程度。
? 一般用输入数字量的位数来表示, 如 8位,10位
例:一个满量程为 5V的 10位 DAC,± 1 LSB的变化将使输出变化
5/(210-1)=5/1023=0.004888V=4.888mV
? 转换精度(误差)
? 实际输出值与理论值之间的最大偏差。
? 一般用最小量化阶 ⊿ 来度量,如 ± 1/2 LSB
也可用满量程的百分比来度量,如 0.05% FSR
LSB,Least Significant Bit
FSR,Full Scale Range)
? 转换时间
? 从开始转换到与满量程值相差 ± 1/2 LSB所对应
的模拟量所需要的时间
t
V
1/2 LSB
tC
VFULL
0
8.2.2 典型 D/A转换器
? DAC0832
? 特性:
? 8位电流输出型 D/A转换器
? T型电阻网络
? 差动输出
? 引线图见教材 p351
DAC0832内部结构
输 入 数 据

4 7~
1 3 1 6
1 9
1
2
1 8
1 7
X F E R
W R 2
W R 1
C S
I L E
& ≥ 1≥ 1
L E 1
L E 2
R f b
8 位
输 入
寄 存

8 位
D A C
寄 存

8 位
D / A
转 换

V
R E F
I O U T 2
I O U T 1
R f b
A G N D ( 模 拟 地 )
V C C ( + 5 V 或 + 1 5 V )
2 0
1 0
3
9
1 1
1 2
8
D A C 0 8 3 2 框 图
D G N D ( 数 字 地 )
D 0 D 7
~~
引脚功能
? D7~ D0:输入数据线
? ILE:输入锁存允许
? CS#:片选信号 用于把数据写入到输入锁存器
? WR1#:写输入锁存器
? WR2#:写 DAC寄存器
? XFER#:允许输入锁存器的数据传送到 DAC寄存器
上述二个信号用于启动转换
? VREF:参考电压,-10V~ +10V,一般为 +5V或 +10V
? IOUT1,IOUT2,D/A转换差动电流输出,接运放的输入
? Rfb:内部反馈电阻引脚,接运放输出
? AGND,DGND:模拟地和数字地
工作时序
? D/A转换可分为两个阶段:
? CS#=0,WR1#=0,ILE=1,使输入数据锁存到输入寄存器;
? WR2#=0,XFER#=0,数据传送到 DAC寄存器,并开始转换。
D 0 D 7

C S
W R 1
I L E
( 高 电 平 )
W R 2
X F E R
( 模 拟 输 出 电 流 变 化 )
写输入
寄存器
写 DAC
寄存器
工作方式
? 单缓冲方式
? 使输入锁存器或 DAC寄存器二者之一处于直通 。 CPU只需一次写入即
开始转换。控制比较简单。见教材 p352图。
? 双缓冲方式(标准方式)
? 转换要有两个步骤:
? 将数据写入输入寄存器
? CS#=0,WR1#=0,ILE=1
? 将输入寄存器的内容写入 DAC寄存器
? WR2#=0,XFER#=0
? 优点:数据接收与 D/A转换可异步进行;
可实现多个 DAC同步转换输出 ——分时写入, 同步转换
? 直通方式
? 使内部的两个寄存器都处于直通状态。模拟输出始终跟随输入变化。
? 不能直接与数据总线连接,需外加并行接口 (如 74LS373,8255等 )。
双缓冲方式 —— 同步转换举例
A10-A0
译码器
0832-1
0832-2
port1
port2
port3
双缓冲方式的程序段示例
本例中三个端口地址的用途:
port1 选择 0832-1的输入寄存器
port2 选择 0832-2的输入寄存器
port3 选择 0832-1和 0832-2的 DAC寄存器
MOV AL,data ; 要转换的数据送 AL
MOV DX,port1 ; 0832-1的输入寄存器地址送 DX
OUT DX,AL ; 数据送 0832-1的输入寄存器
MOV DX,port2 ; 0832-2输入寄存器地址送 DX
OUT DX,AL ; 数据送 0832-2的输入寄存器
MOV DX,port3 ; DAC寄存器端口地址送 DX
OUT DX,AL ; 数据送 DAC寄存器,并启动同步转换
HLT
D/A转换器的应用
? 函数发生器
? 只要往 D/A转换器写入按规律变化的数据,即可
在输出端获得正弦波、三角波、锯齿波、方波、
阶梯波、梯形波等函数波形。
? 直流电机的转速控制
? 用不同的数值产生不同的电压,控制电机的转速
? 其他需要用电压 /电流来进行控制的场合
例子参见 p354-p356。
8.3 模 /数( A/D)转换器
? 用途
? 将连续变化的模拟信号转换为数字信号,以便
于计算机进行处理。
? 常用于数据采集系统或数字化声音。
? A/D转换的四个步骤
? 采样 → 保持 → 量化 → 编码
? 采样 /保持:由采样保持电路( S/H) 完成
? 量化 /编码:由 ADC电路完成( ADC,AD变换器)
1) 采样和保持
? 采样
? 将一个时间上连续变化的模拟量转为时间上断续变化的
(离散的)模拟量。
? 或:把一个时间上连续变化的模拟量转换为一个脉冲串,
脉冲的幅度取决于输入模拟量。
? 保持
? 将采样得到的模拟量值保持下来,使之等于采样控制脉
冲存在的最后瞬间的采样值。
? 目的,A/D转换期间保持采样值恒定不变。
? 对于慢速变化的信号,可省略采样保持电路
采样保持电路( S/H)
? 由 MOS管采样开关 T,保持电容 Ch和运放构成的跟随器三部
分组成。
?采样控制信号 S(t)=1时,T导通,Vin向 Ch充电,Vc和 Vout跟
踪 Vin变化,即对 Vin采样。 S(t)=0时,T截止,Vout将保持前一
瞬间采样的数值不变。


Ch
T VoutV
in
采样控制
S(t)
采样保持电路的波形
Vin
S(t)
Vout ?进行 A/D转换时所用的输入电压,就是对保
持下来的采样电压(每
次采样结束时的输入电
压)进行转换。
采样周期的确定
? 采样通常采用等时间间隔采样。
? 采样频率 fs不能低于 2fimax( fimax为输入信
号 Vin的最高次谐波分量的频率);
? fs的 上限受计算机的速度、存储容量、器件
速度的限制。
? 实际中一般取 fs为 fimax的 4-5倍。
2) 量化和编码
? 量化 就是用基本的量化电平的个数来表示采样到模拟电压
值。即把时间上离散而数值上连续的模拟量以一定的准确
度变换为时间上、数值上都离散的具有标准量化级的等效
数字值。(量化电平的大小取决于 A/D变换器的字长)
? 只有当电压值正好等于量化电平的整数倍时,量化后才是准确值,
否则量化后的结果都只能是输入模似量的近似值。这种由于量化而
产生的误差叫做量化误差。量化误差是由于量化电平的有限性造成
的,所以它是原理性误差,只能减小,而无法消除。为减小量化误
差,根本的办法是减小量化电平(即增加字长)。
? 编码 是把已经量化的模拟数值 (它一定是量化电平的整数倍 )
用二进制码,BCD码或其它码来表示。
A/D转换器的分类
? 根据 A/D转换原理和特点的不同,可把 ADC
分成两大类,直接 ADC和 间接 ADC。
? 直接 ADC是将模拟电压直接转换成数字量,常用
的有:
? 逐次逼近式 ADC,计数式 ADC,并行转换式 ADC等。
? 间接 ADC是将模拟电压先转换成中间量,如脉冲
周期 T,脉冲频率 f,脉冲宽度 τ等,再将中间量
变成数字量。常见的有:
? 单积分式 ADC,双积分式 ADC,V/F转换式 ADC等。
各种 ADC的优缺点
? 计数式 ADC,最简单,但转换速度最慢。
? 并行转换式 ADC,速度最快,但成本最高。
? 逐次逼近式 ADC,转换速度和精度都比较高,且比较简单,
价格低,所以在微型机应用系统中最常用。
? 双积分式 ADC,转换精度高,抗干扰能力强,但转换速度
慢,一般应用在精度高而速度不高的场合,如测量仪表。
? V/F转换式 ADC,在转换线性度、精度、抗干扰能力等方面
有独特的优点,且接口简单、占用计算机资源少,缺点也
是转换速度慢。在一些输出信号动态范围较大或传输距离
较远的低速过程的模拟输入通道中应用较为广泛。
8.3.1 工作原理及技术指标
? 逐次逼近型 A/D转换器
? 结构:由 D/A转换器、比较器和逐次逼近寄存器
SAR组成。见 P360页图。
Vi -
+
逐次逼近寄存器
D/A转换器
Vc
比较器
数字量输出
控制电路
模拟量输入
工作原理
类似天平称重量时的尝试法,逐步用砝码的累积重量去逼
近被称物体。 例如:
用 8个砝码 20g,21g,…,27g,可以称出 1~ 255g之 间的物
体。现有一物体,用砝码称出其重量(假定重量为 176g)。
1) ADC从高到低 逐次给 SAR的每一位“置 1”(即加上不同
权重的砝码),SAR相当于放法码的称盘;
2)每次 SAR中的数据经 D/A转换为电压 VC ;
3) VC与输入电压 Vi比较,若 VC≤Vi,保持当前位的‘ 1’,否
则当前位‘置 0’;
4)从高到低逐次比较下去,直到 SAR的每一位都尝试完;
5) SAR内的数据就是与 Vi相对应的 2进制数。
主要技术指标
? 精度
? 量化间隔 (分辨率 ) = Vmax/电平数 (即满量程值 )
例:某 8位 ADC的满量程电压为 5V,则其分辨率为
5V/255=19.6mV
? 量化误差, 用数字(离散)量表示连续量时,由于数字
量 字长有限 而无法精确地表示连续量所造成的误差。
(字长越长,精度越高 )
绝对量化误差 = 量化间隔 /2 = (满量程电压 /(2n-1))/2
相对量化误差 = 1/2 * 1/量化电平数目 * 100%
例:满量程电压 =10V,A/D变换器位数 =10位,则
绝对量化误差 ≈ 10/211 = 4.88mV
相对量化误差 ≈ 1/211 *100% = 0.049%
主要技术指标(续)
? 转换时间
? 转换一次需要的时间。精度越高(字长越
长),转换速度越慢。
? 输入动态范围
? 允许转换的电压的范围。如 0~ 5V,-5V~
+5V,0~ 10V等。
典型的 A/D转换器简介
? ADC0809
? 8通道( 8路)输入
? 8位字长
? 逐位逼近型
? 转换时间 100μs
? 内置三态输出缓冲器(可直接接到数据总线上)
? 外部引脚见教材 p359
引脚功能
D7~ D0:输出数据线(三态)
IN0~ IN7,8通道(路)模拟输入
ADDA,ADDB,ADDC:通道地址(通道选择)
ALE:通道地址锁存
START:启动转换
EOC:转换结束,可用于查询或作为中断申请
OE:输出允许(打开输出三态门)
CLK:时钟输入( 10KHz~ 1.2MHz)
VREF(+),VREF(-):基准参考电压
ADC0809内部结构
START EOC CLK OE
D7
D0
VREF(+) VREF(-)
ADDC
ADDB
ADDA
ALE
IN0
IN7
比较器
8路模
拟开

树状开关
电阻网络
三态
输出
锁存

时序与控制
地址
锁存

译码
D/A
8







8选 1
逐位逼近寄存器
SAR
工作时序
启 动
地 址
锁 存
A D D A A D D C
A L E / S T A R T
E O C
O E
D 0 D 7

~ 转 换 时 间①② ③ ④ ⑤
ADC0809的工作过程
? 根据时序图,ADC0809的工作过程如下:
① 把 通道地址送到 ADDA~ ADDC上,选择一个
模拟输入端;
② 在通道地址信号有效期间,ALE上的 上升沿 使
该地址锁存到内部地址锁存器;
③ START引脚上的 下降沿 启动 A/D变换;
④ 变换开始后,EOC引脚呈现 低电平, EOC重
新变为 高电平 时表示转换结束;
⑤ OE信号打开 输出锁存器的三态门送出结果 。
ADC0809与系统的连接
? 模拟输入端 INi
? 单路输入
? 模拟信号可连接到任何一个输入端;
? 地址线可根据输入固定连接;也可以由 CPU给一个固定地址。
? 多路输入
? 模拟信号按顺序分别连接到输入端;
? 要转换哪一路输入,就将其编号送到地址线上 (动态选择 )。
单路输入时
ADDC
ADDB
ADDA
IN4
ADC0809
输入
多路输入时
ADDC
ADDB
ADDA
IN0
IN1
IN2
IN3
IN4
ADC0809
输入 0
输入 1
输入 2
输入 3
输入 4
CPU指定
通道号
+5V
? 地址线 ADDA-ADDC
? 多路输入时,地址线不能固定连接到+ 5V或地线,而是要通过一个
接口芯片与数据总线连接。接口芯片可以选用:
? 锁存器 74LS273,74LS373等(要占用一个 I/O地址)
? 可编程并行接口 8255(要占用四个 I/O地址)
? CPU用一条 OUT指令把通道地址通过接口芯片送给 ADC0809
ADDC
ADDB
ADDA
IN0
IN1
IN2
IN3
IN4
ADC0809


DB
74LS273
Q2
Q1
Q0CP
来自 I/O
译码
D0-D7
ADDC
ADDB
ADDA
IN0
IN1
IN2
IN3
IN4
ADC0809
DB
8255
PB2
PB1
PB0CS#
来自 I/O
译码
D0-D7
A1
A0
A1
A0
用锁存器作为 ADC0809的接口 用 8255作为 ADC0809的接口
? 数据输出线 D0-D7
? 内部已接有三态门,故可直接连到 DB上
? 也可另外通过一个外部三态门与 DB相连
? 上述两种方法均需占用一个 I/O地址
D0-D7
ADC0809
DB
OE来自 I/O译码
D0-D7
ADC0809
DB
OE
来自 I/O
译码
直接与 DB相连 通过三态门与 DB相连
74LS244
+5V
DIDO
E1#
E2#
? 地址锁存信号 ALE和启动转换信号 START
? 两种连接方法:
? 分别连接:用两个信号分别进行控制 ——需占用两个 I/O端口
或两个 I/O线 (用 8255时 );
? 统一连接:用一个脉冲信号的上升沿进行地址锁存,下降沿
实现启动转换 ——只需占用一个 I/O端口或一个 I/O线 (用
8255时 ),参见教材 p362图。
ADC0809
ALE
START
独立连接
来自 I/O
译码 1
来自 I/O
译码 2
ADC0809
ALE
START
统一连接
来自 I/O
译码
? 转换结束 EOC
? 软件延时等待 (比如延时 1ms)——不用 EOC信号
? CPU效率最低,只能按最大转换时间延时
? 简单,容易实现
? 软件查询 EOC状态
? EOC通过一个三态门连到数据总线的 D0(或 D1,D2等 )
? 三态门要占用一个 I/O端口地址
? CPU效率低
? 把 EOC作为中断申请信号,向 CPU申请中断
? 在中断服务程序中读入转换结果,效率高
D0
IN0
A15-A0
IOR#
IOW#
D7-D0 D7-D0
EOC
OE
START
ALE
ADDC
ADDB
ADDA



ADC0809
? 一个连接实例(用查询方式)
模拟信号输入
进行一次 A/D转换的程序 (以上图为例 )
? 用延时等待的方法
……
MOV DX,start_port
OUT DX,AL ;启动转换
CALL DELAY_1MS ;延时 1ms
MOV DX,oe_port
IN AL,DX ;读入结果
……
? 用查询 EOC状态的方法
……
MOV DX,start_port
OUT DX,AL ;启动转换
LL,MOV DX,eoc_port
IN AL,DX ;读入 EOC状态
AND AL,01H ;测试第 0位 (EOC状态位 )
JZ LL ;未转换完,则循环检测
MOV DX,oe_port
IN AL,DX ;读入结果
……
进一步应考虑的问题
? 多个模拟通道时,程序怎样编写?
? ADC位数大于 8位应怎样处理?
? 用 8255时程序应怎样编写?
? 以上三个问题留作思考题
作业
? P364
? 8.4,8.10,8.11,8.14