Club robotique de Sophia-Antipolis

Accueil > Robopedia > Electronique > Montages électroniques > Filtrer un signal analogique

Filtrer un signal analogique

samedi 9 août 2008, par Julien Holtzer

Parfois, tout se passe bien : vous connectez un nouveau capteur à votre robot, vous faites l’acquisition et vous
obtenez de belles valeurs, comme sur la copie d’écran ci-dessous :
Bien !

JPEG - 46.6 ko

Ici, le signal est propre. même les rapides oscillations ont été faites exprès et ont été correctement perçues par le capteur.

Mais certaines fois, vous n’aviez pas pensé que le signal analogique provenant de votre capteur serait si brouillé, et même si vous n’avez besoin que de deux informations (on/off ou valeur min / valeur max), vous voilà avec un robot incapable de réagir correctement.

C’est le cas avec l’exemple ci-dessous :

JPEG - 110.8 ko

Pas bien ! Alors que l’information est simple (oui ou non), le signal est complètement brouillé.

Alors que faire ? Nicolas nous donne quelques indices.


Un filtre passe-bas simple : un condensateur, il n’y a pas de base de temps mais si c’est du temps "humain", il peut être gros (>1uF), on peut aussi ajouter une résistance série (la fréquence de coupure sera à RC).

Le circuit le plus propre, c’est un "debouncer" (anti-rebond). Cela doit ressembler à un ampli à hystérésis mais avec en plus une constante de temps minimum. (cet article a l’air pas mal)

Un moyen simple pour éviter les parasites est aussi de forcer la quantité de courant dans le circuit. Une entrée CMOS ayant une impédance très élevée très peu de courant circule, le circuit est donc très sensible
aux parasites. Pour lisser le signal, il suffit parfois de baisser la valeur de la résistance de pull-up. (100kOhms voir 10kOhms) (baisser ou en mettre une).

Et bien on va essayer de mettre en pratique chacune de ces solutions.

Avant toute chose, expliquons pourquoi nous avons ce genre de signal. Il ne s’agit pas d’un capteur classique, mais d’une détection d’un contact tactile d’un être humain sur un bouton métallique.

Voici le schéma du montage (réalisé sous Fritzing) et une photo du potentiomètre. Dans notre cas, le potentiomètre fonctionne très bien (c’est la première capture en haut de cette page) mais c’est le "contact" qui est brouillé.

JPEG - 364.4 ko

Photo du potentiomètre

JPEG - 91.6 ko

Datasheet disponible ici

Nicolas nous en dit plus sur les raisons de ce brouillage :


La mise à la masse est effectuée par le corps humain, ce qui revient à un mauvais pull-down (résistance élevée). Peut-être qu’une pull-up genre 1MOhms pourrait aider ? (cela fait un courant de rappel plus faible mais qui existe tout de même). Ensuite, il faut un sérieux filtre passe bas.

 Les résistances de tirage

Tout d’abord, nous allons essayer de modifier la "pull-up", ou résistance de tirage qui effectivement permet de donner une référence haute (la tension nominale, 5V, sur nos cartes) quand l’entrée n’est pas fixée, qu’elle "flotte dans le vide" (comme un interrupteur ouvert par exemple).

Effectivement, pas de pull-up dans le montage d’où est tiré le second screenshot. On va donc y remédier. La copie d’écran suivante est faite avec une résistance de pull-up de 100 kOhms :

JPEG - 26.9 ko

C’est pas mal. On pourrait s’en contenter et mettre un seuil dans le logiciel, mais on n’a toujours pas de distinction tout ou rien permettant de se connecter sur une entrée numérique.

Tiens, voyons ce que donne la résistance de pull-down [1]. Le diagramme suivant montre naturellement l’inverse : des parasites au niveau haut et une mise à la masse nette.

JPEG - 52.7 ko

Note sur les captures d’écran

Ces captures d’écran sont réalisées avec l’oscilloscope minimal de Sofian Audry réalisé avec Processing. Chaque valeur reçue sur liaison série est affichée sur la gauche et les anciennes valeurs glissent : il faut donc considérer la ligne de temps de droite (plus ancien) vers la gauche (plus récent). C’est important pour la suite.

 Les filtres C et RC

Sur le conseil de Nicolas, essayons de mettre un condensateur. Le seul qui traine sur mon bureau est un 10μF, je le connecte avec le - sur la masse et le + sur l’entrée.

Voici le résultat :

JPEG - 23.8 ko

Plus de parasites, mais le signal descend lentement et surtout il ne remonte pas ! On va donc remettre un coup de pull-up :

JPEG - 27.6 ko

Et voilà, le signal a grimpé d’un coup (oui, je branche et je débranche à chaud les composants, chuuut).

Donc le condensateur fait descendre le signal quand le capteur est actif, et la résistance de tirage le fait remonter quand le capteur n’est plus actif, très bien ça !

Voila le résultat : un filtre RC.

JPEG - 25.9 ko

Il faudra ajuster les valeurs pour que le signal descende plus vite et plus bas :

Photo-souvenir du montage en RC :

JPEG - 80.2 ko

La résistance entre le signal et la tension Vcc et le condensateur entre la masse et le signal.

Bien choisir la valeur du condensateur

Suite à une discussion sur le forum Arduino, Gozaki et Fdufnews nous donnent une piste plus précise, merci à eux !


Je commencerais plus bas avec un R série de 100k dans l’entrée analogique et 100nF... si c’est vraiment le 50 Hz qui met le bronx faudra monter en capacité... Attention, quand même car on introduit du déphasage... si la mesure intervient dans une boucle de régulation, on peut créer de l’instabilité...


Attention une résistance trop élevée à une influence négative sur le temps de réponse de l’ADC. La tension à l’entrée de l’ADC n’a pas le temps de se stabiliser et la mesure est imprécise. Préférer une valeur de résistance dans les 10K max et augmenter le condensateur si nécessaire. Faire attention aussi au bruit capté par les connexions. Il ne faut pas perdre de vue que le LSB du convertisseur n’est que de 5mV.

Un message, un commentaire ?

modération a priori

Attention, votre message n’apparaîtra qu’après avoir été relu et approuvé.

Qui êtes-vous ?
  • [Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici
  • Ce formulaire accepte les raccourcis SPIP [->url] {{gras}} {italique} <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document