INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
ESP32 Batteriestatus
12.04.2019, 15:26
Beitrag #1
ESP32 Batteriestatus
Hallo!

Hat von euch schon jemand einen ESP32 im Batteriebetrieb laufen, wo ihr den Batteriestatus abfragt?

Ich wollte wissen wie dies funktioniert. Grunsätzlich weiß ich, dass es per AnalogRead über den A0 Pin auslesbar ist. Aber Hardwaretechnisch verbinde ich welchen Resistor mit welchem Widerstandswert mit was?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.04.2019, 20:16 (Dieser Beitrag wurde zuletzt bearbeitet: 12.04.2019 20:55 von uk1408.)
Beitrag #2
RE: ESP32 Batteriestatus
(12.04.2019 15:26)Aredon schrieb:  Aber Hardwaretechnisch verbinde ich welchen Resistor mit welchem Widerstandswert mit was?

Du machst einen Spannungsteiler z.B. 100k zu 10k. Also von Vcc zum analogen Input 100k und vom analogen Input zu GND 10k. Der analoge Input verträgt (soweit ich weiß) max. 1 V, somit kannst du bis zu 10 V messen.
Den mit analogRead gemessenen Wert musst dann mit (100 + 10) / 10 ((R1 + R2) /R2) multiplizieren dann hast den richtigen Wert.

Viele Grüße

Uwe
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.04.2019, 20:20
Beitrag #3
RE: ESP32 Batteriestatus
Hallo,

(12.04.2019 15:26)Aredon schrieb:  Hat von euch schon jemand einen ESP32 im Batteriebetrieb laufen, wo ihr den Batteriestatus abfragt?

Ich wollte wissen wie dies funktioniert. Grunsätzlich weiß ich, dass es per AnalogRead über den A0 Pin auslesbar ist. Aber Hardwaretechnisch verbinde ich welchen Resistor mit welchem Widerstandswert mit was?

Ich mache es mir jetzt mal bequem:
lade Dir den Schaltplan des Odroid Go runter, zeimlich weit unten bei Documentations:
https://wiki.odroid.com/odroid_go/odroid_go

Init und Abfrage:
Code:
...
#include <esp_adc_cal.h>
...
static esp_adc_cal_characteristics_t adc_chars;
double readBatteryVoltage(void);
void showBatteryVoltage(uint16_t xpos, uint16_t ypos, double voltage, uint16_t farbe);
...
setup()
...
  adc1_config_width(ADC_WIDTH_BIT_12);
  adc1_config_channel_atten(ADC1_CHANNEL_0, ADC_ATTEN_DB_11);
  esp_adc_cal_characterize(ADC_UNIT_1, ADC_ATTEN_DB_11, ADC_WIDTH_BIT_12, DEFAULT_VREF, &adc_chars);

Auslesen dann mit readBatteryVoltage()

Code:
double readBatteryVoltage()
{
  uint32_t adc_reading = 0;
  for (int i = 0; i < NO_OF_SAMPLES; i++)
  {
    adc_reading += adc1_get_raw((adc1_channel_t) ADC1_CHANNEL_0);
  }
  adc_reading /= NO_OF_SAMPLES;

  return (double) esp_adc_cal_raw_to_voltage(adc_reading, &adc_chars) * RESISTANCE_NUM / 1000;
}


Wenn ich jetzt keinen Fehler beim Kopieren gemacht habe...

Gruß aus Berlin
Michael
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.04.2019, 22:36 (Dieser Beitrag wurde zuletzt bearbeitet: 12.04.2019 22:40 von Aredon.)
Beitrag #4
RE: ESP32 Batteriestatus
(12.04.2019 20:16)uk1408 schrieb:  Du machst einen Spannungsteiler z.B. 100k zu 10k. Also von Vcc zum analogen Input 100k und vom analogen Input zu GND 10k. Der analoge Input verträgt (soweit ich weiß) max. 1 V, somit kannst du bis zu 10 V messen.
Den mit analogRead gemessenen Wert musst dann mit (100 + 10) / 10 ((R1 + R2) /R2) multiplizieren dann hast den richtigen Wert.

Ich habe dein Beispiel mal nachgebaut und getestet und komme zu dem Entschluss, dass mir der ESP über 3000 Volt berechnet, was nicht sein kann Huh

Ich muss noch zugeben, ich habe mit einem 100k und einem 4.7k Resistor gearbeitet, denke aber das sollte keine Probleme gemacht haben, habe auch die Formel an den Resistorwert angepasst. Sad

