• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь ESP-07 + уровень заряда аккумулятора

chiffa

New member
Всем доброе время суток. стала задача контролировать уровень аккумулятора, по которому питается модуль.
Модуль: ESP-07
IDE: Arduino
Батарея: 3.7 LiPo

Подключил по схеме:
upload_2017-2-27_17-52-56.png

а дальше, какие только варианты не перепробывал - в сети тьма примеров, но что то не один не завелся...

Выдержки из скетча:

Код:
float readADC() {
     float ad = 0;
     float LSB = 0.005105113; //calibrate based on your voltage divider AND Vref!
     float adcr = analogRead(A0);
      ad= adcr*LSB ;     
      return ad;
}

extern "C" {  
  #include "user_interface.h"
  uint16 readvdd33(void);
}

float readVdd()
{
  char buf[6];                              
  float  vdd = readvdd33()/1000.0;
  return vdd;
}


void loop() {

uint32_t getVcc = ESP.getVcc();
Serial.println(getVcc);


  Serial.print ("readVdd: ");
  Serial.println(readVdd());

float vdd = readADC();

  Serial.print("Vdd: ");
  Serial.println(vdd);

}
в порт получаю следующие данные:

65535
readVdd: 4.09
Vdd: 5.23

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

Подскажите, как правильно получать информацию о уровне батареи. Спасибо!
 

Сергей_Ф

Moderator
Команда форума
@chiffa вы все в один скетч смешали. Если внешний делитель то только analogRead, getVcc не нужен. И возвращает он int.
 

Сергей_Ф

Moderator
Команда форума
@chiffa и делитель на 3 всего, а аналоговый вход до 1 вольта всего меряет, вот и не меняется. У вас всегда больше 1 вольт.
 

Сергей_Ф

Moderator
Команда форума
@chiffa сделать правильный делитель, считать значение через analogRead и скорректировать его значение. По ссылке есть кое что, я не просто так не дал.
 

chiffa

New member
п
@chiffa сделать правильный делитель, считать значение через analogRead и скорректировать его значение. По ссылке есть кое что, я не просто так не дал.
а разве делитель не правильный?... такую схему находил в разных источниках...
 

Сергей_Ф

Moderator
Команда форума
@chiffa в каких пределах у вас меняется входное напряжение? 4.2-3.5 вольт. Так?
На вход АЦП нужно иметь не более 1 вольт. Посчитайте сами. Vadc=R2*Vin/(R1+R2)
При 4.2 в получается 4.7*4.2/(10+4.7)=1.34 вольт
При 3.5 будет 1.1 вольт
Во всем диапазоне превышает максимум, значит показывать будет всегда одно и тоже.

такую схему находил в разных источниках...
хоть одну ссылку приведите.
 
Последнее редактирование:

Сергей_Ф

Moderator
Команда форума
аккумулятор 3.7
Вы так уверены? Зарядите полностью и померьте вольтметром. Это будет ваша точка отсчета. Делитель нужно подобрать так, что бы при полностью заряженном аккумуляторе на АЦП приходило 1 В. Это обеспечит наибольшую точность.
Если Ваши данные попробовать подставить, то получится 3.7*4.7/(20+4.7)=0,7 вольт. Работать будет, но точность Вы потеряете около 30%.
 

chiffa

New member
Вы так уверены? Зарядите полностью и померьте вольтметром. Это будет ваша точка отсчета. Делитель нужно подобрать так, что бы при полностью заряженном аккумуляторе на АЦП приходило 1 В. Это обеспечит наибольшую точность.
Если Ваши данные попробовать подставить, то получится 3.7*4.7/(20+4.7)=0,7 вольт. Работать будет, но точность Вы потеряете около 30%.
таки да... Вы правы, при максимальной зарядке показывает 4,2....

получает, что резисторы нужны на 10к и 32к.....
 

Encrypt

Member
Еще пожалуйста расскажите, как при всем этом оставить возможность использовать единственный аналоговый пин?
 

Сергей_Ф

Moderator
Команда форума
@Encrypt для чего? Он ни на что другое не годен, по большому счёту. Нужен АЦП - подключайте внешний по i2c.
 

tretyakov_sa

Moderator
Команда форума
Еще пожалуйста расскажите, как при всем этом оставить возможность использовать единственный аналоговый пин?
А вот никак. Если вы хотите мерить и батарею и питание придется ставить внешний АЦП. Я взял такие: 10 шт./лот ADS1015IDGSR ADS1015I ADS1015 BRPI MSOP 10 подлинный и новый IC лучшее качество бесплатная доставка купить на AliExpress
 

tretyakov_sa

Moderator
Команда форума
Ну почему... два мосфета переключающие вход и вполне можно использовать
Можно, но два мофсета будут использовать минимум одну ногу GPIO, и останется очень тупой АЦП. Пробовал я это делать, все же удобнее ADS1015. 12 разрядов всего за 2 GPIO + другие i2c устройства вешай если нужно, 4 аналоговых входа или 2 дифференциальных, что очень удобно для измерения батареи.
 
Сверху Снизу