我用的是Arduino Nano和各种Li-Fe,Li-Po电池,有9.9V,6.6V和3.7V。我可以用Arduino读取电池的电压。我的Arduino在5V下工作,所以对于9.9V和6.6V这样的电池,我使用了一个使用两个10k resistors.But的分压器。问题是我需要读取电池充电的%,我尝试了代码中的一些东西,但我不确定。请任何人帮我一下。我的代码是:
#define cellPin A0
const float mvpc = 4.55 ; //measured voltage of arduino through voltmeter
float counts = 0; //battery volts in millivolts
float mv = 0;
float multiplier = 2;
float output = 0;
int charge = 0;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
}
void loop() {
// put your main code here, to run repeatedly:
counts = analogRead(cellPin);
Serial.println(counts);
mv = counts * mvpc;
Serial.println(mv);
output = (mv * multiplier)/1000 ;
Serial.print(output);
Serial.println("V");
charge = (counts/1024)*100;
Serial.print(charge);
Serial.println("%");
delay(1000);
}发布于 2019-10-15 14:05:46
为了准确地确定充电电池的百分比,您需要每个电池的放电图。锂电池的放电曲线通常是非线性的。放电曲线基本上是电压与%电荷的关系,对电池的充电和放电是不同的。
如果您有放电曲线,则可以创建每个%到相应电压值的映射。然后,您可以将每个电压映射到您创建的映射中的%值。
为例:
100% -> 5.00V 99% -> 4.95V ....0% -> 3.23 V
创建一个数组来存储大小为100的地图(每个百分比):5.00,4.95,... 3.23
然后,您可以使用电压查找%s。我希望你能找到放电曲线图,否则,你可以手动找到它,用安全的电流放电电池
发布于 2019-10-15 15:24:44
除了maheenul之外,我还想补充一句,你的计算有点偏差。
const float mvpc = 4.55 ; //measured voltage of arduino through voltmeter我猜你是通过USB提供Arduino的。这个电压不是很可靠。
float counts = 0; //battery volts in millivolts
counts = analogRead(cellPin);analogRead返回10位(0-1023)模数转换器读数。基准电压的一小部分。它不是毫伏的值!所以在下面你应该使用1024而不是1000。
output = (mv * multiplier)/1000 ;charge = (counts/1024)*100;这会计算你的Vref的百分比。这不是maheenul所解释的费用。
如果你想要精确的测量,你应该使用更好的Vref。要么是内部1.1Vref,要么是一些调节良好的Vref。两者都有适当的分压器。
但我猜5-10%的折扣对于电池电量测量来说并不是什么大问题。
https://stackoverflow.com/questions/58387966
复制相似问题