Filtre anti-rebond pour boutons poussoirs

De MediaWiki UOF
Aller à la navigation Aller à la recherche

Introduction

Un bouton poussoir permet de fermer (ou ouvrir) momentanément un circuit électrique. Lors de la fermeture, des lamelles métalliques viennent en contact l'une de l'autre. A cette occasion, il est fort possible que des "rebonds" apparaissent. C'est à dire que la fermeture du circuit ne soit pas franche mais soumise à des on / off très rapides. Dans le circuit suivant, un bouton poussoir permet de mettre l'entrée d'un processeur à +V tandis qu'elle est maintenue en permanence à 0V par une résistance de 10 ko.

Bouton poussoir pull down.png

LA courbe théorique attendue est la suivante : la tension, initialiement à 0 monte soudainement à +V.

Filtre anti rebond pas de filtre.png

La réalité est tout autre :

Filtre anti rebond pas de filtre.png

LA tension ne s'établit pas soudainement mais par a-coups. Ces a-coups sont dus au rebond des lames composant le contacteur les unes sur les autres. Ainsi la tension à l'entrée du processeur va passer par des successions de 1 et de 0 de différentes durées puis par des tensions transitoires que le processeur n'arrivera pas à associer à des niveaux logiques. Evidemment, ces transitoirs ne seront pas du gout du processeur qui n'arrivera pas à traiter ces informations de manière cohérente.

Anti rebond logiciel

Dans un programme qui scrute l'état d'un bouton (qui "regarde" périodiquement si le bouton est enfoncé ou non) l'état de l'entrée n'est analysée qu'une seule fois, à chaque scrutation. En insérant une temporisation dans le programme on laisse passer les transitoirs sans les lire etdonc ils ne sont pas gênants.

Impossibilité d'utiliser l'anti rebond logiciel

Cependant, dans certaines circonstances, il n'est pas possible de faire appel à ce type de filtre. Par exemple lors du réveil de l'ESP32 par un des ports RTC. Dans ce dernier cas, le processeur se réveille, le programme démarre et va scruter les ports d'entrée savoir quel port à déclenché le réveil du processeur. Dans certains cas, l'analyse des ports peut se produire au moment où la tension est retombée à 0 et donc conduire à une mauvaise interprétation de la cause du réveil.

Pour pallier ce problème, il existe une solution simple qui consiste à placer un condensateur en parallèle sur la résistance de pull-down. Cependant la valeur devra être choisie judicieusement. En effet, pour être considéré comme un état haut (et non incertain) la tension présente sur la borne de réveil devra être au moins égale à 0.75 x Vcc (soit 2.5V pour l'ESP32 alimenté en 3v3 ce qui correspond à 5 carreaux sur les écrans ci-dessous). Les exemples suivants montrent les variations de la tension présentée au processeur lors de l'appui sur le bouton pour différents couples de résistances et condensateurs :


Filtrage avec résistance 10k et condensateur 10nF. Le condensateur est trop faible et restitue l'énergie trop rapidement. Le créneau "bas" n'est que très peu atténué. Filtre anti rebond-10k-10nF.png
Filtrage avec résistance 10k et condensateur 100nF. L'attenuation est plus marquée mais les créneaux "bas" restent encore largement en dessous du seuil de 2.5V ce qui risque d'apporter de nombreuses erreures de détection. Esp32-wakeup1-10k-100nF.png
Filtrage avec résistance 10k et condensateur 220nF. L'atténuation des créneaux "bas" ets presque correcte mais de petits pics en dessous de 2.5V suggèrent quelques défauts d'analyse à venir. Esp32-wakeup1-10k-220nF.png
Filtrage avec résistance 22k et condensateur 22nF. Esp32-wakeup1-22k-22nF.png
Filtrage avec résistance 22k et condensateur 220nF Esp32-wakeup1-22k-220nF.png