SharedTPetu / TP3Bode / CompteRenduAPP-Bode.sagewsOpen in CoCalc

Compte-rendu d'APP

Thème:Résoudre un problème à l'aide des diagrammes de Bode

Collaborateurs: Agnus Jeremy, Fessard Valentin, Dorsemaine Thomas, Maignan Jeremy

I.Problématiques

Un oscilloscope permet des mesures sur un dispositif électronique, et les moyens assurant ces mesures peuvent pertuber plus ou moins le fonctionnement de ces dispositifs. Nous possédons un câble coaxial (assimilable à un condensateur de capacité de 100pF),et d'une sonde de tension passive.

Nous avons alors les problèmes suivants : La sonde permet elle une atténuation indépendante de la fréquence de travail? Quelle est la bande passante sous une impédance de source 1k ohm? Quelles sont les avantages d'une sonde par rapport à l'utilisation d'un cordon coaxial?

I.1 Objectifs

1) Tracer un diagramme de Bode avec une impédance source moyenne de 1k ohm pour le cas de l'utilisation d'une sonde. Déterminer au préalable la fonction de tranfert de ce diagramme.

2) Refaire ce diagramme pour le cas de l'utilisation d'une sonde avec compensation optimale. Puis évaluer les avantages et inconvénients que peut apporter une sonde par rapport au cable

3) A partir des résultats précédents,tracer les diagrammes asymptotiques de Bode dans le cas d'une surcompensation, d'une sous-compensation, et une compensation optimale.

I.2 Définitions importantes

Il convient au préalable de définir les termes suivants:

Fonction de transfert : relation entre la tension de sortie par rapport à la tension d'entrée.

Bande passante : Plage de fréquence correspondant à la différence entre la plus haute et la plus basse fréquence.

Augmenter une bande passante: Augmenter la différence entre la plus haute et la plus basse fréquence.

Tout d'abord nous utilisons un cable coaxial, ce qui donne le schéma suivant:

Z représentant l'équivalence de R1 et C1 en parallèle

A partir de ce schéma nous en tirons les égalités suivantes à l'aide de la loi d'ohm:

Vs=Zi{Vs}={Z*i}

Vrg=Rgi{Vrg}={Rg*i}

==> Ve=Vs+Vrg{Ve}={Vs+Vrg}

#déclaration de nos variables
C1=120*10^-12
R1=1*10^6
Rg=1000
show("R1 = ",R1,"ohm")
show("Rg = ",Rg,"ohm")
show("C1 = ",C1,"F")
R1 = 1000000\displaystyle 1000000 ohm
Rg = 1000\displaystyle 1000 ohm
C1 = 325000000000\displaystyle \frac{3}{25000000000} F
#On établit la valeur de Z
var("omega,f") #on utilise cette commande vu que omega est une variable dont on ne connait pas la valeur
omega=2*pi*f #on déclare omega
j=i #Pour respecter l'écriture physique, on prend j comme symbole de i
Z=R1/(j*C1*omega*R1+1) #On fait Z équivalent à R1 et C1 en parallèle
show("Z  = ",Z)
(omega, f)
Z = 1000000312500iπf+1\displaystyle \frac{1000000}{\frac{3}{12500} i \, \pi f + 1}

Grâce à nos relations on a :

i = VrgRg\frac{Vrg}{Rg} = VeVsRg\frac{Ve - Vs}{Rg} = VsZ\frac{Vs}{Z}

Soit Vs(Z+Rg)=ZVe{Vs*(Z+Rg)} = {Z*Ve}

Ce qui donne la fonction de tranfert: VsVe\frac{Vs}{Ve} = ZRg+Z\frac{Z}{Rg+Z}

#On déclare notre fonction de transfert f pour le cas 1:
var("Vs,Ve,F")
F(omega)=Vs/Ve
F(omega)=R1/((Rg+R1)+j*R1*Rg*C1*omega)
#X(omega)=simplify(F(omega)) 
#Cette commande permet aussi d'obtenir une forme simplifiée de notre fonction. Cependant lors de la vérification des calculs du gain par numerical_approx, nous obtenons 
#une erreur quand nous nous sommes servis de simplify. Cela nous empêche donc d'expliquer les erreurs obtenus sur le diagramme. C'est pourquoi nous nous servons pas de cette commande.

show("F(omega) = ",F(omega))
(Vs, Ve, F)
F(omega) = 1000000325iω+1001000\displaystyle \frac{1000000}{\frac{3}{25} i \, \omega + 1001000}
#module de notre fonction de transfert
show(abs(F(omega)))
10000001325iω+1001000\displaystyle 1000000 \, {\left| \frac{1}{\frac{3}{25} i \, \omega + 1001000} \right|}
#argument de notre fonction de transfert qui va servir au diagramme asymptotique de phase
var("Phi")
Phi=arg(F(omega))
show("Phi = ",Phi)
#Pour vérifier nous trouvons de notre côté pour cet argument: -arctan(R1*Rg*C1*omega/Rg+R1) ; cet argument est équivalent de celui trouvé sur cocalc (si on retire omega de nos formules sur 
# cocalc, on trouve le même résultat)
#A partir de ça, on voit que:
# omega -> 0 : Phi -> 0
# omega -> +infini: Phi -> -pi/2 (car arctan(+infini) -> pi/2)
Phi
Phi = arg(1000000325iω+1001000)\displaystyle {\rm arg}\left(\frac{1000000}{\frac{3}{25} i \, \omega + 1001000}\right)
var("P")
P(omega)=Phi
plot(P(omega),(omega,1,10))
#Ce diagramme asymptotique de phase nous montre bien que nous avons un passe bas vu que la courbe décroit
P
#Maintenant on déclare le gain G et la fréquence f pour tracer le diagramme de bode
var("G,fo")
fo=Rg/R1*C1
f=100*fo
G(omega)=20*log(abs(F(omega)),10) #formule du gain
show("G = ",G(omega))

numerical_approx(G(300000),digits=10) #Vérification du calcul effectué par cocalc
(G, fo)
G = 20log(10000001325iω+1001000)log(10)\displaystyle \frac{20 \, \log\left(1000000 \, {\left| \frac{1}{\frac{3}{25} i \, \omega + 1001000} \right|}\right)}{\log\left(10\right)}
-0.01429513651
#Enfin on trace le diagramme de Bode
plot(G(omega),(omega,10^0,10^8),scale="semilogx")
Error in lines 1-1 Traceback (most recent call last): File "/cocalc/lib/python2.7/site-packages/smc_sagews/sage_server.py", line 1013, in execute exec compile(block+'\n', '', 'single') in namespace, locals File "", line 1, in <module> NameError: name 'G' is not defined
#Cette courbe est fausse car nous sommes censés retrouver la courbe d'un passe bas. En effet quand oméga tend vers 0, le gain est à 0
#et quand omega tend vers +infini la courbe tend vers -pi/2. A la fréquence de coupure nous devons être à -3db, et la courbe doit décroitre
#jusqu'à -20db.
#En reprenant la formule du gain (affichée au dessus de la courbe), nous obtenons avec notre calculatrice -20,01429514db pour omega=300000
#ce qui est la bonne valeur,or cocalc trouve -0.01429514db pour cette valeur alors qu'il utilise la même formule. C'est pourquoi cela fausse
#la courbe. Pour une raison que l'on ignore, cocalc trouve seulement la partie décimale du bon résultat que l'on doit trouver mais ne trouve pas la partie entière.

II.2 Cas de la sonde

Maintenant nous rajoutons une sonde, équivalent à une résistance R2=9 Mégaohm et à un condensateur C2=13.3pF en parallèles. Ce qui nous donne le schéma suivant:

Z2 représentant l'équivalence de R2 et C2 en parallèle.

