Я делаю небольшой проект, используя зарядное устройство Lipoly и аккумулятор 2500 мАч 3,7 В, оба от Adafruit. Я пытаюсь отобразить процент оставшегося заряда батареи. Для этого я использую этот небольшой эскиз:
long readVcc() {
long result;
// Read 1.1V reference against AVcc
ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
delay(2); // Wait for Vref to settle
ADCSRA |= _BV(ADSC); // Convert
while (bit_is_set(ADCSRA,ADSC));
result = ADCL;
result |= ADCH<<8;
result = 1126400L / result; // Back-calculate AVcc in mV
return result;
}
На этой странице я увидел , что минимальное напряжение составляет 3,0 В, поэтому я использую его для получения своих значений:
float volt = (float)readVcc()/1000;
float percent = ((volt-3)/0.7)*100;
Когда я отображаю свои значения, он показывает мне, что оставшийся процент составляет -4%. Должен ли я беспокоиться или я делаю что-то неправильно при расчете?
Я думаю, что ваш расчет в порядке.
Доказательство:
Если ваши результаты преобразования АЦП равны 1024 (полная шкала 10 бит) - когда AVcc = опорный
result = 1126400L / 1024 = 1100;
Если ваши результаты преобразования АЦП равны 512 (половина шкалы 10 бит) - когда AVcc = опорное / 2
result = 1126400L / 512 = 2200;
Ваш процентный результат равен -4%, потому что напряжение ниже 3 В.
percent = ((volt-3)/0.7)*100
-4 = ((volt-3)/0.7)*100
-4/100 = (volt-3)/0.7
-0.04*0.7 = volt - 3
-0.28 + 3 = volt
2.972 = volt
Камиль
Камиль
tomatediabolik
Камиль