Trouvez la fonction de transfert du système à un degré de liberté avec PythonControl.

Objectif

Formulez une équation d'état pour un système à un degré de liberté (système d'amortisseur de masse à ressort) et utilisez Python Control pour convertir l'équation d'état en fonction de transfert. A titre de comparaison, la méthode et la description d'obtention de la fonction de transfert à partir de la transformation de Laplace sont également décrites.

Préparation préalable

Installer le contrôle Python

Équations d'état et fonctions de transfert

L'équation d'état est exprimée par l'équation suivante.

\dot{x}(t)=Ax(t)+Bu(t) \\
y(t)=Cx(t)+Du(t)

Conversion de Laplace de l'équation d'état

sX(s)=AX(s)+BU(s) \\
Y(s)=CX(s)+DU(s)

Lorsque vous convertissez l'expression,

sX(s)-AX(s)=BU(s) \\
(sI-A)X(s)=BU(s) \\
X(s)={(sI-A)}^{-1} BU(s) \\

La fonction de transfert G (s) est

G(s)=\frac{Y(s)}{U(s)}=\frac{{(sI-A)}^{-1} BU(s) +DU(s)}{U(s)}=(sI-A)^{-1} B +DU

Obtenu à partir de.

Dans Python-Control En entrant la matrice de A, B, C, D dans la fonction control.ss2tf, la fonction de transfert peut être obtenue selon l'équation ci-dessus. http://python-control.readthedocs.io/en/latest/generated/control.ss2tf.html

Formulation de l'équation d'état

Banemasu.jpg

m: masse [kg] k: constante de ressort [N / m] c: coefficient de décroissance visqueuse [N ・ s / m] f: force [N]

Si tu le dis L'équation de mouvement ci-dessus est

m\ddot{x}+c\dot{x}+kx=f \\

Sera.

Trouvez la fonction de transfert à partir de l'équation d'état.

Transformez la formule ici

m\ddot{x}+c\dot{x}+kx=f \\
m\ddot{x}=-c\dot{x}-kx+f \\
\ddot{x}=-c/m \dot{x}-k/m x+f/m \\

Et.

x_{1}=x  \\
x_{2}=\dot{x} \\

Si tu le dis

\\
\dot x_{1} ={x_{2}} \\
\dot x_{2}= -c/m \dot{x_{2}}-k/m x_{1}+f/m \\

Si vous écrivez ceci dans une matrice

\\
\begin{bmatrix}
\dot x_{1}  \\
\dot x_{2}  
\end{bmatrix}
=
\begin{bmatrix}
0 & 1 \\
-k/m & -c/m
\end{bmatrix}
\begin{bmatrix}
x_{1}  \\
x_{2}  
\end{bmatrix}
+
\begin{bmatrix}
0 \\
1/m 
\end{bmatrix}
f

plus loin,

y=Si x,\\

y=
\begin{bmatrix}
1 & 0
\end{bmatrix}
\begin{bmatrix}
x_{1}  \\
x_{2}  
\end{bmatrix}

Donc,


\\
\begin{bmatrix}
\dot x_{1}  \\
\dot x_{2}  
\end{bmatrix}
=
\begin{bmatrix}
0 & 1 \\
-k/m & -c/m
\end{bmatrix}
\begin{bmatrix}
x_{1}  \\
x_{2}  
\end{bmatrix}
+
\begin{bmatrix}
0 \\
1/m 
\end{bmatrix}
f \\
y=
\begin{bmatrix}
1 & 0
\end{bmatrix}
\begin{bmatrix}
x_{1}  \\
x_{2}  
\end{bmatrix}

Comparé à l'équation d'état

x(t)=
\begin{bmatrix}
x_{1}  \\
x_{2}  
\end{bmatrix}

,
u(t)=f
,

A=
\begin{bmatrix}
0 & 1 \\
-k/m & -c/m
\end{bmatrix}
,
B=
\begin{bmatrix}
0 \\
1/m 
\end{bmatrix}
,
C=
\begin{bmatrix}
1 & 0 
\end{bmatrix}
,
D=[0]

Sera.

De ce qui précède, Le code pour trouver la fonction de transfert avec le contrôle python est le suivant.

-signal_degree_of_freedom_system_1.py

#!/usr/bin/env python
from control.matlab import *
from matplotlib import pyplot as plt
    
def main():
    k=3.0
    m=0.1
    c=0.01
    A = [[0., 1], [-k/m, -c/m]]
    B = [[0.], [1./m]]
    C = [[1., 0.0]]
    D = [[0.]]
    sys1 = ss2tf(A, B, C, D)
    print sys1
   
    bode(sys1)    
    plt.show()
    
if __name__ == "__main__":
  main()

Résultat d'exécution

$ ./signal_degree_of_freedom_system_1.py
       10
----------------
s^2 + 0.1 s + 30

Figure_1.png

Transformation de Laplace de l'équation d'état pour obtenir la fonction de transfert.

À partir de l'équation de l'équation d'état, lorsque u (t) = f

m\ddot{x}(t)+c\dot{x}(t)+kx(t)=u(t) \\

Conversion de Laplace

ms^2X(s)+cX(s)+kX(s)=U(s) \\

De plus, si y = x,

ms^2Y(s)+cY(s)+kY(s)=U(s) \\
\frac{Y(s)}{U(s)}=\frac{1}{ms^2+cs+k}

La fonction de transfert est

G(s)=\frac{Y(s)}{U(s)}=\frac{1}{ms^2+cs+k}

De ce qui précède, Le code pour trouver la fonction de transfert avec le contrôle python est le suivant.

#!/usr/bin/env python
from control.matlab import *
from matplotlib import pyplot as plt

def main():
  k=3.0
  m=0.1
  c=0.01
  num = [0, 0,1] 
  den = [m, c, k]
  sys = tf(num, den) 
  print sys
  bode(sys)    
  plt.show()

if __name__ == "__main__":
  main()

Résultat d'exécution

$ ./signal_degree_of_freedom_system_2.py 
          1
--------------------
0.1 s^2 + 0.01 s + 3

Figure_1-2.png

Exemple de code

Un exemple de code est stocké ci-dessous. https://github.com/nnn112358/python-control_test

Recommended Posts

Trouvez la fonction de transfert du système à un degré de liberté avec PythonControl.
Trouvez la valeur optimale de la fonction à l'aide d'un algorithme génétique (partie 2)
Découvrez le jour par date / heure
[Circuit x Python] Comment trouver la fonction de transfert d'un circuit en utilisant Lcapy
Calculer la somme des valeurs uniques par tabulation croisée des pandas
Découvrez l'emplacement des packages installés avec pip
J'ai essayé de trouver l'entropie de l'image avec python
Sauvegardez la sortie de GAN une par une ~ Avec l'implémentation de GAN par PyTorch ~
J'ai évalué la stratégie de négociation du système boursier avec Python.
Si vous donnez une liste avec l'argument par défaut de la fonction ...
Trouvez la solution numérique de l'équation différentielle ordinaire du second ordre avec scipy
Résumons le degré de couplage entre les modules avec du code Python
[Python] Une fonction simple pour trouver les coordonnées du centre d'un cercle
Gagnant du type qui a le plus grand degré de similitude avec l'histoire originale dans "Le gagnant de celui qui a écrit le Hototogisu le plus puant"
Trouvez la définition de la valeur de errno
Trouvez la distance d'édition (distance de Levenshtein) avec python
Trouvez la broche inertielle et le moment d'inertie principal à partir du tenseur inertiel avec NumPy
Retrouvez les termes généraux de la séquence de Tribonacci en algèbre linéaire et Python
Trouvez la valeur minimale de la fonction par la méthode d'optimisation du groupe de particules (PSO)