Spannungsmessung ESP32 ungenau?

Hallo,

Ich habe ein Sensor, der über ein Batteriepack versorgt wird (+12V), daran hängt ein ESP32.

Ich möchte nun über den ADC Eingang, die Spannung des Batteriepacks messen, ich habe einen Spannungsteiler ( R1= 100k und R2 = 16k )

Meine ADC init:

  adc1_config_width(ADC_WIDTH_12Bit);
  adc1_config_channel_atten(ADC1_CHANNEL_0, ADC_ATTEN_DB_11);
  adc1_config_channel_atten(ADC1_CHANNEL_3, ADC_ATTEN_DB_11);

Mein Code:

    float R1 = 100000.0;
    float R2 = 16000.0;

    long sum = 0;
    for (int i = 0; i < 500; i++)
    {
      sum += adc1_get_voltage(ADC1_CHANNEL_0);
      delayMicroseconds(500);
    }

    voltage = sum / (float)500;
    voltage = (voltage * 3.3) / 4095.0;
    voltage = voltage / (R2 / (R1 + R2));

    Serial.println(voltage);

Nun gibt mir die Console 9.81V aus, messe ich nun die Batterie, ist diese mit 11.14V geladen.

Woran kann es denn liegen, das die Messung so ungenau ist?

Vielleicht kann mir jemand helfen, vielen Dank!

4095 nicht 4095,0
haste wirklich 3.3 V Versorgungsspannung?

Naja hast du einmal nachgemessen was die Widerstände für Werte haben?

Je nachdem was das für Widerstände sind haben die bis zu 5% Toleranz.

Hier kann man nachlesen, dass die ADCs des ESP32 am unteren und oberen Ende nicht linear messen

Es wird möglicherweise genauer wenn du mit der auftretenden Maximalspannung nicht bei 3.3V landest sondern bei 3.0V

Wenn die Messung noch genauer werden soll dann gibt es diese 4-Kanal ADC-Wandler für wenig Geld

16-Bit Auflösung heißt nicht unbedingt das das Ding auf 0,05 Millivolt genau misst.
vgs

voltage ist auch ein float?

Diese Nachfrage ist ein schönes Beispiel dafür warum den kompletten Sketch posten fast immer besser ist.
vgs

Hmmmm? Problem ist doch schon lange gelöst. Liegt an dem nicht linearen ADC des ESP32.

Dazu reicht doch die Funktion zu posten völlig aus?

Also wann hast du denn den Thread als gelöst (solved) markiert?
Aus der Tatsache, dass ich den "gelöst Hinweis" erst eben in der Liste stehen hatte schlussfolgere ich dass du das auch erst heute markiert hast.
Es stand weder etwas im Titel [gelöst] noch hattest du es früher markiert.
Wie soll man aus dem Ausbleiben jeglicher Antwort schlussfolgern können dass das Problem gelöst ist?
vgs

Hab den heute Morgen bereits als "gelöst" markiert, war im übrigen deine Antwort :wink:

Um es genauer zu beantworten, die SMD Widerstände auf meiner Platine haben 100K %1(Genau gemessen 100.48K und 16K gemessen: 16.02K)

Heute morgen, habe ich vom ADC Eingang eine Strippe zu einem STM32 Board gezogen und den gleichen Code verwendet. Die Messung war auf 0.11V genau.

Details:

Am ADC haben bei 12,7V genau 1,732V angelegen. Der ESP32 zeigte mit meinem Code 10,98V an, mein STM32 mit selbigem Code 12,61V...

Klar könnte man jetzt sagen, wenn ich den 16K Widerstand gegen einen 30K Widerstand tausche, liegen am ADC des ESP32 fast 3V an. Aber ich konnte bei meinen Tests heute nicht herausfinden, aber welcher "Untergrenze" der ESP32 nicht mehr vernünftig misst. Nun kennt Expressif das Problem und man sollte der Schaltung einen Lade-Kondensator von max. 100nF spendieren. Habe ich getan, ohne erfolg. Messung war um 0.4V besser, aber immer noch schlechter.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.