Arduino : branchement d’un interrupteur, quelle valeur pour la résistance pull-up/pull-down ?

Niveau : confirmé

f-leb

Dans un tutoriel précédent intitulé Comment effectuer le branchement d’un interrupteur, vous avez pu comprendre l’utilité des résistances de rappel (pull-down) ou de tirage (pull-up) dans les montages avec un interrupteur (ou bouton-poussoir) raccordé à un connecteur numérique de l’Arduino configuré en entrée.

Une résistance de valeur 10 kΩ était recommandée, mais sans justification. Et pourquoi pas 20 ou 30 kΩ, voire plus ? Et avec 1 kΩ, ça ne fonctionne plus ?

Cet article se propose de vous expliquer comment déterminer la valeur de la résistance de tirage ou de rappel.

Commentez

- Titre : Arduino : branchement d’un interrupteur, quelle valeur pour la résistance pull-up/pull-down ?

- Auteur : f-leb

- Parution : 6 octobre 2022

- Public visé :

- Licence : Copyright ® 2022 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Voir également :

- Les Cahiers Pratiques Arduino, une série de tutoriels pour débuter

Sommaire

- I. Cas du montage avec résistance de tirage (pull-up)

- I-A. Circuit ouvert (bouton-poussoir relâché)

- I-B. Circuit fermé (bouton-poussoir pressé)

- II. En résumé

- III. Ressources sur Developpez

I - Cas du montage avec résistance de tirage (pull-up)

On repart du montage ci-dessous avec une résistance de tirage (pull-up) :

On analyse les deux situations : circuit ouvert et fermé.

I-A - Circuit ouvert (bouton-poussoir relâché)

Le schéma équivalent est le suivant :

Une entrée de microcontrôleur consomme très peu de courant. Ici, le courant IIH qui rentre dans le microcontrôleur circule aussi dans la résistance et va donc induire une tension à ses bornes (selon la loi d’Ohm).

En appliquant la loi des mailles et la loi d’Ohm, la tension en entrée peut être calculée avec la formule :

U = Vcc - R x IIH, avec Vcc = 5 V

La valeur de l’intensité IIH est une caractéristique du microcontrôleur que l’on peut retrouver dans sa documentation technique (datasheet) au chapitre DC Characteristics.

Paramètre

Condition

Symbole

Mini

Typique

Maxi

Unité

Courant de fuite broche en entrée
(Input leakage current IO pin)

Vcc = 5,5 V
broche à l’état haut

IIH

1

μA

Vcc = 5,5 V
broche à l’état bas

IIL

1

μA

IIL est le courant consommé par l'entrée lorsqu'elle est à l'état bas (c'est un courant qui sort du composant), et IIH est le courant consommé par l'entrée lorsqu'elle est à l'état haut (c'est un courant qui entre dans le composant).

Ainsi, quel que soit l’état de l’entrée, le courant de fuite ne dépasse pas 1 μA.

Ce courant de fuite va induire une chute de tension au niveau de l’entrée :

U = 5 - 10 000 x 0,000001 = 4,99 V avec une résistance de 10 kΩ.

Cas du bouton-poussoir relâché : Vcc = 5 V, résistance pull-up R = 10 kΩ, et courant de fuite = 1 μA.

Quand on vous racontait que l’entrée était « tirée » au potentiel 5 V, ce n’était donc pas tout à fait vrai, mais on reste suffisamment proche de cette valeur pour que le microcontrôleur y voie un niveau logique haut (HIGH). D’ailleurs, même avec une résistance dix fois plus grande, l’entrée serait à la tension U = 5 - 100 000 x 0,000001 = 4,9 V, à un niveau toujours suffisant pour la détection d’un niveau logique haut (HIGH)(1).

I-B - Circuit fermé (bouton-poussoir pressé)

Le bouton-poussoir étant pressé, le schéma équivalent devient :

Si l’on note IR le courant qui traverse la résistance, ce courant s’additionne avec le courant de fuite au niveau du nœud (loi des nœuds en électricité) pour retourner à la masse GND.

Le nœud à l’entrée D2 de l’Arduino étant au potentiel 0 V, on peut alors écrire la loi d’Ohm aux bornes de la résistance : Vcc = R x IR, soit IR = Vcc / R.

On remarque que plus R est grand, et moins le courant consommé sera élevé, un bon point à retenir pour faire durer la batterie de votre système.

