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 t00 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=0p=1RC
  1. Détermination du régime Libre :
yl(t)=λe1RCt
  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 t0, nous obtenons :
yp(t)=E
  1. Détermination de la Solution Complète: Pour t0, nous obtenons finalement
y(t)=yl(t)+yp(t)=λe1RCt+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 t0, nous obtenons finalement l'expression suivante :

y(t)=E(1e1RCt)

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


class LTI_analysis():

    def lti(self):
        raise NotImplementedError("Subclasses must implement this method")

    def step(self, T=None):
        """
        Computes and plots the step response of the system (response to a unit step input).
        
        Arguments:
            T : time array (optional). If not specified, the time array is automatically generated.
        """
        H = self.lti()
        t, s = H.step(T=T)
        plt.figure("Time Response")
        plt.plot(t, s)
        plt.grid()
        plt.xlabel('time [s]')
        plt.ylabel('step response')
        return t, s

    def freqresp(self, w=None):
        """
        Computes and plots the frequency response of the system.
        
        Arguments:
            w : frequency array (in rad/s). If not specified, frequencies are automatically generated.
        """
        H = self.lti()
        w, Hjw = H.freqresp(w=w)
        fig, axs = plt.subplots(2, 1)
        fig.suptitle("Bode Diagram")
        axs[0].loglog(w, np.abs(Hjw))
        axs[0].set_xlabel("$\omega$ [rad/s]")
        axs[0].set_ylabel("Module")
        axs[0].grid()
        axs[1].semilogx(w, 180*np.angle(Hjw)/np.pi)
        axs[1].set_xlabel("$\omega$ [rad/s]")
        axs[1].set_ylabel("Argument [deg]")
        axs[1].grid()
        return w, Hjw


class RC_LP_1st_order(LTI_analysis):
    """
    Class representing a first-order RC low-pass filter.
    This filter is modeled by a linear time-invariant (LTI) system.
    """

    def __init__(self, R=10**3, C=10**-9):
        """
        Initializes the class with a resistance R (in ohms) and a capacitance C (in farads).
        """
        self.R = R
        self.C = C

    def lti(self):
        """
        Creates a linear time-invariant (LTI) model for the RC circuit.
        """
        tau = self.R*self.C
        return lti([1], [tau, 1])


if __name__ == "__main__":
    filter = RC_LP_1st_order(R=10**4, C=10**-9)
    filter.step()
    filter.freqresp()
    plt.show()

Courbes