Arithmétique des résistances

Réaliser une calculatrice de résistance équivalente

En électronique, on peut associer deux résistances soit en série, soit en parallèle. Des résistances sont associées en série si elles sont traversées par le même courant. Elles sont associées en parallèle si elles ont la même tension à leurs bornes. Dans chaque cas, on peut calculer une résistance équivalente, qui est la valeur de la résistance permettant d’avoir le même comportement électrique que les deux résistances associées.

On peut reproduire ce processus d’association autant de fois qu’on veut et combiner des résistances en série et en parallèle dans tous les sens. Encore une fois, on peut calculer une résistance équivalente, mais les calculs sont pénibles à écrire, même avec une calculatrice évoluée !

Dans ce billet, je m’amuse à réaliser une calculatrice de résistance équivalente, qui utilise une notation simple pour décrire des associations arbitrairement compliquées de résistances en série et en parallèle.

Notation

Habituellement, on décrit les circuits électriques avec des diagrammes. Cependant, j’ai envie de faire une simple interface en ligne de commande pour ma calculatrice, donc j’aimerais une notation sous forme de texte permettant de décrire les associations de résistance en série et en parallèle.

Association en série

Sur le diagramme ci-dessous, les deux résistances sont en série.

     ┌────────┐   ┌────────┐
A ───┤   R1   ├───┤   R2   ├─── B
     └────────┘   └────────┘

On notera cette association R1 : R2.

La valeur de la résistance équivalente est la somme des deux résistances en série : R1 : R2 = R1 + R2.

Association en parallèle

Sur le diagramme ci-dessous, les deux résistance sont en parallèle.

       ┌────────┐
     ┌─┤   R1   ├─┐
     │ └────────┘ │
A ───┤            ├─── B
     │ ┌────────┐ │
     └─┤   R2   ├─┘
       └────────┘

On notera cette association R1 | R2.

L’inverse de la résistance équivalente est la somme des inverses des deux résistances en parallèle. En mettant sous une forme présentable, cela revient à : R1 | R2 = R1 * R2/(R1 + R2).

Multiples associations

On peut combiner les deux opérations précédentes à loisir, à condition de mettre des parenthèses pour indiquer l’ordre des associations.

Par exemple, (R1 | R2) : R3 correspond au schéma ci-dessous.

       ┌────────┐
     ┌─┤   R1   ├─┐
     │ └────────┘ │   ┌────────┐
A ───┤            ├───┤   R3   ├─── B
     │ ┌────────┐ │   └────────┘
     └─┤   R2   ├─┘
       └────────┘

On pourrait calculer la valeur de la résistance équivalente en combinant les règles de calcul vue ci-avant, mais c’est déjà trop pour mon degré de paresse.

Réalisation de la calculatrice

J’ai fait les choix suivants pour réaliser ma calculatrice :

  • la faire en Rust ;
  • n’utiliser aucune dépendance en dehors de la bibliothèque standard.

Rust est assez expressif et permet d’exprimer certaines idées de manière relativement naturelle. Ça permet de se faire plaisir en ne galérant pas trop sur certains sujets, tout en se concentrant sur ce que je voulais expérimenter, à savoir la compilation à la main (d’où le choix de n’utiliser aucune dépendance hors bibliothèque standard).

Le résultat s’appelle resarith et est disponible sur GitHub.

Exemple d’utilisation

Il s’agit d’un programme en ligne de commande. On lui fournit une expression et il renvoie la résistance équivalente.

Par exemple, pour calculer la résistance équivalente à une résistance de 1.5 Ω en série avec une association de deux résistances en parallèle (de respectivement 2 Ω et 3 Ω), on exécute la commande :

$ resarith "1.5 : (2 | 3)"
2.7

Architecture

L’architecture du programme est très traditionnelle et s’appuie sur :

  • un analyseur lexical,
  • un analyseur syntaxique (ou parser),
  • une fonction d’évaluation.

L’analyseur lexical interprète l’entrée du programme en termes de tokens, c’est-à-dire d’éléments abstraits facile à traiter. Il se limite à la reconnaissance de motifs simples tels que des parenthèses ouvrantes ou fermantes, des opérateurs, des espaces ou des nombres. Il n’a aucune connaissance sur la structure que devrait avoir une expression.

