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.
Cas possibles
Attention il existe 4 cas possibles :
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 :
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.
$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Ω.
Le bouton-poussoir étant pressé, le schéma équivalent devient :
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Ω :
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 :
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).
De plus toujours d'après la datasheet pour détecter un état haut il faut que le seuil soit supérieur à 2V :
On a donc $R_{28} = (U_{AM} - V_{IHmin}) / I_{IH} = (5 - 2)/300u = 10kΩ$