Проблема точности с внутренним АЦП в esp32 - PullRequest
0 голосов
/ 04 июля 2019

Моя схема для измерения батареи прямо сейчас - esp32, nrf24l01 и 18650. Я включил esp32 с 18650 3,6 В номинальной / 4,2 макс. Батареей.Запустите делитель напряжения 100 кОм, 27 кОм, затем 0,893 В в точке измерения.В точке измерения 3,6 В, например, ~ 0,72.

Я использую внутренний АЦП 1,1 В, но почему я получаю только ~ 3 В на мониторе My circuit

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.2; //maximum voltage of battery
    const float battery_min = 3.0; //minimum voltage of battery before shutdown

    float R1 = 100000.0; // resistance of R1 (100K)
    float R2 = 27000.0;  // resistance of R2 (10K)

    for (int i = 0; i < 100; i++)
    {
        sum += adc1_get_voltage(ADC1_CHANNEL_0);
        delayMicroseconds(1000);
    }
    // calculate the voltage*/

    voltage = sum / (float)100;
    Serial.println(voltage);
    voltage = (voltage *1.1) / 2047.0; //for internal 1.1v reference
    // use if added divider circuit
    voltage = voltage / (R2/(R1+R2));

1 Ответ

0 голосов
/ 04 июля 2019

Я предполагаю, что вы используете модуль ESP32-WROOM-32.

Ваш делитель регистра должен быть подключен к выводу SENSOR_VP (VP), если вы хотите читать с канала ADC1_CHANNEL_0, а не к выводу EN.

ADC1_CHANNEL_0 сопоставлен с выводом SENSOR_VP (VP).

Ваш вывод EN должен быть на + 3,3 В постоянного тока через сеть RC (R-> 10k и C-> 0,1 мкФ).Я сомневаюсь, что ваш модуль даже загружается, поскольку он активен на высоком уровне и требует задержки 150 мс, прежде чем подниматься на высокий уровень после каждого сброса.

Убедитесь, что вы выполняете adc1_config_width() и adc1_config_channel_atten() до первого вызова adc1_get_voltage().

...