Skip to content

Arduino - 高级 I/O 函数

在本章中,我们将探索高级输入/输出功能,这些功能让你能够更精细地控制开发板的行为。我们将重点关注 analogReference(),这是一个用于优化模拟输入的强大函数。

默认情况下,Arduino 的模数转换器 (ADC) 将 0V 到 5V(或某些开发板上的 3.3V)之间的输入电压映射到 0 到 1023 之间的整数值。analogReference() 函数允许你更改此电压范围的上限,这可以显著提高你的测量精度,尤其对于在较低电压下运行的传感器。

AVR 开发板(例如 UNO, Mega)的参考选项

Section titled “AVR 开发板(例如 UNO, Mega)的参考选项”
  • DEFAULT:默认的模拟参考。在 5V 开发板上是 5V,在 3.3V 开发板上是 3.3V。
  • INTERNAL:内置的参考电压。在 ATmega328P (UNO) 上,这是一个稳定的 1.1V。在 ATmega2560 (Mega) 上,这也是 1.1V (INTERNAL1V1) 或 2.56V (INTERNAL2V56)。
  • EXTERNAL:使用施加到 AREF 引脚的电压(仅限 0V 到 5V)作为参考。
analogReference(type);

type 可以是 DEFAULT、INTERNAL、INTERNAL1V1、INTERNAL2V56 或 EXTERNAL,具体取决于你的开发板。

切勿在 AREF 引脚上使用低于 0V 或高于 5V 的外部参考电压。 当使用外部参考时,你必须在调用 analogRead() 之前调用 analogReference(EXTERNAL)。否则可能会导致内部参考电压与 AREF 引脚短路,从而可能对微控制器造成永久性损坏。

  • 查阅你的开发板文档:使用不同微控制器(如基于 ARM 的 Arduino Due、Zero 或 UNO R4)的开发板具有不同的内部参考选项和电压水平。在使用此函数之前,请务必查阅你特定开发板的官方文档。
  • 使用稳定的参考源:当使用 EXTERNAL 时,请确保电压源稳定且干净。参考电压上的任何噪声都会直接影响读数的准确性。

示例:使用 3.3V 参考电压读取传感器

Section titled “示例:使用 3.3V 参考电压读取传感器”

设想一个最大输出为 3.3V 的传感器。通过将模拟参考电压设置为 3.3V,我们可以在这个较小的电压范围内利用 ADC 的全部 0-1023 分辨率,从而获得更精确的读数。

/*
此示例演示了如何使用外部模拟参考电压。
将稳定的 3.3V 电源连接到 AREF 引脚。
将传感器的输出连接到引脚 A0。
*/
// 最佳实践:使用 const 定义引脚
const int SENSOR_PIN = A0;
void setup() {
Serial.begin(9600);
// 针对带有原生 USB 的开发板的良好实践:
while (!Serial) {
; // 等待串口连接。
}
// 将模拟参考电压设置为 AREF 引脚上的外部电压。
// 重要提示:运行前请确保你的 3.3V 电源已连接到 AREF。
analogReference(EXTERNAL);
}
void loop() {
// 从传感器读取值
int sensorValue = analogRead(SENSOR_PIN);
// 将 0-1023 的读数根据 3.3V 参考电压转换为实际电压
float voltage = sensorValue * (3.3 / 1023.0);
Serial.print("原始传感器值:");
Serial.print(sensorValue);
Serial.print(",计算电压:");
Serial.print(voltage);
Serial.println(" V");
delay(500); // 等待半秒钟再进行下一次读取
}