IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Problème lors de la lecture d'une tension


Sujet :

Arduino

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2016
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Problème lors de la lecture d'une tension
    Bonjour à tous,

    j'ai un petit problème avec ma carte arduino uno.
    Le montage est très simple j'ai une tension entre deux fils qui correspond à une température. Je branche alors ma borne moins sur le GND de ma carte et la borne plus sur une entrée analogique.
    C'est la que viens le problème car lorsque je mesure la tension au multimètre elle est fixe alors que la tension relevé par la carte varie.
    Les variations vont de 0.40V à 0.80V (afficher a l'écran) contre une tension d'entrée de 0.6V (au multimètre).
    Ma mesure est alors totalement faussé et faire une moyenne sur 20 valeurs ne m'apporte pas plus de précision.
    Avez vous une idée d'où peut venir le problème?

    Merci de votre aide, cordialement M. DAUDY.

    ps:j'ai essayé avec une autre carte (arduino leonardo), j'ai essayé avec un autre pc, mais toujours le même problème.

  2. #2
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 650
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 143
    Points
    11 143
    Par défaut
    bonjour,

    ce n'est pas un problème. Ton multimètre est insensible aux variations rapides de ta tension : il lui faut plusieurs millisecondes pour afficher la tension que tu lui envoie, il va donc réaliser une moyenne de ces variations (d'ailleurs (0,4 + 0,8) / 2 = 0,6V).

    Ton Arduino, lui, a une série d'instructions à exécuter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    début boucle
         lire la valeur analogique
         afficher la valeur analogique
    retour vers début de la boucle
    et chaque exécution d'une instruction est très rapide (quelques microsecondes), ton Arduino voit donc ces variations de tensions et les affiche puisque c'est ce que tu lui demandes de faire. Faire une moyenne sur ta mesure est une bonne idée, mais 20 points c'est trop peu (cela doit prendre quelques microsecondes également). Il faut que tu fasses tes mesures sur, par exemple, 200ms puis faire ta moyenne et afficher le résultats. Tu peux aussi ralentir l'exécution du code avec la fonction DelayMicroseconds

    Tu peux mesurer le temps d'exécution des instructions avec la fonction micros.

  3. #3
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 208
    Points : 11 688
    Points
    11 688
    Par défaut
    Salut,
    Auteur à raison, un multimètre moyenne le signal d'entrée mais ça me paraît quand même bizarre tout ça.

    La variation d'une température est phénomène lent et il n'y a pas de raison de voir des variations de tensions rapides et encore moins des +/- 200mV (à part du bruit). Je pense qu'il y a un problème la dessous.

    Quel est ce capteur ?
    Schéma de câblage (complet) ?

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2016
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour,
    merci de vos réponses aussi rapides.
    Mon schéma étant loin d'être complet je vous explique ici le fonctionnement. Mon capteur est situé dans une salle agricole à environ 100m du lieu de mesure. Disposant de 2 fils pour ramener l'information j'ai utiliser une alimentation externe de type chargeur de portable délivrant une tension de 5v pour alimenter mon capteur. Afin d'effectuer la mesure j'utilise les 2 fils pour avoir la masse de mon générateur que je branche sur la partie GND de ma carte et la mesure de mon capteur que je branche sur A0. La longueur ne doit pas poser de problème puisque au multimètre je mesure la même tension dans la salle et au lieu de mesure.
    Je modifie actuellement mon programme pour essayer la solution de Auteur et de faire la moyenne sur plus de valeurs.
    Merci de votre aide,
    Cordialement Maxime DAUDY.
    Images attachées Images attachées  

  5. #5
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 650
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 143
    Points
    11 143
    Par défaut
    As-tu placé un condensateur (10~20µF 63V) sur ton alimentation 5V ? Comme Vincent, je suis en train de me demander si ces variations de tensions ne sont pas dus aux oscillations de la tension d'alimentation de ton capteur...

  6. #6
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 208
    Points : 11 688
    Points
    11 688
    Par défaut
    Alors,
    Il y a plusieurs soucis.

    Problème n°1

    Tout d'abord ton alimentation de type chargeur de portable, sache que n'importe quel régulateur a besoin d'une charge minimum pour réguler correctement et donc, dans ton cas, pour fournir une tension de +5V bien lisse.

    - Soit ton chargeur a déjà à l'intérieur une résistance prévu a cet effet, c'est à dire que si rien n'est branché au chargeur alors la résistance interne fait qu'un courant sera quand même tiré et en sortie il y aura un +5V lissé
    - Soit le chargeur n'a rien de prévu à l'intérieur et il régulera bien, +5V lissé, que si une charge est branché dessus.

    Si on est dans le cas numéro 2 et que la seule charge est le TMP36 mais qui ne consomme quasiment rien, 50 µA, alors le +5V peut très bien faire du yoyo.


    Essai n°1
    Mettre une résistance de 220 ou 330 ou 470 entre le +5V et le GND du chargeur pour créer un courant de quelques dizaines de mA et faire ce que Auteur propose puis regarder si le +5V est plus stable.

    ***************************************


    Problème n°2

    Lorsque je lis la doc du TMP36 je vois des choses intéressantes et notamment l'amplitude de la tension de sortie de ce capteur.

    Nom : Capture du 2016-10-23 15:16:31.png
