电池电量低指示器


Answers:


13

对于主要问题,关于如何测量电池电压,最简单的方法是使用arduino上的ADC引脚之一。

如果您从电池提供5v电压(不太可能),则可以直接将+电压运至模拟输入引脚之一,并使用AnalogRead()-值的每个增量(从0-1023)将代表4.9mV。因此,将读取值乘以.0049即可读取伏特。

如果您的电压高于5v(更有可能),则可以使用分压器电路(请参阅:http : //en.wikipedia.org/wiki/Voltage_divider)将要发送到模拟输入端的电压带到<= 5v。如果您使用的是12V,则需要将电压分成大约1/3。然后,将ADC值乘以3,得到实际电压。

因此,如果使用12V和1 / 3rd分压器:

#define BAT_PIN 14

float read_batt_volts(void) {

  int val = analogRead(BAT_PIN);

  float volts = (float) val * (float) 0.0049 * (float) 3;

  return(volts)
}

!C


2
我有两点要补充。首先,大多数12V电池不会在0V时死亡,而是在完全充电电压的至少5 V范围内接近。在工作范围内获得更高分辨率测量的常用技术是使用齐纳二极管降低电压。与齐纳二极管串联的电阻,您可以跨电阻进行测量。其次,大多数人没有意识到您需要从电池汲取电流来了解剩余的电量。
Kortuk

@Kortuk:您能否为我的学习做两点澄清:(1)为了达到引脚可接受的电压范围,您是否建议使用齐纳二极管方法比分压器方法具有更高的分辨率?(2)为什么在这里特别提到“您需要绘制当前...”等?
2012年


10

shutterdrone的建议非常好,但是缺少细节,因为它暗示模拟参考电压与被测电压相同(除了假设使用的是Arduino,没有明确说明)。

无论ADC是uC的必需部件还是外部部件,都需要一个ADC。ADC需要一个模拟参考电压(ARef)来与输入进行比较。您不希望ARef与您所感测的电压相同,因为那样ADC总是会看到输入电压和参考电压相等,因此所感测到的电压的模拟值将始终为最大值。您需要的是一个非常精确的模拟电压基准,该基准不会随电源电压的变化而变化。ADC会将参考电压与电池电压进行比较。您可以使用分压器将感测到的电池电压降低到ARef的范围内。

Arduino(Atmega8 / 168/328 / etc。)具有一个内置ADC和一个内置1.1V模拟基准,因此,您唯一需要的外部组件是分压器的电阻器。我认为您还希望对电阻使用非常高的值,以减少电池的电流消耗。


2
优点-你是正确的,我(错误地)假设使用了Arduino。=)!c
shutterdrone
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.