Avec Vcc = 5 V et la valeur usuelle recommandée R = 10 kΩ, IR = 0,5 mA, un courant déjà considéré comme faible dans la plupart des applications embarquées sur Arduino.

- Puissance dissipée dans la résistance

La puissance dissipée dans la résistance (sous forme de chaleur, effet Joule) peut être calculée avec la formule P = Vcc x IR. Et comme IR = Vcc / R (loi d’Ohm), P = Vcc^2 / R.

Avec Vcc = 5 V, P = 25 / R.

Avec R = 10 kΩ, P = 2,5 mW (milliwatt), soit 100 fois en dessous des puissances maximales de la plupart des résistances que l’on trouve dans les kits Arduino (0,25 W).

Si l’on trace la courbe de la puissance dissipée en fonction de la valeur de la résistance jusqu’à 100 kΩ, on remarque qu’elle augmente très rapidement pour des résistances inférieures à 10 kΩ :

II - En résumé

Pour une résistance de tirage (pull-up) :

- avec une résistance de valeur inférieure à 10 kΩ, vous avez un tirage « fort » au 5 V (4,99 V pour une résistance de 10 kΩ), alors qu’il est un peu moins fort si vous augmentez la valeur de la résistance (4,90 V pour 100 kΩ). On n’a pas vraiment de critère de choix ici, une entrée entre 3 et 5 V sera vue comme un état logique haut de toute façon ;

- avec une résistance de 10 kΩ, le courant consommé lorsque le bouton est appuyé est de 0,5 mA en théorie. C’est peu si l’on compare à la bagatelle des 40-50 mA que consomme « à vide » une carte Arduino Uno officielle, rien que les LED en surface de la carte consommant déjà quelques milliampères chacune. Augmenter la valeur de la résistance diminuerait un peu la consommation, cela peut valoir le coup si votre montage cumule plusieurs interrupteurs bistables (cas des microinterrupteurs DIP ci-dessous).

Microinterrupteurs DIP (DIP Switch), image CC Sparkfun

Microinterrupteurs DIP avec ses résistances de rappel externes

Dans d’autres circonstances, avec d’autres matériels où une faible consommation est requise, vous auriez intérêt à augmenter la valeur de la résistance, mais dans ce cas, vous n’auriez pas choisi une Arduino Uno pour votre système (mais pourquoi pas son microcontrôleur AVR avec l’équipement minimal).

Il y a toutefois d’autres considérations plus difficiles à quantifier :

- si la ligne est capacitive, le temps de montée du signal augmente avec la valeur de la résistance. L’effet est certainement négligeable pour un interrupteur actionné manuellement ;

- si la résistance est trop élevée (mais sans dépasser 2 MΩ, sinon la tension à l’entrée de l’Arduino devient inférieure à 3 V lorsque le bouton est relâché et la détection de l’état haut n’est plus garantie), le courant qui circule devient très faible et même s’il ne s’oppose pas au courant de fuite nécessaire au bon fonctionnement de l’entrée, votre circuit devient sensible aux bruits environnants.

Conclusion : pour un interrupteur actionné manuellement et une carte Arduino (de type Uno, Mega…), une résistance de tirage de 10 kΩ conviendra déjà très bien. Une valeur un peu inférieure ne perturbe aucunement le fonctionnement, mais peut augmenter inutilement la consommation. Aussi, une valeur comprise entre 20 et 50 kΩ (comme celle de la résistance de tirage interne de l’Arduino Uno) est adaptée dans la très grande majorité des cas. Pour des applications particulièrement sensibles à la consommation, vous pouvez essayer au-delà de 50 kΩ (sans dépasser 2 MΩ), mais votre circuit est alors moins immunisé face aux environnements bruyants. Tout est histoire de compromis…

La conclusion pour une résistance de rappel (pull-down) est identique.

III - Ressources sur Developpez

- Les Cahiers Pratiques Arduino : comment effectuer le branchement d’un interrupteur

- Manuel de laboratoire Arduino : les entrées numériques

- Pull-up & Pull-down !

Et si vous avez encore des questions, n’hésitez pas à ouvrir une discussion dans le forum Arduino.

(1)D’après la documentation du microcontrôleur AVR, un état haut sera détecté si la tension à l’entrée d’une broche est supérieure à 0,6 x Vcc, soit 0,6 x 5 = 3 V. Cet état haut sera toujours garanti à condition que la résistance de tirage reste inférieure à 2 MΩ.