On entend pire que pendre sur la "qualité" de l'unique convertisseur analogique (ADC) de l'ESP8266. Pour en avoir le coeur net, j'ai effectué quelques testes.
Un ESP8266 dispose donc d'un unique convertisseur analogique de 10 bits (valeur de 0 à 1023 donc) et permettant
Le squetch de test est vraiment très simple et se trouve sur mon GitHub.
La première chose à faire et d'indiquer que l'ADC sera utilisé pour mesurer la tension interne. Ça se fait en plaçant les lignes suivantes en dehors de toute fonction de notre code.
extern "C" { #include "user_interface.h" } ADC_MODE(ADC_VCC);
La tension d'alimentation se lit par la fonction ESP.getVcc(). J'imagine qu'il faut un certain temps entre chaque conversion (les docs de l'ESP sont vraiment très spartiates) ... et de toutes façons, quel serait l'intérêt d'être submergé de valeur ? Bref, avec une tempo bien venue, le reste du code devient
void setup(){ Serial.begin(115200); delay(100); } void loop(){ Serial.println( ESP.getVcc() ); delay(2000); }
Et nous obtiendrons donc sur la console une valeur toutes les 2 secondes.
J'ai alimenté mon ESP avec un convertisseur DC-DC comme celui-ci, après avoir vérifié avec mon multimètre qu'il m'affichait des valeurs correctes. J'ai ensuite fait varier la tension de 2v à 3,5v (en dessous de 2v, l'ESP n'était pas stable), pris à chaque fois un minimum de 30 retours de l'ADC et fait une étude statistique avec Libre office sur la différence entre la valeur réelle et celle mesurée.
Ce qui donne donc le résultat suivant :
Vdd (mV) |
2000 | 2170 | 2320 | 2490 | 2620 | 2790 | 2890 | 3020 | 3200 | 3280 | 3380 | 3510 | 3560 |
Moyenne | -13,68 | -17,97 | -40,88 | -40,25 | -44,56 | -40,60 | -60,48 | -56,15 | -65,42 | -61,51 | -83,32 | -75,85 | -85,12 |
Erreur standard | 0,18 | 0,11 | 1,80 | 2,28 | 0,16 | 0,21 | 0,35 | 0,66 | 1,89 | 0,21 | 0,15 | 2,31 | 1,48 |
Mode | -13,00 | -18,00 | -43,00 | -43,00 | -44,00 | -41,00 | -62,00 | -58,00 | -67,00 | -62,00 | -84,00 | -79,00 | -89,00 |
Médiane | -14,00 | -18,00 | -43,00 | -43,00 | -44,00 | -41,00 | -60,00 | -57,00 | -67,00 | -62,00 | -83,00 | -79,00 | -87,00 |
Premier quartile | -14,00 | -18,00 | -44,00 | -44,25 | -45,00 | -41,75 | -62,00 | -58,00 | -68,00 | -63,00 | -84,00 | -80,00 | -88,75 |
Troisième quartile | -13,00 | -18,00 | -41,00 | -42,00 | -44,00 | -40,00 | -59,00 | -55,00 | -66,00 | -60,00 | -83,00 | -78,00 | -85,00 |
Variance | 1,27 | 0,50 | 106,98 | 207,47 | 1,16 | 1,91 | 5,33 | 17,08 | 117,75 | 2,50 | 1,44 | 208,03 | 74,96 |
Écart type | 1,13 | 0,71 | 10,34 | 14,40 | 1,08 | 1,38 | 2,31 | 4,13 | 10,85 | 1,58 | 1,20 | 14,42 | 8,66 |
Kurtosis | -0,21 | 2,06 | 31,18 | 17,04 | 1,01 | 1,70 | -0,41 | 18,15 | 30,62 | -0,40 | 0,22 | 16,31 | 28,63 |
Asymétrie | -0,01 | -0,04 | 5,51 | 4,24 | -0,87 | 0,85 | 0,34 | 3,62 | 5,44 | 0,42 | 0,72 | 4,15 | 5,17 |
Plage | 5,00 | 4,00 | 62,00 | 69,00 | 5,00 | 7,00 | 10,00 | 26,00 | 66,00 | 6,00 | 5,00 | 69,00 | 52,00 |
Minimum | -16,00 | -20,00 | -46,00 | -46,00 | -48,00 | -43,00 | -65,00 | -61,00 | -72,00 | -64,00 | -85,00 | -83,00 | -90,00 |
Maximum | -11,00 | -16,00 | 16,00 | 23,00 | -43,00 | -36,00 | -55,00 | -35,00 | -6,00 | -58,00 | -80,00 | -14,00 | -38,00 |
Nombre | 41,00 | 39,00 | 33,00 | 40,00 | 43,00 | 42,00 | 44,00 | 39,00 | 33,00 | 57,00 | 62,00 | 39,00 | 34,00 |
Moy/Vdd (%) | -0,68 | -0,83 | -1,76 | -1,62 | -1,70 | -1,46 | -2,09 | -1,86 | -2,04 | -1,88 | -2,47 | -2,16 | -2,39 |
Mod/Vdd(%) | -0,65 | -0,83 | -1,85 | -1,73 | -1,68 | -1,47 | -2,15 | -1,92 | -2,09 | -1,89 | -2,49 | -2,25 | -2,50 |
Erreur moyenne (v) | -0,01 | -0,02 | -0,04 | -0,04 | -0,04 | -0,04 | -0,06 | -0,06 | -0,07 | -0,06 | -0,08 | -0,08 | -0,09 |
Erreur max (v) | -0,01 | -0,02 | 0,02 | 0,02 | -0,04 | -0,04 | -0,06 | -0,04 | -0,01 | -0,06 | -0,08 | -0,01 | -0,04 |
Ce qui donne, graphiquement.
Comme on peut le voir, il y a un écart grandissant en fonction de la tension d'entrée pouvant atteindre presque 0,1 Volt (soit 2,5%) lorsqu'on atteint la tension maximum. On peut cependant facilement déduire une droite de correction pour s'approcher de la réalité.
La plage de valeurs peut paraitre importante mais n'est dû qu'à des pics vraiment épisodiques : comme on peut le voir, le Mode, la Moyenne et les quartiles sont très fortement regroupés ... bref, ils sont facilement éliminables par une simple moyenne sur plusieurs échantillons.
2,5% ou 1/10e de volt rapporté sur 3,5 volts, est-ce vraiment important ? Après tout, beaucoup des composants n'ont pas cette précision. De toutes façons, si cela nous gène, il est relativement facile d'y appliquer une droite de compensation.
Plus gênant sont peut-être les pics ... mais on peut aussi facilement passer à travers (comme on le verra plus bas).
Donc, l'un dans l'autre ... ben les résultats ne sont pas si mauvais que cela et donne une relativement bonne idée de ce qui alimente notre ESP.
Prenons un cas concret, à savoir la sonde de température de la piscine alimentée par des batteries solaires : comme on peut le voir, le signal est extrêmement bruité avec les fameux 0,1 volt de battement ...
on trouvera le code complet sur mon GitHub.
J'ai modifié mon code pour tenter de corriger la chose : je fais 3 acquisitions successives comme suit
int vcctab[3]; // Stocke les différents échantillons de Vcc int nbre = 0; vcctab[nbre++] = ESP.getVcc();
les 2 suivantes sont faites après la lecture des températures de chacune des 2 sondes
float temp = SondeTempInterne.getTemperature( false ); if( SondeTempInterne.isValidScratchpad() ){ // On s'assure que la sonde est présente publish( MQTT_TempInterne, String( temp ).c_str() ); vcctab[nbre++] = ESP.getVcc(); }
On trie les valeurs résultantes
for( int i = 0; i<nbre; i++ ) for( int j = 0; j<nbre; j++ ){ if(vcctab[i]>vcctab[j]){ int t = vcctab[i]; vcctab[i] = vcctab[j]; vcctab[j] = t; } }
et on ne tient compte que de la valeur médiane. Ce qui donne.
SondePiscine/Message 3 échantillon(s) pour Vcc : 2887 2884 2876
SondePiscine/Vcc 2884
Le résultat est édifiant : beaucoup plus propre n'est-ce pas ?
Visitez : Nos sorties Ski et rando |
Copyright Laurent Faillie
2001-2024
N'oubliez pas d'entrer le mot de passe pour voir aussi les photos perso. |
Contactez moi si vous souhaitez réutiliser ces photos et pour les obtenir avec une plus grande résolution. |
Visites durant les 7 derniers jours au total. |
Vous pouvez
laissez un commentaire
sur cette page.