模数转换器是一种用于将模拟信号(如光敏电阻或热敏电阻的输出)转换为可由数字计算机或微控制器处理的二进制信号的设备。
将模拟信号转换为二进制数字信号有多种方法,但在本教程中我们将讨论逐次逼近法,因为这可能是最常用的方法。
采样
每个交流波形都有特定的频率、波长和振幅。为了将这种波转换成数字信号,我们以周期性间隔(称为采样率)测量交流波形的振幅。更高的采样率将产生更精确的交流波形表示:

模数转换器的工作原理
下图 1 所示是 ATMEGA328 中使用的 ADC 的框图。

图1:逐次逼近型模数转换器
时钟 CLK 提供采样率,SAR 是逐次逼近寄存器,EOC 是输出到处理器的信号,用于指示当前采样已完成,Vref 是 5V 电源或外部电压基准。DAC 是数模转换器,Vin 是模拟输入引脚,S/H 是采样保持器,COMP 是比较器。
转换过程由输入 ADC 的 Vin 端模拟信号启动。接收到该信号后,ADC 的控制单元将向逐次逼近寄存器发出命令,该寄存器开始通过逐次逼近法生成数字信号。生成的数字数据由 DAC 转换为模拟信号,然后与当前模拟信号和参考电压进行比较。此时可用的数字数据通过输出寄存器输出。
ADC 的核心是采样保持 (S/H),如下图 2 所示:

图 2:采样和保持
对于每个采样时钟周期,S1 闭合,S2 断开,使电容器快速充电至波形的当前值。然后,S2 闭合,S1 断开,比较器读取电压。
数模转换的工作原理
我们如何将 ADC 输出的数字位与模拟电压电平关联起来?假设一个 10 位 ADC 的采样值为 0001100100。我们首先需要将这个二进制数转换为整数。
如何将二进制数转换为整数。首先,将二进制数按下表排列,可能的组合数从右到左依次递增:

现在,将位值乘以可能的组合数:
0512 + 0256 + 0128 + 164 + 132 + 016 + 08 + 14 + 02 + 01 = 100
那么,我们读到的电压是多少?
在 Arduino ADC 中,ADC 输出范围限制在 0 到 1023 之间。假设我们使用本地 5V 作为参考,则:(1023 / 5V)* Vin = 返回的整数值。
因此,如果 ADC 输出整数值 100(如上所示),则电压为:电压 = (5V * 100) / 1023 = 0.488V
就是这样!模数转换器(A/D 转换器)虽然相当复杂,但了解它们确实很有益处。
-
adc
+关注
关注
100文章
7379浏览量
553673 -
计算机
+关注
关注
19文章
7763浏览量
92666 -
模数转换器
+关注
关注
26文章
3929浏览量
129703
发布评论请先 登录
ADC模数转换器介绍

模数转换器(ADC)到底在干嘛?
评论