Affichages : 1757
Taille : 43,1 Ko

    La tension de sortie du capteur est de 0.3V @ -25°C
    La tension de sortie du capteur est de 1.2V @ +70°C

    Ceci peut t'aider a adapter la pleine échelle de ton ADC de 10 bits (pouvant donc aller de 0...1023). Pour rappel l'ADC du ATMEGA328P peut être référencé de plusieurs manières : par rapport a son alimentation (+5V), par rapport a une référence interne (1.1V) ou par rapport a une référence externe d'une valeur de ton choix. Le choix de la référence de l'ADC a un impact direct sur la résolution de celui-ci.



    Si par exemple, l'ADC est référencé a Vref = Vcc de l'Arduino donc +5V alors un bit vaut 0.0048V mais si il est référencé à Vref = au 1.1V interne au micro alors un bit vaut 0.0010V. On a donc augmenté "la précision".
    La valeur en décimal dans l'ADC se traduit finalement par



    Lorsqu'on y regarde de prés et par rapport a ton application il est fort peu probable que tu sois hors d'une plage de température comprise entre -25°C et +70°C et donc de tension comprise entre 0.3V et 1.2V. Donc référencer l'ADC à 1.1V est l'idéal car on exploite au maximum les 10 bits de l'ADC, c'est à dire que lorsque l'ADC vaut 0b1111111111 alors la valeur lue est 1.1V soit +70°C. Dans la pratique on pourrait être tenté de réduire encore plus la référence pour des capteurs qui délivrent de petits signaux mais en faisant ça il ne faut pas perdre de vu qu'on dégrade le Rapport Signal Bruit.



    Le bruit ayant une certaine amplitude si on baisse la référence trop fortement alors elle s'approche de la valeur du bruit ambiant et on ne peut plus rien exploiter, sans compter que l'ADC a des défauts aussi.

    Nom : Capture du 2016-10-23 15:11:43.png
Affichages : 1680
Taille : 64,8 Ko

    Bref... La bonne solution est souvent d'amplifier le signal du capteur pour le faire entrer dans la pleine échelle de l'ADC.



    Essai n°2
    Penser a adapter la pleine échelle à la pleine échelle du capteur. @Auteur, je ne programme pas avec Arduino, peux tu confirmer que cette syntaxe est correct ? Merci à toi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void setup()
    {
    // Set Analog reference to Internal 1.1Volts
    analogReference(INTERNAL);
    ...
    ...
    }

    ***************************************


    Problème n°3

    Ton design est la pire des solutions en réalité
    Faire transiter dans 100m de fil un signal de quelques centaines de mV, qui varie de 10mV par °C et sans charge (presque pas de courant) est complètement suicidaire. Ton fil est une vraie antenne et elle va ramasser tous les perturbations et tout le bruit avoisinant et cela va se mélanger au signal utile. Il existe des bus de terrain pour les cas de capteurs déportés comme le tien et le signal est numérisé à la source puis envoyé vers le micro (bus CAN des voitures, ModBus sur du RS485 etc... sont des bus de terrain pouvant fonctionner jusqu'à 1km de distance tout en restant robuste)

    Dans la datasheet du TMP36, il y a un exemple pour ton cas de figure, inspire t'en :

    Nom : Capture du 2016-10-23 17:14:38.png
Affichages : 1778
Taille : 21,3 Ko

    La résistance de 750 Ohms a deux effets, elle va créer un courant de 1mA lorsque l'ADC va lire le capteur et elle fera un filtre RC (passe bas) où le C est la capacité de ton câble.


    Essai n°3
    Prendre un câble blindé avec au moins 3 conducteurs dedans), charger le signal avec la résistance de 750 Ohms, mettre un condo de découplage aux bornes du capteur (au plus proche) et laisser tomber l'alimentation +5V avec le chargeur. Prend le +5V de ton Arduino est amène le 100m plus loin pour alimenter le capteur.

    Le blindage du câble Relié à une masse métallique (pas au GND de Arduino !!!!)
    Conducteur 1 du câble +5V de Arduino
    Conducteur 2 du câble GND de Arduino
    Conducteur 3 du câble Signal issu du capteur
    Les éventuels conducteurs libres du câble GND de Arduino (jamais en l'air !!!!)


    Essai 2 + Essai 3 devrait régler ton problème.

    A+

  7. #7
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 650
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 143
    Points
    11 143
    Par défaut
    @Vincent comment mettre +3 directement à ta réponse ?



    Citation Envoyé par Vincent PETIT
    Penser a adapter la pleine échelle à la pleine échelle du capteur. @Auteur, je ne programme pas avec Arduino, peux tu confirmer que cette syntaxe est correct ? Merci à toi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void setup()
    {
    // Set Analog reference to Internal 1.1Volts
    analogReference(INTERNAL);
    ...
    ...
    }
    Là c'est pour une référence interne de 1,1V. C'est juste.
    https://www.arduino.cc/en/Reference/AnalogReference

Discussions similaires

  1. Réponses: 10
    Dernier message: 30/08/2012, 00h02
  2. Réponses: 11
    Dernier message: 05/08/2009, 12h30
  3. [JDesktopPane] Problème lors de l'insertion d'une JInternalFrame
    Par Invité dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 21/09/2005, 01h38
  4. [POO] Problème lors de l'appel d'une propriété d'un objet.
    Par akecoocoo dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 24/08/2005, 08h51
  5. Problème lors d'un Update sur une date
    Par Nany dans le forum ASP
    Réponses: 3
    Dernier message: 19/05/2004, 22h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo