Pages: [1]   Go Down
Author Topic: ADC 10 bits UNO  (Read 642 times)
0 Members and 1 Guest are viewing this topic.
Moselle (FR)
Offline Offline
God Member
*****
Karma: 6
Posts: 891
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonsoir,
Pour la réalisation de mon alimentation numérique (autre topic dans le bar), j'ai rencontré un certain nombre de problème de stabilité dans la régulation. Pour comprendre l'origine, j'ai effectué des manipulations sur les entrées analogiques de la bête.
La première partie porte sur la stabilité de ARef de la carte.
Pour les mesures la carte est alimentée par le port USB.
1) Utilisation avec analogReference(DEFAULT) (tension d'alimentation de la carte)
AVG ARef = 4,9255 V (moyenne sur 1 heure)
ARef mini = 4,9130 V
ARef maxi = 4,9323 V
Delta_ARef = 19,3 mV
2) Utilisation avec analogReference(INTERNAL) (ARef théorique = 1,1 V)
AVG ARef = 1,0772 V (moyenne sur 1 heure)
ARef mini = 1,0765 V
ARef maxi = 1,0778 V
Delta_ARef = 1,3 mV
3) Utilisation avec analogReference(EXTERNAL) (ARef théorique = 2,5 V avec MCP1525)
AVG ARef = 2,4898 V (moyenne sur 1 heure)
ARef mini = 2,4896 V
ARef maxi = 2,4917 V
Delta_ARef = 2,1 mV
4) Utilisation avec analogReference(EXTERNAL) (ARef théorique = 4,096 V avec MCP1541)
AVG ARef = 4,0997 V (moyenne sur 1 heure)
ARef mini = 4,0995 V
ARef maxi = 4,1000 V
Delta_ARef = 0,5 mV
5) Utilisation avec analogReference(EXTERNAL) (ARef théorique = 2,5 V avec TL431)
AVG ARef = 2,5031 V (moyenne sur 1 heure)
ARef mini = 2,5031 V
ARef maxi = 2,5060 V
Delta_ARef = 2,9 mV
6) Utilisation avec analogReference(EXTERNAL) (ARef théorique = 4,096 V avec TL431)
AVG ARef = 4,0960 V (moyenne sur 1 heure)
ARef mini = 4,0960 V
ARef maxi = 4,1001 V
Delta_ARef = 4,1 mV

Pour faire vite, j'avais utilisé la configuration par défaut qui n'est en aucun cas suffisant si l'on veut faire un minimum de précision.

J'ai traduit toutes mes mesures, sur l'ensemble de la plage de mesure, en courbes que je mettrais en complément après mise en page.
Vous trouverez ci-dessous une première courbe de comparaison
Ucalculée = f(Uentrée) et Ecart[Uentrée-Ucalculée] = f(Uentrée)
AVG ARef = 2,500 V
Plage de mesure entre 1200 mV et 2200 mV par pas de 5 mV (2 pas sur le convertisseur AD représente 4,88 mV)
Toutes les tensions d'entrée ont une précision de +- 0,5 mV.
Attention : Ce genre de mesures ne peuvent pas se faire sur le coin de la table ni avec un montage non soigné. De plus, il faut les appareils de mesure capable de mesurer le mV et même mieux.
Certaines mesures sont visiblement fausses mais c'est le risque lorsque l'on "traque" le mV.
@+
« Last Edit: November 19, 2013, 05:12:41 pm by icare » Logged

2B OR NOT(2B) = FF
Arduino 1.0.5 + Notepad++ (sous Linux Fedora et/ou Windows)

France S-O ou exil en IDF
Offline Offline
Edison Member
*
Karma: 25
Posts: 1905
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Deux remarques :
1) As tu découplé l'entrée Aref à raz du micro.
C'est ce que j'ai fait : 100nF soudé directement au verso sur les pins du support. Un CMS 0805 est idéal, un condo à patte doit marché aussi. Depuis le bruit de mesure a terriblement diminué.

2) Il existe deux notes d'application Atmel pour améliorer la mesure A/D
AN120 Characterization and Calibration of the ADC on an AVR
AN121  Enhancing ADC resolution by oversampling

Logged

Moselle (FR)
Offline Offline
God Member
*****
Karma: 6
Posts: 891
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,
Deux remarques :
1) As tu découplé l'entrée Aref à raz du micro.
C'est ce que j'ai fait : 100nF soudé directement au verso sur les pins du support. Un CMS 0805 est idéal, un condo à patte doit marché aussi. Depuis le bruit de mesure a terriblement diminué.
J'ai effectivement un condensateur de découplage sur l'entrée Aref et la masse.
Que veut dire exactement découpler "l'entrée Aref à raz du micro" ?
@+
Logged