Habe es (nur dass es kein D1 Mini ist Big Grin ) nach diesem Plan nachgemacht: [Bild: file.php?id=588&amp;sid=2db42e3d68d4...4dd5b79b14]

(12.04.2019 20:20)amithlon schrieb:  Wenn ich jetzt keinen Fehler beim Kopieren gemacht habe...

Tongue Es haben ein paar Konstanten gefehlt, aber halb so schlimm - gleich erkannt Wink
Problem hier, das Messergebnis schwankt extrem! Was kann das sein?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.04.2019, 06:40
Beitrag #5
RE: ESP32 Batteriestatus
(12.04.2019 22:36)Aredon schrieb:  Ich muss noch zugeben, ich habe mit einem 100k und einem 4.7k Resistor gearbeitet, denke aber das sollte keine Probleme gemacht haben, habe auch die Formel an den Resistorwert angepasst. Sad

Tongue Es haben ein paar Konstanten gefehlt, aber halb so schlimm - gleich erkannt Wink
Problem hier, das Messergebnis schwankt extrem! Was kann das sein?

In deinem Plan hast 10k zu 4,7k. Muss aber tatsächlich relativ egal sein.
Was heist extrem? Wie versorgst du den ESP? Meine Messung sieht grundsätzlich so aus:
Code:
float  Uin  = 0;
  int    i    = 0;

  for ( i = 0; i < 10; i++)
  {
    Uin += analogRead(Spannung);
  }

  Uin = (Uin / i) / (1024.0);
  Uin = Uin * (67.110 + 9.980) / 9.98;                             // R1 + R2 / R2 Spannungsteiler
Spannung ist der PORT A0, die Widerstandswerte sind so krumm weil ich die gemessen habe. Und du solltest immer einen Mittelwert bilden, ich nehme auch mal 0 oder 100 Messungen je nachdem wie schnell und wie genau ich es brauche. Aber wenn alle Spannungen stabil sind schwankt da eigentlich nichts....

Viele Grüße

Uwe
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.04.2019, 07:54
Beitrag #6
RE: ESP32 Batteriestatus
Hallo,

(12.04.2019 22:36)Aredon schrieb:  
(12.04.2019 20:20)amithlon schrieb:  Wenn ich jetzt keinen Fehler beim Kopieren gemacht habe...

Tongue Es haben ein paar Konstanten gefehlt, aber halb so schlimm - gleich erkannt Wink
Problem hier, das Messergebnis schwankt extrem! Was kann das sein?

ok, zur Erklärung für meinen "Schnellschuß": die Routiene nutze ich so auf einem Odroid Go in komplett eigener Software. Der Source ist auch aus dem Arduino-Odroid Go Paket "ausgeliehen".
Ich messe da nicht allzuoft und Ausreißer und sonderliche Abweichungen sind mir bisher zumindest nicht aufgefallen.

Das sind die fehlenden Defines:
// Batterie
#define RESISTANCE_NUM 2
#define DEFAULT_VREF 1100
#define NO_OF_SAMPLES 64

Sie benutzen ja GPIO12, also ADC2, der spinnt bei Nutzung von WLAN, ist mir garnicht aufgefallen.
https://docs.espressif.com/projects/esp-...s/adc.html
Bei meiner Software, wo ich das eingebaut habe, nutze ich garkein WLAN...
Der Odroid Go ist da nur bequemes Testboard weil Display und Tasten usw. schon da sind.
Du kannst es ja mal auf ADC1 umbauen, GPIO 32...39.
Die "Original-Anwendung" des Odroid Go ist ja Kosnolen-Emulator, da ist WLAN auch aus und keine Ahnung, ob das dann je jemand getestet hat...

Gruß aus Berlin
Michael
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.04.2019, 19:25
Beitrag #7
RE: ESP32 Batteriestatus
(13.04.2019 06:40)uk1408 schrieb:  In deinem Plan hast 10k zu 4,7k. Muss aber tatsächlich relativ egal sein.
Was heist extrem? Wie versorgst du den ESP? Meine Messung sieht grundsätzlich so aus:
Code:
float  Uin  = 0;
  int    i    = 0;

  for ( i = 0; i < 10; i++)
  {
    Uin += analogRead(Spannung);
  }

  Uin = (Uin / i) / (1024.0);
  Uin = Uin * (67.110 + 9.980) / 9.98;                             // R1 + R2 / R2 Spannungsteiler
Spannung ist der PORT A0, die Widerstandswerte sind so krumm weil ich die gemessen habe. Und du solltest immer einen Mittelwert bilden, ich nehme auch mal 0 oder 100 Messungen je nachdem wie schnell und wie genau ich es brauche. Aber wenn alle Spannungen stabil sind schwankt da eigentlich nichts....

