Arduino:测量外部电压


10

我在尝试测量纽扣电池的外部电压时遇到“问题”。我简化了电路,但基本上我有一个由Arduino 5v输出供电的DS1307实时时钟,以及一个与vBat连接的纽扣电池,可在Arduino关闭时保持时钟存活。我的想法是通过将Arduino的正极连接至模拟输入并读取电压来测量Arduino的电池电量。因此,我认为,由于最大电压为3v,因此我可以将3v3用作AREF并将模拟基准设置为外部基准,然后读取准确的结果。结果非常酷,Arduino的读数与从我的万用表读取的电池电压相同。当我断开Arduino的电源(USB连接)时,就会出现问题。令我惊讶的是,Arduino没有关闭(某些LED保持打开状态),

为什么会这样呢?Arduino如何从模拟引脚获取电流?这个小电路是电子畸变吗?

在此处输入图片说明

Answers:


10

AVR控制器上的大多数(如果不是全部)输入引脚都由钳位二极管内部保护。这些二极管可防止输入电压高于电源电压。

为什么有这些内部二极管:

重要的是要意识到,当输入引脚的电压确实高于电源电压并且这些二极管不存在时,芯片可能会充当SCR,闩锁,使电池短路,并且芯片本身可能会因过电流/过热而损坏。 。

为什么您的Arduino依靠电池供电 请看下面的电路图。当Vcc与正常电源断开连接时,从电池通过D1到Vcc存在一条路径。电池电压刚好足以使控制器运行。

原理图

模拟该电路 –使用CircuitLab创建的原理图

如何解决

解决方案很简单,在电池和控制器的输入之间串联一个高阻值电阻。大多数AVR的最大输入泄漏电流(I IL)为1μA,因此您要确保该电流的压降是可接受的,例如100kΩ。

但是要当心!

您必须意识到输入可能会从按钮单元汲取该电流并缩短其使用寿命。


我尝试10Mohm,看看ADC读取的内容并将其用作已充电电池的参考。如果要避免不必要的排水,这是一个棘手的测量。
安迪(aka)

尽管可以将其指定为输入电流而不是输入阻抗,但这可能会起作用。响应可能是非线性的,但不一定是无用的。它可能需要某种校准,并且当测得的电压降至1.1V以下时,可以使用1V1带隙基准(而不是3V3外部基准)。
jippie

不错的答案!我在想100kΩ和50kΩ的电阻分压器是否可以工作。在这种情况下,我假设电池的最大电压为3.2伏。这给出了1.067v的压降,可以与内部1v1的模拟基准兼容。这行得通吗?还是会很快耗尽电池电量?
alvarolb

2
我不知道你的电池容量。应以mAh为单位指定。粗略地表示其寿命是。纽扣电池的使用寿命可能不会很长,但是您应该检查数据表以确保安全。T=mAh3V×1000100kΩ+50kΩ=mAh × (100kΩ+50kΩ)3V×1000
jippie

1
这些二极管通常存在于大多数微控制器中,而不仅仅是AVR。在其他类型的IC上也不是闻所未闻的。
亚当劳伦斯
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.