Arduino ADC

Ammar Ali 2024年2月16日
Arduino ADC

本教程将讨论使用模拟引脚读取模拟信号并将其转换为 Arduino 中的数字。

Arduino ADC

ADC,也称为模数转换器,将模拟信号转换为数字信号。模拟信号是连续的,这意味着它们内部有无限数量的值。我们无法读取所有值,因此我们从连续信号中读取特定时间间隔的值,使信号数字化。

从模拟信号中取样的过程称为采样。将模拟信号转换为数字信号的过程如下图所示。

ADC 图像

上图中的第一个信号是一个无限值的连续信号,第二个信号是一个有限值的数字信号。模数转换器定期从模拟信号中取值以使其成为数字信号。

进行模数转换是因为计算机无法处理模拟信号;它只能处理 0s 和 1s 的数字信号。处理完数字信号后,我们还可以使用 DAC 或数模转换器将信号转换回模拟信号。

例如,连接上图中第二个信号中的点将变得与第一个信号几乎相同。我们在 ADC 中采集的样本数称为 ADC 的采样率或比特率。

一些 Arduino 板具有 10 位模数转换器,有些具有 12 位模数转换器。比特率也称为分辨率,它定义了 ADC 将从模拟信号中获取的样本数。

一个 10 位模数转换器将从模拟信号中获取 1024 个样本。例如,假设输入信号由 0 到 5 伏之间的电压电平组成。

在这种情况下,电压电平将映射到 0 到 1024 的整数范围,这意味着模数转换器将在每 5/1024 或 4.9 毫伏之后进行一次采样。

模数转换器的速度取决于基于 ATmega 的 Arduino 板中 Arduino 板的工作频率;模数转换器将需要 100 微秒将模拟信号转换为数字信号,这意味着采样率或读取率为 10 kHz 或每秒 10,000 次。

Arduino Zero、Due 和 MKR 系列板等其他板具有 12 位模数转换器,这意味着 0 到 3.3 伏的输入模拟信号将映射到 0 到 4095 的整数范围。

默认情况下,12 位模数转换器将设置为 10 位,但我们可以使用 analogReadResolution() 函数更改模数转换器的比特率或分辨率,将位数传递给功能设置分辨率。

查看此链接以获取有关 analogReadResolution() 函数的更多详细信息。

每个 Arduino 板上的模拟引脚都标有 A,后跟 A0A1 等数字。要从 Arduino 的模拟引脚读取信号,我们可以使用 analogRead() 函数。

analogRead() 函数的基本语法如下。

output = analogRead(pin)

上述语法将从模拟引脚返回模拟信号作为数字信号。如果模拟引脚未连接任何信号,该函数仍将返回一些浮点值。

不同的 Arduino 板对模数转换器有不同的速度,可以改变,但它也会改变模数转换器的分辨率。因此,我们应该使用模数转换器的默认设置来进行准确的模数转换。

我们在上面讨论过,一些 Arduino 板对输入模拟信号有 0 到 5 伏的参考电压,而一些有 0 到 3.3 伏的参考电压。这些是默认值,我们可以使用 analogReference() 函数更改它们。

我们可以根据不同类型的 Arduino 板传递不同的选项。

例如,对于 Arduino Uno 和 Mega,我们有如下选项:

  1. DEFAULT - 将参考电压设置为 0 到 5 伏的整数范围。
  2. INTERNAL - 将参考电压设置为 0 到 1.1 伏的整数范围。
  3. INTERNAL1V1 - 将参考电压设置为 0 到 1.1 伏的整数范围。
  4. INTERNAL2V2.56 - 将参考电压设置为 0 到 2.56 伏的整数范围。

在设置参考电压之前,请注意,我们不能设置低于 0 伏和高于 5 伏的电压值;参考电压值应为 0 至 5 伏。

假设我们将一个电阻连接到模拟引脚。在这种情况下,输入电压将降低,因为模拟引脚内部已经存在一个 32K 值的电阻,在这种情况下,两个电阻将构成分压器,输入电压将根据电阻器的值。

检查此链接以获取我们可以在 analogReference() 函数中使用的选项的完整列表。查看此链接以获取有关 analogRead() 函数的更多详细信息。

作者: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook