natlife 发表于 2007-7-12

模数转换器

模数转换器
模数转换器,或 ADC,是一种数据转换器,它允许数字电路通过将模拟信号编码为二进制代码来与现实世界交互

模数转换器(ADC) 允许微处理器控制电路、Arduinos、Raspberry Pi 和其他此类数字逻辑电路与现实世界进行通信。在现实世界中,模拟信号具有不断变化的值,这些值来自各种来源和传感器,可以测量声音、光、温度或运动,许多数字系统通过测量来自此类传感器的模拟信号与其环境交互。

虽然模拟信号可以是连续的并提供无限数量的不同电压值,但另一方面,数字电路使用只有两个离散状态的二进制信号,逻辑“1”(高)或逻辑“0”(低)。因此,有必要拥有一种电子电路,可以在连续变化的模拟信号和离散数字信号这两个不同域之间进行转换,这就是模数转换器(A/D) 的用武之地。

基本上,模数转换器会在一个瞬间拍摄模拟电压的快照,并产生代表该模拟电压的数字输出代码。用于表示此模拟电压值的二进制数字或位数取决于 A/D 转换器的分辨率。

例如,4 位 ADC 的分辨率为 15 分之一 (2 4 – 1),而 8 位 ADC 的分辨率为 255 分之一 (2 8 – 1)。因此,模数转换器采用未知的连续模拟信号并将其转换为 2 n位的“n”位二进制数。


但首先让我们提醒自己模拟(或模拟)信号和数字信号之间的区别,如下所示:

模拟和数字信号
模拟和数字信号

在这里我们可以看到,当电位器的滑动端在 0 伏和 V MAX之间旋转时,它会产生一个连续的输出信号(或电压),它具有相对于滑动器位置的无限多个输出值。当电位器游标从一个位置调整到下一个位置时,两个电压电平之间没有突然或阶跃变化,从而产生连续可变的输出电压。模拟信号的示例包括温度、压力、液位和光强度。

对于数字电路,电位计滑动器已被单个旋转开关取代,该开关依次连接到串联电阻链的每个结点,形成基本的分压器网络。当开关从一个位置(或节点)旋转到下一个输出电压时,V OUT以离散且独特的电压步长快速变化,代表每个开关动作或步长的 1.0 伏的倍数,如图所示。


因此,例如,输出电压将是 2 伏、3 伏、5 伏等,但不是 2.5V、3.1V 或 4.6V。通过使用多位置开关并增加分压器网络中电阻元件的数量,从而增加离散开关步骤的数量,可以轻松产生更精细的输出电压电平。

然后我们可以看到模拟信号和数字信号之间的主要区别在于“模拟”量随时间不断变化,而“数字”量具有离散(逐步)值。“低”到“高”或“高”到“低”。

那么我们如何才能将具有无限数量值的连续变化信号转换为具有不同值或步骤的信号以供数字电路使用。

模数转换器
获取模拟电压信号并将其转换为等效数字信号的过程可以通过许多不同的方式完成,虽然有许多模数转换器芯片(例如来自不同制造商的 ADC08xx 系列),但有可能使用分立元件构建一个简单的 ADC。

一种简单易行的方法是使用并行编码,也称为闪存、同步或多比较器转换器,其中比较器用于检测不同的电压电平并将其开关状态输出到编码器。

并联“Flash”A/D 转换器使用一系列相互连接但等间距的比较器和由一系列精密电阻器网络生成的电压参考,以生成特定 n 位分辨率的等效输出代码。

并行或闪存转换器的优点是它们构造简单并且不需要任何定时时钟,因为在模拟电压施加到比较器输入的瞬间,它会与参考电压进行比较。考虑下面的比较器电路。

比较电路
比较电路
模拟比较器,如 LM339N,它有两个模拟输入,一正一负,可用于比较两个不同电压电平的大小。


电压输入 (V IN ) 信号施加到比较器的一个输入,而参考电压 (V REF ) 施加到另一个输入。对比较器输入端的两个电压电平进行比较,以确定比较器的数字逻辑输出状态,“1”或“0”。

