登录/注册

arduino adc精度

更多

好的,我们来详细解释一下 Arduino 的 ADC 精度问题(针对最常见的 AVR 架构 Arduino,如 Uno, Nano, Mega 等):

  1. 分辨率 (Resolution):

    • 这是最重要的指标,通常被直接称为“精度”,但严格来说它决定了最小可分辨的电压变化。
    • 绝大多数 AVR 架构的 Arduino(如 Uno, Nano, Mega 使用 ATmega328P 或 ATmega2560)的 ADC 是 10 位 (10-bit) 的。
    • 这意味着 ADC 可以将输入的模拟电压(通常是 0V 到 参考电压 Vref 之间)划分为 2^10 = 1024 个离散的数值(电平)。
    • 输出的数字值范围是 0 到 1023
    • 量化间隔 / 最小电压步进: 理论上,每个数字值代表的电压差是 Vref / 1024
      • 如果使用默认的 Vref = 5V:最小电压步进 = 5V / 1024 ≈ 4.88 mV。也就是说,电压变化小于 4.88mV,ADC 可能无法检测到变化。
      • 如果使用更稳定的内部 1.1V 基准(如果芯片支持且配置)或外部更低/更稳定的基准(如 2.5V, 3.3V):最小电压步进会变得更小。例如 Vref=2.5V 时,步进 ≈ 2.5V / 1024 ≈ 2.44 mV
  2. 绝对精度 (Absolute Accuracy):

    • 这是指 ADC 测量结果与实际输入电压之间的最大偏差(误差)。
    • 10 位的分辨率并不等于 10 位的绝对精度!
    • 数据手册(如 ATmega328P)中给出的典型 总不可调整误差 (Total Unadjusted Error - TUE) 通常是 ±2 LSB(最低有效位)左右。
    • 以 5V 基准为例:
      • 1 LSB = 4.88mV
      • ±2 LSB ≈ ±9.76mV (±0.01V)
    • 这意味着,对于一个给定的真实输入电压,Arduino ADC 读出的值对应的电压值,可能与真实值相差最大约 ±10mV(在 0℃ 到 70℃ 温度范围内)。这包括了偏移误差、增益误差、积分非线性(INL)、微分非线性(DNL)等所有因素的综合影响。
    • 关键点:分辨率 ≠ 精度。10位分辨率只保证了你能区分出1024个等级,但每个等级对应的电压值并不完全精确。
  3. 影响精度的主要因素:

    • 参考电压 (Vref) 的稳定性: 这是最关键的因素!默认的板载 5V 电源(通常来自 USB 或稳压器)通常噪声较大且不够精确(可能标称5V,实际4.8V-5.2V甚至更大波动)。使用更稳定、更精确的参考电压源(如外部精密基准源如 REF1025, LM4040 或芯片内置的 1.1V/2.56V 基准)能显著提高精度。
    • 噪声(电源噪声、信号源噪声、电磁干扰EMI): ADC 对噪声非常敏感。PCB 布局、电源滤波、信号滤波(尤其是源阻抗较高时)、远离干扰源都很重要。
    • 信号源阻抗: ADC 输入引脚内部有一个采样保持电容。如果信号源的内阻太高,在 ADC 采样瞬间无法迅速给这个电容充电到稳定值,就会导致读数偏低且不稳定。数据手册要求源阻抗 ≤ 10kΩ(使用默认设置时)。对于高阻抗源(如分压电阻值很大、传感器输出阻抗高),必须使用缓冲放大器(如运算放大器构成的电压跟随器)。
    • 积分非线性 (INL): 实际转换曲线偏离理想直线的最大偏差。ATmega 的 INL 典型值在 ±0.5 LSB 到 ±1.5 LSB 之间。
    • 微分非线性 (DNL): 相邻输出码对应的电压步进与理想步进 (1 LSB) 的最大偏差。理想为 0。ATmega 的 DNL 典型值在 ±0.5 LSB 左右(意味着所有码值都可用)。
    • 温度和电源电压变化: ADC 性能会随温度和供电电压变化而漂移。
  4. 如何提高精度(实用建议):

    • 使用更稳定的参考电压 (Vref): 这是最有效的方法。优先使用外部高精度基准源 (如 2.5V, 3.0V, 3.3V, 4.096V, 5.000V) 或芯片内置的 1.1V/2.56V 基准(如果电压范围合适)。通过 analogReference() 函数设置。
    • 降低信号源阻抗: 确保连接到模拟输入引脚的信号源能提供足够的电流(通常源阻抗 ≤ 10kΩ)。对高阻抗源(如电位计、光敏电阻等),要么使用更小的分压电阻(增加功耗),要么添加一个电压跟随器(运算放大器)进行缓冲。
    • 添加硬件滤波: 在模拟输入端添加一个简单的 RC 低通滤波器(如 100Ω电阻 + 0.1uF电容到地),可以有效滤除高频噪声。注意电容值不能太大,否则会影响对快速变化信号的响应。
    • 添加软件滤波: 多次采样取平均(analogRead() 读数多次求平均),或使用更高级的滤波算法(如移动平均、中值滤波、卡尔曼滤波),可以显著降低随机噪声的影响。
    • 优化电源: 使用干净的电源给 Arduino 供电(线性稳压器通常比开关稳压器噪声小)。在电源输入端和芯片供电引脚附近放置足够的去耦电容(如 100nF 陶瓷电容 + 10uF 电解电容)。
    • 减少电磁干扰 (EMI): 让模拟信号线远离数字信号线(特别是 PWM 输出)、电源线、电机等噪声源。使用屏蔽线或双绞线传输模拟信号。缩短信号线长度。
    • 校准: 对于要求很高的应用,可以进行两点校准(零点偏移和满量程增益校准),以补偿芯片本身的偏移和增益误差。

