我在一些小型机械臂电机上使用基于ACS712 霍尔效应的电流传感芯片,并使用 Arduino Uno 读取模拟电压。我已经取得了相当不错的结果,但只是在输出端安装了一个 RC 滤波器之后。但是,在数据表上的应用说明中,它说不要这样做:
“在传感器 IC 的输出中添加 RC 滤波器会导致不希望的设备输出衰减——即使对于直流信号也是如此。”
然后它给出了一个计算衰减的公式,但这取决于知道读取信号的任何东西的输入阻抗,所以这就是我在这里所追求的。
我在一些小型机械臂电机上使用基于ACS712 霍尔效应的电流传感芯片,并使用 Arduino Uno 读取模拟电压。我已经取得了相当不错的结果,但只是在输出端安装了一个 RC 滤波器之后。但是,在数据表上的应用说明中,它说不要这样做:
“在传感器 IC 的输出中添加 RC 滤波器会导致不希望的设备输出衰减——即使对于直流信号也是如此。”
然后它给出了一个计算衰减的公式,但这取决于知道读取信号的任何东西的输入阻抗,所以这就是我在这里所追求的。
这里有几个因素。
首先,ADC的输入阻抗。ATmega328P 使用逐次逼近型 ADC。因此,输入基本上是比较器的输入,因此ADC具有非常高的输入阻抗。
ADC 被指定为具有 100 MΩ(即兆欧)输入阻抗。
但是,这对我来说似乎有些可疑。再加上没有指定模拟输入泄漏这一事实,我猜这只是ADC 的电气特性,而不是 ADC 连同整个 IO 引脚结构。我猜想与数字 IO 共享的 ADC IO 线具有更多的泄漏电流(文档中的 1 uA),然后是仅模拟的 IO 线(50 nA,假设 SAR 比较器类似于模拟比较器输入拓扑)。
但是,这里还有另一个考虑因素,这就是 Atmel 指定 < 10 KΩ 源阻抗的原因:
输入电容
基本上,芯片内部ADC的输入连接,经过多路复用器有一些电容。如果您查看 ATmega ADC 输入的等效电路:
你可以看到输入的样子。
当您将输入多路复用器从一个引脚切换到另一个引脚时,会出现高源阻抗的问题。如果您有两个输入,一个为 0.5V,一个为 4.5V,当您从一个切换到另一个时,输入必须为 14 pF 电容器充电(或放电)。
如果信号源的阻抗非常高,则必须对电容器充电可能会导致输入电压暂时下降。如果 ADC 在仍在为电容器充电时转换输入,您将得到不正确的值。
这可能可以通过在切换 ADC 通道后让 ADC 输入稳定一段时间来解决,但处理它的最佳方法是简单地确保输入源可以足够快地对电容充电,这样就不会出现问题。
数据表并不完全清楚。
(24.6.1) 第 244 页指出:“ADC 针对输出阻抗约为 10 kΩ 或更小的模拟信号进行了优化。如果使用这样的源,则采样时间可以忽略不计。”
这是我在数据表中找到的关于 ADC 阻抗的最接近的内容。