Arduino Uno模拟引脚的输入阻抗?


18

我在一些小型机械手臂电机上使用基于ACS712霍尔效应的电流感应芯片,并使用Arduino Uno读取模拟电压。我取得了相当不错的结果,但仅在输出上放置了RC滤波器之后。但是,在数据手册上的应用笔记中,它说不要这样做:

“在传感器IC的输出上增加RC滤波器会导致不希望的器件输出衰减-即使对于DC信号也是如此。”

然后,它给出了一个计算衰减的公式,但是它取决于知道正在读取信号的信号的输入阻抗,所以这就是我要讲的。

Answers:


23

这里有几个因素。

首先,ADC的输入阻抗。ATmega328P使用逐次逼近型ADC。因此,输入基本上是比较器的输入,因此ADC具有非常高的输入阻抗。

在此处输入图片说明

ADC被指定为具有100MΩ(即MegaOhm)的输入阻抗。
但是,这对我来说似乎有点可疑。再加上没有指定模拟输入泄漏的事实,我想这只是 ADC 的电气特性,而不是ADC和整个IO引脚结构的电气特性。我猜想与数字IO共享的ADC IO线比仅模拟的IO线(50 nA,假设SAR比较器与模拟比较器相似)具有更多的泄漏电流(文档中为1 uA)输入拓扑)。


但是,这里还有另一个考虑因素,这是Atmel指定<10KΩ源阻抗的原因:
输入电容

在此处输入图片说明

基本上,多路复用器之后,芯片内部ADC的输入连接具有一定的电容。如果您查看ATmega ADC输入的等效电路:
在此处输入图片说明

您可以看到输入的外观。

当将输入多路复用器从一个引脚切换到另一个引脚时,会出现源阻抗较高的问题。如果您有两个输入,一个输入为0.5V,一个输入为4.5V,则当您从一个切换到另一个时,输入必须为14 pF电容器充电(或放电)。

如果信号源的阻抗很高,则必须为电容器充电可能会导致输入电压暂时下降。如果在仍在为电容器充电的同时ADC进行输入转换,您将获得错误的值。

可能可以通过在切换ADC通道后让ADC输入稳定一段时间来解决,但是处理该问题的最佳方法是简单地确保输入源可以对电容进行足够快的充电,这不是问题。


1
很好地阐明了。
gwideman 2014年

2
我知道这是一个古老的问题,但是如何“简单地确保输入源可以对电容充电足够快而又不成问题”呢?
RubberDuck

2
@RubberDuck-如果您的输入阻抗高或未知,请使用配置为单位增益电压跟随器的运算放大器之类的东西对其进行缓冲。
康纳·沃尔夫

+1表示“这里有电容”。现在我明白了。
Eiver

8

数据表并不十分清楚。

http://www.atmel.com/images/atmel-8271-8-bit-avr-microcontroller-atmega48a-48pa-88a-88pa-168a-168pa-328-328p_datasheet_complete.pdf

(24.6.1)第244页指出:“ ADC已针对输出阻抗约为10kΩ或更小的模拟信号进行了优化。如果使用这种源,则采样时间可以忽略不计。”

这是我在数据手册中发现的有关ADC阻抗的最接近的东西。


如果你需要一个确切值,100MΩ在表29-15列出310页
布赖恩·戈登

它称其为“模拟输入电阻”-那么,要为此充电一个14 pF的电容吗?我会说最好在前端放一些东西。我将.01的电容用于不会快速变化的直流电压。
SDsolar '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.