#1 2021-11-23 15:55:04

BigBlackOwl
Учасник
З КИЕВ
Зареєстрований: 2020-03-14
Повідомлень: 12

Как считывать заряд акб на ESP32

esp32-7.pngУ меня ESP wroom 32 dev kit1 http://developer.alexanderklimov.ru/arduino/esp32/
К пину 36 (VP) подключил 1н 18650 4,22В через делитель напряжения.
Показывает чушь: заряд 100% и заряд акб 4,2В.
Ок, поставил акб с зарядом 3,45В, все равно, показывает то же самое, как только не менял значения, ничего не помогает. Пины тоже пробовал разные 33-36.

#include <driver/adc.h>

float battery_read()
{
    //read battery voltage per %
    long sum = 0;                  // sum of samples taken
    float voltage = 0.0;           // calculated voltage
    float output = 0.0;            //output value
    const float battery_max = 4.22; //maximum voltage of battery
    const float battery_min = 3.0; //minimum voltage of battery before shutdown

    float R1 = 50190.0; // resistance of R1 (100K)
    float R2 = 16730.0;  // resistance of R2 (10K)

    for (int i = 0; i < 500; i++)
    {
        sum += adc1_get_voltage(ADC1_CHANNEL_0);
        delayMicroseconds(1000);
    }
    // calculate the voltage
    voltage = sum / (float)500;
    voltage = (voltage * 1.1) / 4096.0; //for internal 1.1v reference
    // use if added divider circuit
    voltage = voltage / (R2/(R1+R2));
    //round value by two precision
    voltage = roundf(voltage * 100) / 100;
    Serial.print("voltage: ");
    Serial.println(voltage, 2);
    output = ((voltage - battery_min) / (battery_max - battery_min)) * 100;
    if (output < 100)
        return output;
    else
        return 100.0f;
}

void setup()
{
    adc1_config_width(ADC_WIDTH_12Bit);
    adc1_config_channel_atten(ADC1_CHANNEL_0, ADC_ATTEN_0db); //set reference voltage to internal
    Serial.begin(115200);
}

void loop()
{
    Serial.print("Battery Level: ");
    Serial.println(battery_read(), 2);
    delay(1000);
}

Остання редакція BigBlackOwl (2021-11-23 17:11:50)

Неактивний

#2 2021-11-23 17:13:18

BigBlackOwl
Учасник
З КИЕВ
Зареєстрований: 2020-03-14
Повідомлень: 12

Re: Как считывать заряд акб на ESP32

Вот плата

Неактивний

#3 2021-11-23 20:32:25

BigBlackOwl
Учасник
З КИЕВ
Зареєстрований: 2020-03-14
Повідомлень: 12

Re: Как считывать заряд акб на ESP32

esp32-7.pngUntitled-Sketch_bb.png

Неактивний

#4 2021-11-23 21:13:42

г0сть
Гість

Re: Как считывать заряд акб на ESP32

При ваших номиналах делителя попробуйте ADC_ATTEN_DB_2_5
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/adc.html#adc-calibration

#5 2021-11-23 23:47:17

renoshnik
Учасник
Зареєстрований: 2017-04-03
Повідомлень: 1,025

Re: Как считывать заряд акб на ESP32

А вас не смущает "for internal 1.1v reference" ?

Остання редакція renoshnik (2021-11-23 23:52:44)

Неактивний

#6 2021-11-25 13:33:51

BigBlackOwl
Учасник
З КИЕВ
Зареєстрований: 2020-03-14
Повідомлень: 12

Re: Как считывать заряд акб на ESP32

Решено. Нашел вариант который работает. добавил пару фильтров и готово. Значения прыгают в диапазоне 0,02В.

adc.attach(33); /// пин

 #include "Arduino.h"
 #include <ESP32AnalogRead.h>
 ESP32AnalogRead adc;
 void setup()
 {
     adc.attach(33);
     Serial.begin(115200);
 }
 
 void loop()
 {
     delay(50);
     Serial.println("Voltage = "+String(adc.readVoltage()));
 }

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму