Je bosse sur un Uno.
J'ai une tension très petite que je peux mesurer avec mes ports analogiques.
En utilisant analogReference en mode DEFAULT, je n'obtiens que 0.
En passant en mode INTERNAL (donc 1.1V en tension de référence), j'obtiens une valeur. Mon signal d'entrée est sinusoïdal, je mesure une variation sur ma pin analogique de environ +- 5.
Je voudrais davantage de précision, aussi je voudrais utiliser le mode EXTERNAL.
J'ai fait un pont diviseur de tension avec deux résistances R1 = 10ohm et R2 = 100ohm, et j'ai branché ma sortie entre R1 et R2 sur le pin AREF. Si je ne me trompe pas, la tension de référence devient :
5 * 10 / (10 + 100) = 0.45, soit une précision environ deux fois plus grande qu'en mode INTERNAL.
Au contraire, j'obtiens une précision moins grande. J'ai beau changer R2 pour une valeur plus grande, rien n'y fait.
Sur le principe théorique de ce que je viens d'expliquer, est-ce que qqun voit où je pourrais m'être planté ?
la valeur "exacte" de Aref issue du pont diviseur est alors dépendante de :
la valeur de V aux 2 extrémités du pont , "le 5V" utilisé dans le calcul est donc déjà là une notion purement théorique
la précision des R utilisées dans le pont
Si le "5V" déjà est sujet à des variations temporelles d'amplitude , ce qui est trés surement le cas si c'est le"5V d'alim" du MCU,, il est illusoire esperer de l'amelioration.
Palliatif : utiliser une vraie ref de tension externe et utiliser un petit potentiometre genre multitour pour le pont diviseur et ajuster ensuite sa sortie par mesure avec un voltmetre au niveau souhaité pour obtenir la meilleure dynamique
La datasheet de l'atmega328p (le micro qui équipe la carte UNO) précise que la tension appliquée sur la borne Aref doit être comprise entre 1,1V et Vcc.
Donc si tu arrive à faire une mesure (valeur de cette mesure ? tu ne donnes que les variation ± 5) avec la référence interne il n'y aura pas d'amélioration avec la référence externe (voir plus loin la pollution de la piste Aref)
En passant en mode INTERNAL (donc 1.1V en tension de référence), j'obtiens une valeur. Mon signal d'entrée est sinusoïdal, je mesure une variation sur ma pin analogique de environ +- 5.
Quel montage as tu fait pour mesurer un signal sinusoïdal ?
Rappel : on ne doit pas appliquer de tension négative sur une entrée de micro.
Il faut décaler le signal sinusoïdal de Vcc/2 ce qui implique que l'amplitude Crête à Crête ne dépasse pas Vcc (5V).
Quel est l'amplitude crête à crête du signal sinusoïdal ?
Autres points :
La datasheet du micro contrôleur (c'est elle la bible, pas la doc arduino) indique que la tension de référence interne peut être comprise entre 1V et 1,2V selon les lots de fabrication, soit ± 10%.
Détail important on peut la mesurer.
Quand la référence interne est sélectionnée elle est présente sur Aref, il suffit de la mesurer avec un voltmètre.
Là je vais être désagréable envers Arduino mais pour les mesures analogiques précises et non bruitées la carte UNO est pourrie.
Le défaut d'implantation concerne la piste qui relie la pin Aref en bordure de carte à la broche Aref du microcontröleur.
Cette piste est trop longue, elle est polluée par les pistes numériques et il n'y a pas de condensateur de découplage au niveau du microcontrôleur. Il y en a un à l'entrée de la carte mais comme la piste est polluée dans la carte il ne sert à rien.
La solution consiste à souder un condensateur de 100 nF sur le support du micro entre la broche Aref et la broche de GND qui est juste à coté -> cette proximité n'est pas le fruit du hasard, Atmel connaissant la sensibilité de Aref a fait en sorte de disposer d'une broche de masse juste à coté de la broche Aref pour filtrer le bruit, Arduino ne l'a pas compris.
Exemple de réalisation avec un condensateur CMS de format 0805.
Il est aussi possible de souder un condensateur "à pattes" mais il sera préférable qu'elle soient courtes.
La datasheet de l'atmega328p (le micro qui équipe la carte UNO) précise que la tension appliquée sur la borne Aref doit être comprise entre 1,1V et Vcc.
Ok, ceci clôt le débat. Je ne peux pas faire ce que je veux, à moins de passer sur un autre Arduino. Merci pour ça (du coup, c'est un peu bizarre que dans la spec d'analogReference ils disent qu'on peut mettre entre 0 et 5 V)
Quel montage as tu fait pour mesurer un signal sinusoïdal ?
Un micro de guitare composé de bobines électromagnétique. Le signal est très faible, d'une tension inférieure (calcul empirique) à 5mV.
Quel est l'amplitude crête à crête du signal sinusoïdal ?
Je ne sais pas ce que veut dire "crête à crête", mais quand je capte mon signal en analogique (en mode INTERNAL), il va y avoir une variation +- 5 environ. Etant donné la faible tension, il n'y aucune chance pour qu'elle dépasse 5V.
Il faut décaler le signal sinusoïdal de Vcc/2 ce qui implique que l'amplitude Crête à Crête ne dépasse pas Vcc (5V).
Je suis tout de même intéressé pour savoir comment décaler le signal à Vcc/2. Je suis preneur d'une solution (merci par avance).
C'est la difference (algébrique) entre le maximum de la tension et son minimum...
voir Amplitude — Wikipédia
A noter qu'arduino ne peut pas mesurer de valeurs négatives avec son CAN (aucun microcontrôleur de ma connaissance ne le peut)
68tjs:
La datasheet de l'atmega328p (le micro qui équipe la carte UNO) précise que la tension appliquée sur la borne Aref doit être comprise entre 1,1V et Vcc.
Bonjour 68tjs
Pour etre trés franc je n'avais jamais eu cette limitation en tête ( j'etais sur 0 --->VCC pour aref externe)
par curiosité j'ai récupéré la derniere version du DS (8271G–AVR–02/2013) et je ne vois pas où réside cette information
sauf mauvaise lecture de ma part , je ne vois rien d'exposé de particulier en ce sens au
§ paragraphe 24.5.2 ADC Voltage Reference
Attend, c'est que j'avais compris de la lecture de la datasheet tout au début que je me suis mis au micro, je refais un tour sur la partie convertisseur analogique avec la dernière datasheet et je confirme ou j'infirme.
Cela ne m'avait pas paru anormal à l'époque vu que la référence de 1,1V est une image de la tension de bandgap qui sert dans de nombreux endroits dans un circuit intégré.
Il y a quand même un problème:
le micro sort une tension très faible (+-5v: codage sur 3 bits); on ne sait pas quelle est la gamme de fréquences utiles, ni s'il a une masse commune avec l'arduino, rendant un décalage plus aisé.
Peut être le signal gagnerait il à être amplifié, voire décalé (pour pouvoir traiter les deux alternances d'un signal alternatif)....
Un signal alternatif peut être décalé à l'aide d'un pont diviseur 50/50 :
Sur ce schéma, le signal alternatif en sortie de l'amplificateur opérationnel est centré de part et d'autre du zéro (GND).
Les résistances R1 et R2 permettent de polariser l'entrée du convertisseur analogique / numérique autour de 2.5V, ce qui permettra à celui-ci de travailler sur une tension d'entrée compatible avec sa tension d'alimentation (0V à 5V).
Le condensateur permet d'éviter que cette tension continue ne se retrouve sur la sortie de l'amplificateur opérationnel.
Les valeurs de R1 et R2 doivent être choisies suffisamment grandes pour ne pas écrouler la source de signal alternatif.
En choisissant la référence interne de l'ADC si l'on obtient une valeur mesurée de 5 c'est que le signal est au max de 5mV (1.1V / 1024 * 5).
Le signal gagnerait à être amplifié à l'aide d'un AOP, un AOP à faible bruit de préférence.
Il serait intéressant de connaître le type de source, sa tension d'alimentation et son impédance de sortie.
Un micro de guitare composé de bobines électromagnétique. Le signal est très faible, d'une tension inférieure (calcul empirique) à 5mV.
Et je répète :
Le signal gagnerait à être amplifié à l'aide d'un AOP, un AOP à faible bruit de préférence.
Pour cela il faudrait évidemment disposer d'une alimentation pour cet AOP.
On pourrait utiliser l'alimentation 5V ARDUINO et utiliser un AOP que l'on puisse alimenter en 5V : LT1077 par exemple.
Le problème d'un LT1077 est que le signal ne peut pas être négatif (voir votre lien, page 12, colonne de droite) -je crains qu'aucun ampli op à alimentation simple ne permette de traiter ce cas là).
Une solution, qui nécessite de connaître l'impédance de sortie des bobines du microphone, est de mettre une tension de décalage de 5v/2 (disons).
Une autre solution (est ce que le but de faire de la haute fidélité) serait de négliger une moitié du signal (il serait alors redressé: si on ne veut connaître que l'amplitude, ce n'est pas absurde) ...
Sinon, générer une tension de +-12 volts à partir des alims d'un arduino est loin d'^tre trivial (la solution la plus simple que je connaisse est de faire appel à un MAX232, qui génère ses propres tensions, mais c'est très vieux)
Un signal alternatif peut être décalé à l'aide d'un pont diviseur 50/50
Je me suis mal exprimé : si j'ai une tension proche de 0, comment la décaler à 2.5V ? Ta solution ne fonctionne que si j'ai une tension de base de 5V.
Pour le reste, j'ai déjà exploité la piste des AOPs et je ne le ferai pour le moment pas pour toute une foultitude de raisons et ce quand bien même ce serait "mieux" pour mon projet et pour mon signal.
Si l'impedance de votre microphone est très basse : l'etage de sortie de l'ampli op (donné en figure dans le post 10) peut être utilisé comme étage d'entrée (à la place de l'ampli op, vous avez le microphone; les resistances doivent être grandes par rapport à l'impedance de sortie du microphone, disons 20 fois -ce qui fait une charge de 10 fois l'impedance de sortie du microphone-).
Je ne vois pas, vue la quantification de votre signal (3 bits utiles) votre rejet des ampli ops (religion? complexité?)
Je ne vois pas, vue la quantification de votre signal (3 bits utiles) votre rejet des ampli ops (religion? complexité?)
en fait j'ai déjà fait le montage avec des AOPs. ça fonctionne, mais étant donné mes faibles compétences en soudure, je n'ai pas réussi à faire un montage complet puisque j'ai 6 signaux à capter. Ceci étant, je sais que la solution existe et que je peux l'utiliser au besoin.
Maintenant, pour mon cas pratique et pour avancer rapidement dans mon projet dans un mode "preuve de concept", je vais passer par les ports analogiques en mode INTERNAL. Gain de temps, gain d'argent, gain de sang froid, gain de motivation
Pour revenir à la question initiale, Artouste soulève qu'il n'a vu nulle part que le pin AREF ne prend en entrée que des valeurs entre 1.1V et 5V, contrairement à ce qu'a vu 68tjs. Quelqu'un en sait davantage ?
Je me suis mal exprimé : si j'ai une tension proche de 0, comment la décaler à 2.5V ? Ta solution ne fonctionne que si j'ai une tension de base de 5V.
Il suffit de polariser R1 avec VREF. Le point milieu se situera forcément à VREF / 2.
Le schéma du post #10 est un exemple provenant de cet article : lutilisation-des-condensateurs
Voir : 2.4.2. Liaison analogique / numérique
Il suffit de remplacer la source de signal (l'AOP) par un microphone, et le 5V par VREF.
Le condensateur et R1+R2 sont à calculer en fonction de l'impédance du microphone.
Bon la pelouse est tondue je retourne sur le forum et j'ai retrouvé.
Datasheet ed 11 année 2015.
page 310 paragraphe 29.8 ADC Characteristics
Table 29.15
Ma lecture de la datasheet :
Vref est la tension de référence qui est appliqué sur Aref.
Elle ne peut pas être inférieure à la valeur min de la référence interne.
Honnêtement dans ma première lecture j'avais conclu qu'elle ne pouvait pas être inférieure à la valeur exacte de la référence interne.
68tjs:
Bon la pelouse est tondue je retourne sur le forum et j'ai retrouvé.
Datasheet ed 11 année 2015.
page 310 paragraphe 29.8 ADC Characteristics
Table 29.15
Ma lecture de la datasheet :
Vref est la tension de référence qui est appliqué sur Aref.
Elle ne peut pas être inférieure à la valeur min de la référence interne.
Honnêtement dans ma première lecture j'avais conclu qu'elle ne pouvait pas être inférieure à la valeur exacte de la référence interne.
Bon hé bien voilà un point de réglé ! 8)
C'était bien planqué , mais c'est inévitable qu'il y ait une limite basse à cette valeur.
J'avais il y a déjà longtemps fait un dispo basé sur un nano et un DAC 12 bits MCP4822 pour gerer diverses valeurs d'Aref , mais manifestement je n'avais pas fait de tests bien poussés pour de l'aref < à 1V , sinon j'aurais rapidement détecté un "probléme".