首先,我对电子产品一无所知。
最近我得到了一个Arduino Nano。现在,我试图在http://arduino.cc/en/Tutorial/ReadAnalogVoltage示例中了解为什么没有电位计标称值,以及该标称值的变化将如何影响模拟输入读数。
另外,为什么在http://arduino.cc/en/Tutorial/AnalogReadSerial示例中,他们选择了10k电位器,而200k电位器却有所不同。
谢谢!
首先,我对电子产品一无所知。
最近我得到了一个Arduino Nano。现在,我试图在http://arduino.cc/en/Tutorial/ReadAnalogVoltage示例中了解为什么没有电位计标称值,以及该标称值的变化将如何影响模拟输入读数。
另外,为什么在http://arduino.cc/en/Tutorial/AnalogReadSerial示例中,他们选择了10k电位器,而200k电位器却有所不同。
谢谢!
Answers:
任何(空载)电位器的抽头电压输出都不会有差异,它们的工作方式都相同。
但是,Arduino的模拟输入建议源阻抗小于10kOhm,以实现最佳性能。这是由于对采样和保持电容器充电所花费的时间,可以将其视为动态阻抗。下图取自AtMega328数据表(Arduino所基于的微控制器):
如果您现在还不完全了解这一点,请不要担心,只需接受我们需要小于10kOhms的源阻抗即可。
现在我们如何计算电位计的输出阻抗?
有关详细信息,请查看戴维南等效阻抗。这告诉我们,锅的抽头的最大输出电阻是从上到下测量的电阻的1/4(当抽头在中间时),因此,如果锅为10k,则最大输出电阻为2.5k 。
这是一个1万个锅从一端扫到另一端的模拟:
X轴表示从0到100%的旋转(忽略显示的实际值)。Y轴是在抽头上测得的输出阻抗。我们可以看到它是如何在0欧姆处开始和结束的,并且在中间(50%)处达到2.5kOhms的峰值,
这比建议的10k源阻抗小得多。
因此,您可以使用介于100欧姆和40k之间的任何电位计作为分压器。
编辑-回答有关如果我们使用200k底池会发生什么的问题:
如数据表摘录中所述,源阻抗越高,S / H电容器充电所需的时间就越长。如果在进行读数之前未将其充满电,则与真实值相比,读数将显示错误。
我们可以计算出电容器需要充电多长时间才能达到其最终值的90%,公式为:
2.3 * R * C
经过1个RC时间常数后,电压约为最终值的63%。在经过2.3个时间常数后,它的值约为上述值的90%。这是通过1-(1 / e ^(RC / t))计算得出的,其中e是自然对数〜2.718。例如,对于2.3个时间常数,它将是1-(1 / e ^ 2.3)= 0.8997。
因此,如果我们插入显示的值-50k源阻抗,100k串联阻抗(假设最坏的情况)和14pF电容:
2.3 * 150k * 14pF = 4.83us充电至90%。
我们还可以计算-3dB值:
1 /(2pi * 150k * 14pF)= 75.8kHz
如果我们希望最终值在99%以内,则必须等待4.6 tau(时间常数):
4.6 * 150k * 14pF = 9.66us充电至99%-大约相当于16.5kHz
因此,我们可以看到源阻抗越高,充电时间越长,因此ADC准确读取的频率越低。
不过,在电位计控制〜DC值的情况下,您可以以非常低的频率采样,并给它充裕的时间充电,因为泄漏非常小。所以我认为在这种情况下200k实际上应该没问题。对于例如音频信号或任何变化的(AC)高阻抗信号,您都必须考虑所有上述因素。
该链接详细介绍了ATMega328 ADC的特性。
以我使用Arduino的经验(电位计超过10k),读数会波动。我通过在抽头和地面之间放置一个0.1uf电容器来解决此问题。这样可以使模拟读取的电压保持稳定。通过使用电容器,我使用了高达1 MegaOhm的电位计,并获得了稳定的读数。