2B OR NOT(2B) = FF
Arduino 1.0.5 + Notepad++ (sous Linux Fedora et/ou Windows)

Offline Offline
Full Member
***
Karma: 7
Posts: 235
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Étude fort intérressante.

J'ai effectivement un condensateur de découplage sur l'entrée Aref et la masse.
Que veut dire exactement découpler "l'entrée Aref à raz du micro" ?

Il veut dire « au plus près » du microcontrôlleur (enfin je crois smiley ).
Dans l'idéal, d'après la datasheet,  la broche AVcc devrait aussi être reliée à Vcc via un circuit LC, ce qui n'est pas le cas sur les cartes Arduino - en tout cas pas la Uno, il n'y a qu'un condensateur.

Ta courbe semble montrer des effets importants de quantification, ce qui donne l'impression que tu n'as effectué qu'une mesure ADC par tension d'entrée ; tu gagnerais probablement beaucoup en résolution en faisant du suréchantillonnage.

Autre question : le µc ne fait « que ça » ou bien il y a des broches numériques qui gigotent dans tous les sens autour ?
Logged

France S-O ou exil en IDF
Offline Offline
Edison Member
*
Karma: 25
Posts: 1905
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

J'avais fait une photo mais je ne la retrouve plus.
J'appelle Aref_carte la broche d'entrée de la carte UNO.
J'appelle Aref_micro la pin du micro-contrôleur ou du moins celle de son support.

Il y a bien un condensateur sur l'entrée Aref_carte, mais il ne sert pas à grand chose car ensuite la piste qui relie cette entrée_carte à la pin correspondante du micro se balade sur toute la  diagonale de la carte et de plus elle est très proche de pistes numériques. Comme l'entrée Aref_micro est à haute impédance, la piste forme une très jolie antenne de réception.

J'ai donc soudé un condensateur supplémentaire au verso de la carte et directement sur les broches du support de l'ATMega328p.
Ça tombe très bien juste à coté de la broche qui correspond à Aref_micro il y a une broche de masse.

La qualité de la mesure s'est bien améliorée.
Logged

Offline Offline
Faraday Member
**
Karma: 19
Posts: 4155
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

J'avais fait un test des entrees ana avec une source "precise" arduino en ref externe et si je me souviens bien
il y avait aussi pas mal de dispersion entre les 'entrées ana, de memoire A0 renvoyait une valeur assez differentes des autres Ax
 
Logged

Moselle (FR)
Offline Offline
God Member
*****
Karma: 6
Posts: 891
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,
Ta courbe semble montrer des effets importants de quantification, ce qui donne l'impression que tu n'as effectué qu'une mesure ADC par tension d'entrée ; tu gagnerais probablement beaucoup en résolution en faisant du suréchantillonnage.

