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()
>>> syst = order2.Ordre2(A=1, coeff_amortissement=2.5, w0=1000)
>>> syst.courbe_reponse_indicielle()
>>> syst.show()
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()
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()
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
- Abaque : temps de réponse réduit en fonction du coefficient d'amortissement
- Abaque : facteur de résonance en fonction du coefficient d'amortissement
Documentation complète
https://framagit.org/fsincere/order2
TO DO
English translation...
A voir
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)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| order2-0.4.0.tar.gz | 23.3 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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.