Skip to content

Analyse d'un Circuit de Premier Ordre ​

Dans ce tutorial, nous allons réaliser une analyse complète d'un circuit de premier ordre (RC_LP). Le circuit considéré est le suivant :

Analyse Théorique ​

Fonction de Transfert ​

La fonction de transfert du circuit s'obtient en utilisant le pont diviseur de tension. En notant y(t) la sortie Vout(t) et x(t) l'entrée Vin(t), nous obtenons dans le domaine de Laplace:

S(s)=ZcZc+ZrX(s)=1Cp1Cp+RS(s)=1RCp+1X(s)

Nous en déduisons que la fonction de transfert du système est égal à

H(s)=S(s)X(s)=1RCp+1

Réponse Indicielle ​

Le système peut être décrit dans le domaine temporelle par l'équation suivante :

RCdy(t)dt+y(t)=x(t)

Nous allons nous intéresser à la sortie lorsque l'entrée est un échelon d'amplitude E

x(t)={E si t≥00 ailleurs

La sortie du système est supposée initialement nulle c-a-d y(0−)=0.

Expression de la solution complète ​

  1. Détermination des racines de l'équation caractéristique :
RCp+1=0⇒p=−1RC
  1. Détermination du régime Libre :
yl(t)=λe−1RCt
  1. Détermination du Régime Forcé : Lorsque l'entrée est un échelon d'amplitude E, le regime permanent s'exprime sous la forme yp(t)=αu(t). La valeur de α s'obtient en injectant l'expression du regime permanent dans l'équation différentielle. Pour t≥0, nous obtenons :
yp(t)=E
  1. Détermination de la Solution Complète: Pour t≥0, nous obtenons finalement
y(t)=yl(t)+yp(t)=λe−1RCt+E
  1. Exploitation des conditions initiales. La détermination de la constante d'intégration peut s'obtenir en déterminant la valeur de y(t) en t=0+. Il est possible de démontrer que y(0+)=0, ce qui implique que :
y(0+)=λ×1+E=0⇒λ=−E

Pour t≥0, nous obtenons finalement l'expression suivante :

y(t)=E(1−e−1RCt)

Valeurs Remarquables ​

  • Valeur initiale: y(0+)=0,
  • Valeur finale: y(∞)=E,
  • Valeur maximale: max(y(t))=E,
  • Valeur en t=τ=RC, y(τ)=0.63E,
  • Valeur en t=3τ=3RC, y(3τ)=0.95E.

Réponse Fréquentielle ​

Expression ​

La réponse fréquentielle s'obtient en évaluant la fonction de transfert en s=jω. Mathématiquement, nous obtenons :

H(jω)=1jRCω+1
  • Module :
|H(jω)|=1(RCω)2+1
  • Argument :
arg⁡[H(jω)]=−arctan⁡(RCω)

Valeurs Remarquables ​

  • Basse-Fréquence : Lorsque ω→0,
|H(jω)|≈1,arg⁡[H(jω)]≈0.
  • Pulsation de coupure : Lorsque ω=ωc=1RC,
|H(jωc)|=12,arg⁡[H(jωc)]=−45o.
  • Asymptotes Haute-Fréquences :
limω→∞|H(jω)|=(ωωc)−1,limω→∞arg⁡[H(jω)]=−90o.

Simulation Python ​

Code ​

py
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import lti

# Parametres du circuit RC
R = 10e3    # Resistance en Ohms (10 kOhm)
C = 10e-9   # Capacite en Farads (10 nF)

# Calcul de la constante de temps et pulsation de coupure
tau = R * C
wc = 1 / tau
print(f"Constante de temps: tau = {tau*1e6:.2f} us")
print(f"Pulsation de coupure: wc = {wc:.2f} rad/s")

# Creation de la fonction de transfert H(s) = 1 / (tau*s + 1)
num = [1]
den = [tau, 1]
H = lti(num, den)

# ===================
# Reponse Indicielle
# ===================
t, y = H.step()

plt.figure()
plt.plot(t, y)
plt.axhline(y=1, color='r', linestyle='--', label='Valeur finale')
plt.axhline(y=0.63, color='g', linestyle='--', label='63% (t = tau)')
plt.axvline(x=tau, color='g', linestyle=':', alpha=0.7)
plt.xlabel('Temps [s]')
plt.ylabel('Amplitude')
plt.title('Reponse indicielle du filtre RC')
plt.legend()
plt.grid()
plt.savefig('../img/02_fig1.png')

# ===================
# Diagramme de Bode
# ===================
w, Hjw = H.freqresp()
H_module = np.abs(Hjw)
H_phase = (180 / np.pi) * np.angle(Hjw)

fig, axs = plt.subplots(2, 1, figsize=(8, 6), sharex=True)
fig.suptitle('Diagramme de Bode - Filtre RC passe-bas')

# Module
axs[0].loglog(w, H_module)
axs[0].axvline(x=wc, color='r', linestyle='--', label=f'wc = {wc:.0f} rad/s')
axs[0].axhline(y=1/np.sqrt(2), color='g', linestyle=':', label='-3 dB')
axs[0].set_ylabel('Module $|H(j\\omega)|$')
axs[0].legend()
axs[0].grid(which='both')

# Phase
axs[1].semilogx(w, H_phase)
axs[1].axvline(x=wc, color='r', linestyle='--')
axs[1].axhline(y=-45, color='g', linestyle=':', label='-45 deg')
axs[1].set_xlabel('Pulsation $\\omega$ [rad/s]')
axs[1].set_ylabel('Phase [deg]')
axs[1].legend()
axs[1].grid(which='both')

plt.tight_layout()
plt.savefig('../img/02_fig2.png')
plt.show()

Courbes ​