Чтобы узнать% заряда батареи с помощью Arduino - PullRequest
1 голос
/ 15 октября 2019

Я использую Arduino Nano и различные Li-Fe, Li-Po батареи 9,9 В, 6,6 В и 3,7 В. Я могу прочитать напряжение батареи с помощью Arduino. Мой Arduino работает при 5 В, поэтому для батарей типа 9,9 В и 6,6 В я использовал делитель напряжения с использованием двух резисторов 10 кОм. Но проблема в том, что мне нужно прочитать% заряженной батареи, я пробовал что-то в коде, но я не увереноб этом. Пожалуйста, кто-нибудь, помогите мне с этим. Мой код:

#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);

}

Ответы [ 2 ]

1 голос
/ 15 октября 2019

Чтобы точно определить процент заряженной батареи, вам нужен график разряда для каждой батареи. График разряда обычно нелинейный для литиевых батарей. Кривая разряда в основном представляет собой напряжение в зависимости от% заряда и отличается для зарядки и разрядки аккумуляторов.

Если у вас есть кривая разряда, вы можете создать карту для каждого из% к соответствующему значению напряжения. Затем вы можете отобразить каждое напряжение на значение в% от созданной вами карты.

Например:

100% -> 5,00 В, 99% -> 4,95 В. ... 0% -> 3,23 V

Создать массив для хранения карты размера 100 (для каждого%): [5.00, 4.95, ... 3.23]

Затем можнонайдите% s используя напряжение. Я надеюсь, что вы можете найти график разряда, в противном случае вы можете найти его самостоятельно, разрядив аккумулятор с помощью безопасного тока

0 голосов
/ 15 октября 2019

В дополнение к maheenul, я хотел бы добавить, что ваши расчеты немного не верны.

const float mvpc = 4.55 ; //measured voltage of arduino through voltmeter

Полагаю, вы поставляете Arduino через USB. Это напряжение не очень надежно.

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% не имеет большого значения для измерения заряда батареи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...