#Nous déclarons R2 et C2:
R2=9*10^6
C2=13.3*10^-12
show("R2 = ",R2,"ohm")
show("C2 = ",C2,"F")
R2 = 9000000\displaystyle 9000000 ohm
C2 = 1.33000000000000×1011\displaystyle 1.33000000000000 \times 10^{-11} F
#Puis nous déclarons Z2:
Z2=R2/(j*R2*C2*omega+1)
show("Z2 = ",Z2)
Z2 = 90000000.000119700000000000iω+1\displaystyle \frac{9000000}{0.000119700000000000i \, \omega + 1}

Grâce à nos relations on a :

i = VrgRg\frac{Vrg}{Rg} = Vz2Z2\frac{Vz2}{Z2} = VsZ\frac{Vs}{Z}

Ce qui donne la fonction de tranfert: VsVe\frac{Vs}{Ve} = ZRg+Z+Z2\frac{Z}{Rg+Z+Z2}

#Nous déclarons alors la fonction de transfert F2 pour le cas 2
var("F2")
F2(omega)=Z/(Z+Z2+Rg)
F2(omega)=(R1^2 +1)/(R1*(1+R1+R2+Rg*(j*C1*R1*omega+1)+j*R1) + (Rg*(j*C1*R1*omega+1))/R1 - j*R2)
show("F2(omega) = ",F2)
F2
F2(omega) = ω  1000000000001300000000000325000000iω+999991000000i+100010010000000011000\displaystyle \omega \ {\mapsto}\ \frac{1000000000001}{\frac{3000000000003}{25000000} i \, \omega + 999991000000 i + \frac{10001001000000001}{1000}}
#Nous affichons le module de F2
show(abs(F2(omega)))
10000000000011300000000000325000000iω+999991000000i+100010010000000011000\displaystyle 1000000000001 \, {\left| \frac{1}{\frac{3000000000003}{25000000} i \, \omega + 999991000000 i + \frac{10001001000000001}{1000}} \right|}
#Puis nous affichons l'argument de F2
show(arg(F2(omega)))
arg(1000000000001300000000000325000000iω+999991000000i+100010010000000011000)\displaystyle {\rm arg}\left(\frac{1000000000001}{\frac{3000000000003}{25000000} i \, \omega + 999991000000 i + \frac{10001001000000001}{1000}}\right)
#Diagramme asymptotique de phase pour le cas 2
var("P2")
P2(omega)=Phi
plot(P2(omega),(omega,1,10))
P2
#Enfin nous déclarons un autre gain en fonction de F2
var("G2")
G2(omega)= 20*log(abs(F2(omega)),10)
show("G2 = ",G2(omega))

numerical_approx(G2(100),digits=10) #Vérification du calcul effectué par cocalc
G2
G2 = 20log(10000000000011300000000000325000000iω+999991000000i+100010010000000011000)log(10)\displaystyle \frac{20 \, \log\left(1000000000001 \, {\left| \frac{1}{\frac{3000000000003}{25000000} i \, \omega + 999991000000 i + \frac{10001001000000001}{1000}} \right|}\right)}{\log\left(10\right)}
-20.04407480
#Diagramme de Bode de la sonde
plot(G2(omega),(omega,10^0,10^6),scale="semilogx")

II.3 Cas du cable et de la sonde réunis

var("y1,y2,y3,y4,y5,omega,vs,ve,T,c1,c2,c3,R,i,jw")
f=vs/ve
f=-(y1*y3)/(y3*y4+y5*(y1+y2+y3+y4))

(y1, y2, y3, y4, y5, omega, vs, ve, T, c1, c2, c3, R, i, jw)
y1=1/R
y2=i*c1*omega
y3=1/R
y4=1/R
y5=i*c2*omega
jw=i*omega
T(jw)=-1/(1+3*i*R*c2*omega+(i*sqrt(c1*c2)*omega*R)^2)
show(T)
jw  1R2c1c2i2ω2+3Rc2iω+1\displaystyle \mathit{jw} \ {\mapsto}\ -\frac{1}{R^{2} c_{1} c_{2} i^{2} \omega^{2} + 3 \, R c_{2} i \omega + 1}
var("G,i")
G=20*log(T)
show(G)
(G, i)
jw  20log(1R2c1c2i2ω2+3Rc2iω+1)\displaystyle \mathit{jw} \ {\mapsto}\ 20 \, \log\left(-\frac{1}{R^{2} c_{1} c_{2} i^{2} \omega^{2} + 3 \, R c_{2} i \omega + 1}\right)
R=100*10^3
c1=c2=1*10^-9
plot(G(jw),(jw,10^0,10^6),scale="semilogx")
Error in lines 3-3 Traceback (most recent call last): File "/cocalc/lib/python2.7/site-packages/smc_sagews/sage_server.py", line 1044, in execute exec compile(block+'\n', '', 'single', flags=compile_flags) in namespace, locals File "", line 1, in <module> File "/ext/sage/sage-8.1/local/lib/python2.7/site-packages/sage/misc/decorators.py", line 564, in wrapper return func(*args, **options) File "/ext/sage/sage-8.1/local/lib/python2.7/site-packages/sage/plot/plot.py", line 1931, in plot G = funcs.plot(*args, **original_opts) File "sage/symbolic/expression.pyx", line 11796, in sage.symbolic.expression.Expression.plot (build/cythonized/sage/symbolic/expression.cpp:67212) f = self._plot_fast_callable(param) File "sage/symbolic/expression.pyx", line 11842, in sage.symbolic.expression.Expression._plot_fast_callable (build/cythonized/sage/symbolic/expression.cpp:67707) return fast_callable(self, vars=vars, expect_one_var=True) File "sage/ext/fast_callable.pyx", line 465, in sage.ext.fast_callable.fast_callable (build/cythonized/sage/ext/fast_callable.c:4633) et = x._fast_callable_(etb) File "sage/symbolic/expression.pyx", line 11679, in sage.symbolic.expression.Expression._fast_callable_ (build/cythonized/sage/symbolic/expression.cpp:66335) return fast_callable(self, etb) File "/ext/sage/sage-8.1/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 1757, in fast_callable return FastCallableConverter(ex, etb)() File "/ext/sage/sage-8.1/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 217, in __call__ return self.arithmetic(div, div.operator()) File "/ext/sage/sage-8.1/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 1685, in arithmetic return reduce(lambda x,y: self.etb.call(operator, x,y), operands) File "/ext/sage/sage-8.1/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 1685, in <lambda> return reduce(lambda x,y: self.etb.call(operator, x,y), operands) File "sage/ext/fast_callable.pyx", line 751, in sage.ext.fast_callable.ExpressionTreeBuilder.call (build/cythonized/sage/ext/fast_callable.c:7236) return ExpressionCall(self, fn, map(self, args)) File "sage/ext/fast_callable.pyx", line 626, in sage.ext.fast_callable.ExpressionTreeBuilder.__call__ (build/cythonized/sage/ext/fast_callable.c:6241) return fc(self) File "sage/symbolic/expression.pyx", line 11679, in sage.symbolic.expression.Expression._fast_callable_ (build/cythonized/sage/symbolic/expression.cpp:66335) return fast_callable(self, etb) File "/ext/sage/sage-8.1/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 1757, in fast_callable return FastCallableConverter(ex, etb)() File "/ext/sage/sage-8.1/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 226, in __call__ return self.composition(ex, operator) File "/ext/sage/sage-8.1/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 1723, in composition return self.etb.call(function, *ex.operands()) File "sage/ext/fast_callable.pyx", line 751, in sage.ext.fast_callable.ExpressionTreeBuilder.call (build/cythonized/sage/ext/fast_callable.c:7236) return ExpressionCall(self, fn, map(self, args)) File "sage/ext/fast_callable.pyx", line 626, in sage.ext.fast_callable.ExpressionTreeBuilder.__call__ (build/cythonized/sage/ext/fast_callable.c:6241) return fc(self) File "sage/symbolic/expression.pyx", line 11679, in sage.symbolic.expression.Expression._fast_callable_ (build/cythonized/sage/symbolic/expression.cpp:66335) return fast_callable(self, etb) File "/ext/sage/sage-8.1/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 1757, in fast_callable return FastCallableConverter(ex, etb)() File "/ext/sage/sage-8.1/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 217, in __call__ return self.arithmetic(div, div.operator()) File "/ext/sage/sage-8.1/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 1685, in arithmetic return reduce(lambda x,y: self.etb.call(operator, x,y), operands) File "/ext/sage/sage-8.1/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 1685, in <lambda> return reduce(lambda x,y: self.etb.call(operator, x,y), operands) File "sage/ext/fast_callable.pyx", line 751, in sage.ext.fast_callable.ExpressionTreeBuilder.call (build/cythonized/sage/ext/fast_callable.c:7236) return ExpressionCall(self, fn, map(self, args)) File "sage/ext/fast_callable.pyx", line 626, in sage.ext.fast_callable.ExpressionTreeBuilder.__call__ (build/cythonized/sage/ext/fast_callable.c:6241) return fc(self) File "sage/symbolic/expression.pyx", line 11679, in sage.symbolic.expression.Expression._fast_callable_ (build/cythonized/sage/symbolic/expression.cpp:66335) return fast_callable(self, etb) File "/ext/sage/sage-8.1/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 1757, in fast_callable return FastCallableConverter(ex, etb)() File "/ext/sage/sage-8.1/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 218, in __call__ return self.arithmetic(ex, operator) File "/ext/sage/sage-8.1/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 1685, in arithmetic return reduce(lambda x,y: self.etb.call(operator, x,y), operands) File "/ext/sage/sage-8.1/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 1685, in <lambda> return reduce(lambda x,y: self.etb.call(operator, x,y), operands) File "sage/ext/fast_callable.pyx", line 751, in sage.ext.fast_callable.ExpressionTreeBuilder.call (build/cythonized/sage/ext/fast_callable.c:7236) return ExpressionCall(self, fn, map(self, args)) File "sage/ext/fast_callable.pyx", line 626, in sage.ext.fast_callable.ExpressionTreeBuilder.__call__ (build/cythonized/sage/ext/fast_callable.c:6241) return fc(self) File "sage/symbolic/expression.pyx", line 11679, in sage.symbolic.expression.Expression._fast_callable_ (build/cythonized/sage/symbolic/expression.cpp:66335) return fast_callable(self, etb) File "/ext/sage/sage-8.1/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 1757, in fast_callable return FastCallableConverter(ex, etb)() File "/ext/sage/sage-8.1/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 217, in __call__ return self.arithmetic(div, div.operator()) File "/ext/sage/sage-8.1/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 1685, in arithmetic return reduce(lambda x,y: self.etb.call(operator, x,y), operands) File "/ext/sage/sage-8.1/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 1685, in <lambda> return reduce(lambda x,y: self.etb.call(operator, x,y), operands) File "sage/ext/fast_callable.pyx", line 751, in sage.ext.fast_callable.ExpressionTreeBuilder.call (build/cythonized/sage/ext/fast_callable.c:7236) return ExpressionCall(self, fn, map(self, args)) File "sage/ext/fast_callable.pyx", line 626, in sage.ext.fast_callable.ExpressionTreeBuilder.__call__ (build/cythonized/sage/ext/fast_callable.c:6241) return fc(self) File "sage/symbolic/expression.pyx", line 11679, in sage.symbolic.expression.Expression._fast_callable_ (build/cythonized/sage/symbolic/expression.cpp:66335) return fast_callable(self, etb) File "/ext/sage/sage-8.1/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 1757, in fast_callable return FastCallableConverter(ex, etb)() File "/ext/sage/sage-8.1/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 212, in __call__ return self.symbol(ex) File "/ext/sage/sage-8.1/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 1706, in symbol return self.etb.var(SR(ex)) File "sage/ext/fast_callable.pyx", line 698, in sage.ext.fast_callable.ExpressionTreeBuilder.var (build/cythonized/sage/ext/fast_callable.c:6817) raise ValueError("Variable '%s' not found" % var_name) ValueError: Variable 'c1' not found