总结:

理解 ADC 精度是分辨率和误差因素的结合,并针对性地解决 Vref 稳定性和噪声问题,是获得可靠模拟测量结果的关键。

arduino用pwm做dac输出时,可以用adc校准精度吗?

arduino用pwm做dac输出时,可以用adc校准精度吗 怎么实现?最好用代码说明

2023-11-03 06:42:09

如何提高AT32的ADC转换精度

如何提高AT32的ADC转换精度设计者在使用AT32芯片ADC模块时,提供注意事项和软、硬件的设计建议。

2023-10-24 07:36:36

浅谈ADC的分辨率与精度

为确保系统满足所需的精度规范,透彻了解不同的误差源非常重要。决定信号链精度的最关键要素之一是A/D 转换器 (ADC),这是本文的重点。请记住,

2023-05-22 11:39:07

Arduino Uno国内改版电路原理图下载

Arduino Uno国内改版电路原理图下载

资料下载 ah此生不换 2021-12-06 10:51:39

Arduino编程基础(一)——Arduino语言资料下载

电子发烧友网为你提供Arduino编程基础(一)——Arduino语言资料下载的电子资料下载,更有其他相关的电路图、源代码、课件教程、中文资料、英文资料、参考设计、用户指南、解决方案等资料,希望可以帮助到广大的电子工

资料下载 陈文博 2021-04-12 08:42:01

如何在STM32微控制器中获得最佳ADC精度

STM32微控制器内置最多四个高级12位ADC(取决于器件)。提供自校准功能,用于提高环境条件变化时的ADC精度。

资料下载 姚小熊27 2021-03-19 15:59:40

ADC的各种指标如何理解如何提高ADC转换精度

在此我们简要总结一下ADC的各种指标如何理解,以及从硬件到软件都有哪些可以采用的手段来提高ADC的转换精度。

资料下载 刘满贵 2021-03-18 01:16:14

Arduino开发机器人经典书籍推荐Arduino开发实战指南:机器人卷

单片机中各种复杂的寄存器曾让众多的学习者望而生畏——要完成某项功能需要耗费大量的时间去熟悉单片机的底层。 Arduino的诞生,改变了这一局面。Arduino将各种寄存器封装起来,并提供了易用的接口

资料下载 123 2019-05-07 18:21:00

谈谈ADC的分辨率与精度

为确保系统满足所需的精度规范,透彻了解不同的误差源非常重要。决定信号链精度的最关键要素之一是A/D 转换器 (ADC),这是本文的重点。请记住,

2023-05-15 14:06:10

什么是高精度ADC

高速ADC未来的发展方向应该尽可能提高它们的分辨率,以适应高速高精度发展的趋势。因而精度要求是

2023-03-31 16:17:04

ARDUINO MKR 1000 WITH HEADERS

ARDUINO MKR 1000 WITH HEADERS

2023-03-28 14:50:19

ADC的内部原理和如何获得最佳精度

用了这么久ADC,从没细看过ADC的内部原理和如何获得最佳精度,今天看到一篇ST的官方文档讲的不错,这里整理分享给大家。

2022-11-02 16:50:03

如何提高AT32 MCU ADC转换精度

AT32的微控制器内置最多三个高级12位片上SAR模拟数字转换器(ADC)并提供自校准功能,用于提高环境条件变化时的ADC精度。在涉及模数转换的

2022-10-24 12:04:09

将PCF8591 ADCArduino连接的方法

在本教程中,我们将检查 如何将 PCF8591 ADC/DAC 模块与 Arduino 连接。

2022-08-26 15:18:20

7天热门专题 换一换
相关标签