Autre question : le µc ne fait « que ça » ou bien il y a des broches numériques qui gigotent dans tous les sens autour ?
Le µc ne fait que cela et toutes les pins non utilisées ont une résistance de pulldown.
Pour les tension d'entrée, j'utilise une alim de précision qui me permet d'afficher le mV. la tension d'entrée est mesurée au multimètre de table au demi-mV près.
La tension calculée est issue du résultat de la conversion AD et calculée en prenant la valeur moyenne de Aref (valeur moyenne issue du multimètre au bout d'une heure de mesure)
Chaque point de la courbe a fait l'objet de 50 mesures. La courbe comporte 201 points dans l'intervalle 1,2 à 2,2V
Voila pour les conditions.
@+
Logged

2B OR NOT(2B) = FF
Arduino 1.0.5 + Notepad++ (sous Linux Fedora et/ou Windows)

Offline Offline
Faraday Member
**
Karma: 19
Posts: 4155
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

...
Pour les tension d'entrée, j'utilise une alim de précision qui me permet d'afficher le mV. la tension d'entrée est mesurée au multimètre de table au demi-mV près.
...
bonjour Icare
La precision intrinseque "accordée" là ne peut deriver que d'instruments de mesures calibrés regulierement  "sur etalon de qualité metrologique"  et utilisé "en ambiance metro"
En dehors de ces conditions déjà elles memes soumises à du Delta , tu ne peux qu'accorder qu'un indice de confiance au rendu de ce que tu considere comme ton "instrument le plus precis"  smiley-mr-green
Logged

Moselle (FR)
Offline Offline
God Member
*****
Karma: 6
Posts: 891
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,
La precision intrinseque "accordée" là ne peut deriver que d'instruments de mesures calibrés regulierement  "sur etalon de qualité metrologique"  et utilisé "en ambiance metro"
En dehors de ces conditions déjà elles memes soumises à du Delta , tu ne peux qu'accorder qu'un indice de confiance au rendu de ce que tu considere comme ton "instrument le plus precis"  smiley-mr-green
Je suis bien conscient des difficultés que cela représentent de faire des mesures précises et fiables. En ce qui concerne le multimètre, il a été étaloné il y a 3 mois dans un labo agréé. Pour l'ambiance "metro" j'en suis loin  smiley-grin
Mais pour mes esssais d'amateur, il faut bien se créer une référence qui puisse servir de repère pour le reste des mesures (toujours mieux que le contrôleur à 9,99€ du GSB du coin  smiley-wink)
@+
Logged

2B OR NOT(2B) = FF
Arduino 1.0.5 + Notepad++ (sous Linux Fedora et/ou Windows)

Offline Offline
Faraday Member
**
Karma: 19
Posts: 4155
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

...
Je suis bien conscient des difficultés que cela représentent de faire des mesures précises et fiables. En ce qui concerne le multimètre, il a été étaloné il y a 3 mois dans un labo agréé. Pour l'ambiance "metro" j'en suis loin  smiley-grin
Mais pour mes esssais d'amateur, il faut bien se créer une référence qui puisse servir de repère pour le reste des mesures (toujours mieux que le contrôleur à 9,99€ du GSB du coin  smiley-wink)
@+
Toutafé  smiley-mr-green
Alors garde et prend les valeurs de ton multi dernierement étalonné, tout en restant conscient que ce qui importe là, n'est pas la valeur absolue (là V) rendue , mais bien plus les delta autours, si tu reste dans une ambiance pas qualité metro, mais T° stable externe et interne = si on veux traquer le pouilleme  smiley-mr-green on laisse toujours les instruments allumés H24 , c'est certe pas tres écolo , mais il y a des choix à faire   smiley-cool
Logged

Ales
Offline Offline
Faraday Member
**
Karma: 29
Posts: 3164
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Après il faut toute proportion garder : la datasheet de l'Atmega donne +/- 2LSB et la tu es dans ce domaine, même s'il y a fort à parier qu'Atmel n'a pas trop intérêt à se mouiller. Après vouloir aller chercher une précision au LSB sur un ADC c'est qu'on a pas fait les bons choix technique au départ.

Mais c'est très intéressant quand même puisque que "qui peut le plus peu le moins" et ça permet de prévenir certaines erreurs.

Par contre dans ton protocole je te mets en garde sur un point : l'USB peut fortement perturber une mesure. Ca m'est arrivé il y a peu, je ne comprenais pas pourquoi mes mesures (alors j'utiliser un ADC 18 bits et PGA 8x donc mesure au µV) partaient dans les choux à des moments improbables. Il se trouvait que j'alimentais l'ADC via l'USB et que suivant l'activité que j'avais sur mon PC ça faisait bouger l'alim, et l'impact était très visible sur mes mesures, malgré une palanqué de condos de découplage ...
Logged


France S-O ou exil en IDF
Offline Offline
Edison Member
*
Karma: 25
Posts: 1905
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Pour revenir aux choix des entrées Atmel indique que les entrées A4 et A5 sont mieux "blindées" contre les bruits internes aux micro.
Leur fonctions I2C a contraint Atmel à mieux les isoler.

Pour la qualité des  mesures le plus important est la répétibilité.
Dans la liste des +/-lsb fournie par Atmel le plus difficile est de séparer les écarts systématiques dus à un défaut propre au micro réel que l'on utilise, et qui peuvent se régler en utilisant une courbe d'étalonnage,  des écarts aléatoires qui sont dus aux bruits divers et à l'activité du micro.
Logged

Moselle (FR)
Offline Offline
God Member
*****
Karma: 6
Posts: 891
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonsoir,
Merci pour toutes vos précisions
@+
Logged

2B OR NOT(2B) = FF
Arduino 1.0.5 + Notepad++ (sous Linux Fedora et/ou Windows)

Moselle (FR)
Offline Offline
God Member
*****
Karma: 6
Posts: 891
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,
J'ai fait d'autres essais avec les conditions suivantes :
- Aref = 4,10 V (MCP1541)
- 100nF entre pin 21 et 22 du ATMEGA328
- alimentation UNO avec 9V sur Vin (il n'y pas photo sur la stabilité du 5V par rapport à l'alim via USB)
- mesure de la même tension sur les 6 entrées analogiques de la carte (avec une résistance de 100 ohms en série sur les entrées)

Moyenne sur 10 mesures sur chaque entrée (0V <= Uent <= 4,1V par pas de 0,2V)
On ne remarque quasiment aucune différence entre les différents canaux. J'ai 4 différences de un pas sur les entrées A1, A2, A4 et A5 sur l'ensemble des mesures. Bref insignifiant !
Courbes à suivre ...
Logged

2B OR NOT(2B) = FF
Arduino 1.0.5 + Notepad++ (sous Linux Fedora et/ou Windows)

Pages: [1]   Go Up
Jump to: