Stabilité des mesures en fonction de l'alim ?!!

Bonjour,
Voila j’ai un petit souci de stabilité de mesures sur un AnalogRead,.
J’ai d’abord pensé aux masses mais après plusieurs tests je pense que le problème vient de la qualité de l’alim.

Un montage de test pour mesurer le PH avec correction du taux par mesure de température,
Affichage des mesures sur lcd 2*16.
Sonde PH =

Avec son adaptateur qui permet d’avoir un 0 – 5 Vcc pour un ph de 0 a 14 :

Sonde température = Sonde étanche DS18B20
LCD 16 * 2 en I2C

Toute les masses sont biens reliées entre elles, la mesure de température est stable (normale, mesure numerique), mais la mesure du ph (AnalogRead) subit de fluctuation importantes (de 5.83 a 7.35) .

Si je branche la Uno sur :

  • alim ext 12 Vcc / 750 mA => ph instable
  • usb du pc (raccorder au secteur) => ph stable
  • usb sur charcheur (Samsung 5Vcc / 1A) => ph stable
  • usb sur chargeur bas de gamme (5Vcc / 1A) => ph instable
  • alim de labo 0-12 vcc / 1.5 A (reglersur 7.5 Vcc) => ph stable

Mesures :

Stable PC =>
Vin / Gnd = 4.46 V
Vout (sortie 5V de la carte qui alimente le LCD et les sondes) / Gnd = 4.97 V et 27.8mA

Instable chargeur 5V/1A bas de gamme =>
Vin / Gnd = 4.6 V
Vout / Gnd = 5.08 V et 27.8mA

Stable chargeur 5V/1A Samsung =>
Vin / Gnd = 4.28 V
Vout / Gnd = 4.79 V et 27.8mA

Une mesure sur la carte alimenter par l’alim de labo en 7.5 Vcc me donne une conso de 55 mA pour la carte.

Qu'en pensez vous ?
Quel composant dans les alim fait la différence ?
Existe-t-il un moyen d’éviter ce genre de problèmes ?

Bonjour,

Avant de mettre en cause l'alimentation je regarderai plutôt la marge d'erreur au niveau de la sortie du analogRead().
La valeur doit fluctuer de +/- 1, c'est normal (erreur de LSB du convertisseur analogique-numérique).

Après c'est tes calculs en flottant derrière qui doivent amplifier cette erreur.
Et l'alim qui doit aussi faire un petit quelque chose sur la référence du +5v (quoi que).

cutprod:
Toute les masses sont biens reliées entre elles, la mesure de température est stable (normale, mesure numerique), mais la mesure du ph (AnalogRead) subit de fluctuation importantes (de 5.83 a 7.35) .

Si je branche la Uno sur :

  • alim ext 12 Vcc / 750 mA => ph instable
  • usb du pc (raccorder au secteur) => ph stable
  • usb sur charcheur (Samsung 5Vcc / 1A) => ph stable
  • usb sur chargeur bas de gamme (5Vcc / 1A) => ph instable
  • alim de labo 0-12 vcc / 1.5 A (reglersur 7.5 Vcc) => ph stable

Mesures :

Stable PC =>
Vin / Gnd = 4.46 V
Vout (sortie 5V de la carte qui alimente le LCD et les sondes) / Gnd = 4.97 V et 27.8mA

Instable chargeur 5V/1A bas de gamme =>
Vin / Gnd = 4.6 V
Vout / Gnd = 5.08 V et 27.8mA

Stable chargeur 5V/1A Samsung =>
Vin / Gnd = 4.28 V
Vout / Gnd = 4.79 V et 27.8mA

Une mesure sur la carte alimenter par l’alim de labo en 7.5 Vcc me donne une conso de 55 mA pour la carte.

Qu'en pensez vous ?
Quel composant dans les alim fait la différence ?
Existe-t-il un moyen d’éviter ce genre de problèmes ?

Je comprends pas bien de quel Vin tu parles.

l'ADC interne utilise le Vcc de l'arduino comme référence, et il semblerait que le régulateur 5V des arduinos ne soit pas fameux. Il faudrait pour s'affranchir de ce soucis utiliser une alim séparée très bien stabilisée pour donner un référence externe via la pin AREF. Regarde ce qu'en dit super_cinci ici :

http://forum.arduino.cc/index.php?topic=119201.msg1347604#msg1347604

http://forum.arduino.cc/index.php?topic=135487.msg1347615#msg1347615

Merci pour vos réponses,

Skywood :
Je suis d'accord avec toi ce +-1 je le vois sur la valeur brut de A3, mais la valeur de ma variable ph fluctue en fonction uniquement du type d'alim.
Je ne change rien au niveau software, ma seul action et d'intervertir les alim et la : boum ma variable ph se met a fluctuer de façon erratique (largement plus que le +- 0.02 induit par AnalogRead et après mes calcules).
ps: je fais des croix sur mon calendrier en attendent la partie 2 de MIDC407.

fdufnews:
j'ai fais des mesures sur le Vin de la Uno (la pin entre Gnd et A0) car je pensais qu' on y retrouvait la tension de de la prise USB, je me trompe ? (surement...)

bricofoy:
Ok pour les valeurs qui changent en fonction de la référence, mais elle (la référence) ne fluctue pas ?! si ?

Vin c'est l'entrée du régulateur 5V. C'est l'équivalent de la prise d'alimentation externe.
Tout ça pour dire que la stabilité de l'alimentation c'est la stabilité de celle que tu connectes lorsque tu entres par Vcc ou l'USB.
Lorsque tu entres l'alimentation par le Vin ou la prise externe alors la stabilité de l'alimentation dépend des caractéristiques du régulateur sur la carte. Pour autant que l'alimentation soit dans la gamme spécifiée (7,5V à 12V).

D'autre part, il ne faut perdre de vue que si l'alimentation se ballade d'une carte à l'autre il faut normalement prévoir des condensateurs de filtrage et de découplage (voir un petit tore ferrite sur le câble) pour filtrer l'alimentation de la carte de mesure.

Dans la datasheet de l'ATmega, la précision de codage est donnée à 2 LSB auxquels s'ajoute le bruit de codage +/-1LSB.
Il ne faut pas hésiter à mettre une capa de filtrage sur la broche Aref 1µF céramique ou alors 4,7µF tantale + 10nF céramique.

cutprod:
Skywood :
Je suis d'accord avec toi ce +-1 je le vois sur la valeur brut de A3, mais la valeur de ma variable ph fluctue en fonction uniquement du type d'alim.
Je ne change rien au niveau software, ma seul action et d'intervertir les alim et la : boum ma variable ph se met a fluctuer de façon erratique (largement plus que le +- 0.02 induit par AnalogRead et après mes calcules).

Fait toi un point de référence stable à 5v avec un LM385 que tu envois sur la broche AREF ça devrait le faire.

cutprod:
ps: je fais des croix sur mon calendrier en attendent la partie 2 de MIDC407.

Je peut pas tout faire en même temps :stuck_out_tongue:

Merci pour ces infos, je vais tester le coup du LM385 des que possible.

J'ai retrouver dans mes affaire un "vieux" LM7805C qui a très bien fais l'affaire...
Les fluctuations ne sont plus que de l'ordre de +- 0.03 sur ma variable ph.
Merci a tous.

Je n'ai pas bien vu quelle carte tu utilise. Si c'est une UNO tu peut l'améliorer en soudant au verso de la carte un condensateur de 100 nF directement sur les pins du support de l'ATMega (entre Aref et GND).
Les cartes Arduino sont très mal conçues avec le connecteur Aref positioné dans l'angle opposé à sa sortie du circuit intégré, la piste doit parcourir toute la carte et comme la capa à l'entrée protège des perturbation extérieures mais pas de celle provenant de la carte, le signal Aref est bruité au niveau du circuit intégré .
Et ce même si tu n'utilises pas de référence de tension extérieure puisqu'Aref est toujours relié au coeur du convertisseur analogique/digital.
J'ai déjà fait un commentaire a ce sujet avec des photos du condensateur.
Si c'est une Mega avec le boîtier CMS c'est foutu.

Si les sorties du micro "travaillent", a chaque commutation des sorties il se produit du bruit, d'autant plus élevé que le courant commuté est élevé.
Si c'est possible évite de commuter des sorties juste avant de faire une mesure analogique.
Sinon, et c'est écrit dans la datasheet, utilise de préférence les accès A4 et A5 qui du fait qu'ils servent aussi à l'I2C sont mieux isolés à l'intérieur du micro.

Atmel recommande aussi (c'est toujours écrit dans la datasheet) de ne pas garder la première mesure :

  • a la mise en activité du convertisseur
  • a chaque changement du mux analogique d'entrée -> il n'y a qu'un seul convertisseur, les 6 entrées analogiques y sont connectées une par une par l'intermédiaire d'interrupteurs analogiques.
    Le plus prudent est de refaire systématiquement les mesures et de jeter les premières.

Également notes bien ce que t'as dis fudufnews -> la précision n'est pas seulement de +/- 1 digits (erreur de quantification) il y a d'autres critères à prendre en compte, le mieux est de lire le chapitre correspondant dans la datasheet du micro-controleur.

Ok, merci pour toutes ces bonnes infos.
Le montage de test est fait sur une Uno, mais si il ya une version définitive je passerais avec une nano ou pro mini.

Oui, je me répète un peu, alors je tente un résumé...

Sur un montage, j'ai eu ce souci de valeurs analogiques qui bougent toutes seules. j'y ai remédié en utilisant une tension de ref sur Aref. j'utilise alors cette tension Aref comme source pour mes potars ou capteurs. mais le souci, c'est que la pin du Aref du µP est directement reliée à la référence de l'ADC, soit AVcc au reset. Comme AVcc = Vcc, si on met une zener de 4.7V, il va y avoir pas mal de courant à passer par là tant qu'on ne fait pas un changement de référence Aref, au risque de détruire une partie du composant. je ne vois pas trop comment résoudre ça, mais une fois la référence externe en place, ça ne bouge plus du tout. utiliser un relais qui commuterait une bonne tension de référence une fois Aref déconnecté (par software) de AVCC?

Pour avoir branché un oscilloscope sur le Aref de la carte, je vous confirme que ça bouge dans tous les sens sur près de 200mV, en gros, pour s'en affranchir, il faudrait faire mesure = analogRead(xx) >> 3, soit faire retomber la précision à 7 bits (0 à 127 au lieu du 0 à 1023 d'origine)...

Super_Cinci:
Sur un montage, j'ai eu ce souci de valeurs analogiques qui bougent toutes seules. j'y ai remédié en utilisant une tension de ref sur Aref. j'utilise alors cette tension Aref comme source pour mes potars ou capteurs. mais le souci, c'est que la pin du Aref du µP est directement reliée à la référence de l'ADC, soit AVcc au reset. Comme AVcc = Vcc, si on met une zener de 4.7V, il va y avoir pas mal de courant à passer par là tant qu'on ne fait pas un changement de référence Aref, au risque de détruire une partie du composant. je ne vois pas trop comment résoudre ça, mais une fois la référence externe en place, ça ne bouge plus du tout. utiliser un relais qui commuterait une bonne tension de référence une fois Aref déconnecté (par software) de AVCC?

Pour avoir branché un oscilloscope sur le Aref de la carte, je vous confirme que ça bouge dans tous les sens sur près de 200mV, en gros, pour s'en affranchir, il faudrait faire mesure = analogRead(xx) >> 3, soit faire retomber la précision à 7 bits (0 à 127 au lieu du 0 à 1023 d'origine)...

Il ne faut pas mélanger précision et bruit.