将参考电压 V REF与输入电压 V IN进行比较,该输入电压应用于另一个输入。对于 LM339 比较器,如果输入电压小于参考电压,(V IN< V REF ) 输出为“OFF”,如果输入电压大于参考电压,(V IN> V REF ) 输出将为“开”。因此,比较器比较两个电压电平并确定两者中的哪一个较高。

在我们上面的简单示例中,VREF是从 R 1和 R 2设置的分压器网络中获得的。如果两个电阻器的值相等,即 R 1 = R 2,那么显然参考电压电平将等于电源电压的一半,即 V/2。因此,对于具有集电极开路输出的比较器,如果 V IN小于 V/2,则输出为高电平,如果 V IN大于 V/2,则输出为低电平,充当 1 位 ADC。

但是,通过向分压器网络添加更多电阻器,我们可以有效地将电源电压“分压”到由电阻器的电阻值决定的量。然而,我们在分压器网络中使用的电阻越多,就需要越多的比较器。

通常,转换“n”位二进制输出需要2 n – 1 个比较器,其中“n”通常在 8 到 16 的范围内。在我们上面的示例中,单位 ADC 使用 2 1 – 1,等于“1”比较器,以确定 V IN是否大于或小于 V/2 参考电压。

如果我们现在创建一个 2 位 ADC,那么我们将需要 2 2 – 1,即“3”个比较器,因为我们需要四个不同的电压电平,对应于 4 到 2 位编码器电路所需的 4 个数字值,如图所示.

2位模数转换器电路
模数转换器

这将为我们提供模拟输入的所有四个可能值的 2 位输出代码:

2 位 A/D 转换器输出
模拟输入
电压 (V IN )        比较器输出        数字
输出
3 _        2 _        1 _        0 _        问1        问0
0 至 1 伏        0        0        0        0        0        0
1 至 2 伏        0        0        1个        X        0        1个
2 至 3 伏        0        1个        X        X        1个        0
3 至 4 伏        1个        X        X        X        1个        1个
其中:“X”是“无关”,即逻辑“0”或逻辑“1”条件。

那么这个模数转换器是如何工作的。为了使 A/D 转换器有用,它必须产生模拟输入信号的有意义的数字表示。在这个简单的 2 位 ADC 示例中,为简单起见,我们假设输入电压 V IN介于 0 和 4 伏之间,因此已将VREF和电阻分压器网络设置为在每个电阻器上压降 1 伏。

当 V IN介于 0 和 1 伏特之间时,(<1V) 所有三个比较器的输入都将小于参考电压,因此它们的输出将为低电平,编码器将在引脚 Q 0上输出二进制零 (00) 条件和问1。当 V IN增加并超过 1 伏但小于 2 伏时,(1V<V IN <2V) 具有设置为 1 伏的参考电压输入的比较器 U1 将检测此电压差并产生高电平输出。用作 4 到 2 位编码的优先级编码器检测 D 1处输入的变化,并产生二进制输出“1”(01)。

请注意,诸如 TTL 74LS148 之类的优先级编码器会为每个单独的输入分配一个优先级。优先级编码器输出对应于具有最高优先级的当前活动输入。因此,当存在具有更高优先级的输入(D 1与 D 0相比)时,所有其他具有较低优先级的输入将被忽略。因此,如果同时有两个或多个逻辑电平“1”的输入,D 0和 D 1上的实际输出代码将仅对应于具有最高指定优先级的输入。

所以现在当 V IN增加到 2 伏以上时,即下一个参考电压电平,比较器 U2 检测到变化并产生高电平输出。但是因为输入 D 2比输入 D 0或 D 1具有更高的优先级,所以优先级编码器输出二进制“2”(10) 代码,依此类推,当 V IN超过 3 伏时产生二进制代码输出“3”( 11). 很明显,当 V IN降低或在每个参考电压电平之间变化时,每个比较器将向编码器输出高电平或低电平条件,编码器进而产生一个相对于 V IN的介于 00 和 11 之间的 2 位二进制代码。

这一切都很好,但是优先级编码器不能用作 4 到 2 位设备,如果我们使用市售的编码器,例如 TTL 74LS148 或其 CMOS 4532 等价物,它们都是 8 位设备,那么六个的二进制位将不会被使用。但是,如图所示,可以使用数字异或门和信号二极管矩阵来制作简单的编码器电路。

使用二极管的 2 位 ADC
使用二极管的 2 位 ADC

这里比较器的输出在被馈送到二极管之前使用异或门进行编码。两个外部下拉电阻用于它们的输出和接地 (0V),以确保处于低电平状态并在二极管反向偏置时阻止输出浮动。

因此,与前面的电路一样,如果一个输入或另一个输入为高电平,则根据 V IN的值确定哪个比较器产生输出信号高电平(或低电平)到异或门产生高电平输出,但不是两个, (布尔表达式是 Q = A .B + A. B)。这些异或门也可以使用组合逻辑与-或-与非门来构造。

这两种 4 到 2 转换器设计的问题在于,这个简单的 2 位 A/D 转换器的分辨率是 1 伏,因为正如我们所见,V IN的模拟输入电压必须在命令编码器更改其输出代码。提高输出分辨率的一种方法是使用更多比较器将其增加到 3 位 A/D 转换器。

3 位模数转换器
上面的并行 ADC 将 0 到 3 伏以上的模拟输入电压转换为 2 位二进制代码。由于 3 位数字逻辑系统可以生成 2 3 = 8 个不同的数字输出,因此可以将模拟输入电压与八个参考电压电平进行比较,每个电压电平等于参考电压的八分之一 (V/8)。因此,我们现在可以测量 0.5 (4/8) 伏的分辨率,并且需要 2 3 – 1 个比较器来输出 000 (0) 和 111 (7) 之间的 3 位二进制代码,如图所示。

3位模数转换器电路
3位模数转换电路

这将为我们提供模拟输入的所有八个可能值的 3 位输出代码:

3 位 A/D 转换器输出
模拟输入
电压 (V IN )        比较器输出        数字
输出
7 _        6 _        5 _        4 _        3 _        2 _        1 _        0 _        问2        问1        问0
0 至 0.5 伏        0        0        0        0        0        0        0        0        0        0        0
0.5 至 1.0 伏        0        0        0        0        0        0        1个        X        0        0        1个
1.0 至 1.5 伏        0        0        0        0        0        1个        X        X        0        1个        0
1.5 至 2.0 伏        0        0        0        0        1个        X        X        X        0        1个        1个
2.0 至 2.5 伏        0        0        0        1个        X        X        X        X        1个        0        0
2.5 至 3.0 伏        0        0        1个        X        X        X        X        X        1个        0        1个
3.0 至 3.5 伏        0        1个        X        X        X        X        X        X        1个        1个        0
3.5 至 4.0 伏        1个        X        X        X        X        X        X        X        1个        1个        1个
“X”再次表示“无关”,即逻辑“0”或逻辑“1”输入条件。

那么我们可以看到,通过提高ADC的分辨率,不仅增加了输出二进制位数,还增加了比较器的数量和所需的电压电平。

因此,4 位分辨率需要 15 (2 4 – 1) 个比较器,8 位分辨率需要 255 (2 8 – 1) 个比较器,而 10 位模数转换器需要 1023 个比较器,等等。所以对于这种类型的模数转换器电路,所需的输出位数越高,电路就越复杂。

然而,这种类型的并行或闪存 A/D 转换器的优点是它的实时转换速率相对较快,并且可以很容易地作为项目的一部分构建,如果只需要几个二进制位来产生一个读出数字显示器,用于显示模拟输入信号的电压值。

除了从传感器或换能器获取模拟输入信号并使用模数转换器将其转换为数字二进制代码作为输入接口电路的一部分,我们还可以获取二进制代码并将其转换为等效的模拟量使用数模转换器进行输出接口以控制电机或执行器,或通常用于音频应用。

在下一个关于数字电路的教程中,我们将研究数模转换器,或简称为 DAC,它与此处介绍的模数转换器完全相反。DAC 使用运算放大器和电阻分压器网络将“n”位二进制数转换为等效的模拟输出电压或电流信号。

九方城 发表于 2007-7-12

模数转换器
页: [1]
查看完整版本: 模数转换器