Arduino 模数转换原理与实践

在本篇文章中,我们将一起探讨 Arduino Uno R3 中模拟输入的工作原理,并学习如何使用 Arduino Uno R3 来读取和处理模拟数据。

Arduino 简介:

Arduino 是一个开源电子平台。它基于 ATmega328P 8位微控制器构建。它能够读取来自各种传感器的输入信号,并且我们可以向 Arduino 上的微控制器发送指令来控制硬件。它提供了 Arduino IDE(集成开发环境)用于编写代码,以及连接 Arduino 开发板和传感器等硬件设备。

Arduino 的模拟引脚:

Arduino 拥有 6 个模拟通道,用于读取 0 到 5 伏特的模拟信号。每个通道都有一个独立的模拟引脚。ATmega328P 微控制器内部集成了一个分辨率为 10 位的模数转换器。需要注意的是,Arduino 上的模拟引脚只能读取模拟输入,它们无法输出或还原模拟电压。

通道

引脚

Channel 0

A0

Channel 1

A1

Channel 2

A2

Channel 3

A3

Channel 4

A4

Channel 5

A5### ADC 的分辨率:

数字数据是以 0 或 1 (低电平或高电平)的形式存在的。每一个位都有两种可能的组合状态。如果分辨率是 N 位,那么二进制的组合数将是 2 的 N 次方。

> 分辨率 = ( 2^N ) – 1

在 10 位 ADC 的情况下,

10 位 ADC 的分辨率是 ( 2^10 )-1= 1024 – 1 = 1023。数字值是一个从零开始的索引。所以其数值范围是 0 到 1023

电压范围:

ADC 的电压范围随参考电压的变化而变化。参考电压是指使用 ADC 可以测量的最大电压。参考值可以根据需求或制造商的设定进行调整。

然而,我们无法更改 Arduino Uno R3 的参考电压,它被固定为 5 伏特

因此,Arduino R3 (ATmega328P) 内置 ADC 的电压测量范围是 0 到 5V

模数转换:

> 公式: 数字值 = ( 输入电压 / 参考电压) * 分辨率

计算示例:

如果模拟输入电压为 2.8 伏特,那么在 10 位 分辨率下的数字值计算如下。

> 数字值 = ( 2.8 / 5 ) * 1023 = 573 (约等于)

同理,

当输入为 0 伏特时,数字值为 0,

当输入为 5 伏特时,数字值为 1023。

所需元件:

  • Arduino Uno R3
  • 信号源 ( 0 到 5 V )
  • 跳线

电路图:

!image模拟引脚电路图

注意: 这里使用函数发生器仅用于演示说明。你可以提供 0 到 5 伏特之间的任何电压,将模拟信号转换为数字值。
函数发生器:

函数发生器是一种测试设备,用于产生不同的波形,如方波、三角波、正弦波等。

设置步骤:

  • 将信号源连接到任意一个模拟通道,例如 A0。
  • 将信号源的接地端连接到 GND 引脚。
  • 将代码上传到 Arduino。
  • 9600 波特率 下监控串口输出。

注意:接地非常重要。如果信号源是电池,请将电池的负极连接到 GND。如果信号源自任何电路,请将该电路的接地端连接到 Arduino 的 GND。
语法:

analogRead(channel);

// analogRead 函数返回模拟输入信号的数字值。
// 它有 6 个通道 ( 0 到 5 ) 
// 示例:analogRead(0); // 选择的通道是 A0

Arduino 代码:

C++

void setup()
{
    Serial.begin(9600); // 串口监视器波特率设置为 9600
}
void loop()
{
    int digitalValue
        = analogRead(0); // 选择通道 0 (A0)
    Serial.print(
        "Digital value: "); // 在串口监视器打印文本
    Serial.println(
        digitalValue); // 在串口监视器打印数字值
                       // ( 范围 0 到 1023 )
}

输出结果:

我们将 正弦波 作为输入信号。其峰峰值电压为 5 伏特。正弦波的本质是交流电(AC),包含负电压部分( 2.5 到 -2.5 )。因此,我们将偏置电压设定为 2.5V (半个周期的电压)。这会在不改变正弦波形状的情况下,将整个波形提升至正电压侧。这样,正弦波的电压变化范围就变成了 0 到 5 伏特(峰峰值)。

数字值的增减变化是由于正弦波输入引起的。

注意: 输出结果会根据输入到模拟引脚的电压而变化。使用函数发生器仅为了方便理解原理。
输出分析:

!image

为了使用串口绘图器绘制波形,我们从代码中移除了 "Digital value: " 文本。

输出值已在串口绘图器中绘制出来。获得的数字值形成了一个与输入相似的正弦波。作为正弦函数,输出值在 0 到 1023 之间变化。

ADC 的应用:

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/37400.html
点赞
0.00 平均评分 (0% 分数) - 0