So... ich habe jetzt einen komplett neuen Sketch mit deinem Code gemacht um zu verhindern, dass "Fremdeinwirkung" besteht. Die Werte 67.110 und 9.98 habe ich an meine 100 und 4.7 angepasst, also mit den 1024 bekomme ich eine 0 Komma-Zahl raus. Wenn ich die 1024 beim berechnen mit 100 tausche komm ich schon in etwa mit den Volt hin. Schwankungen sind leider trotzdem. Das kam nach einer Weile messen dabei raus:

Code:
3.43
3.32
3.14
3.97
4.03
3.70
3.88
4.01
2.87
6.17
5.15
4.14
4.52
4.17
6.95
4.19
3.07
3.88
4.17
3.61
4.79
3.30
3.32
3.76
3.85
3.07
3.94
2.92
2.94
3.23

Ich schätze mal, du meintest davon den Mittelwert? Zurzeit zum testen hängt keine Batterie, sondern das USB-Datenkabel dran, wobei ich die 3.3v direkt vom 3.3v Pin vom Chip beziehe. Sollten also keine Schwankungen auftreten, oder bin ich da gerade komplett falsch unterwegs?

(12.04.2019 20:20)amithlon schrieb:  Sie benutzen ja GPIO12, also ADC2, der spinnt bei Nutzung von WLAN, ist mir garnicht aufgefallen.
https://docs.espressif.com/projects/esp-...s/adc.html
Bei meiner Software, wo ich das eingebaut habe, nutze ich garkein WLAN...

Also ich benutze zurzeit auch kein WLAN zum testen, später dann schon. Aber wie kommst du auf ADC2? Im Code steht überall ADC1_CHANNEL_0 also passt es ja.

Komischerweise bekomme ich jetzt den richtigen Wert... Zwar auch nur, weil ich beim return der funktion readBatteryVoltage beim berechnen von 1000 auf 100 runter bin, aber ich habe zumindest eine etwas stabilere Lösung siehe:

Code:
3.42
3.38
3.44
3.40
3.42
3.38
3.42
3.40
3.40
3.40
3.42
3.38
3.38
3.42
3.42
3.40
3.44
3.44
3.38
3.42

und diese paar Kommastellen sind (denke ich mal) normale Schwankungen. Was meint ihr?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.04.2019, 20:20
Beitrag #8
RE: ESP32 Batteriestatus
Zu den Faktoren 1024 oder 100 fällt mir jetzt nichts mehr ein, meines läuft so am WEMOS D1 mini. Was hast du für eine Hardware? Das mit den Schwankungen kannst wie gesagt noch ausmitteln, aber nimm mal zur Versorgung des ESP oder was immer du hast NICHT USB sondern eine stabile Spannung aus einem Netzteil oder einem Step-Down-Wandler.

Viele Grüße

Uwe
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  ESP32 Analog Wert am Spannungsteiler ungenau vs Arduino Analog Wert Nick2245 1 149 16.06.2019 09:01
Letzter Beitrag: Fips
  ESP32: U8x8 und SoftwareSerial gleichzeitig markusw129 2 158 15.06.2019 12:06
Letzter Beitrag: markusw129
  ESP32 Webserver download mehrerer Dateien Eisvogel 1 209 11.06.2019 10:42
Letzter Beitrag: Tommy56
  Apple II Projekt Umzug von uno -> ESP32 / ESP8266 stevie72 22 1.375 30.05.2019 08:30
Letzter Beitrag: amithlon
  Boot-Schleife beim ESP32 - wie Lösbar? tho.schmidt 9 702 28.05.2019 20:24
Letzter Beitrag: Tommy56
Question ESP32 Daten per Bluetooth auf AppInventor App anzeigen mamo1234 2 441 23.05.2019 14:10
Letzter Beitrag: mamo1234
  ESP32 verbindet nicht mehr mit meiner Fritz Box spok1 12 985 21.05.2019 11:22
Letzter Beitrag: Hilgi
  MySQL mit ESP32 ohne PHP Waschbärbauch 8 1.267 02.05.2019 16:39
Letzter Beitrag: Tommy56
  ESP32 mittels Keypad-Interrupt aus Deepsleep aufwachen lassen jalu4601 1 576 19.04.2019 20:13
Letzter Beitrag: jalu4601
  ESP32 BIN von Arduino aufspielen Positiv 7 999 14.04.2019 18:13
Letzter Beitrag: Positiv

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste