Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Arduino] Entrée analogique

Lisseur performant

Sujet résolu
    12 juillet 2012 à 10:04:41

    Bonjour à tous !

    Dans le cadre de mon boulot, j'ai une partie d'un projet qui consiste à récupérer et afficher 5 valeurs de capteurs de distance par ultrason.

    J'ai donc choisi d'utiliser une carte Arduino pour son prix, sa taille et ses performances au premier abord, qui correspondait à mes attentes. J’ai choisi une carte UNO Rev3.
    Cependant, un petit problème survient, et c'est pourquoi je me tourne vers vous, Ô grands maîtres des sciences. :-°

    Je m'explique :

    J'ai 5 capteurs de distance par ultrason, fournissant une tension comprise entre 0-10V avec un courant < 20mA pour une plage de mesure de 180mm.
    Comme les entrées analogiques Arduino ne supporte que jusqu'à 5V, j'ai donc commencé par créer un pont diviseur de tension, avec des résistances de 1KOhm pour une tolérance de 0.10%.

    Mais avec ceci, les valeurs lues par l'Arduino lorsque le capteur ne bougeait pas pouvaient osciller de 5mm. Ce qui est énorme car j'aimerai une tolérance de +/- 0.5mm au maximum.

    Par la suite, j'ai donc fait une moyenne glissante dans le programme (sans pondération), mais cela ne m’a pas été grandement utile… (+/- 4mm).

    Par conséquent, j’ai réalisé un détecteur d’enveloppe en sortie du pont diviseur (Résistances 1k et 2k, capa : j’en ai essayé plusieurs entre 10 et 100 µF), mais cela ne rentrait toujours pas dans ma tolérance voulue.

    Alors je me suis dit que les entrées analogiques de l’Arduino n’étaient pas stable, mais si puisque j’ai connecté un générateur de tension stable (de compète il faut le dire :-° ), et les bits ne bougeait absolument pas. (Les capteurs sont très stables également, je les ai même essayés sur un WAGO (entrée analogique sur 14 bits, aucun soucis au niveau de la stabilité).

    En ce qui concerne un filtre PB, la fréquence du bruit serait trop compliquée à calculer, un service dans ma boîte pourrait éventuellement le faire, mais ça reviendrait cher pour nous, trop long dans le temps, et trop encombrant par la suite.

    Et pour l’instant, j’ai fait un petit bidouillage dans le soft, de façon à commencer les mesures quand la pièce à mesurer est stable (appuie sur un bouton) et à n’accepter que des valeurs de +/- 1mm de la première valeur lue dans la moyenne glissante (lors de l’appuie sur le bouton). Cela correspond à ma tolérance recherchée, mais le temps de mesure est un peu plus long, et je ne suis absolument pas sûr de la répétabilité des mesures.


    Je commence donc à être à cours d’idées… Si vous en avez, je suis preneur !!

    Je vous remercie d'avance.


    PS : Avec IE8 (Et oui, ordi de boulot) il y a un petit bug au niveau du défilement dans le carde d’écriture du sujet, la barre de défilement remonte toute seule, il est impossible de voir ce que l’on écrit si le texte dépasse la taille du cadre.
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      12 juillet 2012 à 10:45:49

      bonjour,

      Questions bêtes:
      • Comment alimente-tu tes capteurs et l'Arduino ?
      • Les masses sont-elles biens reliées ?
      • Les capa sont de quelle technologie ?
      • Peut-tu connaitre la fréquence max de la variation du déplacement de tes objets ?
      • Partager sur Facebook
      • Partager sur Twitter
        12 juillet 2012 à 10:48:17

        Effectivement tu commences à avoir épuiser pas mal d'idée XD

        Une solution à moindre cout et facile à mettre en place pourrait être d'utiliser un ADC exterieur qui peut accepter des tensions de 0 à 10V comme ca pas besoin de diviser et tu peux mettre autant de capteurs à convertir que tu veux.
        Ensuite une simple com' I2C pour aller lire le capteur voulu et hop ca marche ! (et tu auras aussi plus de choix sur la résolution de l'ADC que celle de 10 bits imposé sur l'Arduino)

        (Pour ce qui est du bug il faudrait faire un retour de bug avec un bouton de signalement que je ne retrouve plus XD)
        • Partager sur Facebook
        • Partager sur Twitter
          12 juillet 2012 à 11:11:42

          Merci de vos réponses rapides.

          Pour répondre à thelme :
          - Mes capteurs sont alimentés en 24V, et l'Arduino avec une pile 9V ou USB (5V)
          - Les masses sont effectivement bien reliées.
          - Les capas sont électrolytiques (je ne suis plus très sûr du terme, ce sont les cylindriques polarisées (les bleus :p ))
          - Mes objets ne bougent uniquement lors de la mise en position, qui se fait manuellement. Les capteurs servent donc à les positionner exactement à l'endroit voulu.

          Eskimon :
          J'avais pensé effectivement d'utiliser un ADC extérieur, mais je ne savais pas que l'on pouvait le relier par une I2C (c'est pourquoi j'ai vite abandoné l'idée puisque le brancher sur les entrées numériques... sachant que j'ai un shield color lcd :-° ). Mais le soucis c'est que celà risque d'être encombrant, et il faut que le système entier soit le plus petit possible.
          Je vais tout de même me renseigner, on doit surement pouvoir en trouver des petits.
          Merci du conseil !


          Quand au bug, je vais donc tâcher de trouver ce fameux bouton :D
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            12 juillet 2012 à 11:33:04

            Citation : Rizov

            Les capas sont électrolytiques


            Pour faire du filtrage il faut prendre toutes les technologies de capacité SAUF du chimique ^^


            Citation : Rizov

            Mes objets ne bougent uniquement lors de la mise en position, qui se fait manuellement. Les capteurs servent donc à les positionner exactement à l'endroit voulu.


            Tu peux faire un filtre passe bas qui commence assez bas dans les fréquences sauf si les gens sont super méga rapide.


            • Partager sur Facebook
            • Partager sur Twitter
              12 juillet 2012 à 11:57:17

              Ah je ne savais pas pour les capas :lol: Merci.

              Le filtre passe bas serait trop compliqué à mettre en oeuvre, puisque le signal n'est pas sinusoidal et la fréquence de coupure peut changer à tous moments, c'est le bruit d'environ 100mV que j'aimerai lisser.


              J'ai pu récupérer un module ADAM faisant office de CAN. J'essaye celà cette aprème.
              • Partager sur Facebook
              • Partager sur Twitter
                12 juillet 2012 à 12:25:05

                Pour ce qui est d'utiliser un composant externe on trouve les max127, qui peuvent convertir jusqu'à 10V et ont 8 canaux de conversion avec 12 bits de résolution, le tout en com I2C (mais ca coute 25€...)
                • Partager sur Facebook
                • Partager sur Twitter
                  12 juillet 2012 à 16:45:41

                  J'ai essayé avec le module ADAM, les valeurs sont suffisament stables !
                  Il semblerait donc qu'un CAN ext. règlerait mon problème.

                  J'ai également regardé les max127, ça semble idéal. Je vais donc en commander un de ce pas.
                  Un grand merci pour ton aide Eskimon, ainsi qu'à thelme ;)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    12 juillet 2012 à 22:25:57

                    Un peu de calcul :

                    2^10 = 1024
                    180 mm / 1024 = 0.1758 mm
                    10V / 1024 = 0.009766 V = 9.766 mV

                    Prenons un bit de moins car 0.17 mm c'est beaucoup trop précis pour ce que tu veux et 10 mV c'est vraiment faible :
                    2^9 = 512
                    180 mm / 512 = 0.3516 mm
                    10V / 512 = 0.01953 = 19.53 mV

                    Un pas de 20 mV c'est pas énorme néanmoins il est possible de faire quelque chose, cela dépend de ton environnement et du placement des capteurs.

                    Si le circuit est placé dans un environnement bruité électriquement (machines-outils, appareils électriques de forte puissance, etc) ca risque de compliqué la tâche et il faudra blindé le montage. D'autre part si les capteurs sont éloigés du montage, il faudra peut-être envisager de mettre l'ADC (ou CAN en français) au plus près du capteur (donc 5 ADC) et de communiquer via un bus I²C ou SPI selon la technologie utilisée.

                    Au niveau du filtre passe bas, d'une part je doute que tu échantillonne tes capteurs au-delà du MHz ca ne sert pas à grand chose donc tu peux filtrer déjà au-dessus de 5 ou 10 MHz ca peut réduire le bruit électronique extérieur. Et si tu utilise un ADC regarde la bande passante, tu pourras mettre un filtre passe bas avec un fréquence de coupure un peu supérieur, ca permettra de filtrer le bruit en partie.

                    Après il faut penser à plein de détails :
                    - Essayer de faire un circuit imprimé maison pour l'ADC et son alim
                    - Alimenter l'ADC avec une tension propre (passer par un régulateur type 7805 voire une référence de tension, ne pas le brancher directement sur la pile ou l'USB)
                    - Si les capteurs sont reliés avec des cables, torsader le cable de données avec un cable de masse et faire la longueur la plus petite possible.
                    - Blinder le montage
                    - Choisir des composants de qualité.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      13 juillet 2012 à 13:50:58

                      Merci zeqL, je vais essayer tout ça, et je vous tiens au courant.

                      • Partager sur Facebook
                      • Partager sur Twitter

                      [Arduino] Entrée analogique

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown