Analyse d’un Circuit de Premier Ordre#
Dans ce tutorial, nous allons réaliser une analyse complète d’un circuit. Le circuit considéré est le suivant :
Fonction de Transfert#
La fonction de transfert du circuit s’obtient en utilisant le pont diviseur de tension. En notant \(s(t)\) la sortie \(V_{out}(t)\) et \(e(t)\) l’entrée \(V_{in}(t)\), nous obtenons dans le domaine de Laplace:
Nous en déduisons que la fonction de transfert du système est égal à
Pour specifier cette fonction de transfert en Python, nous allons utiliser la module scipy.
Réponse Temporelle#
Le système peut être décrit dans le domaine temporelle par l’équation suivante :
Réponse Indicielle#
Nous allons nous intéresser à la sortie lorsque l’entrée est un échelon d’amplitude E
La sortie du système est supposée initialement nulle c-a-d \(s(0^-)=0\).
Expression#
Equation caractéristique :
Régime Libre :
Régime Forcé : Lorsque l’entrée est un échelon d’amplitude E, le regime permanent s’exprime sous la forme \(s_p(t) = S u(t)\). La valeur de \(S\) s’obtient en injectant l’expression du regime permanent dans l’équation différentielle. Pour \(t\ge 0\), nous obtenons :
Solution Complète: Pour \(t\ge 0\), nous obtenons finalement
La détermination de la constante d’intégration peut s’obtenir en déterminant la valeur de \(s(t)\) en \(t=0^+\). Cette valeur peut s’obtenir en intégrant l’équation différentielle entre \(t=0^-\) et \(t=0^+\).
Sous l’hypothèse où la seconde intégrale du terme de gauche est nulle et en utilisant le fait que la sortie est initialement nulle, nous obtenons :
En exploitant cette equation, il en vient que :
Pour \(t\ge 0\), nous obtenons finalement l’expression suivante :
Valeurs Remarquables#
Valeur initiale: \(s(0^+)=0\),
Valeur finale: \(s(\infty)=E\),
Valeur maximale: \(max(s(t))=E\),
Valeur en \(t=\tau=RC\), \(s(\tau)=0.63E\),
Valeur en \(t=3\tau=3RC\), \(s(3\tau)=0.95E\).
Simulation Python#
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import lti, step
R = 10*(10**3)
C = 10**(-9)
num = [1]
den = [R*C, 1]
H = lti(num, den)
E = 1
t, s = step(H)
plt.plot(t, s, label="s(t)")
plt.plot(t, E*(t>=0), label="e(t)")
plt.axhline([0.63*E],c="r", linestyle="--")
plt.axhline([0.95*E],c="r", linestyle="--")
plt.axvline([R*C],c="r", linestyle="--")
plt.axvline([3*R*C],c="r", linestyle="--")
plt.xlim([0, t[-1]])
plt.xlabel("temps [s]")
plt.ylabel("sortie")
plt.legend()
plt.grid()
Réponse Fréquentielle#
Expression#
La réponse fréquentielle s’obtient en évaluant la fonction de transfert en \(p=j\omega\). Mathématiquement, nous obtenons :
Module :
Argument :
Valeurs Remarquables#
Basse-Fréquence : Lorsque \(\omega\to 0\),
Pulsation de coupure : Lorsque \(\omega=\omega_c=\frac{1}{RC}\),
Asymptotes Haute-Fréquences :
Simulation Python#
w = np.logspace(3, 7, 200)
wc = 1/(R*C)
w, Hjw = H.freqresp(w=w)
H_mod = np.abs(Hjw)
H_phase = 180*np.angle(Hjw)/np.pi #convert radian to degree
# plot figure
plt.subplot(2,1,1)
plt.loglog(w,H_mod)
plt.plot([w[0], w[-1]], [wc/w[0], wc/w[-1]],"r--")
plt.axhline([1/np.sqrt(2)],c="r", linestyle="--")
plt.axvline([wc],c="r", linestyle="--")
plt.ylabel("Magnitude")
plt.xlim([w[0], w[-1]])
plt.ylim([0.001, 2])
plt.grid()
plt.subplot(2,1,2)
plt.semilogx(w,H_phase)
plt.axhline([-45],c="r", linestyle="--")
plt.axvline([wc],c="r", linestyle="--")
plt.ylabel("Phase [deg]")
plt.xlabel("w [rad/s]")
plt.xlim([w[0], w[-1]])
plt.grid()