什么是 ADC(模数转换器)及其工作原理?

核心要点

  • 模数转换器 (ADC) 被广泛应用于将诸如声音和光线之类的模拟信号转换成可用于多种应用的数字数值。
  • ADC 的采样率决定了每秒钟读取的数值数量,较高的采样率能够实现更精准的信号表达。
  • ADC 的比特率影响获取的样本质量,位数越多,测量结果越平滑和准确。不同类型的 ADC 在速度、精确度和功耗方面提供了不同的权衡。

模数转换器 (ADC) 在将现实世界中的现象转化为我们可以在编程项目中使用的数据方面起着至关重要的作用。但是,ADC 如何将模拟信号转换为我们随处可用的数字信号呢?

ADC 的用途

您会发现 ADC 几乎无处不在。它们存在于您的手机中,将您的声音转化为一连串的二进制数值;它们在您的汽车中,用来测量车轮的转速;它们还存在于示波器中,帮助捕获并展现信号。然而,大多数人使用它们的主要领域是视频和音频,在这些领域中,将光和声音引入数字空间至关重要。

什么是采样率?采样率如何影响 ADC?

ADC 最重要的指标之一就是采样率,即每秒读取的数值数量。

高端的示波器每秒可以采集高达百亿个样本,而小型 MCP3008 ADC 则以相对适中的 20 万次采样率工作。在音频领域,典型的采样率是每秒 44100 次(44.1 kHz)。

我们采集的样本越多,我们就能更准确地呈现信号。有时,这是必要的;有时,则不然。假设我们正在构建一个带有多个电位器的推子组(用于控制电子设备,类似于在灯光或音频控制台中看到的)。在这种情况下,我们想要测量的数值不太可能每秒变化数百万次,因为人手的移动速度有限。我们只需要足够的样本,以确保结果平滑且响应灵敏。

什么是比特率?比特率会影响 ADC 的质量吗?

我们还需要考虑获取的样本质量。这在很大程度上取决于比特率,它表示有多少个开关状态可以用来数字地表示电压。我们拥有的位数越多,我们可以在任何给定样本中记录的可能值就越多,最终的结果也会越平滑和准确。

之前我们已经撰写过关于二进制及其工作原理的文章,如果您不太熟悉,可以先了解一下。我们需要多少位呢?同样,这取决于我们想要达成的目标。有时,我们可能会受到所用协议的限制。例如,MIDI 1.0 协议限制在七位(有时是十四位)数值。在其他情况下,限制因素可能是人类的感知。如果增加的保真度并不会显著改善结果,则可能没有必要。

多路复用如何提高 ADC 的质量?

ADS1115MCP3008这样的热门 ADC 芯片都提供了多个输入端。但实际上,它们背后只包含一个 ADC。这之所以可能,是因为这些设备内置了多路复用器。多路复用器在电子和电信领域非常常见。它们是充当 ADC 流量控制的数字开关。ADC 可能会对一个通道进行采样,然后切换到下一个通道,再切换到下下一个通道。因此,如果您的设备有 8 个通道,采样率为 200,000,那么它可以轮流扫描所有通道,每个通道采集 25,000 个样本。

ADC 有哪些类型?

ADC 的工作方式多种多样,取决于所需的成本和功能。

Flash ADC 通过复杂的电阻分压器工作。一组电阻器将参考电压分成多个增量,然后通过一组比较器对输入进行测试。Flash ADC 的速度非常快,但由于需要大量的比较器,其位深度受到限制。出于同样的原因,它们也消耗大量电力。

分级 ADC 试图通过将工作分配给两个独立的单元来弥补这些弱点:一个单元粗略地测量电压,另一个单元精确地测量电压。通过这种拆分,我们可以减少比较器的数量。有些分级 ADC 会将工作分为三个阶段,并在过程中加入纠错机制。