On utilise une référence externe lorsqu'on veut une référence de tension précise et connue.
La référence interne (1,1V) n'est pas très précise (+/-10%) mais n'est pas nécessairement bruitée.
L'utilisation du Vcc comme alimentation et tout sauf précis mais dans le cas ou on utilise des capteurs potentiomètriques si cette même tension est utilisée pour polariser les capteurs alors l'erreur s'annule. Par contre l'alimentation est bruitée.

Ensuite il y a le problème de conception de la carte arduino. Le Aref se ballade sur la carte et il attrape tout ce qui passe. Moralité le problème de bruit sur la référence et plus dû à cette piste mal routée qu'à la qualité de la référence.

Concernant l'utilisation d'une référence externe. Dans la documentation Atmel il est dit que la sortie Vref (la référence interne) est une source haute impédance. Donc elle ne mettra pas ta référence en court-circuit. Mais ce sera plutôt l'inverse. Si toi de ton coté tu prends la précaution de ne pas sortir sur une impédance trop basse (prévoir une résistance série dans la connexion vers Aref) alors il n'y aura pas de court-circuit. Par contre tant que le choix de la source de la référence n'aura pas été fait par le soft les résultats retournés par l'ADC seront faux.

Et dans tous les cas, comme il a été dit plus haut ajouter un condensateur sur la pin Aref du processeur.

Il faut aussi noter que chez Atmel il n'y a pas que des idiots et ils ont prévu un mode réduction du bruit pour les acquisition par l'ADC qui utilise la mise en veille du processeur pendant les conversions afin de réduire les perturbations. Mais là il faut écrire sa propre fonction analogRead.

fdufnews:
Il ne faut pas mélanger précision et bruit.

non, je ne confonds pas, j'y ai déjà pensé...

fdufnews:
L'utilisation du Vcc comme alimentation et tout sauf précis mais dans le cas ou on utilise des capteurs potentiomètriques si cette même tension est utilisée pour polariser les capteurs alors l'erreur s'annule. Par contre l'alimentation est bruitée.

Je dirais plus que l'alimentation est loin d'être optimisée, car le 5V de l'usb passe par un switch, et ce switch a une impédance assez gênante. reste qu'on y gagne beaucoup en alimentant directement en 5V depuis une bonne alim!

fdufnews:
Ensuite il y a le problème de conception de la carte arduino. Le Aref se ballade sur la carte et il attrape tout ce qui passe. Moralité le problème de bruit sur la référence et plus dû à cette piste mal routée qu'à la qualité de la référence.

tout-à-fait d'accord!

fdufnews:
Concernant l'utilisation d'une référence externe. Dans la documentation Atmel il est dit que la sortie Vref (la référence interne) est une source haute impédance. Donc elle ne mettra pas ta référence en court-circuit. Mais ce sera plutôt l'inverse. Si toi de ton coté tu prends la précaution de ne pas sortir sur une impédance trop basse (prévoir une résistance série dans la connexion vers Aref) alors il n'y aura pas de court-circuit. Par contre tant que le choix de la source de la référence n'aura pas été fait par le soft les résultats retournés par l'ADC seront faux.

j'avais remarqué un pic d'intensité sur mon alim (j'avais collé une zener sur Aref), d'où mon doute...
Ce que je disais, c'est que la référence par défaut étant le VCC qui bouge beaucoup, chaque conversion est faite avec une réf différente, donc résultat différent (exemple de mesure d'une simple pile : on n'aura pas souvent deux fois la même valeur...). Mais pour avoir imposé une ref externe, j'ai grandement amélioré la précision!

fdufnews:
Et dans tous les cas, comme il a été dit plus haut ajouter un condensateur sur la pin Aref du processeur.

ça ne fera jamais de mal :wink:

fdufnews:
Il faut aussi noter que chez Atmel il n'y a pas que des idiots et ils ont prévu un mode réduction du bruit pour les acquisition par l'ADC qui utilise la mise en veille du processeur pendant les conversions afin de réduire les perturbations. Mais là il faut écrire sa propre fonction analogRead.

mais en même temps, ça ne change rien dans le fonctionnement, car analogRead bloque le processeur le temps de la conversion (mais n'empêche pas les interruptions je crois)