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.
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
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.
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
À 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
Un exemple de code est stocké ci-dessous. https://github.com/nnn112358/python-control_test
Recommended Posts