Как использовать аналоговый вывод ESP12F для считывания напряжения батареи?

Я использую микроконтроллер ESP12F, работающий от батареи 3,7 В.

Я хочу получить фактическую информацию о состоянии заряда аккумулятора. Чтобы знать, когда аккумулятор необходимо подзарядить.

Чтобы добиться этого, я создал падение напряжения от 3,7 В до 0,94 В (потому что я прочитал, что вывод АЦП esp12f работает в диапазоне от 0 В до 1 В) с помощью резисторов 3 кОм и 1 кОм и подключил V out падения напряжения к выводу АЦП. Но аналоговое считывание постоянно 1024 и не меняется. Когда я понижаю напряжение до 0,54 В, аналоговое считывание снова 1024. Я попробовал со вторым esp12f, и результат тот же. Когда я пытаюсь считать аналоговое значение с разных компонентов, таких как датчик температуры, все кажется в порядке - аналоговое значение составляет ~500, а при повышении температуры значение увеличивается до ~650. Я следовал этой статье о том, как считать напряжение батареи, но безуспешно. Я попробовал сделать ту же задачу с Arduino Uno вместо esp12f, и все работает отлично.

Итак, основываясь на этих тестах и наблюдениях, я думаю, что нет проблем со схемой, потому что на Arduino Uno все работает нормально, нет проблем с выводом АЦП esp12f, потому что с датчиком температуры аналоговое значение является точным.

Подведем итог: Моя проблема в том, что аналоговое значение от батареи постоянно равно 1024, и я не могу получить фактическую информацию об оставшемся напряжении батареи через esp12f.

На изображении ниже показано, как выглядит моя схема:

А это код того, как я считываю аналоговое значение:

const int analogPin = A0;
void setup()
{
    Serial.begin(115200);
}

void loop()
{
    int sensorValue = analogRead(analogPin);
    Serial.print("sensorValue: ");
    Serial.print(sensorValue);

    delay(1000);
}

, 👍-1

Обсуждение

Сначала несколько замечаний не по теме: 1. Обычно вы не можете сделать вывод о заряде аккумуляторной батареи по ее напряжению. Вот почему многие устройства управления батареями измеряют ток на входе и выходе батареи. 2. Суммарное сопротивление довольно низкое и, предположительно, будет разряжать вашу батарею больше, чем остальную часть вашей схемы. 3. Вы можете захотеть добавить конденсатор параллельно низковольтному резистору, чтобы поддерживать напряжение стабильным, пока АЦП делает выборку., @the busybee

Вы проверили напряжение на входе АЦП мультиметром? Убедитесь, что ваш делитель напряжения действительно работает правильно. Вы можете использовать другие источники напряжения, такие как регулируемый источник питания, чтобы изменять входное напряжение. -- Вы проверили, что выбранный пин одинаков в оборудовании и программном обеспечении?, @the busybee

Очень странно, что вы измеренное напряжение на A0 составляет 0,54 вольта, а показания все равно составляют 1024. Какие показания вы получите, если заземлите A0, и какие — если оставите его в неподключенном состоянии?, @Lee-xp

Максимальное рабочее напряжение ESP8266 составляет 3,6 В (см. техническое описание), вы не можете подключить 3,7 В напрямую к ESP8266, не говоря уже о том, что при полностью заряженной батарее напряжение может подняться до 4,2 В., @hcheung

@hcheung, с регулятором напряжения, который понижает напряжение до 3,3 В, результат с показаниями тот же. Я измерил напряжение батареи мультиметром, и оно составило 3,8 В., @stanimirsp

@thebusybee, Чтобы измерить напряжение, которое поступает на АЦП с помощью мультиметра, я поместил провод «+» мультиметра в начало резистора сопротивлением 3 кОм, а «-» мультиметра между двумя резисторами, и выходное напряжение составило 0,94 В., @stanimirsp

@Lee-xp, когда A0 подключен к земле, показания равны 0, а когда я оставляю его плавающим, показания снова равны 1024. Исходя из этого, возможно ли, что вывод A0 не получает никакого напряжения, когда подключен к V out делителя напряжения? Но это будет странно, потому что я измерил мультиметром значение V out делителя напряжения, и оно показывает 0,97 В., @stanimirsp

Поскольку здесь, похоже, ничего не имеет смысла, есть ли вероятность, что вы используете что-то под названием _VCC build. По-видимому, '_VCC builds для ESP8266 будет внутренне подключать аналоговый порт к выводу VCC ESP', хотя в таком случае выход не должен застрять на 1024 - но это мысль., @Lee-xp

Что произойдет, если заменить два резистора потенциометром, скажем, 10k? Тогда вы могли бы считать напряжение на штырьке, когда он заземлен (должен быть равен нулю), а затем медленно поднять его. Кажется маловероятным, что показания внезапно подскочат с 0 до 1024. Но если это произойдет, штырь ведет себя как цифровой штырь., @Lee-xp

Итак, вы измерили 0,94 В на резисторе 3 кОм? Это не то напряжение, которое видит MCU. Он видит напряжение на резисторе 1 кОм: 3,8 В - 0,94 В = 2,86 В... -- Пожалуйста, измерьте напряжение между входом АЦП и GND. Это то, что преобразует MCU., @the busybee

@thebusybee делает хорошее замечание. И это означает, что ваш резистор 1 кОм на самом деле имеет номинал около 10 кОм. Очень легко перепутать красную полосу с оранжевой на корпусе резистора. Это ведь должно быть решением?, @Lee-xp

@thebusybee, вы были правы! Я поменял резисторы местами: 1 кОм — первый, 3 кОм — второй. Я измерил напряжение между выводом АЦП и GND, и теперь оно равно 0,94 В. Аналоговое значение, которое я сейчас считываю, составляет около ~940. Мне нужно вернуться и почитать больше о делителях напряжения, потому что это была моя глупая ошибка. Моими следующими шагами будут добавление резисторов с большим сопротивлением, чтобы батарея не разряжалась так быстро, и попытка добавить транзистор, который будет включать делитель напряжения только тогда, когда я захочу измерить напряжение батареи. Большое спасибо и thebusybee, и Lee-xp., @stanimirsp


1 ответ


Лучший ответ:

1

Как вы подтверждаете в комментарии, вы поменяли местами резисторы. Поэтому на вход АЦП подавалось слишком высокое напряжение, и АЦП всегда возвращал максимальное значение.

С помощью этой принципиальной схемы мы можем рассчитать приблизительное напряжение:

схема

Вы использовали R1 = 1 кОм и R2 = 3 кОм, это дает V_ADC = 3,7 В * R2 / (R1 + R2) = 3,7 В * 3 кОм / (1 кОм + 3 кОм) = около 2,8 В.

При правильных значениях R1 = 3 кОм и R2 = 1 кОм V_ADC = 3,7 В * R2 / (R1 + R2) = 3,7 В * 1 кОм / (3 кОм + 1 кОм) = около 0,9 В.

,