模拟量输入输出技术超详细知识点总结

模拟量输入输出技术超详细知识点总结


🌈 say-fall:个人主页 🚀 专栏:《手把手教你学会C++》 | 《系统深入Linux操作系统》 | 《数据结构与算法》 | 《小游戏与项目》 💪 格言:做好你自己,才能吸引更多人,与他们共赢,这才是最好的成长方式。


📝 前言

学微机原理,从CPU、存储器、I/O接口一路走来,我们处理的都是数字信号 ------非0即1,干净利落。但现实世界远没有这么"听话":温度是连续变化的,压力是慢慢升降的,光强是渐变的......这些模拟量计算机根本不认识。

怎么让只懂数字的计算机去感知和控制模拟世界?这就需要一座桥梁------模拟接口电路 ,也就是我们常说的D/A转换器A/D转换器。理解它们的工作原理,是做嵌入式开发、工业控制和数据采集的入门必修课。

不过模拟接口的知识点确实比较碎:通道组成、权电阻网络、R-2R梯形网络、DAC0832的三种工作模式、ADC0809的工作时序、三种判断转换结束的方法......一个一个看还好,放在一起就容易串。本文的目标就是把这些知识点串成一条线,从通道整体框架讲起,再到DAC和ADC的原理、芯片和应用,最后落地到编程实现。

通过本文,你将掌握:

技能 应用场景
模拟I/O通道的完整组成和各环节作用 设计数据采集和工业控制系统
R-2R梯形电阻网络D/A转换原理 理解DAC的核心工作机制
DAC0832三种工作模式的原理和编程 单路/多路D/A输出系统设计
逐位逼近型A/D转换原理 理解ADC的核心工作机制
ADC0809工作时序和三种判断转换结束方法 A/D采集系统的硬件和软件设计
分辨率、量化误差等技术指标的计算 芯片选型和精度评估

📌 前置知识: 本文假设你已经了解基本的数字电路知识(运算放大器的虚地概念、二进制数的权值表示),以及8086汇编语言的基本语法。

文章目录

  • 模拟量输入输出技术超详细知识点总结
    • [📝 前言](#📝 前言)
    • [一、🗺️ 模拟量输入输出通道详解](#一、🗺️ 模拟量输入输出通道详解)
      • [1.1 🔌 为什么需要模拟接口](#1.1 🔌 为什么需要模拟接口)
      • [1.2 📥 模拟量输入通道完整组成](#1.2 📥 模拟量输入通道完整组成)
        • [1.2.1 传感器(Transducer)](#1.2.1 传感器(Transducer))
        • [1.2.2 变送器(Transformer)](#1.2.2 变送器(Transformer))
        • [1.2.3 信号处理电路](#1.2.3 信号处理电路)
        • [1.2.4 多路转换开关(MUX)](#1.2.4 多路转换开关(MUX))
        • [1.2.5 采样保持电路(S/H)](#1.2.5 采样保持电路(S/H))
        • [1.2.6 A/D转换器(ADC)](#1.2.6 A/D转换器(ADC))
      • [1.3 📤 模拟量输出通道完整组成](#1.3 📤 模拟量输出通道完整组成)
        • [1.3.1 D/A转换器(DAC)](#1.3.1 D/A转换器(DAC))
        • [1.3.2 低通滤波器](#1.3.2 低通滤波器)
        • [1.3.3 放大驱动电路](#1.3.3 放大驱动电路)
        • [1.3.4 执行机构](#1.3.4 执行机构)
    • [二、📊 数/模(D/A)转换器深度解析](#二、📊 数/模(D/A)转换器深度解析)
      • [2.1 🧮 D/A转换器的基本工作原理](#2.1 🧮 D/A转换器的基本工作原理)
        • [2.1.1 权电阻网络D/A转换器](#2.1.1 权电阻网络D/A转换器)
        • [2.1.2 R-2R梯形电阻网络D/A转换器](#2.1.2 R-2R梯形电阻网络D/A转换器)
      • [2.2 📐 D/A转换器主要技术指标详解](#2.2 📐 D/A转换器主要技术指标详解)
        • [2.2.1 分辨率(Resolution)](#2.2.1 分辨率(Resolution))
        • [2.2.2 转换精度(Accuracy)](#2.2.2 转换精度(Accuracy))
        • [2.2.3 转换时间(Settling Time)](#2.2.3 转换时间(Settling Time))
        • [2.2.4 线性度(Linearity)](#2.2.4 线性度(Linearity))
      • [2.3 🔧 典型D/A转换器:DAC0832深度解析](#2.3 🔧 典型D/A转换器:DAC0832深度解析)
        • [2.3.1 主要特点](#2.3.1 主要特点)
        • [2.3.2 内部结构](#2.3.2 内部结构)
        • [2.3.3 引脚功能详解](#2.3.3 引脚功能详解)
        • [2.3.4 三种工作模式详解](#2.3.4 三种工作模式详解)
          • [1️⃣ 单缓冲模式](#1️⃣ 单缓冲模式)
          • [2️⃣ 双缓冲模式(标准模式)](#2️⃣ 双缓冲模式(标准模式))
          • [3️⃣ 无缓冲模式](#3️⃣ 无缓冲模式)
        • [2.3.5 电压输出电路](#2.3.5 电压输出电路)
          • [1️⃣ 单极性电压输出](#1️⃣ 单极性电压输出)
          • [2️⃣ 双极性电压输出](#2️⃣ 双极性电压输出)
        • [2.3.6 💡 典型应用:波形发生器](#2.3.6 💡 典型应用:波形发生器)
          • [1️⃣ 方波发生器](#1️⃣ 方波发生器)
          • [2️⃣ 锯齿波发生器](#2️⃣ 锯齿波发生器)
          • [3️⃣ 三角波发生器](#3️⃣ 三角波发生器)
          • [4️⃣ 正弦波发生器](#4️⃣ 正弦波发生器)
    • [三、📊 模/数(A/D)转换器深度解析](#三、📊 模/数(A/D)转换器深度解析)
      • [3.1 🔄 A/D转换器的基本工作原理与类型](#3.1 🔄 A/D转换器的基本工作原理与类型)
        • [3.1.1 计数型A/D转换器](#3.1.1 计数型A/D转换器)
        • [3.1.2 双积分型A/D转换器](#3.1.2 双积分型A/D转换器)
        • [3.1.3 逐位逼近型A/D转换器](#3.1.3 逐位逼近型A/D转换器)
      • [3.2 📐 A/D转换器主要技术指标详解](#3.2 📐 A/D转换器主要技术指标详解)
        • [3.2.1 分辨率(Resolution)](#3.2.1 分辨率(Resolution))
        • [3.2.2 量化误差(Quantization Error)](#3.2.2 量化误差(Quantization Error))
        • [3.2.3 转换精度(Accuracy)](#3.2.3 转换精度(Accuracy))
        • [3.2.4 转换时间(Conversion Time)](#3.2.4 转换时间(Conversion Time))
      • [3.3 🔧 典型A/D转换器:ADC0809深度解析](#3.3 🔧 典型A/D转换器:ADC0809深度解析)
        • [3.3.1 主要特点](#3.3.1 主要特点)
        • [3.3.2 内部结构](#3.3.2 内部结构)
        • [3.3.3 引脚功能详解](#3.3.3 引脚功能详解)
        • [3.3.4 🕐 工作时序与过程](#3.3.4 🕐 工作时序与过程)
        • [3.3.5 🔍 判断转换结束的三种方法](#3.3.5 🔍 判断转换结束的三种方法)
          • [1️⃣ 软件延时法](#1️⃣ 软件延时法)
          • [2️⃣ 软件查询法](#2️⃣ 软件查询法)
          • [3️⃣ 中断法](#3️⃣ 中断法)
        • [3.3.6 与系统的连接](#3.3.6 与系统的连接)
        • [3.3.7 多路数据采集程序设计](#3.3.7 多路数据采集程序设计)
    • [四、⚙️ 实际应用中的注意事项](#四、⚙️ 实际应用中的注意事项)
      • [4.1 参考电压的选择](#4.1 参考电压的选择)
      • [4.2 电源与接地](#4.2 电源与接地)
      • [4.3 信号布线](#4.3 信号布线)
      • [4.4 输入信号调理](#4.4 输入信号调理)
    • [五、🎯 学习重点与考试要点](#五、🎯 学习重点与考试要点)
      • [5.1 核心概念](#5.1 核心概念)
      • [5.2 D/A转换器](#5.2 D/A转换器)
      • [5.3 A/D转换器](#5.3 A/D转换器)
      • [5.4 技术指标计算](#5.4 技术指标计算)
    • [六、🤔 几个思考题](#六、🤔 几个思考题)
      • [1️⃣ 一个8位D/A转换器,参考电压Vref=+5V,满量程输出约为-5V。如果要输出2V的电压,应输入什么数字量?](#1️⃣ 一个8位D/A转换器,参考电压Vref=+5V,满量程输出约为-5V。如果要输出2V的电压,应输入什么数字量?)
      • [2️⃣ 为什么ADC0809的ALE和START信号通常并联在一起?](#2️⃣ 为什么ADC0809的ALE和START信号通常并联在一起?)
      • [3️⃣ 某工业现场需要采集4路温度信号,温度传感器输出0~50mV的微弱信号。请简述从传感器到ADC的完整信号链路。](#3️⃣ 某工业现场需要采集4路温度信号,温度传感器输出0~50mV的微弱信号。请简述从传感器到ADC的完整信号链路。)

一、🗺️ 模拟量输入输出通道详解

1.1 🔌 为什么需要模拟接口

计算机内部处理的是离散的数字量 (只有0和1两种状态),而现实世界中的绝大多数物理量都是连续变化的模拟量,例如:

  • 热工量:温度、压力、流量、液位
  • 机械量:位移、速度、加速度、力
  • 电工量:电压、电流、功率
  • 光学量:光强、照度

模拟接口电路的核心任务就是在数字系统和模拟系统之间架起桥梁,实现两种信号的相互转换:

  • A/D转换(Analog to Digital):模拟量→数字量,供计算机处理
  • D/A转换(Digital to Analog):数字量→模拟量,驱动外部执行机构

💡 一句话理解:A/D是"看",让计算机能感知外界;D/A是"做",让计算机能控制外界。两者配合,就构成了完整的闭环控制系统。

1.2 📥 模拟量输入通道完整组成

模拟量输入通道是将外部模拟信号转换为计算机可识别数字信号的完整链路,每个环节都有其不可替代的作用。信号从传感器出发,经过层层处理,最终变成CPU能读的二进制数:

1.2.1 传感器(Transducer)
  • 功能:将非电量物理量转换为微弱的电信号(通常是毫伏级或微伏级)
  • 分类
    • 温度传感器:热电偶、热电阻、热敏电阻
    • 压力传感器:应变片、压电传感器
    • 位移传感器:电位器、电感式位移传感器
  • 特点:输出信号微弱,且通常含有噪声,不能直接送入A/D转换器
1.2.2 变送器(Transformer)
  • 功能:将传感器输出的微弱、非标准电信号转换为标准电信号
  • 标准信号
    • 电压信号:05V、15V、0~10V
    • 电流信号:4~20mA(工业现场最常用,抗干扰能力强)

⚠️ 为什么工业现场爱用4~20mA电流信号?因为电流在传输过程中不受导线电阻影响,适合远距离传输;而且4mA为零点、20mA为满量程,可以区分"信号为零"和"线路断开"------如果电流降到0mA,说明线路断了,不是传感器输出为零。

1.2.3 信号处理电路
  • 功能:对信号进行放大、整形、滤波,提高信号质量
  • 主要组成
    • 运算放大器:将微弱信号放大到A/D转换器的输入范围
    • 滤波器:去除信号中的高频噪声和干扰
    • 隔离电路:实现计算机与工业现场的电气隔离,保护计算机安全
1.2.4 多路转换开关(MUX)
  • 功能:实现多路模拟信号的分时采集,"多选一"
  • 工作原理:通过地址信号选择某一路模拟信号接通,其他路断开
  • 典型芯片:74LS150(16选1)、74LS151(8选1)、ADG508(8选1)
  • 应用场景:当需要采集多路模拟信号时,使用多路转换开关可以共用一个A/D转换器,降低成本
1.2.5 采样保持电路(S/H)
  • 为什么需要采样保持:A/D转换需要一定的时间,在转换过程中,如果输入信号发生变化,会导致转换误差。采样保持电路的作用就是在A/D转换期间保持输入信号恒定不变。
  • 工作过程
    1. 采样阶段:开关闭合,输出跟随输入变化
    2. 保持阶段:开关断开,输出保持在开关断开瞬间的输入值
  • 典型芯片:LF398、AD582

💡 采样保持电路就像按了一次"快门"------在A/D转换的瞬间把模拟信号"冻结"住,防止转换期间信号变化导致结果不准。

1.2.6 A/D转换器(ADC)
  • 功能:模拟量输入通道的核心,将模拟电压信号转换为二进制数字信号
  • 输出:与输入模拟量成正比的二进制数

1.3 📤 模拟量输出通道完整组成

模拟量输出通道是将计算机输出的数字量转换为模拟信号,驱动外部执行机构的完整链路:

1.3.1 D/A转换器(DAC)
  • 功能:模拟量输出通道的核心,将二进制数字信号转换为模拟电压或电流信号
  • 输入:计算机输出的二进制数
  • 输出:与输入数字量成正比的模拟量
1.3.2 低通滤波器
  • 功能:平滑D/A转换后的阶梯状输出波形,去除高频分量
  • 原理:D/A转换输出的是离散的阶梯信号,含有丰富的高频谐波,低通滤波器可以滤除这些高频分量,得到连续平滑的模拟信号
1.3.3 放大驱动电路
  • 功能:提供足够的电压和电流驱动能力,带动外部执行机构
  • 原因:D/A转换器的输出电流通常很小(毫安级),无法直接驱动电机、阀门等大功率执行机构
1.3.4 执行机构
  • 功能:根据模拟信号执行相应的动作,实现对工业过程的控制
  • 典型执行机构
    • 电动调节阀:控制流体的流量
    • 伺服电机:控制位移和速度
    • 继电器、接触器:控制电路的通断
    • 变频器:控制电机的转速

二、📊 数/模(D/A)转换器深度解析

2.1 🧮 D/A转换器的基本工作原理

D/A转换器的本质是权值求和电路,它将数字量的每一位按其权值大小转换为对应的模拟电流或电压,然后通过运算放大器相加,得到与数字量成正比的总模拟输出。

2.1.1 权电阻网络D/A转换器

电路结构

  • 每个二进制位对应一个电阻,电阻值与该位的权值成反比
  • 所有电阻的一端接模拟开关,另一端接运算放大器的反相输入端
  • 模拟开关由数字量的对应位控制,Di=1时接参考电压Vref,Di=0时接地

输出电压推导

运算放大器反相输入端为虚地,电位为0。当Di=1时,该支路的电流为:

I i = V r e f R i I_i = \frac{V_{ref}}{R_i} Ii=RiVref

总输出电流为所有支路电流之和:

I o u t = ∑ i = 0 n − 1 D i ⋅ V r e f R i I_{out} = \sum_{i=0}^{n-1} \frac{D_i \cdot V_{ref}}{R_i} Iout=i=0∑n−1RiDi⋅Vref

输出电压为:

V o u t = − I o u t ⋅ R f = − V r e f ⋅ R f ∑ i = 0 n − 1 D i R i V_{out} = -I_{out} \cdot R_f = -V_{ref} \cdot R_f \sum_{i=0}^{n-1} \frac{D_i}{R_i} Vout=−Iout⋅Rf=−Vref⋅Rfi=0∑n−1RiDi

对于8位权电阻网络,电阻值分别为R, 2R, 4R, ..., 128R。当输入数字量为全1时,输出电压最大:

V o u t ( m a x ) = − 255 256 ⋅ V r e f ⋅ R f R V_{out(max)} = -\frac{255}{256} \cdot V_{ref} \cdot \frac{R_f}{R} Vout(max)=−256255⋅Vref⋅RRf

缺点

  • 电阻值范围太大(8位时从R到128R),难以保证所有电阻的精度一致
  • 高位电阻的微小误差会对输出产生很大影响
  • 实际产品中很少使用
2.1.2 R-2R梯形电阻网络D/A转换器

为了解决权电阻网络电阻值范围太大的问题,实际D/A转换器都采用R-2R梯形电阻网络结构。

电路结构

  • 只用R和2R两种阻值的电阻,构成梯形网络
  • 每个节点的等效电阻都是R
  • 模拟开关由数字量控制,Di=1时接运算放大器反相输入端,Di=0时接地

工作原理

无论模拟开关接向哪一边,每个2R电阻的下端电位都是0(虚地或地),因此每个支路的电流都是恒定的。从参考电压端看进去,整个网络的等效电阻为R,总电流为:

I t o t a l = V r e f R I_{total} = \frac{V_{ref}}{R} Itotal=RVref

电流在每个节点处平均分配,每个支路的电流依次为:

I 7 = I t o t a l 2 , I 6 = I t o t a l 4 , ... , I 0 = I t o t a l 256 I_7 = \frac{I_{total}}{2}, \quad I_6 = \frac{I_{total}}{4}, \quad \ldots, \quad I_0 = \frac{I_{total}}{256} I7=2Itotal,I6=4Itotal,...,I0=256Itotal

总输出电流为:

I o u t = ∑ i = 0 7 D i ⋅ I i = V r e f 256 R ∑ i = 0 7 D i ⋅ 2 i I_{out} = \sum_{i=0}^{7} D_i \cdot I_i = \frac{V_{ref}}{256R} \sum_{i=0}^{7} D_i \cdot 2^i Iout=i=0∑7Di⋅Ii=256RVrefi=0∑7Di⋅2i

输出电压为:

V o u t = − I o u t ⋅ R f = − V r e f ⋅ R f 256 R ⋅ D V_{out} = -I_{out} \cdot R_f = -\frac{V_{ref} \cdot R_f}{256R} \cdot D Vout=−Iout⋅Rf=−256RVref⋅Rf⋅D

其中D为输入的8位二进制数(0~255)。

优点

  • 只用两种阻值的电阻,精度容易保证
  • 转换速度快
  • 是目前所有D/A转换器的主流结构

💡 权电阻网络是"理论上最直观但实际上最不实用"的方案------电阻种类太多、精度难以保证。R-2R梯形网络用最少的电阻种类实现了同样的功能,工程上最可靠。

2.2 📐 D/A转换器主要技术指标详解

2.2.1 分辨率(Resolution)
  • 定义:D/A转换器能够分辨的最小输出变化量,即输入数字量变化1个LSB(最低有效位)时,输出模拟量的变化量。
  • 物理意义:反映了D/A转换器对微小输入变化的敏感程度。
  • 表示方法
    1. 位数表示法:用输入数字量的位数表示,如8位、10位、12位、16位。位数越多,分辨率越高。
    2. 数值表示法:用1个LSB对应的输出变化量表示。
  • 计算公式

分辨率 = 满量程输出电压 2 n − 1 分辨率 = \frac{满量程输出电压}{2^n - 1} 分辨率=2n−1满量程输出电压

其中n为D/A转换器的位数。

示例

一个满量程输出为5V的10位D/A转换器,其分辨率为:

分辨率 = 5 V 2 10 − 1 = 5 V 1023 ≈ 4.88 m V 分辨率 = \frac{5V}{2^{10} - 1} = \frac{5V}{1023} \approx 4.88mV 分辨率=210−15V=10235V≈4.88mV

这意味着输入数字量每变化1,输出电压变化约4.88mV。

2.2.2 转换精度(Accuracy)
  • 定义:实际输出值与理论输出值之间的最大偏差。
  • 与分辨率的区别
    • 分辨率是理论上能够达到的最小变化量,由位数决定。
    • 转换精度是实际输出与理论值的偏差,受多种因素影响。
  • 影响因素
    • 分辨率:位数越多,精度越高
    • 参考电压Vref的稳定性
    • 电阻网络的精度
    • 运算放大器的零点漂移和增益误差
    • 温度变化
  • 表示方法:通常用满量程的百分比表示,如±0.1%FSR(Full Scale Range)。

💡 分辨率和精度是两个不同的概念:分辨率是"你能分辨多细",精度是"你分得有多准"。高分辨率不等于高精度,但高精度一定需要高分辨率。

2.2.3 转换时间(Settling Time)
  • 定义:从数字量输入到输出模拟量稳定在满量程±1/2 LSB范围内所需的时间。
  • 物理意义:反映了D/A转换器的转换速度。
  • 典型值
    • 普通D/A转换器:几微秒到几十微秒
    • 高速D/A转换器:几纳秒到几百纳秒
2.2.4 线性度(Linearity)
  • 定义:实际转换特性曲线与理想直线之间的最大偏差。
  • 理想特性:输出电压与输入数字量呈严格的线性关系。
  • 表示方法:通常用LSB表示,如±0.5 LSB。

2.3 🔧 典型D/A转换器:DAC0832深度解析

DAC0832是美国国家半导体公司(NS)生产的8位电流输出型D/A转换器,是目前应用最广泛的D/A转换器之一。

2.3.1 主要特点
  • 8位分辨率,转换时间约1μs
  • 采用R-2R梯形电阻网络结构
  • 电流输出型,差动电流输出
  • 内部有两级锁存器(输入寄存器和DAC寄存器)
  • 支持三种工作模式:单缓冲、双缓冲、无缓冲
  • 单电源+5V~+15V供电
  • 参考电压范围:-10V~+10V
  • 低功耗:约20mW
2.3.2 内部结构

DAC0832的内部结构主要由以下几部分组成:

  1. 8位输入寄存器:第一级锁存器,用于锁存CPU输出的数字量
  2. 8位DAC寄存器:第二级锁存器,用于锁存待转换的数字量
  3. 8位D/A转换电路:R-2R梯形电阻网络和模拟开关,实现D/A转换
  4. 控制逻辑:控制两级锁存器的工作状态
2.3.3 引脚功能详解

DAC0832采用20引脚双列直插封装,各引脚功能如下:

引脚号 引脚名 类型 功能
1~8 D7~D0 输入 8位数字量输入,D7为最高位,D0为最低位
9 Iout1 输出 电流输出1,DAC寄存器全1时Iout1最大,全0时Iout1最小
10 Iout2 输出 电流输出2,Iout1 + Iout2 = 常数(约为Vref/R)
11 Rfb 输入 反馈电阻端,内部已集成15kΩ反馈电阻,通常直接接运放输出端
12 Vref 输入 参考电压输入,范围-10V~+10V,决定输出电压范围
13 AGND 电源 模拟地
14 DGND 电源 数字地
15 WR1 输入 写输入寄存器信号,低电平有效
16 ILE 输入 输入锁存允许,高电平有效
17 CS 输入 片选信号,低电平有效
18 WR2 输入 写DAC寄存器信号,低电平有效
19 XFER 输入 传送控制信号,低电平有效
20 Vcc 电源 电源输入,+5V~+15V

重要说明

  • Iout1和Iout2是差动电流输出,需要外接运算放大器转换为电压输出。
  • 模拟地(AGND)和数字地(DGND)应该单点连接,以减少数字噪声对模拟电路的干扰。
2.3.4 三种工作模式详解

DAC0832的核心特点是内部有两级锁存器,通过不同的控制方式可以实现三种工作模式,以适应不同的应用需求。

1️⃣ 单缓冲模式

工作原理

使两级锁存器中的一级处于直通状态,另一级受CPU控制。通常将DAC寄存器设置为直通状态(WR2和XFER接地),只控制输入寄存器。

电路连接

  • ILE接+5V
  • WR2和XFER接地
  • CS接地址译码器输出
  • WR1接系统IOW信号

工作过程

  1. CPU执行OUT指令,将数字量输出到数据总线
  2. 地址译码器输出有效,CS=0
  3. IOW信号有效,WR1=0
  4. 输入寄存器锁存数据总线上的数字量
  5. 由于DAC寄存器处于直通状态,数据直接进入D/A转换电路,开始转换

特点:芯片只占用一个端口地址,CPU只需一次写入即可启动转换。

适用场景:单路D/A转换,不需要多个DAC同步输出的场合。

编程示例

asm 复制代码
; DAC端口地址:378H
; 输出一个固定电压
MOV DX, 378H
MOV AL, 80H      ; 数字量80H,对应输出电压约为Vref/2
OUT DX, AL        ; 写入并启动转换
2️⃣ 双缓冲模式(标准模式)

工作原理

两级锁存器都受CPU控制,需要两次写入操作才能完成一次转换。

电路连接

  • ILE接+5V
  • CS和XFER分别接地址译码器的两个不同输出
  • WR1和WR2都接系统IOW信号

工作过程

  1. 第一次写入:CPU将数据写入输入寄存器(CS有效,WR1=0)
  2. 第二次写入:CPU将输入寄存器的数据传送到DAC寄存器,启动转换(XFER有效,WR2=0)

优点

  • 数据接收与D/A转换可以异步进行
  • 可以实现多个DAC的同步转换输出

适用场景:多路D/A转换需要同步输出的场合。

同步转换示例

系统中有两片DAC0832,需要同时输出两个不同的模拟量:

  • DAC1输入寄存器地址:378H
  • DAC2输入寄存器地址:379H
  • 两个DAC的DAC寄存器共用地址:37AH
asm 复制代码
; 写入第一路数据到DAC1的输入寄存器
MOV AL, DATA1
MOV DX, 378H
OUT DX, AL

; 写入第二路数据到DAC2的输入寄存器
MOV AL, DATA2
MOV DX, 379H
OUT DX, AL

; 同时启动两个DAC转换
MOV DX, 37AH
OUT DX, AL
3️⃣ 无缓冲模式

工作原理

两级锁存器都处于直通状态,数据直接进入D/A转换电路。

电路连接

  • ILE接+5V
  • CS、WR1、WR2、XFER都接地

特点:模拟输出始终跟随输入数字量变化,不能直接与系统数据总线连接,需要外加并行接口(如74LS373、8255)。

适用场景:简单的、不需要锁存的场合,输入数字量由其他硬件电路提供。

2.3.5 电压输出电路

DAC0832是电流输出型,需要外接运算放大器转换为电压输出:

1️⃣ 单极性电压输出
  • 输出范围 :0-Vref(或0+Vref,取决于运算放大器的接法)
  • 电路连接:Iout1接运放反相输入端,Iout2接地,Rfb接运放输出端
  • 输出电压公式

V o u t = − V r e f 256 ⋅ D V_{out} = -\frac{V_{ref}}{256} \cdot D Vout=−256Vref⋅D

其中D为输入数字量(0~255)。

示例:Vref=+5V,输入D=FFH(255),则:

V o u t = − 5 V 256 × 255 ≈ − 4.98 V V_{out} = -\frac{5V}{256} \times 255 \approx -4.98V Vout=−2565V×255≈−4.98V

2️⃣ 双极性电压输出
  • 输出范围:-Vref~+Vref
  • 电路连接:在单极性输出的基础上,增加一个偏移电路
  • 输出电压公式

V o u t = V r e f 128 ⋅ ( D − 128 ) V_{out} = \frac{V_{ref}}{128} \cdot (D - 128) Vout=128Vref⋅(D−128)

示例:Vref=+5V

输入数字量D D的十进制 输出电压Vout
00H 0 -5V
80H 128 0V
FFH 255 +4.96V
2.3.6 💡 典型应用:波形发生器

向D/A转换器写入按一定规律变化的数字量,即可在输出端获得相应的模拟波形。这是D/A转换器最常见的应用之一。

1️⃣ 方波发生器
asm 复制代码
; 输出频率约为1kHz的方波
MOV DX, 378H
LOOP:
 MOV AL, 00H       ; 输出低电平
 OUT DX, AL
 CALL DELAY_500US   ; 延时500微秒
 MOV AL, 0FFH       ; 输出高电平
 OUT DX, AL
 CALL DELAY_500US   ; 延时500微秒
 JMP LOOP
2️⃣ 锯齿波发生器
asm 复制代码
; 输出锯齿波
MOV DX, 378H
MOV AL, 0
LOOP:
 OUT DX, AL         ; 输出
 INC AL             ; 数值递增
 JMP LOOP           ; 循环
3️⃣ 三角波发生器
asm 复制代码
; 输出三角波
MOV DX, 378H
MOV AL, 0
UP:
 OUT DX, AL
 INC AL
 CMP AL, 0FFH
 JNZ UP
DOWN:
 OUT DX, AL
 DEC AL
 CMP AL, 0
 JNZ DOWN
 JMP UP
4️⃣ 正弦波发生器

预先计算好一个周期的正弦波数字量,存储在数据表中,然后循环输出。

asm 复制代码
; 正弦波数据表(一个周期32个点)
SIN_TABLE DB 128,152,176,198,218,234,245,251
 DB 253,251,245,234,218,198,176,152
 DB 128,104,80,58,38,22,11,5
 DB 3,5,11,22,38,58,80,104

; 输出正弦波
MOV DX, 378H
MOV BX, OFFSET SIN_TABLE
MOV CX, 32
LOOP:
 MOV AL, [BX]
 OUT DX, AL
 INC BX
 LOOP LOOP
 JMP LOOP

⚠️ 锯齿波和三角波的"频率"取决于循环速度,也就是OUT指令的执行速度。如果需要精确控制频率,应该在每次输出之间加入精确延时。


三、📊 模/数(A/D)转换器深度解析

3.1 🔄 A/D转换器的基本工作原理与类型

A/D转换器的作用是将连续变化的模拟电压信号转换为离散的二进制数字信号。根据转换原理的不同,主要分为以下三种类型:

3.1.1 计数型A/D转换器

工作原理

  • 从0开始计数,计数器的输出同时送到D/A转换器
  • D/A转换器的输出与输入模拟电压进行比较
  • 当D/A输出等于输入模拟电压时,停止计数,此时计数器的值就是转换结果

特点

  • 电路简单,价格低
  • 转换速度慢,转换时间与输入电压成正比
  • 最大转换时间为2^n个时钟周期(n为位数)
3.1.2 双积分型A/D转换器

工作原理

  1. 第一次积分:对输入模拟电压进行固定时间的积分
  2. 第二次积分:对参考电压进行反向积分,直到积分器输出为0
  3. 第二次积分的时间与输入模拟电压成正比,用计数器测量这个时间,得到转换结果

特点

  • 分辨率高,抗干扰能力强(对工频干扰有很强的抑制作用)
  • 转换速度慢,通常每秒几次到几十次
  • 适用于数字万用表、温度测量等中低速、高精度场合
3.1.3 逐位逼近型A/D转换器

工作原理

类似天平称重的过程,从最高位开始逐位试探,逐步逼近输入模拟电压:

  1. 将逐位逼近寄存器(SAR)的最高位置1,其余位清0
  2. 将SAR的值送到D/A转换器,转换为模拟电压
  3. 将D/A输出与输入模拟电压进行比较
  4. 如果D/A输出小于输入电压,则保留该位为1;否则清0
  5. 对下一位重复上述过程,直到所有位都试探完毕
  6. 此时SAR的值就是转换结果

特点

  • 转换速度快,转换时间固定(约n个时钟周期,n为位数)
  • 转换精度高
  • 是目前应用最广泛的A/D转换器类型

💡 逐位逼近型A/D就像用天平称重量:先放最重的砝码试,太重就换轻的,不够就保留再试更轻的......8位A/D只需8次比较就能得到结果,速度远快于从0开始一个个数的计数型。

3.2 📐 A/D转换器主要技术指标详解

3.2.1 分辨率(Resolution)
  • 定义:A/D转换器能够分辨的最小输入模拟电压变化量,即输出数字量变化1个LSB时,输入模拟量的变化量。
  • 计算公式

分辨率 = 满量程输入电压 2 n − 1 分辨率 = \frac{满量程输入电压}{2^n - 1} 分辨率=2n−1满量程输入电压

其中n为A/D转换器的位数。

示例

一个满量程输入为5V的8位A/D转换器,其分辨率为:

分辨率 = 5 V 2 8 − 1 = 5 V 255 ≈ 19.6 m V 分辨率 = \frac{5V}{2^8 - 1} = \frac{5V}{255} \approx 19.6mV 分辨率=28−15V=2555V≈19.6mV

这意味着输入电压变化约19.6mV时,输出数字量才会变化1。

3.2.2 量化误差(Quantization Error)
  • 定义 :由于量化过程中取整引起的误差,是A/D转换器固有的误差,无法消除。
  • 产生原因:模拟量是连续的,而数字量是离散的,一定范围内的模拟量只能对应一个数字量。
  • 量化间隔(Δ):一个LSB对应的模拟量,即分辨率。
  • 绝对量化误差:最大为±1/2 Δ
  • 相对量化误差:最大为±1/(2^n) × 100%

示例

满量程10V的10位A/D转换器:

  • 量化间隔Δ = 10V / 1023 ≈ 9.77mV
  • 绝对量化误差 ≈ ±4.88mV
  • 相对量化误差 ≈ ±0.049%

⚠️ 量化误差是A/D转换的"天生缺陷"------就像你用尺子量东西,最小刻度是1mm,那你最多只能精确到0.5mm,再细就分不清了。增加位数是唯一减小量化误差的方法。

3.2.3 转换精度(Accuracy)
  • 定义:实际转换结果与理论值之间的最大偏差。
  • 影响因素:量化误差、非线性误差、零点误差、增益误差、温度漂移
  • 表示方法:通常用满量程的百分比表示,如±0.1%FSR。
3.2.4 转换时间(Conversion Time)
  • 定义:从启动转换到输出稳定的数字量所需的时间。
  • 典型值
    • 逐位逼近型:几微秒到几百微秒
    • 双积分型:几十毫秒到几百毫秒
    • 高速Flash型:几纳秒到几十纳秒

3.3 🔧 典型A/D转换器:ADC0809深度解析

ADC0809是美国国家半导体公司(NS)生产的8位逐位逼近型A/D转换器,内置8路模拟开关,是目前应用最广泛的A/D转换器之一。

3.3.1 主要特点
  • 8位分辨率,转换时间约100μs
  • 内置8路模拟输入通道,可分时采集8路模拟信号
  • 采用逐位逼近型转换原理
  • 内置三态输出缓冲器,可直接与系统数据总线连接
  • 单电源+5V供电,模拟输入范围0~5V
  • 无需调零和满量程调整
  • 低功耗:约15mW
3.3.2 内部结构

ADC0809的内部结构主要由以下几部分组成:

  1. 8路模拟开关:选择8路模拟输入中的一路
  2. 地址锁存与译码器:锁存通道地址,译码后选择相应的模拟开关
  3. 逐位逼近寄存器(SAR):存放转换过程中的中间结果
  4. D/A转换器:将SAR的值转换为模拟电压,用于比较
  5. 比较器:比较D/A输出与输入模拟电压
  6. 时序与控制逻辑:控制整个转换过程
  7. 三态输出锁存器:锁存转换结果,供CPU读取
3.3.3 引脚功能详解

ADC0809采用28引脚双列直插封装,各引脚功能如下:

引脚号 引脚名 类型 功能
26~28, 1~5 IN0~IN7 输入 8路模拟输入通道,输入范围0~5V
8~15 D7~D0 输出 8位数字量输出,三态,D7为最高位,D0为最低位
25 ADDA 输入 通道地址选择A(最低位)
24 ADDB 输入 通道地址选择B
23 ADDC 输入 通道地址选择C(最高位)
22 ALE 输入 地址锁存允许,高电平有效,上升沿锁存通道地址
6 START 输入 启动转换信号,上升沿复位,下降沿启动转换
7 EOC 输出 转换结束信号,转换开始时变低,转换结束后变高
9 OE 输入 输出允许,高电平有效,打开三态输出缓冲器
10 CLK 输入 时钟输入,范围10kHz~1.2MHz,典型值640kHz
11 Vref(+) 输入 参考电压正端,通常接+5V
12 Vref(-) 输入 参考电压负端,通常接地
13 GND 电源
14 Vcc 电源 电源输入,+5V

通道地址选择

ADDC ADDB ADDA 选中通道
0 0 0 IN0
0 0 1 IN1
0 1 0 IN2
0 1 1 IN3
1 0 0 IN4
1 0 1 IN5
1 1 0 IN6
1 1 1 IN7
3.3.4 🕐 工作时序与过程

ADC0809的一次完整转换过程分为以下5个步骤:

  1. 送通道地址:通过ADDA~ADDC输出3位通道地址,选择要转换的模拟通道。
  2. 锁存通道地址:ALE信号出现一个正脉冲,上升沿将通道地址锁存到内部地址锁存器,译码后接通相应的模拟开关。
  3. 启动转换:START信号出现一个正脉冲,上升沿复位SAR和内部电路,下降沿启动A/D转换。
  4. 等待转换结束:转换开始后,EOC信号变低,表示转换正在进行。转换完成后,EOC信号变高,表示转换结果已经锁存到输出锁存器中。
  5. 读取转换结果:OE信号变高,打开三态输出缓冲器,将转换结果送到数据总线上,CPU读取数据。

💡 ALE和START信号通常可以并联在一起,由同一个信号控制------这样在锁存地址的同时就启动转换,一步到位,省一个控制信号。

3.3.5 🔍 判断转换结束的三种方法

ADC0809启动转换后,需要等待转换结束才能读取结果。有三种常用的方法:

1️⃣ 软件延时法

原理:启动转换后,延时一段大于转换时间的时间,然后直接读取结果。

优点:硬件简单,不需要连接EOC信号,编程简单。

缺点:CPU效率最低,延时时间必须大于最大转换时间,浪费CPU时间。

适用场景:对CPU效率要求不高的简单系统。

编程示例

asm 复制代码
; ADC端口地址:380H

; 采集IN0通道
MOV DX, 380H
MOV AL, 00H          ; 选择IN0通道
OUT DX, AL           ; 锁存地址并启动转换
CALL DELAY_120US     ; 延时120微秒,大于转换时间100μs
IN AL, DX            ; 读取转换结果
2️⃣ 软件查询法

原理:将EOC信号通过一个输入接口连接到CPU的数据总线。启动转换后,CPU不断查询EOC信号的状态,直到EOC变高。

优点:比软件延时法效率高,可靠性高。

缺点:CPU效率仍然较低,大部分时间用于查询EOC状态。

适用场景:大多数中低速数据采集系统。

编程示例

asm 复制代码
; ADC控制口:380H
; EOC状态口:381H,EOC接D0位

MOV DX, 380H
MOV AL, 00H          ; 选择IN0通道
OUT DX, AL           ; 启动转换
WAIT:
 MOV DX, 381H
 IN AL, DX           ; 读EOC状态
 TEST AL, 01H        ; 测试D0位
 JZ WAIT             ; EOC=0,转换未结束,继续等待
 MOV DX, 380H
 IN AL, DX           ; EOC=1,转换结束,读取结果
3️⃣ 中断法

原理:将EOC信号连接到中断控制器(如8259A)的中断请求输入端。转换结束后,EOC变高,向CPU发出中断请求。

优点:CPU效率最高,在转换期间CPU可以执行其他任务,实时性好。

缺点:硬件和软件稍复杂,需要中断系统的支持。

适用场景:对CPU效率和实时性要求较高的系统,多任务系统。

编程示例

asm 复制代码
; 主程序
MOV DX, 380H
MOV AL, 00H
OUT DX, AL            ; 启动转换
; 在此期间CPU可以执行其他任务

; 中断服务程序
ADC_INT PROC FAR
 PUSH AX
 PUSH DX
 MOV DX, 380H
 IN AL, DX            ; 读取转换结果
 MOV RESULT, AL       ; 存储结果
 ; 启动下一次转换
 MOV AL, 00H
 OUT DX, AL
 ; 发送EOI命令
 MOV AL, 20H
 OUT 20H, AL
 POP DX
 POP AX
 IRET
ADC_INT ENDP

三种方法对比

方法 CPU效率 硬件复杂度 软件复杂度 适用场景
软件延时法 最低 最简单 最简单 简单系统
软件查询法 中等 简单 中等 中低速采集
中断法 最高 较复杂 较复杂 高实时性系统

⚠️ 实际开发中,软件查询法是最常用的折中方案------硬件改动最小(只需把EOC接到一个输入口),CPU效率也可以接受。中断法虽然效率最高,但在单片机或简单系统中不一定值得为此增加中断处理逻辑。

3.3.6 与系统的连接

ADC0809通常需要通过数字I/O接口与系统连接,具体连接方式取决于判断转换结束的方法:

  • 单路采集(软件延时法):通道地址由硬件固定,ADDA~ADDC接地选IN0,ALE和START并联接输出接口,OE接输出接口的另一位。
  • 多路采集(查询法):ADDA~ADDC接输出接口的低3位,ALE和START并联接第3位,OE接第4位,EOC接输入接口的第0位。
3.3.7 多路数据采集程序设计

要求:循环采集ADC0809的8个通道,将转换结果存储在内存中从RESULT开始的8个单元中,采用查询法判断转换结束。

硬件连接

  • 控制口地址:380H(写通道地址、ALE、START)
  • 数据口地址:380H(读转换结果)
  • 状态口地址:381H(读EOC状态,EOC接D0)

程序实现

asm 复制代码
DATA SEGMENT
 RESULT DB 8 DUP(0)   ; 存储8个通道的转换结果
DATA ENDS

CODE SEGMENT
 ASSUME CS:CODE, DS:DATA
START:
 MOV AX, DATA
 MOV DS, AX

 LEA BX, RESULT       ; BX指向结果存储区
 MOV CX, 8            ; 采集8个通道
 MOV AH, 0            ; AH存放通道号,从0开始

LOOP_CHANNEL:
 ; 送通道地址并启动转换
 MOV DX, 380H
 MOV AL, AH
 OUT DX, AL

 ; 查询EOC状态
WAIT_EOC:
 MOV DX, 381H
 IN AL, DX
 TEST AL, 01H
 JZ WAIT_EOC

 ; 读取转换结果
 MOV DX, 380H
 IN AL, DX

 ; 存储结果
 MOV [BX], AL
 INC BX
 INC AH              ; 下一个通道
 LOOP LOOP_CHANNEL

 ; 采集完成,返回DOS
 MOV AH, 4CH
 INT 21H
CODE ENDS
END START

四、⚙️ 实际应用中的注意事项

4.1 参考电压的选择

  • 参考电压Vref的精度和稳定性直接影响D/A和A/D转换的精度
  • 应使用高精度、低温度系数的参考电压源,如AD580(+5V)、AD581(+10V)
  • 参考电压源的输出应加滤波电容,以减少噪声

4.2 电源与接地

  • 模拟电路和数字电路应分别供电,使用独立的电源
  • 模拟地(AGND)和数字地(DGND)应该单点连接,通常在电源处连接在一起
  • 电源输入端应加滤波电容(10μF电解电容和0.1μF陶瓷电容并联),以滤除电源噪声

⚠️ 模拟地和数字地的处理是实际项目中最容易出问题的地方。如果两地之间有大电流流过,地线上会产生电压差,这个微小的电压差就会变成A/D转换的误差。单点连接是基本原则。

4.3 信号布线

  • 模拟信号和数字信号应分开布线,避免平行走线
  • 模拟信号线应尽量短,并且采用屏蔽线
  • 时钟信号线应远离模拟信号线,以减少干扰

4.4 输入信号调理

  • 输入模拟信号的范围应与A/D转换器的输入范围匹配
  • 如果输入信号太小,应先进行放大
  • 如果输入信号含有噪声,应先进行滤波
  • 必要时加入过压保护电路,防止输入信号过大损坏A/D转换器

五、🎯 学习重点与考试要点

5.1 核心概念

  • 模拟量与数字量的区别
  • 量化、量化间隔、量化误差的概念
  • 采样定理

5.2 D/A转换器

  • R-2R梯形电阻网络的工作原理
  • DAC0832的内部结构和引脚功能
  • 三种工作模式的原理、电路连接和适用场景
  • 单极性和双极性电压输出电路
  • 波形发生器的程序设计

5.3 A/D转换器

  • 逐位逼近型A/D的工作原理
  • ADC0809的内部结构和引脚功能
  • 工作时序和转换过程
  • 三种判断转换结束方法的优缺点和程序实现
  • 多路数据采集的电路设计和程序设计

5.4 技术指标计算

  • D/A和A/D转换器分辨率的计算
  • 量化间隔和量化误差的计算
  • 输出电压与输入数字量之间的换算

六、🤔 几个思考题

学完本文,来试试回答这些问题:

1️⃣ 一个8位D/A转换器,参考电压Vref=+5V,满量程输出约为-5V。如果要输出2V的电压,应输入什么数字量?

答:

根据单极性输出公式: V o u t = − V r e f 256 ⋅ D V_{out} = -\frac{V_{ref}}{256} \cdot D Vout=−256Vref⋅D

代入Vout=-2V(因为运放反相,输出2V需要输入使Vout=-2V):

D = − V o u t × 256 V r e f = 2 × 256 5 = 102.4 ≈ 102 = 66 H D = \frac{-V_{out} \times 256}{V_{ref}} = \frac{2 \times 256}{5} = 102.4 \approx 102 = 66H D=Vref−Vout×256=52×256=102.4≈102=66H

所以应输入数字量66H(102)。

💡 注意D/A输出是负的,实际得到-2V。如果需要+2V,可以在输出端再加一级反相放大器,或者使用双极性输出电路。

2️⃣ 为什么ADC0809的ALE和START信号通常并联在一起?

答: ALE的上升沿锁存通道地址,START的下降沿启动转换。将两个信号并联后,由同一个正脉冲信号控制:脉冲上升沿时ALE生效,锁存通道地址;脉冲下降沿时START生效,启动转换。这样一个信号就能同时完成"选通道"和"开始转换"两个操作,简化了硬件设计和软件控制。

💡 这种"一个信号干两件事"的设计思路在接口电路中很常见,核心是两个操作有先后顺序且可以用一个脉冲的不同边沿触发。

3️⃣ 某工业现场需要采集4路温度信号,温度传感器输出0~50mV的微弱信号。请简述从传感器到ADC的完整信号链路。

答:

完整信号链路如下:

  1. 温度传感器(如热电偶):将温度转换为0~50mV的电压信号
  2. 变送器 :将050mV放大并转换为标准420mA电流信号,便于远距离传输
  3. I/V转换电路 :将420mA电流信号转换为05V电压信号(在250Ω精密电阻上取压)
  4. 低通滤波器:去除高频噪声
  5. ADC0809的模拟输入端:将0~5V的模拟电压转换为8位数字量

其中ADC0809的分辩率为5V/255≈19.6mV,能满足一般工业温度采集的精度要求。

💡 这道题考的是"输入通道的完整组成"------从传感器→变送器→信号处理→A/D转换,每个环节都不能少,而且要能解释为什么每个环节是必要的。


✅ 本节完。

📝 作者:say-fall | 编辑:say-fall | 🌟 原创不易,如果对你有帮助,记得 👍 点赞 + ⭐ 收藏 哦!

相关推荐
我是一颗柠檬1 小时前
C++最全面复习:从入门到精通(2026年)
开发语言·c++·visualstudio
恶魔泡泡糖1 小时前
stm32F103C8T6标准库串口发送之发送字节2
stm32·单片机·嵌入式硬件
xingpanvip1 小时前
使用 Webwright 在 CSDN 自动发文:Python 浏览器自动化实践
开发语言·python·自动化
armwind1 小时前
openISP学习7-CCM — Color Correction Matrix(色彩校正矩阵)
python·学习·矩阵
禅思院1 小时前
大列表性能优化 · 工程实战·四
开发语言·前端·性能优化·前端框架·php·异步加载
z落落1 小时前
C# 多接口实现、重名成员、显式实现、接口继承+抽象类和接口区别
java·开发语言·c#
fffzd1 小时前
STM32:时钟树与时钟源
单片机·嵌入式硬件·嵌入式软件·时钟树·时钟源
caimouse1 小时前
Reactos 第 4 章 对象管理 — 4.6 对象的访问控制 / 4.7 句柄的遗传和继承
开发语言·windows·架构
2301_789015621 小时前
Linux基础开发工具一:软件包管理器、vim编辑器
linux·服务器·c语言·汇编·c++·编辑器·vim