Essais entrée analogique

Bonjour,
plateforme
carte ESP326-E V1.0 de chez DF robot
IDE Arduino sur linux zorin
cablage voir fichier FRITZING
code voir test_potentiometre.ino
metrix pour les mesures

commentaires :
1 : l'alimentation de sortie en 3.3V est mesuré à 3.1V
2 : potentiomètre réglé sur 2.59V stable
3 : atténuation sur ADC_11db (pour alimentation 3.3V)
4 : affichage tension sur moniteur de 2.797V à 2.822V

Question, il est possible de faire mieux ou ce résultat correspond à ce qui peut être attendu ?
cdlt

1 l'alimentation

Bonjour

Pas mieux avec un ESP32 réglé sur 11db :rage:
Forte non linéarité connue en haut de la plage de mesure (> 2V )

Voir par exemple : https://randomnerdtutorials.com/esp32-adc-analog-read-arduino-ide/

N.B Réglés sur 0dB, 5dB ou 6 dB le défaut de linéarité des ESP32 est nettement moindre
(pas sous la main les courbes)

:point_right:Plages de mesure pour 0dB , 2.5dB et 6dB selon la vairiante d'ESP32 utilisée
https://docs.espressif.com/projects/arduino-esp32/en/latest/api/adc.html#analogsetattenuation

Avant de laisser tomber la conversion A/N d'un ESP32 au profit d'un CAN externe, , voire si l'on ne peut pas l'utiliser en 0, 2.5 ou 6dB

Bonjour et merci
je vais faire l'essai en 0, 2.5 ou 6dB et je reviens avec les résultats
s'avez-vous si le site à des difficultés. L'uploading chez moi ne fonctionne pas
cdlt

Bonjour brunous

pour tes divers essais d'ADC avec ESP32 tu utilises bien dans chaque cas la fonction analogReadMillivolts() ?
https://docs.espressif.com/projects/arduino-esp32/en/latest/api/adc.html#analogreadmillivolts

Upload fonctionnel ? test d'upload d'un document pdf sans rapport avec fil , juste pour voir...
HTIT-WSL_V3_Schematic_Diagram.pdf (174,4 Ko)

Des choses intéressantes ici
https://docs.espressif.com/projects/esp-idf/en/release-v4.4/esp32/api-reference/peripherals/adc.html#adc-calibration

La fonction analogReadMillivolts() est décrite comme fournissant une valeur calibrée

L'étude de son code montrerait quel type de traitement est effectué sur la valeur brute
-compensation du décalage de Verf par rapport à la valeur nominale ? (utilisation des donées de calibration 'usine' décrites dans le lien donné ci dessus par fdufnews)
-compensation de non linéarité en bonus ?
https://github.com/espressif/arduino-esp32/blob/master/cores/esp32/esp32-hal-adc.c

Non, je n'utilise pas la fonction "void analogReadResolution(uint8_t bits);" parce que l'alimentation en sortie entre les pins 3.3V et ground sur ESP32-E que j'utilise n'est pas 3.3 V mais de 3.1V.
En utilisant la fonction"mapf" je peux corriger ce point, en paramétrant dans la fonction une étendue d'échelle de "0, 3.1" au lieu de 3.3.

Bonjour @berunous

la conversion analogique numérique des ESP32 n'utilisant pas la tension d'alimentation comme référence je ne vois pas l'intérêt de cette façon de procéder .

La tension de référence est 1,1V +-10% , en amont du convertisseur A/N un atténuateur permet de proposer plusieurs plages de mesure

Bonjour
Pour une mesure metrix de 2.5V en entrée le l' ADC et un atténuation de 6 db le moniteur serie 3.100V 4095 pts
Pour une mesure metrix de 2.2V en entrée le l' ADC et un atténuation de 2_5 db le moniteur serie 3.100V 4095 pts
ces atténuations ne me semblent pas adaptées
Cdlt

La méthode que tu appliques en espérant tenir compte de la valeur effective de la tension d'alimentation est en cause, elle n'est pas du tout adaptée aux ESP32.

Ce qui est valable pour un ATMega328 ne l'est pas pour un ESP32 qui n'utilise jamais la tension d'alimentation comme tension de référence

testes analogReadMillivolts () tu devrais avoir des résultats moins décevants.

HTIT-WSL_V3_Schematic_Diagram.pdf (174,4 Ko).
Bonjour
Peux-tu m'indiquer ou je peux voir le principe de câblage de l'ADC, entre la broche d'entrée analogique jusqu'au pin sur le µp. je ne vois pas de tension de 1.1V sur ces schémas ?
peux-tu m'expliquer cette phrase "Pour l'ESP32, la résolution est comprise entre 9 et 12 et cela modifiera la résolution matérielle de l'ADC. Sinon, la valeur sera décalée."

