Arduino ADC
本教程将讨论使用模拟引脚读取模拟信号并将其转换为 Arduino 中的数字。
Arduino 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
,后跟 A0
、A1
等数字。要从 Arduino 的模拟引脚读取信号,我们可以使用 analogRead()
函数。
analogRead()
函数的基本语法如下。
output = analogRead(pin)
上述语法将从模拟引脚返回模拟信号作为数字信号。如果模拟引脚未连接任何信号,该函数仍将返回一些浮点值。
不同的 Arduino 板对模数转换器有不同的速度,可以改变,但它也会改变模数转换器的分辨率。因此,我们应该使用模数转换器的默认设置来进行准确的模数转换。
我们在上面讨论过,一些 Arduino 板对输入模拟信号有 0 到 5 伏的参考电压,而一些有 0 到 3.3 伏的参考电压。这些是默认值,我们可以使用 analogReference()
函数更改它们。
我们可以根据不同类型的 Arduino 板传递不同的选项。
例如,对于 Arduino Uno 和 Mega,我们有如下选项:
DEFAULT
- 将参考电压设置为 0 到 5 伏的整数范围。INTERNAL
- 将参考电压设置为 0 到 1.1 伏的整数范围。INTERNAL1V1
- 将参考电压设置为 0 到 1.1 伏的整数范围。INTERNAL2V2.56
- 将参考电压设置为 0 到 2.56 伏的整数范围。
在设置参考电压之前,请注意,我们不能设置低于 0 伏和高于 5 伏的电压值;参考电压值应为 0 至 5 伏。
假设我们将一个电阻连接到模拟引脚。在这种情况下,输入电压将降低,因为模拟引脚内部已经存在一个 32K
值的电阻,在这种情况下,两个电阻将构成分压器,输入电压将根据电阻器的值。
检查此链接以获取我们可以在 analogReference()
函数中使用的选项的完整列表。查看此链接以获取有关 analogRead()
函数的更多详细信息。