Resistors_pull - Kasimashi/Systemes-embarques GitHub Wiki

Résistances de pull up et pull down

Résistance de pull up / pull down

Elle permet de définir à coup sûr l'état d'une sortie / entrée. Dans le cas suivant l'entrée du MCU est à Vcc quand le switch n'est pas appuyé et à GND quand on appui sur le switch. On parle ici d'un pull-up.

Les résistances pull-up et pull-down sont souvent utilisées lors de l'interface d'un commutateur ou d'une autre entrée avec un microcontrôleur ou d'autres portes numériques. La plupart des microcontrôleurs ont des résistances pull-up et/ou pull-down programmables intégrées, ce qui signifie que moins de composants externes sont nécessaires. Il est possible d'interfacer directement un switch avec ces microcontrôleurs. Les résistances pull-up sont en général utilisées plus souvent que les résistances pull-down, bien que certaines familles de microcontrôleurs proposent à la fois des résistances pull-up et pull-down.

Ils sont souvent utilisés pour fournir un flux de courant contrôlé dans un capteur résistif avant la conversion analogique-numérique du signal de tension de sortie du capteur.

Une autre application est le bus de protocole I2C, où des résistances de rappel sont utilisées pour permettre à une seule broche d'agir comme une entrée ou une sortie. Lorsqu'elle n'est pas connectée à un bus, la broche flotte dans un état à haute impédance.

Des résistances pull-down sont également utilisées sur les sorties pour fournir une impédance de sortie connue.

image

Cas possibles

Attention il existe 4 cas possibles :

image

Déterminer la valeur de la résistance

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 ?

En reprenant le premier schéma dans le cas du circuit ouvert on a : ce schéma équivalent :

image

Une entrée de microcontrôleur consomme très peu de courant. Ici, le courant $I_{IH}$ 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 - RI_{IH}$, avec $Vcc = 5 V$

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

image

$I_{IL}$ est le courant consommé par l'entrée lorsqu'elle est à l'état bas (c'est un courant qui sort du composant), et $I_{IH}$ 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 \times 0,000001 = 4,99 V$ avec une résistance de 10 kΩ.

image

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

image

Si l’on note $I_R$ 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 = RI_R$, soit $I_R = 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Ω$, $I_R = 0,5 mA$, un courant déjà considéré comme faible dans la plupart des applications embarquées sur Arduino.

Puissance dissipé 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Ω :

image

En 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.

Exemple

Pour calculer la bonne valeur il faut se référencer au datasheet du composant par exemple ici : pour le PIC18F26K22 (p428) on a :

image

Si on cherche la bonne valeur à mettre à R28 dans ce cas on a :

  • $R_{28} = U_{AB} / I_{IH}$

Dans notre cas on a VCC = 5V donc le courant de fuite max est à fixé à 300uA au maximum (qui part vers le microcontrôleur).

image

De plus toujours d'après la datasheet pour détecter un état haut il faut que le seuil soit supérieur à 2V :

image

On a donc $R_{28} = (U_{AM} - V_{IHmin}) / I_{IH} = (5 - 2)/300u = 10kΩ$