SAR(逐次逼近寄存器)ADC 通过二分搜索的方式完成工作。假设我们有 8 位需要填充。SAR 将从 10000000 开始,这是中间值(00000000 是最小值,11111111 是最大值)。如果电压超过这个中间值,SAR 会保持最左边的数字为 1;如果没有,则将其设置为 0。我们可以对下一个数字重复此过程,以此类推。这样,猜测的值会逐渐接近实际值:

通过这种方式,我们不断缩小搜索范围,将可能性分成两半,并询问结果是否高于或低于中点。在本例中,该值介于 0 和 255 之间;经过几次迭代,ADC 计算出它大约是 77。

Sigma-Delta 转换器可能最难理解。它们用于高精度的音乐和信号测量应用。它们的工作原理是对信号进行过采样,并使用复杂的滤波和数学运算来细化结果。这个过程有效地降低了采样率,同时提高了精度。当噪声和精度比速度更重要时,这些 ADC 非常有用。

最后,我们有积分 ADC,它们甚至比 Σ-Δ ADC 还要慢。它们利用电容器工作,电容器的充电速率可用于确定输入电压。这里的采样率通常与电源频率同步,这有助于将噪声保持在最低水平。

什么是奈奎斯特-香农理论?

假设我们想要以数字方式描述一个模拟信号。为此,每个给定的周期至少需要两个点:一个在顶部,一个在底部。因此,我们的采样频率必须至少是我们想要测量的最高频率的两倍。

这被称为奈奎斯特频率,以瑞典裔美国物理学家哈里·奈奎斯特的名字命名。该理论以奈奎斯特和克劳德·香农(一位杰出的数学家和密码学家)的名字命名,而不是以埃德蒙·惠特克的名字命名,后者在此之前提出了这个想法。

无论我们相信是谁提出的理论,它都存在问题。不可能提前知道波形的顶部和底部何时出现。如果我们在输入波形的中间进行采样会怎么样呢?观察输入信号的变化,这可能会导致我们捕获的结果完全变平:

或者甚至产生以前不存在的新波形的错觉:

这些错觉被称为混叠。

混叠问题

您可能熟悉拍摄旋转物体时有时出现的“马车车轮”错觉。汽车的轮子或直升机的叶片似乎在向后转动,只是速度非常慢。在某些情况下,叶片可能会完全停止(老实说,结果很奇怪,请查看下面的视频!)。

在玩较老的视频游戏时,您可能还注意到平行线有时会产生奇怪的扭曲伪影。栅栏、楼梯和条纹毛衣开始看起来非常奇怪。或者,当您通过质量较差的数字连接听到某人说话时,有时会听到奇怪的口哨声,这是怎么回事呢?这是一种失真,而且是一种特殊的失真。噪声中出现的那些难听的频率是怎么回事?如果您正在聆听和谐丰富的内容(例如鼓组),效果会更加明显,尤其是在高频段。

如果您了解其中一种情况的原因,您就可以了解所有这些情况的原因。对于马车车轮来说,固定的帧速率意味着我们无法正确捕捉运动。如果某个物体每帧旋转 350°,那么很自然地会感觉到它实际上向后移动了 10°。换句话说,没有足够的信息来忠实地反映正在发生的事情。我们采集的样本与我们想要测量的样本不一致。

这并不是模数转换所特有的问题。在许多情况下,我们会将一种数字信号转换为另一种数字信号。

那么,解决方案是什么呢?有几种。我们可以应用特殊的滤波器来处理这些伪影,这正是许多 ADC 在幕后所做的。或者,我们可以采集比我们需要的更多的样本。我们采集的样本越多,我们对波形的呈现就越准确:

以更高质量的采样获得最佳结果

如果您觉得这类事情有趣,那么好消息是,我们才刚刚开始探索这个主题。这里有很多深入探讨的空间:ADC 非常复杂。

但从最终用户或普通的 Arduino 爱好者的角度来看,它们也非常简单。电压输入,数字输出。因此,无论您想测量什么,无论是土壤中的水分含量、人声的振动,还是通过镜头折射的光子流,都很有可能有合适的 ADC 来完成这项工作。