Skip to main content

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

Metadata

Release files for order2 0.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for order2 0.4.0
File Size Uploaded Provenance
order2-0.4.0.tar.gz 23.3 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for order2 0.4.0
File Interpreter ABI Platform
order2-0.4.0-py3-none-any.whl Python 3 none any Details

Total release size: 47.2 kB

Release files / order2-0.4.0.tar.gz

Download URL order2-0.4.0.tar.gz
Size 23.3 kB
Tags Source
SHA-256 checksum
How to use checksums
d992081a6a0c73b50ea21f69f11ba0b4c209752b4479e86ff0290e5970c4bc09
BLAKE2b-256 checksum
How to use checksums
a6766465ff0bf8f32a018ef639c81922e469b5c57d89c7127644575d28ad3611
Upload date
Uploaded using Trusted Publishing?
What is 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

Release files / order2-0.4.0-py3-none-any.whl

Download URL order2-0.4.0-py3-none-any.whl
Size 23.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c8b3f88d7608dfa0cdf156f278e847ef033b4291a92b5170250a09a73b3511fa
BLAKE2b-256 checksum
How to use checksums
f443819dd3a51eed88d1f9ac6bae02e5049399eee1c3520207c4225282650596
Upload date
Uploaded using Trusted Publishing?
What is 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

Security for order2 0.4.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page