Les tokens sont transmis à l’analyseur syntaxique qui s’en sert pour construire un arbre décrivant de manière abstraite l’assemblage de résistances. Cette partie du programme est celle qui contient tout ce qu’il faut pour décider du respect des règles. L’analyseur syntaxique sait par exemple que les parenthèses peuvent être imbriquées ou qu’un opérateur est entouré de deux sous-expressions.

La fonction d’évaluation réduit l’arbre en calculant de proche en proche les résistances équivalentes, puis renvoie le résultat final une fois qu’il n’y a plus aucune réduction possible. C’est la seule partie du programme qui connaît les règles de calcul de résistances. Dans un sens, c’est cette partie qui contient le cœur du programme, tout le reste n’étant que des préparatifs pour cette étape cruciale.

Épilogue mathématique

Dans la première section, nous avons définit deux opérations : la mise en série, et la mise en parallèle. Ces opérations ont quelques propriétés mathématiques familières.

Commutativité

Quand on associe deux résistances en série, l’ordre n’a aucune importance, la résistance équivalente sera la même ! Autrement dit R1 : R2 = R2 : R1.

Pour la mise en parallèle, on a la même propriété de commutativité : R1 | R2 = R2 | R1.

Associativité

Quand on associe deux résistances en série, et qu’on en associe encore une autre, tout se passe comme si on associait une résistance en série avec un groupe de deux résistances mises en série préalablement. Autrement dit, (R1 : R2) : R3 = R1 : (R2 : R3). Cette propriété justifie que l’on puisse omettre les parenthèses sans ambiguïté dans ce cas-là et écrire R1 : R2 : R3.

De même pour les résistances en parallèle, on a (R1 | R2) | R3 = R1 | (R2 | R3) et on peut écrire de manière équivalente : R1 | R2 | R3.

Cette notation est pratique pour économiser des parenthèses, mais par soucis de simplicité, je ne l’ai pas implémenté pas dans ma calculatrice.

Existence d’un élément neutre

Quand on associe une résistance en série avec une résistance nulle (c’est-à-dire un court-circuit), c’est comme ne rien faire : on retrouve la résistance d’origine. Autrement dit : R : 0 = R et 0 : R = R. La résistance nulle est un élément neutre pour l’opération de mise en série.

Pour la mise en parallèle, l’élément neutre est la résistance infinie (c’est-à-dire un circuit ouvert). Autrement dit : R | inf = R et inf | R = R.

Ces propriétés sont celles de monoïdes commutatifs. C’est aussi le cas des entiers naturels avec l’addition ou la multiplication, par exemple.


Bref, tout ça est fort amusant, mais le problème inverse est aussi potentiellement amusant (et plus dur) : quelle est l’association la plus simple de résistances standardisées pour atteindre une résistance cible avec une précision donnée ?

8 commentaires

quelle est l’association la plus simple de résistances standardisées pour atteindre une résistance cible avec une précision donnée ?

Une seule résistance, à cause de la conception des séries. Par exemple, en série E12 donnée pour ±10%, la résistance notée 470 Ω peut voir sa valeur réelle se promener n’importe où entre 423 Ω et 517 Ω. La valeur précédente de la série, 390 Ω peut monter jusqu’à 429 Ω, et la suivante, 560 Ω peut en fait descendre jusqu’à 504 Ω. Il y a bien recouvrement des valeurs selon les tolérances, et aucun trou dans la série.

Donc normalement, si tu as besoin d’une précision supérieure, soit tu tapes dans les séries de plus haute tolérance, soit il faut que tu sortes un multimètre et que tu vérifies ce que tu as réellement comme résistance en pratique dans ton matériel.

Sachant qu’il y a des astuces. Par exemple, la série E12 n’est plus fabriquée, les résistances marquées en tolérance ±10% sont en fait extraites de la série E24, donc même en mesurant l’intégralité de celle que tu as à disposition, tu ne trouveras jamais les valeurs intermédiaires (430 Ω ou 510 Ω dans l’exemple précédent) : tu n’auras pas d’autre choix que d’en associer deux, ou de prendre une résistance de la série E24.

PS : le problème peut devenir intéressant si tu peux indiquer au programme « voici les résistances dont je dispose réellement » (valeurs et tolérances), parce qu’associer des résistances dont tu ne connais pas les valeurs réelles (dont tu as uniquement la valeur théorique et la tolérance) va avoir des effets de bords assez amusants sur la tolérance de la valeur finale.

