I. Bien paramétrer son document▲
I-A. CircuiTikZ : c’est quoi ?▲
CircuiTikZ est un module complémentaire (appelée également package) kitxmlcodeinlinelatexdvp\LaTeXfinkitxmlcodeinlinelatexdvp permettant de tracer facilement et gratuitement des circuits électriques.
Par exemple, en quelques lignes de code, on peut arriver à tracer le schéma interne d’un AOP 741 comme ceci :
À la fin de ce tutoriel, vous aurez les bases pour tracer des circuits électriques avec des dipôles : pour des schémas plus complexes (comme celui juste au-dessus), il faudra attendre un petit peu la suite dans un prochain tutoriel.
I-B. Packages à utiliser▲
Le principal package, celui qui fait l’objet de ce cours, est le package CircuiTikZ. Comme tout package, il faut placer dans le préambule du document :
\usepackage
{circuitikz}
Comme son suffixe le laisse supposer, CircuiTikZ est lié à TikZ : le chargement du package CircuiTikZ entraîne le chargement du package TikZ. Dit autrement, les commandes utilisées dans CircuiTikZ ne sont « que » des commandes TikZ.
Avec le chargement de ce package, on est parés, on va pouvoir commencer à tracer des circuits électriques (ce qui tombe bien puisque c’est son rôle !). Toutefois, il peut être intelligent de rajouter quelques packages supplémentaires qui permettront de compléter, élégamment, le circuit électrique tracé.
Le premier d’entre eux est le package siunitx (\usepackage
{siunitx}) : il permet d’ajouter proprement des nombres et les unités. Il s’agit d’un package très complet qu’il est bon d’utiliser dès lors que l’on souhaite faire apparaître des chiffres, et encore plus des grandeurs physiques ou chimiques (donc avec des unités).
Il est également possible d’appeler le package siunitx comme option du package CircuiTikZ : \usepackage
[siunitx]{circuitikz}
Pour les utilisateurs français, le package babel (chargé par la commande usepackage[french]{babel}) est souvent utilisé. Le problème est qu’il engendre des incompatibilités avec quelques packages comme TikZ et donc comme CircuitTikZ à cause des caractères actifs, en particulier le point-virgule (ou semi-colon en anglais). Pour y remédier, deux solutions :
- si vous n’utilisez CircuitTikZ que pour créer des circuits sans rajouter de texte, alors je vous conseille de ne pas charger le package babel en préambule du document ;
- si vous êtes susceptible d’ajouter du texte en plus de schéma électrique (pour un cours par exemple), il vous faudra déclarer en complément
\usetikzlibrary
{babel} dans le préambule.
Enfin, si vous n’utilisez CircuitTikZ que dans le seul but de créer les circuits électriques, l’utilisation de la classe de document standalone (par \documentclass
[border = 1mm]{standalone}) peut vous faciliter le travail pour l’intégrer par la suite sans avoir à se tracasser du blanc qui pourrait venir compléter votre schéma.
I-C. Paramètres du document▲
Pour faciliter la compréhension et la lisibilité des ajouts, j’ai opté pour les conventions suivantes :
- les noms de commandes, packages, options sont notés en italique ;
- Dans les codes indiqués, la plupart du temps, ni le préambule, ni le begin{document}/ end{document}, ni le begin{circuitikz}/ end{circuitikz} ne seront écrits. Il va donc de soi qu’il ne faudra pas que vous les oubliiez, sans quoi votre compilateur va grogner !
I-D. Représentation européenne des composants et tensions▲
Dans un document kitxmlcodeinlinelatexdvp\LaTeXfinkitxmlcodeinlinelatexdvp, copier le code suivant (ne vous inquiétez pas si vous ne comprenez pas toutes les lignes, elles seront développées plus tard) :
2.
3.
4.
5.
\begin
{document}
\begin
{circuitikz}
\draw
(0,0) to [R,v=$U_1$
] (2,0);
\end
{circuitikz}
\end
{document}
On obtient le circuit électrique ci-contre :
Il est composé d’une résistance et une flèche de tension courbe : en fait, le package CircuitTikZ suit les conventions américaines pour représenter les composants et les flèches de tension.
Pour passer en mode « européen » avec les flèches droites, il faut indiquer l’option straightvoltages lors du chargement du package CircuitTikZ : \usepackage
[straightvoltages]{circuitikz}
Une fois ceci fait, on obtient la représentation suivante :
Pour que les composants soient représentés à la sauce européenne, il faut préciser european comme option du package : \usepackage
[european, straightvoltage]{circuitikz}
On retrouve alors une image plus classique :
Il faut quand même parler d’une option importante : si elle n’est pas définie, la compilation risque de vous le faire savoir en indiquant un Warning, même si elle n’est pas rédhibitoire. Il faut en effet définir le sens des flèches de tension : par exemple, celui que l’on utilisera, RPvoltages. Cette option permet de respecter les conventions récepteur et générateur en orientant correctement les tensions et les courants (U et I dans le même sens pour une alimentation, U et I en sens opposés pour un récepteur) comme vous pouvez le voir sur ces quelques composants :
Les autres options sont oldvoltagedirection, nooldvoltagedirection et EFvoltages. Pour en savoir plus sur ces options, n’hésitez pas à consulter le manuel de CircuiTikZ.
Si vous avez suivi mes conseils, pour éviter des heures de recherche sur une erreur trouvée lors de la compilation, votre préambule de document devrait donc ressembler à :
2.
3.
4.
5.
\documentclass
[border = 1mm]{standalone}
\usepackage
[utf8]{inputenc}
\usepackage
{siunitx}
\usepackage
[european, straightvoltages, RPvoltages]{circuitikz}
\usetikzlibrary
{babel}
Dans la documentation de CircuiTikZ, il est conseillé d’utiliser RPvoltages lors de l’ouverture de l’environnement CircuiTikZ (\begin
{circuitikz}[voltage dir=RP]) plutôt que de le déclarer dans le préambule (l’effet n’étant pas garanti selon l’auteur). Malgré plusieurs circuits à mon actif, je n’ai jamais vraiment trouvé d’erreurs en le déclarant dans le préambule, je continue donc de le faire. Sachant également (comme vous le verrez par la suite, on peut esquiver en forçant l’orientation des flèches de tension et de courant).
II. Tracé de circuits simples▲
II-A. Se repérer dans l’image▲
CircuiTikZ étant basé sur le package TikZ, il faut considérer le document final comme un graphique dans lequel on va créer des lignes (= les fils de connexion) qui relieront des composants. Chaque élément constitutif du graphique est situé à l’aide de coordonnées.
Pour facilement se repérer, il peut être utile (au moins au début) d’afficher un quadrillage par exemple avec la commande \draw
[help lines] (-5,-5) grid (5,5);.
Cette commande dessine (commande \draw) une grille (grid) qui part du point de coordonnées (-5,-5) au point de coordonnées (5,5) : on obtient un quadrillage de 10x10 (pour faciliter le « contrôle », j’ai mis en surbrillance le point central de coordonnées (0,0)) :
Ce quadrillage peut être agrémenté avec quelques options :
- … grid[step=0,1] … : permet d’afficher une grille tous les 0,1 unité du graphique ;
\draw
[gray] …: permet d’afficher le quadrillage en gris ;\draw
[thin] …permet d’afficher le quadrillage avec une épaisseur de traits mince (les autres épaisseurs disponibles sont, du plus fin au plus épais : ultra thin, very thin, thin, thick, very thick, ultra thick).
Dans la définition de la grille, on a implicitement utilisé des coordonnées dites absolues : le point est défini à partir de ses réelles coordonnées dans le repère. Ainsi, le point (5,5) correspond au point situé à 5 unités à l’horizontale de l’origine du repère et à 5 unités en vertical.
Pour des circuits simples, en particulier lorsqu’il n’est constitué que de dipôles, il est assez facile de se repérer en utilisant des coordonnées absolues. Par contre, dès que le circuit se complexifie, il est bien plus difficile de s’y repérer. Une possibilité offerte par CircuiTikZ, et de manière plus générale par TikZ, est d’utiliser des coordonnées relatives : à partir d’un point de coordonnées absolues (a,b), on indique de combien on se déplace selon les axes horizontal et vertical.
Par exemple, le code :
\draw
(-1,1) --
++(2,0) ;
signifie que l’on trace (draw) à partir du point de coordonnées (-1,1) un segment de deux unités vers la droite ; le point d’arrivée est donc (1,1) comme le montre l’image suivante :
Si maintenant on code :
\draw
(-1,1) --
++(2,0) --
++(-1,-3);
cela signifie qu’arrivé au point (1,1) précédent, on se déplace d'une unité vers la gauche et de trois vers le bas, le point d’arrivée final est donc (0,-2) :
Pour terminer sur cette partie de repérage dans le plan et des différentes possibilités de mouvement, voici deux exemples équivalents correspondants au tracé d’un chemin carré de côté 2 (les traits ont été accentués sur les images, mais ne figurent pas dans le code indiqué) :
- 1re solution en coordonnées absolues :
\draw
(-1,1)--
(-1,3)--
(1,3)--
(1,1)--
(-1,1); - 2e solution en coordonnées relatives par rapport au point précédent :
\draw
(-1,1)--
++(0,2)--
++(2,0)--
++(0,-2)--
++ (-2,0);
Il existe par ailleurs une 3e solution en coordonnées relatives par rapport au point d’origine, mais elle est peu utile dans la conception des circuits électriques (allez jeter un œil sur le manuel de TikZ si vous souhaitez en savoir plus sur cette possibilité).
II-B. Principe de tracé d’un circuit électrique▲
Dans une image précédente, on a tracé une résistance : seule, elle n’a que peu d’intérêt. Mettons-la aux bornes d’une source de tension.
Pour cela le code est le suivant :
2.
3.
4.
\draw
(0,0) to [vsource] (0,3);
\draw
(0,3) --
(3,3);
\draw
(3,3) to [R] (3,0);
\draw
(3,0) --
(0,0);
Après compilation, le circuit obtenu est le suivant :
Ce code, pour l’instant non optimisé, va permettre de donner les grands principes de construction d’un circuit électrique.
Un circuit électrique est une succession de composants que l’on relie entre eux par des lignes.
Ici, on demande de tracer (draw) entre les points de coordonnées absolues (0,0) et (0,3) une source de tension à l’aide de la commande to[vsource] et une résistance entre les points (3,3) et (3,0) (commande to[R]). On relie ensuite ces deux dipôles par des fils respectivement entre les points (0,3) et (3,3) et entre (3,0) et (0,0).
On peut remarquer que le composant se place au centre des coordonnées indiquées : pour vous en convaincre, essayer le code suivant :
\draw
(0,0) to [vsource] (0,4) --
(3,4) to [R] (3,0) --
(0,0);
Ce petit bout de code permet également de vous montrer qu’il est tout à fait possible d’enchaîner plusieurs éléments de circuits électriques plutôt que de multiplier les lignes de code avec draw.
Zut alors, j’ai oublié d’intégrer une lampe dans mon circuit ! Pas de panique, il est très facile de l’intégrer sans avoir à tout refaire : en effet, il suffit de « casser » une liaison électrique pour y placer une lampe.
Le code suivant permet d’avoir en série une source de tension, une lampe et une résistance
\draw
(0,0) to [vsource] (0,4) to[lamp] (3,4) to [R] (3,0) --
(0,0);
ce qui donne :
II-C. Petit catalogue des dipôles▲
II-C-1. Sources de tensions▲
II-C-2. Résistances▲
II-C-3. Condensateurs-bobines▲
Avec mes indications précédentes, le code \draw
(0,0) to [L] (2,0);devrait vous donner cette image-ci :
Elle ne correspond pas à notre standard de bobine : pour que ce soit effectivement le cas, il faut soit ajouter l’option cute inductors lors du chargement du package CircuiTikZ ou alors utiliser la commande \draw
(0,0) to [cute inductors] (2,0);.
II-C-4. Diodes▲
II-C-5. Interrupteurs▲
II-C-6. Masses▲
II-C-7. Autres dipôles▲
II-D. Ajout d'appareils de mesure▲
Souvent, il vous sera utile d’ajouter des appareils de mesure : ce n’est pas plus compliqué à ajouter, ils sont considérés comme des dipôles. Le code le plus « logique » pour ajouter, par exemple, un ampèremètre, est to[ammeter] qui donne ce résultat :
Vous remarquez que le symbole utilisé ne correspond pas à notre standard habituel : il en va de même pour le voltmètre et l’ohmmètre. Une solution consiste à utiliser le dipôle rmeter en lui spécifiant la lettre que l’on souhaite mettre à l’intérieur.
- pour un voltmètre :
\draw
(0,0) to[rmeter, t=V] (2,0); ; - pour un ampèremètre :
\draw
(0,0) to[rmeter, t=A] (2,0); ; - pour un ohmmètre :
\draw
(0,0) to[rmeter, t=$\Omega$
] (2,0);.
Si certains, plus nostalgiques, préfèrent des appareils analogiques, il suffit de remplacer rmeter par smeter. Ainsi \draw
(0,0) to[smeter, t=V] (2,0); donne un joli voltmètre vintage !
On peut également ajouter un oscilloscope à l’aide de \draw
(0,0) to[oscope] (2,0);.
Si vous préférez ajouter une sonde de courant, le code est : \draw
(0,0) to[iloop] (2,0); ou \draw
(0,0) to[iloop2] (2,0);.
Les appareils ainsi codés donnent les schémas suivants :
À la date de ce tutoriel, il n’existe pas de schéma pour un wattmètre : il faudra donc utiliser un ampèremètre et un voltmètre pour cela !
III. Afficher des informations supplémentaires▲
III-A. Valeurs/nom des dipôles▲
Dessiner des composants électriques, c’est bien. Les compléter avec les valeurs ou leur nom, c’est mieux.
Reprenons un des premiers schémas vus dans ce tutoriel :
\draw
(0,0) to [vsource] (0,3) to[lamp] (3,3) to [R] (3,0) --
(0,0);
Il pourrait être intéressant de rajouter la valeur de la tension délivrée par la source de tension, la valeur de la résistance et les caractéristiques de la lampe (ampoule) utilisée.
Pour cela, on rajoute un label au composant en spécifiant en option du code du composant l= suivi du texte que l’on souhaite afficher.
Dans notre exemple :
2.
3.
4.
\draw
(0,0)
to [vsource, l=6V] (0,3)
to[lamp, l=6V,100mA] (3,3)
to [R, l=R1] (3,0) --
(0,0);
Pour faciliter la lecture du circuit électrique tracé, j’ai formaté un peu différemment le code en mettant sur des lignes séparées l’ajout de nouvelles connexions ou de nouveaux dipôles. Je vous invite à faire de même, cela facilitera le repérage dans des circuits plus complexes.
On progresse, mais ce n’est pas encore parfait : l’espace entre la valeur et l’unité n’est pas correct, la valeur de l’intensité nominale de la lampe n’est pas écrite. Puisqu’on utilise kitxmlcodeinlinelatexdvp\LaTeXfinkitxmlcodeinlinelatexdvp, autant utiliser toutes ses possibilités, notamment en se servant des outils faits pour ça, en particulier le package siunitx.
2.
3.
4.
5.
\draw
(0,0)
to [vsource, l=\SI
{6}{V}] (0,3)
to[lamp, l=\mbox
{\SI
{6}{\volt
}, \SI
{100}{mA}}] (3,3)
to [R, l=$R_1$
] (3,0)
--
(0,0);
La compilation du code précédent donne l’image suivante :
C’est nettement plus « pro » !
J’ai volontairement mis les deux possibilités d’écriture des unités avec la commande SI du package siunitx : soit le nom total (\volt) soit l’abréviation V (voir la documentation de ce package pour plus de précision).
Remarquez que pour pouvoir ajouter les deux caractéristiques de l’ampoule, il faut ajouter une boîte \mbox si on veut éviter à kitxmlcodeinlinelatexdvp\LaTeXfinkitxmlcodeinlinelatexdvp de crier !
Bon, c’est bien, on a avancé. Maintenant, avoir les caractéristiques de l’ampoule au-dessus du composant ne m’arrange pas, je préférerais les avoir en dessous : rien de plus simple, il suffit de compléter en ajoutant le caractère _ (underscore) après la dénomination du label l : to [lamp, l_
=$\SI{6}{\volt}]
En fait, pourkitxmlcodeinlinelatexdvp\LaTeXfinkitxmlcodeinlinelatexdvp, on ne fait que placer en bas de la boîte réservée au composant, comme on le fait lorsqu’on souhaite mettre en indice.
On peut faire la même chose pour le générateur et la résistance : vous constaterez que les valeurs s’affichent bien à l’intérieur. En fait, le placement « normal » d’un composant est horizontal de gauche à droite : quand on le place de bas en haut, on lui impose une rotation de -90° donc un label placé au-dessus en horizontal est bien placé à droite en vertical (le raisonnement est similaire pour un composant placé de haut en bas).
Certains auteurs préfèrent noter le nom de la résistance (R1 dans notre exemple) à l’intérieur du composant directement :
Pour y arriver, il faut utiliser un nœud. La première étape est d’abord de nommer la résistance : on spécifie l’option name=R1 lors de la création du dipôle résistance (to[R, name=R1]) puis on place un nœud centré sur R1 auquel on ajoute un label entre crochets ce qui donne le code complet suivant :
2.
\draw
(0,0) to [R, name=R1] (0,2);
\node
at (R1.center) {$R_1$
};
III-B. Flèches de tension▲
Pour afficher les flèches de tension aux bornes d’un composant, on rajoute l’option v= lors de la création du composant.
Ainsi, à partir de l’exemple précédent, l’affichage des tensions aux bornes de chaque dipôle se fait à l’aide du code suivant :
2.
3.
4.
5.
\draw
(0,0)
to [vsource, l=\SI
{6}{V}, v_
=$U_G$
] (0,3)
to[lamp, l=\mbox
{\SI
{6}{V}, \SI
{100}{mA}}, v=$U_{lampe}$
] (3,3)
to [R, l=$R_1$
, v=$U_R$
] (3,0)
--
(0,0);
Pour la source de tension, j’ai rajouté _ pour imposer le positionnement de la flèche de tension du générateur à droite et éviter un chevauchement avec la valeur de la tension.
Par défaut, les flèches de tension sont dans le sens de création du circuit électrique : en partant du point (0,0) pour aller jusqu’au point (0,3), la flèche pointera donc vers le haut. Il s’agit une convention « graphique » qui n’a rien à voir avec la physique. Comme vous pouvez le constater par vous-même sur l’image précédente, cette convention graphique n’est pas respectée : en effet, dans le préambule, si vous avez correctement suivi mes préconisations, l’ajout de l’option RPvoltages dans le chargement du package CircuiTikZ permet de définir les flèches de tension en respectant les conventions usuelles entre les flèches de tension et de courant : convention générateur pour les sources et convention récepteur pour les récepteurs. Pour vous en convaincre, vous pouvez supprimer cette option et le vérifier :
Le parcours du circuit dans l’autre sens (schéma de droite) a également pour effet d’inverser les positions des labels des composants.
En reprenant le mode normal de représentation (option RPvoltages), il est quand même possible de forcer le sens d’une flèche de tension en rajoutant le signe > ou < devant le signe = de l’option de construction du dipôle :
\draw
(0,0) to[vsource, v>=$U$
] (0,3); : force la tension à être dirigée dans le sens de parcours ;\draw
(0,0) to[vsource, v<=$U$
] (0,3);→ force la tension à être dirigée dans le sens opposé du parcours.
III-C. Sens du courant▲
Pour flécher les courants, la méthode est similaire à celle utiliser pour les flèches de tension : la différence est que l’option utilisée est i= (au lieu de v= pour les tensions).
Ainsi, le code :
2.
3.
4.
5.
\draw
(0,0)
to [vsource, v=$U_G$
, i=$i$
] (0,3)
to[lamp, v^
=$U_{lampe}$
, i=$i$
] (3,3)
to [R, v^
=$U_R$
, i=$i$
] (3,0)
--
(0,0);
permet d’obtenir :
Pour changer la position du nom du courant et/ou le sens du courant, il faut ajouter un des symboles (^, _, > ou >) devant le signe égal dans les options du composant.
L’ordre de ces ajouts qui est important comme vous pouvez le voir sur les exemples suivants :
\draw
(0,0) to[R, i^
>=$i$
] (2,0); donne ;
\draw
(0,0) to[R, i>^
=$i$
] (2,0); donne .
III-D. Agrémenter les fils de connexion▲
On a vu que le moyen le plus simple pour créer des fils de connexion était d’utiliser le code \draw
(a,b) – (c,d) ;. Dans la majorité des cas, cette méthode est suffisante.
Il est parfois utile d’ajouter au début et/ou à la fin d’un fil de connexion un symbole (souvent un rond) pour spécifier la présence d’une broche ou d’un point particulier d’un circuit électrique. Pour ce faire, il y a deux méthodes selon l’emplacement souhaité du symbole :
- au début et/ou à la fin d’un dipôle du circuit : il faut rajouter une option sur le composant en spécifiant le type de symbole. Par exemple
\draw
(0,0) to[R, *-o] (5,0); permet d’obtenir ; - si le symbole n’est pas rattaché à un dipôle existant, le plus simple est de tracer un court-circuit (en fait un dipôle constitué d’un fil) : de cette manière, on se retrouve avec la solution précédente. Le code à utiliser pour cela est
\draw
(0,0) to[short, o-d] (5,0);qui donne l’image .
Il faut également parler de fils de connexion spéciaux liant des dipôles « invisibles » : il est courant sur un circuit électrique de spécifier la tension aux bornes de deux points quelconques. Par exemple lorsque l’on souhaite montrer qu’un générateur de tension réel consiste à la mise en série d’un générateur parfait et d’une résistance (modèle de Thévenin) :
Afficher les flèches de tension pour la source idéale et pour la résistance : pas de problème, on ajoute v= en option comme on vient de le voir.
Dans cet exemple, avec le code :
\draw
(0,0)
to[V, o-, v_
=$E$
] (2,0)
to[R, -o, l=$r$
, v_
=$U_r$
](4,0);
Mais comment faire pour la tracer pour l’ensemble du modèle ? La solution est de créer un dipôle virtuel invisible à l’aide de la commande to[open] à laquelle on ajoute l’option désormais bien connue v=.
Toujours avec le modèle de Thévenin du générateur, on obtient :
en compilant le code :
2.
3.
4.
5.
\draw
(0,0)
to[vsource, l=$E$
, o-] (2,0)
to[R, l=$r$
, -o] (4,0);
\draw
(0,-1)
to[open, o-o, v>=$U$
] (4,-1);
Bien entendu, la présence des bornes (ajoutées à l’aide de la commande o-o) est optionnelle : je l’ai rajouté pour plus de clarté.
Comme la commande to[open] crée un lien virtuel, le « dipôle » invisible créé entre les deux points n’a aucune réalité physique. En conséquence, la flèche de tension peut ne pas respecter les conventions usuelles : il faudra donc user des caractères < ou > pour y remédier (comme vous pouvez le constater dans le code lié à l’image précédente).
III-E. Modifier l’orientation▲
Dans certains cas, l’orientation du composant par défaut ne convient pas : l’exemple le plus courant est la photodiode qui s’utilise en polarisation inverse pour fonctionner en détecteur de lumière. Lorsqu’on la trace, on obtient l’image .
Deux options permettent horizontalement et/ou verticalement un composant :
- en horizontal: option mirror
\draw
(0,0) to[pD, mirror] (2,0); ; - en vertical : option invert
\draw
(0,0) to[pD, invert] (2,0); .
Les labels, flèches de tension et sens du courant ne sont pas affectés par mirror et invert.
IV. Quelques exemples de circuits classiques▲
IV-A. Théorème Kennely▲
Le théorème de Kenelly permet de relier les valeurs de résistance entre un montage en étoile et un montage en triangle :
IV-B. Circuit parallèle résistance + lampe▲
IV-C. Circuits RC, RL, RLC▲
IV-C-1. Circuit RC▲
IV-C-2. Circuit RL▲
IV-C-3. Circuit RLC▲
IV-D. Pont redresseur double alternance▲
IV-E. Pont diviseur de tensions▲
IV-F. Transmissions d’informations par la lumière▲
IV-G. Tracé de la caractéristique d’une DEL▲
V. Remerciements▲
Sans un certain nombre de personnes, ce tutoriel n’aurait jamais vu le jour :
- les relecteurs techniques : -Nikopol-, Winjerome ;
- le relecteur orthographique : Claude Leloup ;
- les auteurs de la documentation du package CircuiTikZ que l’on peut trouver sur le site https://www.ctan.org/pkg/circuitikz ;
- les contributeurs sur les forums dont les réponses à mes questions m’ont permis d’améliorer mes connaissances sur CircuiTikZ.