Lecture tension sur ESP32 incorrecte

Bonjour à tous.
Cà fait 3 jours que je cherche sans résultat correct :frowning:
J'ai un ESP32 et j'utilise un pont diviseur de tension pour ramener max 15V sur 3.3V
J'ai donc une résistance de 1K et une de 330. La lecture est correct sur un arduino et pas du tout correct sur un ESP32. Les valeurs varient énormément.
Si je vérifie avec un multimètre la tension sur la borne 34, j'ai 1.25V avec une batterie de test à 5V.
à la lecture avec adc1_get_raw(ADC1_CHANNEL_6 et que je converti en tension, il me donne 1.11V à l'entrée de l'ADC :frowning: .
Si j'applique la formule pour convertir en Volt, j'ai +/- 3.85V au lieu de 5,2V .... je deviens fou.
et en plus çà varie entre 3.79 à 3.98.
Je précise bien que le code est correct pour un arduino.
J'ai tout essayé ....avez vous une idée ?
Le but est de surveiller la batterie d'un camping-car et de m'envoyer une alerte si je descends trop bas. ( +/- 11v ) et aussi monitorer diverse choses ( température intérieur, balance pour mesurer la quantité de gaz etc etc )

Merci à vous.
Michel

Bonsoir... et Bienvenue sur ce forum !

la conversion analogique/numérique sur ESP32 a ses particularités (configuration , GPIO) ... et ses points faibles (mauvaise linéarité, dispersion élevée de la tension de référence sur les premiers lots sans donnée de calibartion en ROM)

Ce tutoriel fait assez bien le tour de la question : https://randomnerdtutorials.com/esp32-adc-analog-read-arduino-ide/

Idem là : https://microcontrollerslab.com/adc-esp32-measuring-voltage-example/

échanges ici : https://github.com/espressif/arduino-esp32/issues/92

(j'apprécie l'ESP32, c'est devenu ma plateforme de base à tout faire mais pense que son ADC est son module 'râté', sans correction dans le code c'est peu utilisable . En principe l'ADC est amélioré sur les nouvelles variantes d'ESP32 ( -S2, -C3...)

Bonjour,

En effet, c'est vraiment particulier. Pourquoi avoir négligé ces ports ? enfin....
Je vais regarder les liens donnés afin de le recalibrer :-/
Si jamais vous avez un code tout fait sous la main ...

Bien à vous
Michel

Bonjour

Non pas de code , j'utilise des capteurs numériques
je n'utilise une entrée Analogique que pour surveiller un seuil de décharge d'accu LiFePo4 non protégé et mettre l'ESP32 en veille profonde permanente quand ce seuil est franchi
Une correction triviale en un point suffit dans ce cas .

Bonne continuation,
Alain

Bonjour,
Bon ben rien à faire :-/ pour une batterie de 5v, j'obtiens 3.1V maximun mesuré :frowning:

Impossible de mesurer une tension correcte.
J'ai fait un pont diviseur de tension avec 2 résistances, R1 = 100k et R2 = 10K. cela me donne un bonne marge ( jusque 36.3v ).

Lorsque je veux mesurer une batterie de 5V, il me donne 3.1V .... rien à faire.
Est ce que qqun à déjà fait le test pour mesurer des batteries ?

Bav
Michel

Bonjour
L'adc sur esp32 anciens modeles est une plaie, perso j'ai abandonné l'ADC direct avec .
je n'ai pas encore testé les "nouveaux"

Voir éventuellement à utiliser un LUT (Look Up Table) (c'est lourd)

un exemple

Moi, je trouve que tout ce qui est réalisé logiciellement au lieu de matériellement par les ESP est une plaie.

Pour rappel : la base d'un ESP est un micro Xtensia, actuellement propriété de Cadence.
C'est une base de micro qui est "à terminer" par le client (Espressif).
Le client transmet ses fichiers à Cadence. Cadence incorpore ces fichiers aux siens et fait fabriquer la puce.

Sur cette base de micro il n'y a que l'essentiel, c'est au client (Espressif) d'ajouter des fonctions comme l'interface série, l'I2C, le SPI ou l'ADC.
Espressif a le choix de faire ces fonctions par programmation ou d'acheter à Cadence des blocs matériels.
Espressif a choisi la solution logicielle parce que la plus économique mais absolument pas la plus performante.

D'autres concepteurs de micros : Atmel/Microchip, STmicro, Texas, Nxp, etc, maîtrisent toute la chaîne de développement et possèdent des bibliothèques matérielles en portefeuille.

Mais ils n'ont pas les options WiFi et bluetooth des ESP.........au prix des ESP.

Bonjour,
J'ai commadé un ESP32-S Espressif,
Celui que j'ai c'est un AZ-Delivery Vroom 32 ....
Sinon, vous me conseillez quoi pour faire une lecture d'une tension ( volt ) ? un module externe puis renvoyer sur l'ESP en Digital ? genre ads1115 ?

Michel

en I²C
ADS1115 (16 bits) ou MCP3221 (12 bits) sont exploitables avec l'esp32

Un ADC externe sera supérieur à un ADC interne à la puce du microcontrôleur.

L'ADC du microcontrôleur tu ne le choisis pas, tu prends ce qu'il y a dans la boîte.

Avec un ADC externe tu as le choix entre différents modèles et différentes possibilités.
Je dirai qu'il faut prendre le modèle légèrement supérieur à tes besoins, inutile de chercher une bête de course si tu n'as pas besoin de ses performances.

Et la difficulté est toujours la même : savoir définir ses besoins.

  • gamme de tension à mesurer
  • pas minimal de mesure -> plus le nombre de bit est grand plus le pas de mesure est petit.
  • linéarité de la mesure : assez complexe, lecture quasi indispensable des explications des fiches de données (datasheet) : les graphiques facilitent la compréhension de la notion de linéarité.
  • fréquence d’échantillonnage (nombre de mesures max par seconde). Notion importante si par exemple tu veux numériser des signaux audios.

Avec toujours en tête qu'il ne faut pas prendre un produit trop raz les pâquerettes, mais qu'un produit "super maxi dément" sera plus délicat à utiliser.

bonsoir,
Ce petit module serait juste pour vérifier la tension de la batterie Cellule d'un camping-car, et m'envoyer un sms pour me prévenir si la tension est trop basse. du genre 11,5v pour la batterie au plomb. La vérification doit se faire 2x par jour et remplir une table sur un site. Puis mettre l'ESP32 en Deep Sleep mode jusqu'au lendemain. tant qu'a faire, vérifier la température et humidité à l'intérieur. Par exemple m'envoyer un sms si la température descend en dessous de 5°, comme çà j'ai le temps d'aller vider les canalisations , chauffe eau etc.

Vraiment tout con à faire avec un Arduino et esp8266 .... mais avec le ESP32 c'est la poisse.
J'ai pris le ESP32 justement parcequ'il ne consomme rien en DEEP SLEEP Mode.

Michel

Bonsoir

Ce petit module serait juste pour vérifier la tension de la batterie Cellule d'un camping-car, et m'envoyer un sms pour me prévenir si la tension est trop basse. du genre 11,5v pour la batterie au plomb

Dans ce cas pourquoi ne pas chercher à compenser l'erreur de mesure (ADC interne) dans ton code ?
Compensation en un point correspndant au seuil de tension chiosi. (=ajouter ou retrancher une constante correspondant à l'erreur constatée pout ton exemplaire d'ESP32)

Pour cette application particulière (détection de seuil) il me semble qu'avec une petite correction adaptée le convertisseur analogique numérique des ESP32 peut remplir la fonction attendue

Pour réduire le bruit faire la mesure de tension au réveil avant d'activer le WiFi . (WiFi.begin)
Le WiFi engendre dans la puce des salves de courant source de bruit pour l'ADC.
Avec en plus un condensateur sur le pont diviseur ça devrait pouvoir passer

Bonjour @michelduyn ,
En attendant que tu puisses résoudre en esp32 + ADC-i2c ton petit souci de surveillance de batterie de cc.. (rien ne vaut le fun et la satisfaction de développer sa propre solution...).

Voilà comment je fais pour mon cc:
Il te faut:
-un petit traqueur gps Chinois pas cher avec avertisseur de niveau de batterie faible (par sms bien sûr),
-une carte sim,
-un petit chargeur 12/USB pour ton gps,
-un petit boîtier de protection anti-décharge de batterie que tu trouveras à carrouf ou norauto... C'est un petit circuit qui se branche entre une glacière électrique et la batterie de voiture sur laquelle la glacière est branchée...

Et tu mets tout ça en 'série':
Batterie de cellule/circuit de protection/chargeur usb/gps.

Quand ta batterie de cellule attendra un niveau trop faible, le boîtier de protection coupera l'alimentation du chargeur gps, qui se déchargera bien plus vite que ta batterie de cellule cc, et le gps t'enverra des sms d'alerte de batterie (gps) basse...

Et se système te permet aussi de traquer ton cc, être averti si il bouge, si il roule trop vite, sort d'un périmètre défini, etc..

Bonsoir.
C'est ce que j'ai fait pour le moment :slight_smile: çà tourne depuis +/- 1 an comme çà. Avec un TKMARS GPS Tracker.
mais j'aimerais tout de même en faire un qui analyse la décharge.

Michel

Rebonjour à tous.
Bon, j'ai reçu un autre ESP32 , malheureusement même puce : vroom 32 ... et même problème :frowning:
J'ai testé de mesurer la tension sur le 3v3, et j'obtiens 1,87v :frowning:
2 résistances : 100K et 10K pour le pont diviseur de tension.
Est ce que qqun de vous aurait la possibilité de tester ?

Bonsoir

Une petite image pour différencier puce (1, Bleu), module (2,vert) et carte (3, Rouge)
puce-module-carte

Tous les modules WROOM32 d'Espressif contiennent la même puce ESP32-D0WDQ6

Data Sheet de ce module WROOM32

Ton résultat est très surprenant, je pense pouvoir faire un tets d'ici la fin de semaine avec une carte différente utilisant le même module WROOM32 et donc la même version de puce ESP32 sous le capot métallique.

SVP : donnes le lien de la carte que tu utilses, on en voit plusieurs chez AZ Delivery

pour que l'on parle bien de la même chose, le 3.3v que tu cherche à mesurer est pris/piqué où exactement ?
le pont 100/10 est connecté comment ?
cablage exact (photos) ?

Je devrais voir un peu de temps demain pour faire un test
poste ton .ino de contrôle

+1
Je me demande si il n'y a pas là un problème de mode commun dû au câblage

premier module : https://www.amazon.fr/gp/product/B07Z83MF5W/ref=ppx_yo_dt_b_asin_image_o02_s00?ie=UTF8&psc=1

2eme : https://www.amazon.fr/gp/product/B07XH45MWW/ref=ppx_yo_dt_b_asin_title_o01_s00?ie=UTF8&th=1

mais les images ne correspondent pas.
Je vais essayer de faire un schéma ce soir ou demain.

OK , les deux cartes ressemblent à des clones de cartes DEVKIT C dotées de modules WROOM32
Une anomalie d'une telle ampleur n'a encore jamais été signalée pour ce matériel