Pour mon projet, je souhaite surveiller la tension batterie 12V qui alimentera mon bazar.
J'ai donc fait un pont diviseur et pour avoir plus de précision (stabilité) j'ai utilisé la référence INTERNE.
Je me suis amusé à faire une mesure seule, puis la moyenne de 5 mesures successives.
La différence entre les deux est tout de même conséquente. Soit 4,46V pour la mesure seule et 4.88V pour la mesure moyennée, soit plus de 9 % !
Au passage, mes résistances ne sont pas précises, j'ai mis ce que j'avais.
Comment s'explique cette différence sensible ?
Quelle est la meilleure méthode pour ce genre d'exercice ?
La première mesure est toujours à jeter à la poubelle, c'est dans la datasheet du micro. La raison est qu'il n'y a qu'un seul convertisseur analogique numérique à une entrée multiplexée. Il y a donc toujours une charge résiduelle quand on passe d'une entrée analogique à une autre. Donc la première mesure est toujours entachée d'une erreur.
@B@tto
/1023 , dans l'exemple livré avec l'IDE => Basics => ReadAnalogVoltage
Que la 1ère mesure soit mauvaise, c'est OK. J'ai constaté que quand je lance le programme, la TOUTE première mesure n'est pas cohérente. Les suivantes sont toutes identiques.
Est-ce le 1ère mesure d'uns série de mesure ou la TOUTE première ?
Il faudrait donc systématiquement faire 2 mesures et jeter la 1ère ? Aucun sketch que j'ai vu ne fait comme ça...
Il faudrait donc systématiquement faire 2 mesures et jeter la 1ère ?
Le rejet de la première mesure est clairement indiqué par Atmel,
Quand on dit que la mesure est fausse en fait c'est dire qu'elle donne un résultat moins bon que toutes les suivantes.
Arduino n'est pas la meilleure source d'information : c'est un utilisateur.
La meilleure source d'information c'est le fabricant du micro à savoir Atmel
Règle de base : toujours vérifier aux sources.
Aucun sketch que j'ai vu ne fait comme ça...
C'est ce qui arrive quand on refuse de lire une datasheet.
Il se peut aussi que certains qui n'avaient pas besoin de précision, mais avaient beaucoup de charisme, aient balancé un programme avec une seule mesure et que la foule a pris cette pratique pour argent comptant.
Règle de base : toujours vérifier aux sources.
Pour la référence je vais apporter une précision :
pour avoir plus de précision (stabilité) j'ai utilisé la référence INTERNE.
Ce n'est pas si simple.
La référence interne varie selon le lot de fabrication entre 1V et 1.2 V, moyenne 1,1V (c'est dans la datasheet).
Vef = 1,1V +/-10%. Pour un individu donné elle est stable et sa valeur peut être mesurée.
Par défaut la référence est le Vcc du micro :
alimentation USB = 5V +/-5%
alimentation externe : régulateur interne 5 V +/- ? (voir datasheet du régulateur) , probablement meilleur que 5% et surtout stable.
En référence externe : 1.2 V <= Vref <= Vcc. En particulier sur de nombreuses carte un 3,3V régulé est disponible.
Plus de nombreux composant reférence de tension disponibles.
Il y a encore d'autres paramètres qui interviennent qu'on appelle des erreurs de quantification.
Tu retiens juste que cela existe et tu pourras toujours s'intéresser à la question quand tu sera à l'aise avec les mesures analogique, chaque chose en son temps.
Cela c'est pour la stabilité de la mesure.
Pour la précision tout dépend ce qu'on met derrière le mot précision.
Avec une référence à :
5 V la plus petite tension détectable sera 5/1024 = 4,88 mV
3,3V la plus petite tension détectable sera 3.3/1024 = 3,22 mV
1,1 V la plus petite tension détectable sera 1,1/1024 = 1,07 mV
Pour avoir une mesure plus encore stable il faut modifier la carte (quand elle le permet), mais si tu veux on en reparlera plus tard.
Bonjour 68tjs, merci pour ta réponse et le temps que tu y as consacré.
Concernant la référence INTERNE, j'aurais dû écrire "plus stable". J'ai tenu compte du manque de précision donnée par la doc. J'ai donc mesuré la tension sur la pin AREF et j'ai utilisé cette tension comme valeur pour ma division par 1024 lors de la conversion. Un de mes Arduino donne 1.066V , l'autre 1.111V
J'ai lu la datasheet et il est écrit :
"A normal conversion takes 13 ADC clock cycles. The first conversion after the ADC is switched on (ADEN in ADCSRA is set) takes 25 ADC clock cycles in order to initialize the analog circuitry. When the bandgap reference voltage is used as input to the ADC, it will take a certain time for the voltage to stabilize. If not stabilized, the first value read after the first conversion may be wrong."
Alors, je ne sais pas quand le bit ADEN est mis à 1... De ce que je comprends, c'est à la mise en marche du convertisseur A/D. Je suppose donc que si on ne le met pas en veille , ce n'est qu'à la mise sous tension ?
Ceci dit, je le mets en veille dans mon sketch ...
Je vais faire quelques mesures et afficher les résultats. J'ai aurai le cœur net.
De tous les tests que j'ai pu faire, j'en suis arrivé à la conclusion que la méthode qui donne les résultats les plus constants est de faire plusieurs mesures et de n'en garder que la dernière.
En testant, j'ai décidé de garder la 4ème mesure. Même la 3ème ne suffit pas !!
Toutes les autres méthodes, à savoir une seule mesure ou la moyenne de 5, donnent des valeurs erronées et non constantes !
J'ai trouvé un petit sketch qui permet de mesurer la tension AREF et donc de l'appliquer dans mon calcul. Mais à vrai dire, ça n'a aucune importance, car l'erreur la plus importante vient du pont diviseur de tension dont il faut aussi ajuster la valeur dans la formule.
Sauf peut-être à avoir des résistances de précision que je n'ai pas dans les valeurs voulues.
Toutes les autres méthodes, à savoir une seule mesure ou la moyenne de 5, donnent des valeurs erronées et non constantes !
Abordons le coté matériel "carte arduino".
Les cartes concues par Arduino présentent 2 sources de mauvais résultats analogiques.
Sur lescartes il manque une inductance de filtrage sur AVcc. C'est pourtant clairement indiqué sur la datasheet.
L'implantation de la piste Aref est une horreur (pour un électronicien). Il y a bien un condensateur de filtrage en entrée de carte mais, comme la piste traverse la carte en diagonale, elle est re-bruitée en interne par les autres pistes. Bien sûr il n'y a pas de condensateur de filtrage à raz du boîtier micro-contrôleur.
Visiblement chez arduino ils sont en manque d'électronicien.
Sur les cartes avec des micros en boîtiers CMS il n'y a pas grand chose à faire.
Sur une carte comme la UNO il est possible de souder un condensateur de 100 nF au recto de la carte et dirrectement sur le support du micro.
Pourquoi 100 nF : parce que c'est une valeur passe partout pour les découplages et donc j'en avais sous la main.
Sur la photo jointe c'est un CMS parce que j'ai l'habitude de les utiliser. Le format 0805 étant idéal pour souder entre 2 connexions au pas de 2,54 mm.
Un condo classique à pattes courtes fera aussi l'affaire.
Avec ce condensateur la mesure analogique s'est énormément améliorée et est devenue parfaitement stable.
Je vois que j'ai à faire à un spécialiste !
Merci pour l'info.
J'avais soudé un 0.1uF sur le bornier, mais n'avais pas pris la précaution de regarder s'il y en avait déjà un.
J'ai 2 versions de clones d'UNO CMS ... >:(
Je viens de vérifier su' l'une et j'ai bien un C16, mais qui est proche du connecteur et loin du processeur.
L'autre version est différente.
J'ai effectivement constaté qu'il y a du bruit partout sur cette platine; la ligne 5V est "bruyante".
Je mesure depuis ce matin une tension 12V externe propre et j'ai très peu de variations. Seuls les 100ème de V bougent. La précision est plus que correcte comparée à mon voltmètre, je dois être dans les clous avec les 2 bits d'erreur.
En tous cas, une fois les précautions prises, ça suffira à mon bonheur pour mesurer une batterie 12V au plomb !
Malgrès toutes les précautions que l'on pourra prendre un ADC interne à un micro-controleur ne sera jamais comparable à un appareil de mesure.
Il faut rester réaliste.