Accueil >
LaTeX en SI
Bode, Black et Nyquist avec Tikz
Ce package permet de tracer les diagrammes de Bode, Black et Nyquist à l’aide de Gnuplot et Tikz. Les fonctions
de transfert élémentaires et les correcteurs courants sont préprogrammés pour être utilisés dans les fonctions de
tracé.
Mots clefs associées
étude frequentielle
,
Bode
,
Black
,
Nyquist
,
Latex
Nécessite
Pour fonctionner ce package nécessite :
une version CVS de Pgf/Tikz (certaines commandes de calculs ont étés modifiées ou intégrées depuis la version
2), elle peut être téléchargée sur le site Texample http://www.texample.net/tikz/builds/ .
que gnuplot (http://www.gnuplot.info/ ) soit installé et configuré pour être exécuté lors de la compilation de votre fichier LATEX(Cf. la doc de
Pgf/Tikz).
Composition du package
Ce package est constitué de trois fichiers :
bodegraph.sys : le package proprement dit ;
isom.txt : macro-commandes de définition des courbes iso-module ;
isoa.txt : macro-commandes de définition des courbes iso-arguments.
Package bodegraph
Du fichier bodegraph.tex, source de la documentation et bodegraph.pdf, la documentation au format pdf.
Documentation du package bodegraph
Cet article ne présente que quelques exemples réalisables avec le package, la documentation complète est disponible dans le fichier pdf.
Exemples
Grille semilog
La commande générique : \semilogdécade mini décade maxi ymini ymaxi permet de tracer une grille semilog
code
graphe
Papier semilog
Fonctions de transfert élémentaires
premier ordre
code
graphe
\begin{tikzpicture}[xscale=7/4]
\begin{scope}[yscale=3/40]
\semilog{-2}{2}{-20}{20}
\BodeAmp[thin,samples=100]{-2:2}
{\POAmpAsymp{6}{0.3}}
\BodeAmp{-2:2}{\POAmp{6}{0.3}}
\end{scope}
\begin{scope}[yshift=-2.5cm,yscale=3/90]
\semilog{-2}{2}{-90}{0}
\BodeArg[samples=100,thin]{-2:2}
{\POArgAsymp{6}{0.3}}
\BodeArg[label={[below left]{$f(x)=\sin x$}}]
{-2:2}{\POArg{6}{0.3}}
\end{scope}
\end{tikzpicture}
Bode premier ordre
second ordre
code
graphe
\begin{tikzpicture}[xscale=7/3]
\begin{scope}[yscale=3/40]
\semilog{-1}{2}{-20}{20}
\BodeAmp[thin,samples=100,red]{-1:1.7}
{+\SOAmpAsymp{6}{0.3}{10}}
\BodeAmp[samples=100,red,smooth]{-1:1.7}
{\SOAmp{6}{0.3}{10}}
\end{scope}
\begin{scope}[yshift=-2.5cm,yscale=3/180]
\OrdBode{30}
\semilog{-1}{2}{-180}{0}
\BodeArg[samples=3,red, thin]{-1:0.999}
{\SOArgAsymp{6}{0.3}{10}}
\BodeArg[samples=3,red, thin]{1:2}
{\SOArgAsymp{6}{0.3}{10}}
\BodeArg[samples=100,red,smooth]{-1:2}
{\SOArg{6}{0.3}{10}}
\end{scope}
\end{tikzpicture}
Bode second ordre
retard pur
code
graphe
\begin{tikzpicture}[xscale=7/3]
\begin{scope}[yscale=4/50]
\UnitedB
\semilog{0}{3}{-40}{10}
\BodeAmp{0:3}{\RetAmp{0.08}}
\BodeAmp[red]{0:3}{\POAmp{1}{0.08}}
\BodeAmp[black]{0:3}{\POAmp{1}{0.08}
+\RetAmp{0.08}}
\draw [latex-](2.2,-0)-++(-0.1,-5)
node[left] {retard};
\draw [latex-](2.2,-22)-++(-0.1,-5)
node[left] {1er ordre};
\draw [latex-](2.2,-22) -++(-0.1,-10)
node[left] {1er ordre retardé};
\end{scope}
\begin{scope}[yshift=-3.8cm,yscale=4/180]
\UniteDegre
\OrdBode{30}
\semilog{0}{3}{-180}{0}
\BodeArg{0:3}{\RetArg{0.08}}
\BodeArg[red]{0:3}{\POArg{1}{0.08}}
\BodeArg[black]{0:3}{\POArg{1}{0.08}
+\RetArg{0.08}}
\draw [latex-](2.8,-50)-++(-0.1,-10)
node[left] {retard};
\draw [latex-](2.8,-88)-++(-0.1,+10)
node[left] {1er ordre};
\draw [latex-](2.8,-140) -++(-0.1,-10)
node[left] {1er ordre retardé};
\end{scope}
\end{tikzpicture}
Bode retard pur
système quelconque
le tracé d’un système linéaire quelconque est réalisé en le décomposant en fonctions élémentaires.
code
graphe
\begin{tikzpicture}[xscale=7/5]
\begin{scope}[yscale=3/80]
\semilog{-1}{4}{-50}{30}
\BodeAmp[thin]{-1:4}
{\SOAmpAsymp{5}{15}-\POAmpAsymp{1}{0.01}}
\BodeAmp[smooth,samples=100]{-1:4}
{\SOAmp{5}{0.3}{15}-\POAmp{1}{0.01}}
\end{scope}
\begin{scope}[yshift=-2.5cm,yscale=3/210]
\OrdBode{20}
\semilog{-1}{4}{-200}{10}
\BodeArg[thin,samples=100]{-1:4}
{\SOArgAsymp{5}{15}-\POArgAsymp{1}{0.01}}
\BodeArg{-1:4}{\SOArg{5}{0.3}{15}-\POArg{1}{0.01}}
\end{scope}
\end{tikzpicture}
Bode système quelconque
Correcteurs
Les correcteurs classiques sont implémentés dans le package.
Correcteur à avance de phase
code
graphe
\begin{tikzpicture}[xscale=7/3]
\begin{scope}[yscale=3/40]
\UnitedB
%\node{\tiny \PIAmp{3}{0.5}};
\semilog{0}{3}{-10}{30}
\BodeAmp[thick]
{0:3}{\APAmp{2}{0.02}{3}}
\BodeAmp[thin,samples=101,red]
{0:3}{\APAmpAsymp{2}{0.02}{3}}
\end{scope}
\begin{scope}[yshift=-3cm,yscale=3/180]
\UniteDegre
\OrdBode{30}
\semilog{0}{3}{-90}{90}
\BodeArg[thick]
{0:3}{\APArg{2}{0.02}{3}}
\BodeArg[,thin,samples=201,red]
{0:3}{\APArgAsymp{2}{0.02}{3}}
\end{scope}
\end{tikzpicture}
Bode correcteur avance de phase
correcteur PID série
code
graphe
\begin{tikzpicture}[xscale=7/3]
\begin{scope}[yscale=3/40]
\UnitedB
\semilog{0}{3}{-10}{30}
\BodeAmp[thick]
{0:3}{\PIDAmp{2}{0.08}{0.02}}
\BodeAmp[black]
{0:3}{\PIDAmpAsymp{2}{0.08}{0.02}}
\end{scope}
\begin{scope}[yshift=-3cm,yscale=3/180]
\UniteDegre
\OrdBode{30}
\semilog{0}{3}{-90}{90}
\BodeArg[thick]
{0:3}{\PIDArg{2}{0.08}{0.02}}
\BodeArg[samples=2,
black,samples=201]
{0:3}{\PIDArgAsymp{2}{0.08}{0.02}}
\end{scope}
\end{tikzpicture}
Bode correcteur PID
Diagramme de Black
diagramme
code
graphe
\begin{tikzpicture}
\begin{scope}[xscale=6/180,yscale=8/60]
\BlackGraph*[samples=150,red,smooth,ultra thick,-<]
{-2:1}{\SOBlack{1}{0.1}{1500}}
{[red,right]{\footnotesize $H_1$}}
\BlackGraph*[samples=150,black,smooth,ultra thick]
{-1:3.5}{\SOArg{5}{0.2}{150},\SOAmp{5}{0.2}{150}}
{[right]{$H_2 $}}
\BlackGraph*[samples=150,blue,smooth,ultra thick]
{1:5}{\SOArg{1}{0.1}{1500}+\IntArg{0.43/0.0009}
-2*\POArg{1}{0.0009},\SOAmp{1}{0.1}{1500}+
\IntAmp{0.43/0.0009}-2*\POAmp{1}{0.0009}}
{[left] at (-98,30){$H_4$}}
\BlackGraph*[samples=100,purple,smooth]
{-3:2}{\POArg{5}{3},\POAmp{5}{3}}
{[purple!50,right]{\footnotesize $H_3$}}
\BlackPoint[purple]{0.1,1,3,12,65}
{\POArg{5}{3},\POAmp{5}{3}}
\BlackPoint*[black]{25/right,
80/above right,500/above,1500/above,4000/right}
{\SOArg{1}{0.1}{1500}+\IntArg{0.43/0.0009}
-2*\POArg{1}{0.0009},\SOAmp{1}{0.1}{1500}+
\IntAmp{0.43/0.0009}-2*\POAmp{1}{0.0009}}
\BlackGrid
\end{scope}
\end{tikzpicture}
Diagramme de Black
Abaque de Black-Nichols
code
graphe
\begin{tikzpicture}
\begin{scope}
[xscale=11/360,
yscale=12/60]
\BlackGraph[samples=100,
purple,smooth]
{-1:1}{\IntArg{0.3}+
\SOArg{3.9}{0.4}{3},
\IntAmp{0.3}+
\SOAmp{3.9}{0.4}{3}}
\def\valmaxBf{-360}
\StyleIsoM[blue!50,dashed]
\StyleIsoA[green,thin]
\AbaqueBlack
\StyleIsoM[blue,thick]
\IsoModule[2.3]
\BlackGrid
\end{scope}
\end{tikzpicture}
Abaque de Black-Nichols
Diagramme de Nyquist
code
graphe
\begin{tikzpicture}
\begin{scope}
\NyquistGraph[smooth,samples=81]{-1:4}
{\POAmp{3}{0.5}}{\POArg{3}{0.5}}
\NyquistGraph[purple,smooth,samples=81,]
{-2:2}{\SOAmp{3}{0.5}{10}}{\SOArg{3}{0.5}{10}}
\NyquistGraph[red,samples=151,smooth,]
{-3:2}{\POAmp{4}{0.5}+\POAmp{1}{2}}
{\POArg{4}{0.5}+\POArg{1}{2}}
\NyquistGraph[green,samples=101,smooth,]
{0.5:2}{\SOAmp{15}{0.5}{10}+\IntAmp{1}}
{\SOArg{15}{0.5}{10}+\IntArg{1}}
\NyquistGraph[black,smooth,]{-1:2}
{\POAmp{4}{0.5}+\RetAmp{1.8}}
{\POArg{4}{0.5}+\RetArg{1.8}}
\NyquistGraph*[black,smooth,samples=2,
only marks,mark=.]{-1:0.3}
{\POAmp{4}{0.5}+\RetAmp{1.8}}
{\POArg{4}{0.5}+\RetArg{1.8}}{[above]
{\footnotesize $H_3$}}
\NyquistPoint*[black,]{8/below right,
10/below left,20/left}
{\SOAmp{3}{0.5}{10}}{\SOArg{3}{0.5}{10}}
\end{scope}
\NyquistGrid
\end{tikzpicture}
Diagramme de Nyquist
Réponse temporelle
code
graphe
\begin{tikzpicture}[xscale=5/2,yscale=7/2]
\RepTemp*[color=black,samples=31,smooth,
]{0:1.8}{
-.198*exp(-35.4*x)-.638*exp(-2.28*x)*cos(18.3*x)
-.462*exp(-2.28*x)*sin(18.3*x)+.833
}{[right]{\small 1}}
\RepTemp*[color=blue,samples=31,smooth
,]{0:1.8}{
1-.117*exp(-24.1*x)-.883*exp(-2.94*x)*cos(7.03*x)
-.769*exp(-2.94*x)*sin(7.03*x)
}{[right]{\small 2}}
\def\valmaxx{1.8}
\def\valmaxy{1.2}
\TempGrid[xstep=0.2,ystep=0.2]
\end{tikzpicture}
réponse temporelle
Tous les articles de la rubrique
Cette rubrique comporte 6 articles
Articles avec les mêmes mots clefs
Nécessite
Pour fonctionner ce package nécessite :
une version CVS de Pgf/Tikz (certaines commandes de calculs ont étés modifiées ou intégrées depuis la version
2), elle peut être téléchargée sur le site Texample http://www.texample.net/tikz/builds/ .
que gnuplot (http://www.gnuplot.info/ ) soit installé et configuré pour être exécuté lors de la compilation de votre fichier LATEX(Cf. la doc de
Pgf/Tikz).
Composition du package
Ce package est constitué de trois fichiers :
bodegraph.sys : le package proprement dit ;
isom.txt : macro-commandes de définition des courbes iso-module ;
isoa.txt : macro-commandes de définition des courbes iso-arguments.
Package bodegraph
Du fichier bodegraph.tex, source de la documentation et bodegraph.pdf, la documentation au format pdf.
Documentation du package bodegraph
Cet article ne présente que quelques exemples réalisables avec le package, la documentation complète est disponible dans le fichier pdf.
Exemples
Grille semilog
La commande générique : \semilogdécade mini décade maxi ymini ymaxi permet de tracer une grille semilog
code
graphe
\begin{tikzpicture}[xscale=7/5,]
\begin{scope}[yscale=3/80]
\UnitedB
\semilog{-1}{4}{-60}{20}
\end{scope}
\begin{scope}[,yshift=-3cm,yscale=3/180]
\UniteDegre
\OrdBode{30}
\semilog{-1}{4}{-180}{0}
\end{scope}
\end{tikzpicture}
Papier semilog
Fonctions de transfert élémentaires
premier ordre
code
graphe
\begin{tikzpicture}[xscale=7/4]
\begin{scope}[yscale=3/40]
\semilog{-2}{2}{-20}{20}
\BodeAmp[thin,samples=100]{-2:2}
{\POAmpAsymp{6}{0.3}}
\BodeAmp{-2:2}{\POAmp{6}{0.3}}
\end{scope}
\begin{scope}[yshift=-2.5cm,yscale=3/90]
\semilog{-2}{2}{-90}{0}
\BodeArg[samples=100,thin]{-2:2}
{\POArgAsymp{6}{0.3}}
\BodeArg[label={[below left]{$f(x)=\sin x$}}]
{-2:2}{\POArg{6}{0.3}}
\end{scope}
\end{tikzpicture}
Bode premier ordre
second ordre
code
graphe
\begin{tikzpicture}[xscale=7/3]
\begin{scope}[yscale=3/40]
\semilog{-1}{2}{-20}{20}
\BodeAmp[thin,samples=100,red]{-1:1.7}
{+\SOAmpAsymp{6}{0.3}{10}}
\BodeAmp[samples=100,red,smooth]{-1:1.7}
{\SOAmp{6}{0.3}{10}}
\end{scope}
\begin{scope}[yshift=-2.5cm,yscale=3/180]
\OrdBode{30}
\semilog{-1}{2}{-180}{0}
\BodeArg[samples=3,red, thin]{-1:0.999}
{\SOArgAsymp{6}{0.3}{10}}
\BodeArg[samples=3,red, thin]{1:2}
{\SOArgAsymp{6}{0.3}{10}}
\BodeArg[samples=100,red,smooth]{-1:2}
{\SOArg{6}{0.3}{10}}
\end{scope}
\end{tikzpicture}
Bode second ordre
retard pur
code
graphe
\begin{tikzpicture}[xscale=7/3]
\begin{scope}[yscale=4/50]
\UnitedB
\semilog{0}{3}{-40}{10}
\BodeAmp{0:3}{\RetAmp{0.08}}
\BodeAmp[red]{0:3}{\POAmp{1}{0.08}}
\BodeAmp[black]{0:3}{\POAmp{1}{0.08}
+\RetAmp{0.08}}
\draw [latex-](2.2,-0)-++(-0.1,-5)
node[left] {retard};
\draw [latex-](2.2,-22)-++(-0.1,-5)
node[left] {1er ordre};
\draw [latex-](2.2,-22) -++(-0.1,-10)
node[left] {1er ordre retardé};
\end{scope}
\begin{scope}[yshift=-3.8cm,yscale=4/180]
\UniteDegre
\OrdBode{30}
\semilog{0}{3}{-180}{0}
\BodeArg{0:3}{\RetArg{0.08}}
\BodeArg[red]{0:3}{\POArg{1}{0.08}}
\BodeArg[black]{0:3}{\POArg{1}{0.08}
+\RetArg{0.08}}
\draw [latex-](2.8,-50)-++(-0.1,-10)
node[left] {retard};
\draw [latex-](2.8,-88)-++(-0.1,+10)
node[left] {1er ordre};
\draw [latex-](2.8,-140) -++(-0.1,-10)
node[left] {1er ordre retardé};
\end{scope}
\end{tikzpicture}
Bode retard pur
système quelconque
le tracé d’un système linéaire quelconque est réalisé en le décomposant en fonctions élémentaires.
code
graphe
\begin{tikzpicture}[xscale=7/5]
\begin{scope}[yscale=3/80]
\semilog{-1}{4}{-50}{30}
\BodeAmp[thin]{-1:4}
{\SOAmpAsymp{5}{15}-\POAmpAsymp{1}{0.01}}
\BodeAmp[smooth,samples=100]{-1:4}
{\SOAmp{5}{0.3}{15}-\POAmp{1}{0.01}}
\end{scope}
\begin{scope}[yshift=-2.5cm,yscale=3/210]
\OrdBode{20}
\semilog{-1}{4}{-200}{10}
\BodeArg[thin,samples=100]{-1:4}
{\SOArgAsymp{5}{15}-\POArgAsymp{1}{0.01}}
\BodeArg{-1:4}{\SOArg{5}{0.3}{15}-\POArg{1}{0.01}}
\end{scope}
\end{tikzpicture}
Bode système quelconque
Correcteurs
Les correcteurs classiques sont implémentés dans le package.
Correcteur à avance de phase
code
graphe
\begin{tikzpicture}[xscale=7/3]
\begin{scope}[yscale=3/40]
\UnitedB
%\node{\tiny \PIAmp{3}{0.5}};
\semilog{0}{3}{-10}{30}
\BodeAmp[thick]
{0:3}{\APAmp{2}{0.02}{3}}
\BodeAmp[thin,samples=101,red]
{0:3}{\APAmpAsymp{2}{0.02}{3}}
\end{scope}
\begin{scope}[yshift=-3cm,yscale=3/180]
\UniteDegre
\OrdBode{30}
\semilog{0}{3}{-90}{90}
\BodeArg[thick]
{0:3}{\APArg{2}{0.02}{3}}
\BodeArg[,thin,samples=201,red]
{0:3}{\APArgAsymp{2}{0.02}{3}}
\end{scope}
\end{tikzpicture}
Bode correcteur avance de phase
correcteur PID série
code
graphe
\begin{tikzpicture}[xscale=7/3]
\begin{scope}[yscale=3/40]
\UnitedB
\semilog{0}{3}{-10}{30}
\BodeAmp[thick]
{0:3}{\PIDAmp{2}{0.08}{0.02}}
\BodeAmp[black]
{0:3}{\PIDAmpAsymp{2}{0.08}{0.02}}
\end{scope}
\begin{scope}[yshift=-3cm,yscale=3/180]
\UniteDegre
\OrdBode{30}
\semilog{0}{3}{-90}{90}
\BodeArg[thick]
{0:3}{\PIDArg{2}{0.08}{0.02}}
\BodeArg[samples=2,
black,samples=201]
{0:3}{\PIDArgAsymp{2}{0.08}{0.02}}
\end{scope}
\end{tikzpicture}
Bode correcteur PID
Diagramme de Black
diagramme
code
graphe
\begin{tikzpicture}
\begin{scope}[xscale=6/180,yscale=8/60]
\BlackGraph*[samples=150,red,smooth,ultra thick,-<]
{-2:1}{\SOBlack{1}{0.1}{1500}}
{[red,right]{\footnotesize $H_1$}}
\BlackGraph*[samples=150,black,smooth,ultra thick]
{-1:3.5}{\SOArg{5}{0.2}{150},\SOAmp{5}{0.2}{150}}
{[right]{$H_2 $}}
\BlackGraph*[samples=150,blue,smooth,ultra thick]
{1:5}{\SOArg{1}{0.1}{1500}+\IntArg{0.43/0.0009}
-2*\POArg{1}{0.0009},\SOAmp{1}{0.1}{1500}+
\IntAmp{0.43/0.0009}-2*\POAmp{1}{0.0009}}
{[left] at (-98,30){$H_4$}}
\BlackGraph*[samples=100,purple,smooth]
{-3:2}{\POArg{5}{3},\POAmp{5}{3}}
{[purple!50,right]{\footnotesize $H_3$}}
\BlackPoint[purple]{0.1,1,3,12,65}
{\POArg{5}{3},\POAmp{5}{3}}
\BlackPoint*[black]{25/right,
80/above right,500/above,1500/above,4000/right}
{\SOArg{1}{0.1}{1500}+\IntArg{0.43/0.0009}
-2*\POArg{1}{0.0009},\SOAmp{1}{0.1}{1500}+
\IntAmp{0.43/0.0009}-2*\POAmp{1}{0.0009}}
\BlackGrid
\end{scope}
\end{tikzpicture}
Diagramme de Black
Abaque de Black-Nichols
code
graphe
\begin{tikzpicture}
\begin{scope}
[xscale=11/360,
yscale=12/60]
\BlackGraph[samples=100,
purple,smooth]
{-1:1}{\IntArg{0.3}+
\SOArg{3.9}{0.4}{3},
\IntAmp{0.3}+
\SOAmp{3.9}{0.4}{3}}
\def\valmaxBf{-360}
\StyleIsoM[blue!50,dashed]
\StyleIsoA[green,thin]
\AbaqueBlack
\StyleIsoM[blue,thick]
\IsoModule[2.3]
\BlackGrid
\end{scope}
\end{tikzpicture}
Abaque de Black-Nichols
Diagramme de Nyquist
code
graphe
\begin{tikzpicture}
\begin{scope}
\NyquistGraph[smooth,samples=81]{-1:4}
{\POAmp{3}{0.5}}{\POArg{3}{0.5}}
\NyquistGraph[purple,smooth,samples=81,]
{-2:2}{\SOAmp{3}{0.5}{10}}{\SOArg{3}{0.5}{10}}
\NyquistGraph[red,samples=151,smooth,]
{-3:2}{\POAmp{4}{0.5}+\POAmp{1}{2}}
{\POArg{4}{0.5}+\POArg{1}{2}}
\NyquistGraph[green,samples=101,smooth,]
{0.5:2}{\SOAmp{15}{0.5}{10}+\IntAmp{1}}
{\SOArg{15}{0.5}{10}+\IntArg{1}}
\NyquistGraph[black,smooth,]{-1:2}
{\POAmp{4}{0.5}+\RetAmp{1.8}}
{\POArg{4}{0.5}+\RetArg{1.8}}
\NyquistGraph*[black,smooth,samples=2,
only marks,mark=.]{-1:0.3}
{\POAmp{4}{0.5}+\RetAmp{1.8}}
{\POArg{4}{0.5}+\RetArg{1.8}}{[above]
{\footnotesize $H_3$}}
\NyquistPoint*[black,]{8/below right,
10/below left,20/left}
{\SOAmp{3}{0.5}{10}}{\SOArg{3}{0.5}{10}}
\end{scope}
\NyquistGrid
\end{tikzpicture}
Diagramme de Nyquist
Réponse temporelle
code
graphe
\begin{tikzpicture}[xscale=5/2,yscale=7/2]
\RepTemp*[color=black,samples=31,smooth,
]{0:1.8}{
-.198*exp(-35.4*x)-.638*exp(-2.28*x)*cos(18.3*x)
-.462*exp(-2.28*x)*sin(18.3*x)+.833
}{[right]{\small 1}}
\RepTemp*[color=blue,samples=31,smooth
,]{0:1.8}{
1-.117*exp(-24.1*x)-.883*exp(-2.94*x)*cos(7.03*x)
-.769*exp(-2.94*x)*sin(7.03*x)
}{[right]{\small 2}}
\def\valmaxx{1.8}
\def\valmaxy{1.2}
\TempGrid[xstep=0.2,ystep=0.2]
\end{tikzpicture}
réponse temporelle
-->