H.S. mais au vu de la complexité de dessiner des résistances en parallèle / série (la même que j’ai eue pour représenter la pile d’exécution dans mes articles), vous avez envisagé d’utiliser quelque chose pour générer des beaux schémas ? Un peu comme avec KaTeX et MathJax ?

@Ge0 : J’ai voulu éviter Inkscape et faire ça vite fait en texte. En pratique, j’y ai passé plus de temps, mais au moins j’ai pas eu de fichiers séparés à gérer. Sinon, intégrer un outil pour décrire textuellement des schémas est une idée qui est régulièrement remise sur la table sur le site. Si on pouvait embarquer du SVG directement dans zmarkdown, ça serait parfait pour moi ceci dit.

@SpaceFox : J’avais en tête de le faire d’un point de vue purement mathématique, c’est-à-dire en considérant des résistances parfaites sur une échelle standardisée (ou quelconque à vrai dire). Du coup, ça ressemble à ce que tu décris avec les valeurs exactes. Le but n’est clairement pas de faire de la conception.

En fait je te demande ça parce que j’ai découvert tikz sur LaTeX et que je trouve cet outil assez puissant. Je ne sais pas s’il est possible d’utiliser des packages LaTeX pour générer des images ceci dit (il ne faut pas trop pousser, j’ai simplement effleuré la chose).

Et est-ce que tu as une méthode pour calculer la résistance équivalente associée à n’importe quel "circuit" de résistances (par exemple, modélisé par un graphe fini où tu distingues deux nœuds en particulier) ?


Il y a une interprétation amusante de la résistance équivalente quand on étudie les marches aléatoires sur les graphes. Je considère un graphe orienté GG dont je distingue deux nœuds xx et yy. Toutes les arêtes ee de GG sont étiquetées par une "conductance" ce0c_e\ge 0.

Maintenant je regarde la marche aléatoire suivante : X0=xX_0=x et si Xn=uX_n=u, je choisis Xn+1X_{n+1} comme étant un voisin vv de uu de manière proportionnelle à cuvc_{uv} (formellement P(Xn+1=vXn=u)=cuv/w:(u,w)Ecuw\mathsf{P}(X_{n+1}=v\mid X_n=u)=c_{uv}/\sum_{w:(u,w)\in E} c_{uw}). Je définis (Yn)(Y_n) exactement de la même manière, mais avec Y0=yY_0=y au lieu de xx. Il se trouve qu’alors, la résistance équivalente RR de mon circuit entre xx et yy vérifie l’équation suivante (cf. théorème 5 de ces notes par exemple) :

ReEce=E[inf{n0:Xn=y}]+E[inf{n0:Yn=x}].R\sum_{e\in E} c_e=\mathsf{E}\left[\inf \{n\ge 0 : X_n=y\}\right]+\mathsf{E}\left[\inf\{n\ge 0 : Y_n=x\}\right].

(Le membre de droite peut aussi être vu comme l’espérance du premier temps où, en partant de xx, on revient à xx après être passé par yy.) Est-ce que cette formule a une interprétation physique ? (par exemple au niveau du trajet des électrons ?)

+0 -0

Et est-ce que tu as une méthode pour calculer la résistance équivalente associée à n’importe quel "circuit" de résistances (par exemple, modélisé par un graphe fini où tu distingues deux nœuds en particulier) ?

Si tu as un réseau fini quelconque de résistance, tu peux appliquer les lois des nœuds et des mailles. C’est faisable de manière systématique et ça se résout ensuite très bien avec les outils de l’algèbre linéaire.

Il y a une interprétation amusante de la résistance équivalente quand on étudie les marches aléatoires sur les graphes.

Le lien entre les réseaux électrique et les marches aléatoires est vraiment amusant. Il y a même un bouquin entier sur le sujet (et facile à lire !), dont je parlais dans un billet.

Est-ce que cette formule a une interprétation physique ? (par exemple au niveau du trajet des électrons ?)

Lucas-84

Je ne suis pas sûr qu’il y ait d’interprétation physique intéressante. Les lois des nœuds et des mailles, dont découlent tout le reste, résultent essentiellement des équations de Maxwell, où tout est déterministe. Après les paramètres principaux de ses équations peuvent eux-mêmes être expliqués par de la physique au niveau microscopique où on retrouve des proba, mais je ne saurais pas détailler plus sans risque de dire des âneries.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte