• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Вопрос ESP8266 и мониторинг собственной батарейки

tretyakov_sa

Moderator
Команда форума
Я еще новичок в этом деле, прошу не судить строго, но вывод же никакой не инициализирован в коде, что значит аналоговый выход должен висеть в воздухе? Я думал, что readvdd33() считывает напряжение напрямую с плюса платы... Кстати вчера подключил плату от батарей 3хАА и у меня измеряемое значение по данному коду стало около 1,49-1,5. Подскажите какой вывод инициализируется и должен висеть в воздухе, чтобы нормально измерять напряжение.
Заранее спасибо.
Именно аналоговый вход никуда не подключайте. Пусть висит в воздухе.
Функция считает напряжение с ноги питания. И если аналоговый вход куда то подключен, то это создаст искажение замера.
 

Сергей_Ф

Moderator
Команда форума
@eratnik на witti cloud, вообще затруднительно использовать readvdd33. Там на аналоговый вход фоторезистор с подтяжкой повешен, а питание через стабилизатор подается. Кроме того, пробегала информация, что замерять напряжение надо при отключении wifi. Но за последнее не ручаюсь, сам не пробовал.
 

eratnik

New member
@Сергей_Ф Были у меня именно такие подозрения... А если выпаять фоторезистор? Или из-за стабилизатора все-равно показания будут некорректными?
А если не следить за напряжением литиевого акка, то ему же придут кранты, несмотря на стаб? Есть какие-то варианты этого избежать?
 

tretyakov_sa

Moderator
Команда форума
@Сергей_Ф Были у меня именно такие подозрения... А если выпаять фоторезистор? Или из-за стабилизатора все-равно показания будут некорректными?
А если не следить за напряжением литиевого акка, то ему же придут кранты, несмотря на стаб? Есть какие-то варианты этого избежать?
Как вы подаете питание от аккумулятора на плату?
 

Сергей_Ф

Moderator
Команда форума
@eratnik одного фоторезистор мало, там резистор еще. Проще дорожку от аналогового входа модуля перерезать. Стабилизатор встроенный закоротить, только как заряжать тогда аккумулятор? 5 вольт могут сжечь модуль без стабилизатора. В понедельник посмотрю, что без фоторезистор будет - напишу. Там в любом случае даже через стабилизатор будут некоторые флуктуации напряжения, вопрос заметит ли их встроенный АЦП.
 

eratnik

New member
@tretyakov_sa на данный момент плата подключена через microUSB, как писал выше, пробовал подключать 3хАА на контакты vcc, gnd. Показания в обоих случаях очень разняться, но явно некорректные.
@Сергей_Ф спасибо большое, буду ждать.
PS я сейчас жду получения платы nodeMCU, там, я так понял, проще будет с реализацией измерения напряжения?
 

Сергей_Ф

Moderator
Команда форума
@eratnik глянул мельком, не выпаивайте фоторезистор просто так!!!! Велика вероятность сгорания аналогового входа или всего модуля. Китайцы там настолько схемотехнику упростили, что ах. Если я не ошибся. На проверку нужно время, а сегодня его нет. Так что, если не уверены в своих знаниях и силах - лучше не делайте до моей проверки.
Проверил. Не туда смотрел. Можно не бояться и спокойно выпаять фоторезистор без последствий.
 
Последнее редактирование:

eratnik

New member
@Сергей_Ф Понял, спасибо, что предупредили. И вопрос вдогонку, rgb светодиод же вроде можно выпаять? Везде пишут, что для улучшения энергопотребления его нужно выпаять
 

Сергей_Ф

Moderator
Команда форума
@eratnik хотел как раз написаиь, что для автономного питания он явно будет мешать :). Если только нет задачи разноцветной подсветки :)
Там еще и встроенный синий светодиод жрет лишним ХХ мА. Обычно про него пишут. А RGB еще и выходы занимает.
 

Evgeniy163

New member
@eratnik, и еще, для корректного измерения VCC надо в скетч добавить: ADC_MODE(ADC_VCC);
У меня без этого, функция readvdd33() иногда возвращала не правильные значения.
with.png without.png
 
Последнее редактирование:

tretyakov_sa

Moderator
Команда форума
@eratnik, и еще, для корректного измерения VCC надо в скетч добавить: ADC_MODE(ADC_VCC);
У меня без этого, функция readvdd33() иногда возвращала не правильные значения.
Посмотреть вложение 3572 Посмотреть вложение 3573
Если речь идет о скетче то так.
ESP.getVcc ();
Чтобы прочитать напряжение питания, и контакт АЦП должен быть отключен. Кроме того, следующая строка должна быть добавлена в заголовок:
ADC_MODE (ADC_VCC);
Эта строка должна появиться вне всяких функций, например сразу после #include строки эскиза.
 

Сергей_Ф

Moderator
Команда форума
@eratnik
Вот этот код дает примерно реальное значение на входе стабилизатора в милливольтах при изменении входного напряжения от 3 до 4.2 вольта. Надо перерезать дорожку, показанную на фото что бы не влиял фоторезистор и резистор подтяжки.
При 3 вольтах на модуль подается всего 2,1 вольт, что не обеспечивает стабильную работу. При 4,2 - 3,1 вольта. При большем напряжении не замерял, нет возможности. Но при зарядке мерить напряжение не имеет смысла, имхо. И использование AMS1117 при автономном питании, не есть хорошо. Лучше от него избавится и использовать преобразователь DC-DC. Но это Вам решать, что лучше.

Код:
ADC_MODE (ADC_VCC);
#define pinR 15
#define pinG 12
#define pinB 13


