Skip to main content

An educational module about second-order systems

Project description

module order2

Outils pédagogiques pour l'étude des systèmes du 2ème ordre

Installation du module python order2

From Pypi repository :
https://pypi.org/project/order2

pip install order2

Réponse indicielle en régime transitoire

On s'intéresse aux systèmes du 2ème ordre régis par l'équation différentielle suivante :

(1/ω0²).d²y(t)/dt² + (2m/ω0).dy(t)/dt + y(t) = A.u(t)

avec :

  • t : temps en s
  • A : amplification statique (sans unité)
  • m : coefficient d'amortissement (sans unité, m >= 0)
  • ω0 : pulsation propre (en rad/s)
  • u(t) : échelon unité (Heaviside)
    • u(t) = 0 pour t < 0
    • u(t) = 1 pour t >= 0

Conditions initiales (système au repos) :

  • y(t=0) = 0
  • dy(t=0)/dt = 0

Exemple :

>>> import order2
>>> syst = order2.Ordre2(A=2, coeff_amortissement=0.05, w0=1000)
>>> syst.courbe_reponse_indicielle()
>>> syst.show()

screenshot01

>>> syst = order2.Ordre2(A=1, coeff_amortissement=2.5, w0=1000)
>>> syst.courbe_reponse_indicielle()
>>> syst.show()

screenshot01b

Etude en régime harmonique (sinusoïdal)

La fonction de transfert (transmittance complexe) s'écrit alors :

                A
H(jω) = ----------------------
         1 + 2mjω/ω0 -(ω/ω0)²

avec :

  • ω : pulsation en rad/s
  • A : amplification statique (sans unité)
  • m : coefficient d'amortissement (sans unité, m >= 0)
  • ω0 : pulsation propre (en rad/s)

Exemple :

>>> import order2
>>> syst = order2.Ordre2(A=2, coeff_amortissement=0.05, w0=1000)
>>> syst.bode()
>>> syst.show()

screenshot02

Cas particulier : circuit électrique RLC série

                        L
            ---[ R ]---^^^^-----
          ^                     |    ^
tension   |                    ---   |  tension
d'entrée  |                  C ---   |  de sortie
Vin       |                     |    |  Vout
            --------------------
  • R résistance en Ω
  • L inductance en henry
  • C capacité en farad

Exemple :

>>> import order2
>>> syst = order2.RLC(R=100, L=0.01, C=100e-9)
>>> print(syst.pulsation_propre)
31622.7766016
>>> print(syst.amortissement)
0.158113883008
>>> syst.courbe_reponse_indicielle()
>>> syst.bode()
>>> syst.show()

screenshot03

screenshot04

Autre cas particulier : masse suspendue à un ressort

  • M : masse en kg
  • K : constante de raideur du ressort (en N/m)
  • f : coefficient de frottement (en N.s/m)

Exemple :

>>> import order2
>>> syst = order2.MKF(M=2, K=100, f=13)
>>> print(syst.pulsation_propre)
7.07106781186
>>> print(syst.amortissement)
0.45961940777
>>> syst.courbe_reponse_indicielle()
>>> syst.bode()
>>> syst.show()

Autres fonctionnalités

Réponse indicielle

  • détermination du type de régime
  • temps de réponse
  • pseudo-période
  • fréquence propre
  • dépassements en %

Exemple :

>>> import order2
>>> syst = order2.Ordre2(A=10, coeff_amortissement=0.5, w0=600)
>>> print(syst.regime())
pseudo-périodique
>>> print(syst.temps_de_reponse(5))  # à 5 %
0.0088151553719
>>> print(syst.temps_de_reponse(1))  # à 1 %
0.0146342745411
>>> print(syst.frequence_propre())
95.49296585
>>> print(syst.depassement(1))  # 1er dépassement en %
16.3033534821

Réponse harmonique

  • fréquence propre
  • fréquence de résonance
  • facteur de résonance
  • fréquence de coupure à -3 dB

Exemple :

>>> import order2
>>> syst = order2.Ordre2(A=10, coeff_amortissement=0.5, w0=600)
>>> print(syst.frequence_propre())
95.49296585
>>> print(syst.frequence_resonance_harmonique())
67.523723711
>>> print("{} ou {} dB".format(*syst.facteur_resonance_harmonique()))
1.15470053837 ou 1.24938736608 dB
>>> print(syst.frequence_coupure_harmonique())
121.468928958
  • fonction de transfert complexe (transmittance)

Exemple :

>>> syst = order2.Ordre2(A=2, coeff_amortissement=0.05, w0=1000)
>>> H = syst.fonction_transfert
>>> # help(H)
>>> H.properties(150)  # transmittance à 150 Hz
Frequency (Hz) : 150
Angular frequency (rad/s) : 942.478
Complex value : 10.4585-8.82161j
Magnitude : 13.6821
Magnitude (dB) : 22.72306
Phase (degrees) : -40.1473
Phase (radians) : -0.700702
>>> print(H.db(150))  # gain en dB à 150 Hz
22.723064994
>>> print(H.phase_deg(150))  # déphasage en degrés à 150 Hz
-40.147271165

Abaques

Réponse indicielle

  • coefficient d'amortissement en fonction du premier dépassement en %
>>> import order2
>>> print(order2.Ordre2.abaque_coeff_amortissement(depassement=60))
0.160493046664
  • n-ième dépassement en % en fonction du coefficient d'amortissement
>>> print(order2.Ordre2.abaque_depassement(coeff_amortissement=0.16))
60.0967132139
>>> print(order2.Ordre2.abaque_depassement(coeff_amortissement=0.16, n=2)) 
36.1161493911
  • temps de réponse en fonction de m et de ω0