Peux-tu m'indiquer sur le schéma à quel moment est faite l'atténuation. Et comment elle agit physiquement.

merci, cdlt

Bonjour @berunous

Le schéma d'une carte utilisant un ESP32 ne peut montrer ce qui est interne au microcontrolleur.
L'atténuation , la référence 1,1V et le convertisseur A/N sont à l'intérieur de l'ESP32-S3FN8 (microcontrolleur)

je ne peux donc pas te les montrer sur le schéma d'une carte quelconque.

A la lecture des divers documents d'Espressif voilà comment je représente les choses en interne d'un ESP32-xx:


en vert les paramètres des deux blocs fonctionnels.

N.B chaque entrée analogique a son bloc Atténuation cf analogSetPinAttenuation()

J''imagine que l'atténuation pourrait être un pont diviseur a plusieurs points intermédiaires , comme pour les calibres d'un multimètre.

Concernant la phrase que tu cites je ne sais pas ce qu'Espressif a voulu dire dans sa note :

La résolution de l'ADC est paramétrable de 9 à 12 bits. Donc le résultat se décale lorsqu'on réduit ou augmente la résolution

À noter, comme c'est un ADC à approximations successives la diminution de la résolution permet d'augmenter la vitesse de la conversion.

Résolution, Atténuation.....

Pour les ESP32 produits à partir de 2018 analogReadMillivolts() prend tout en charge pour donner son résultat , il serait dommage de s'en passer

D'autant plus que la fonction utilise les données de calibration enregistrées en fin de fabrication dans une zone de mémoire non effaçable (eFuses) afin de compenser la forte dispersion initiale de Vref (1,1V +/-10% )

Quand je teste des ESP32 de 2017 la fonction analogReadVoltsMLillivolts() plante car elle ne trouve les données de calibration et ne peut en déduire la valeur effective de Vref :
adc_cali: adc_cali_create_scheme_line_fitting(186): default vref didn't set

Bonjour, déjà merci pour le temps que tu passes à nous expliquer les choses.

Hormis le test de la fonction analogReadVoltsMLillivolts() et le fait que le µp n'est pas visible sur la carte, je pense qu'il est sous le capotage. Comment connaitre la date à 2018 ?

Je vais essayer la fonction analogReadVoltsMLillivolts() et je communiquerais les résultats.
La valeur du point est de 1.1 V/4096 pts et non 3.3 V/4096 pts, avec analogReadVoltsMLillivolt, on s'en fout, mais c'est pour comprendre.

Bonjour

expliquer incite à vérifier et mieux comprendre :wink:

Date de fabrication d'un ESP32 sous capot : utiliser esptool comme indiqué ici ,
https://docs.espressif.com/projects/esp-idf/en/v3.3.5/api-reference/peripherals/adc.html#calibration-values
Un peu plus bas que l'image que tu reprends dans ton message

Faute d'ESP32 d'après 2017 , voici ce que donne la fonction analogReadMillivolts() avec un ESP32-S2 (carte Lolin S2 MIni)

mV multimetre 11dB 6dB 2,5dB 0dB
100 107 109 108 110
250 258 259 260 260
500 509 508 512 513
750 762 763 766 767
1000 1015 1016 1020
1250 1262 1271
1500 1520
1750 1773
2000 2024
2250 2277
2500 2536
2750

à gauche la valeur lue sur un multimètre Mastech MAS-345 non élatonné
à droite les valeurs fournies par AnalogReadMilliVolts() pour les diverses valeurs d'atténuation
Résolution par défaut : 11 bits

ok pour une résolution de 12 bits .......et une tension de référence égale à la valeur nominale

Depuis 2018 la tension de référence effective est mesurée en fin de fabrication et mémorisée dans la puce.

esptool avec le paramètre adc_info montre cette valeur ainsi que 2 points de mesure pour chacun des 2 ADC

ADC VRef calibration: 1149mV
ADC readings stored in efuse BLK3:
ADC1 Low reading (150mV): 306
ADC1 High reading (850mV): 3153
ADC2 Low reading (150mV): 389
ADC2 High reading (850mV): 3206

La très mauvaise conversion A/N de la première version des ESP32 a incité Espressif à fournir par la suite pour, chaque exemplaire de puce (probablement chaque wafer) des données correctives en ROM

Salut,

Si nous utilisons la fonction analogReadMilliVolts, fonction qui renvoie une valeur analogique en millivolts (calibrée). (documentation)
cela signifie-t-il que nous entrons une tension sur l'entrée analogique qui est ensuite convertie en points puis reconvertie en millivolt ?
Cdlt