void setup() {
  // put your setup code here, to run once:
Serial.begin(115200);
pinMode ( pinR, INPUT);
pinMode ( pinG, OUTPUT); digitalWrite(pinG, LOW);
pinMode ( pinB, INPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
int voltInt = ESP.getVcc ();
long volt = (voltInt*117+54000)/100;
Serial.print("Vin = ");
Serial.print (volt);
Serial.println(" mV");
delay (1000);
}
Странная формула volt = (voltInt*117+54000)/100 - это попытка найти входное напряжение ams1117 по выходному. Она не точна и подвержена многочисленным погрешностям при изменении потребления самим модулем. Если нужно точнее, вычисляем сами или... см. следующий пост.
 

Вложения

Последнее редактирование:

pvvx

Активный участник сообщества
@eratnik
Вот этот код дает примерно реальное значение на входе стабилизатора в милливольтах при изменении входного напряжения от 3 до 4.2 вольта. Надо перерезать дорожку, показанную на фото что бы не влиял фоторезистор и резистор подтяжки.
При 3 вольтах на модуль подается всего 2,1 вольт, что не обеспечивает стабильную работу. При 4,2 - 3,1 вольта. При большем напряжении не замерял, нет возможности. Но при зарядке мерить напряжение не имеет смысла, имхо. И использование AMS1117 при автономном питании, не есть хорошо. Лучше от него избавится и использовать преобразователь DC-DC. Но это Вам решать, что лучше.
Но в SDK существует 2 функции опроса ADC. Одна с переключением в режим замера питания, вторая - для замера со входа TOUT.
При замере питания включаются внутренние назовем так "внутренние делители" ко входу TOUT. По этому внешнее подключение к нему мешает.
Но если замеряете другой функцией, на своем внешнем делителе включенном к TOUT, то зачем отрезать совcем TOUT?
Надо добавлять коммутатор - отключать вход от датчика или отключать цепь к датчику или его питание (зависит какой датчик). Замер напряжения питания корректируется на величину включенного резистора к TOUT.
 

Сергей_Ф

Moderator
Команда форума
@pvvx как сказали @tretyakov_sa и @Evgeniy163 вывод Analog In должен висеть в воздухе при использовании readvdd33() или ESP.getVcc (). И это действительно так, фоторезистор подключенный к аналоговому входу влияет на показание внутреннего вольтметра. Потому и перерезал дорожку к делителю с фоторезистором - он ТС не нужен. Впрочем, как и трехцветный светодиод.
Внешний делитель я не ставил, если он нужен ТС - он может поставить, но он будет жрать батарейку постоянно. Можно, конечно впаять постоянный резистор вместо фоторезистора, но второе плечо запаяно на землю всего 470Ом, а ТС вряд ли сможет перепаять SMD-резистор. А так, будет жрать много, имхо.
 

Сергей_Ф

Moderator
Команда форума
Измерения напряжения питания для witty cloud. Продолжение. Навеяно замечаниями @pvvx

Дорожку не трогаем. Вооружаемся паяльником и выпаиваем резистор (см. фото красным) и заменяем его на 10кОм, выпаиваем фоторезистор и вместо него вапаиваем резистор 39кОм по синим стрелкам, согласно рисунку. Значение напряжения меряем простым analogRead без всякой инициализации вначале. Значение 1000 соответствует напряжению 4,9 В и линейно меняется вместе с напряжением на Vcc (до стабилизатора).
Возможно номиналы резисторов придется кратно скорректировать для правильной работы в меньшую сторону. Например, 1кОм и 3,9 кОм. Я выбирал значения с учетом минимизации потребления от батареи. В моем случае делитель будет постоянно "жрать" около 90 мкА. Но будет ли при этом правильно работать АЦП, не проверял. При уменьшении сопротивления делителя, ток будет больше.
 

Вложения

Последнее редактирование:

tretyakov_sa

Moderator
Команда форума
Измерения напряжения питания для witty cloud. Продолжение. Навеяно замечаниями @pvvx

Дорожку не трогаем. Вооружаемся паяльником и выпаиваем резистор (см. фото красным) и заменяем его на 10кОм, выпаиваем фоторезистор и вместо него вапаиваем резистор 39кОм по синим стрелкам, согласно рисунку. Значение напряжения меряем простым analogRead без всякой инициализации вначале. Значение 1000 соответствует напряжению 4,9 В и линейно меняется вместе с напряжением на Vcc (до стабилизатора).
Возможно номиналы резисторов придется кратно скорректировать для правильной работы в меньшую сторону. Например, 1кОм и 3,9 кОм. Я выбирал значения с учетом минимизации потребления от батареи. В моем случае делитель будет постоянно "жрать" около 90 мкА. Но будет ли при этом правильно работать АЦП, не проверял. При уменьшении сопротивления делителя, ток будет больше.
Самое правильное решение.
 

Сергей_Ф

Moderator
Команда форума
@tretyakov_sa самым правильным, будет поставить какой нибудь коммутатор, для включения делителя только в моменты замера входного напряжения. Хотя бы на одном полевике. И включать делитель свободным пином на время замера. Но он тоже погрешность в замере даст, имхо. Придется программного компенсировать.
 

eratnik

New member
Измерения напряжения питания для witty cloud. Продолжение. Навеяно замечаниями @pvvx

Дорожку не трогаем. Вооружаемся паяльником и выпаиваем резистор (см. фото красным) и заменяем его на 10кОм, выпаиваем фоторезистор и вместо него вапаиваем резистор 39кОм по синим стрелкам, согласно рисунку. Значение напряжения меряем простым analogRead без всякой инициализации вначале. Значение 1000 соответствует напряжению 4,9 В и линейно меняется вместе с напряжением на Vcc (до стабилизатора).
Возможно номиналы резисторов придется кратно скорректировать для правильной работы в меньшую сторону. Например, 1кОм и 3,9 кОм. Я выбирал значения с учетом минимизации потребления от батареи. В моем случае делитель будет постоянно "жрать" около 90 мкА. Но будет ли при этом правильно работать АЦП, не проверял. При уменьшении сопротивления делителя, ток будет больше.
Я правильно понял, что резистор на 39кОм нужно одной ногой на AMS, а второй на оставшийся контакт от фоторезистора (второй контакт от фоторезистора висит ни к чему не подключен)?
PS использование HT7333-A вместо AMS не лучшая замена для автономного питания или норм?
 

Сергей_Ф

Moderator
Команда форума
@eratnik правильно, на вход AMS или на пин Vin. Вам же входное напряжение мерить надо. Второй вывод на среднюю точку делителя, которая на аналоговый вход идёт. С пустого контакта от фоторезистор можно 3.3в снимать для чего нибудь, но при питании от LiPo там будет от 2.1 до 3.2 в. По HT7333 не подскажу, надо даташит смотреть.
 
Сверху Снизу