>>> print(order2.Ordre2.abaque_temps_de_reponse(coeff_amortissement=0.16, w0=10000,
                                                pourcentage=5))
0.0016837960245
  • pseudo-période en fonction de m et de ω0
>>> print(order2.Ordre2.abaque_pseudo_periode(coeff_amortissement=0.16, w0=10000))
0.00063651879320
  • ω0 en fonction de m et de la pseudo-période
>>> print(order2.Ordre2.abaque_pulsation_propre(coeff_amortissement=0.16,
                                                pseudo_periode=0.0006365))
10000.295258

Réponse harmonique

  • coefficient d'amortissement en fonction du facteur de résonance en dB
>>> import order2
>>> print(order2.Ordre2.abaque_coeff_amortissement_harmonique(facteur_resonance_db=20))
0.0500627750598
  • facteur de résonance (sans unité et en dB) en fonction du coefficient d'amortissement
>>> result = order2.Ordre2.abaque_facteur_resonance_harmonique(coeff_amortissement=0.05)
>>> print("{} ou {} dB".format(*result))
10.0125234864 ou 20.010870956 dB
  • fréquence de coupure à -3 dB en fonction de m et ω0
>>> print(order2.Ordre2.abaque_frequence_coupure_harmonique(coeff_amortissement=0.16,
                                                            w0=10000))
2427.97905105
  • fréquence de résonance en fonction de m et ω0
>>> print(order2.Ordre2.abaque_frequence_resonance_harmonique(coeff_amortissement=0.16,
                                                              w0=10000))
1550.27045
  • ω0 en fonction de m et de la fréquence de résonance
>>> print(order2.Ordre2.abaque_pulsation_propre_resonance_harmonique(
        coeff_amortissement=0.16, frequence_resonance=1550.27))
9999.9970809

Pôles de la fonction de transfert

                A                     A.ω0²
H(s) = ---------------------- = ----------------------
         1 + 2ms/ω0 +(s/ω0)²    (s - pole1)(s - pole2)

avec : s = jω (opérateur de Laplace)

  • calcul des pôles à partir de m et ω0
>>> print(order2.Ordre2.abaque_poles(coeff_amortissement=0.6, w0=1000))
((-600+800j), (-600-800j))
  • calcul de m et ω0 à partir des pôles
>>> print(order2.Ordre2.abaque_m_w0_depuis_poles(-600+800j, -600-800j))
(0.6, 1000.0)

Exemples : mise en cascade de deux systèmes du 1er ordre

L'ensemble donne un système du 2ème ordre :

            1         1                1
H(s) = ----------.---------- = ---------------------
        1 + s/ω1   1 + s/ω2     1 + 2ms/ω0 +(s/ω0)² 
>>> w1, w2 = 1000, 100000
>>> m, w0 = order2.Ordre2.abaque_m_w0_depuis_poles(-w1, -w2)
>>> print(m ,w0)
5.05 10000.0
>>> syst = order2.Ordre2(A=1, coeff_amortissement=m, w0=w0)
>>> syst.bode()
>>> syst.show()

Si le coefficient d'amortissement est supérieur à 1, on peut décomposer un système du 2ème ordre en deux systèmes du 1er ordre :

>>> syst = order2.Ordre2(A=1, coeff_amortissement=2.5, w0=1000) 
>>> pole1, pole2 = syst.poles
>>> w1, w2 = -pole1, -pole2
>>> print(w1, w2)                                                          
208.71215252208003 4791.28784747792
>>> tau1, tau2 = 1/w1, 1/w2                                                
>>> print(tau1, tau2)  # constantes de temps
0.004791287847477919 0.00020871215252208

Aide complète

>>> import order2
>>> help(order2)

Bonus

Vous trouverez ici les scripts permettant de tracer les courbes suivantes :

  • Abaque : premier dépassement en fonction du coefficient d'amortissement

screenshot05

  • Abaque : temps de réponse réduit en fonction du coefficient d'amortissement

screenshot06

  • Abaque : facteur de résonance en fonction du coefficient d'amortissement

screenshot07

Documentation complète

https://framagit.org/fsincere/order2

TO DO

English translation...

A voir

https://pypi.org/project/ac-electricity

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

order2-0.4.0.tar.gz (23.3 kB view details)

Uploaded Source

Built Distribution

order2-0.4.0-py3-none-any.whl (23.9 kB view details)

Uploaded Python 3

File details

Details for the file order2-0.4.0.tar.gz.

File metadata

  • Download URL: order2-0.4.0.tar.gz
  • Upload date:
  • Size: 23.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/29.0 requests/2.22.0 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.60.0 importlib-metadata/4.0.1 keyring/18.0.1 rfc3986/1.5.0 colorama/0.4.3 CPython/3.8.10

File hashes

Hashes for order2-0.4.0.tar.gz
Algorithm Hash digest
SHA256 d992081a6a0c73b50ea21f69f11ba0b4c209752b4479e86ff0290e5970c4bc09
MD5 e64d72ad49eb23810b1762f388338fa4
BLAKE2b-256 a6766465ff0bf8f32a018ef639c81922e469b5c57d89c7127644575d28ad3611

See more details on using hashes here.

File details

Details for the file order2-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: order2-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 23.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/29.0 requests/2.22.0 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.60.0 importlib-metadata/4.0.1 keyring/18.0.1 rfc3986/1.5.0 colorama/0.4.3 CPython/3.8.10

File hashes

Hashes for order2-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c8b3f88d7608dfa0cdf156f278e847ef033b4291a92b5170250a09a73b3511fa
MD5 fe8f564985bbbcac3e49edc1102bbfa7
BLAKE2b-256 f443819dd3a51eed88d1f9ac6bae02e5049399eee1c3520207c4225282650596

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page