Formulieren Sie eine Zustandsgleichung für ein System mit einem Freiheitsgrad (Federmassendämpfersystem) und konvertieren Sie die Zustandsgleichung mit Python Control in eine Übertragungsfunktion. Zum Vergleich werden auch das Verfahren und die Beschreibung zum Erhalten der Übertragungsfunktion aus der Laplace-Transformation beschrieben.
Die Zustandsgleichung wird durch die folgende Gleichung ausgedrückt.
\dot{x}(t)=Ax(t)+Bu(t) \\
y(t)=Cx(t)+Du(t)
Laplace-Umwandlung der Zustandsgleichung
sX(s)=AX(s)+BU(s) \\
Y(s)=CX(s)+DU(s)
Wenn Sie den Ausdruck konvertieren,
sX(s)-AX(s)=BU(s) \\
(sI-A)X(s)=BU(s) \\
X(s)={(sI-A)}^{-1} BU(s) \\
Die Übertragungsfunktion G (s) ist
G(s)=\frac{Y(s)}{U(s)}=\frac{{(sI-A)}^{-1} BU(s) +DU(s)}{U(s)}=(sI-A)^{-1} B +DU
Erhalten von.
In Python-Control Durch Eingabe der Matrix von A, B, C, D in die Funktion control.ss2tf kann die Übertragungsfunktion gemäß der obigen Gleichung erhalten werden. http://python-control.readthedocs.io/en/latest/generated/control.ss2tf.html
m: Masse [kg] k: Federkonstante [N / m] c: Viskoser Abklingkoeffizient [N ・ s / m] f: Kraft [N]
Wenn du sagst Die obige Bewegungsgleichung lautet
m\ddot{x}+c\dot{x}+kx=f \\
Wird sein.
Transformieren Sie die Formel hier
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 \\
Und.
x_{1}=x \\
x_{2}=\dot{x} \\
Wenn du sagst
\\
\dot x_{1} ={x_{2}} \\
\dot x_{2}= -c/m \dot{x_{2}}-k/m x_{1}+f/m \\
Wenn Sie dies in eine Matrix schreiben
\\
\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
des Weiteren,
y=Wenn x,\\
y=
\begin{bmatrix}
1 & 0
\end{bmatrix}
\begin{bmatrix}
x_{1} \\
x_{2}
\end{bmatrix}
Deshalb,
\\
\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}
Im Vergleich zur Zustandsgleichung
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]
Wird sein.
Von Oben, Der Code zum Finden der Übertragungsfunktion mit Python-Steuerung lautet wie folgt.
-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()
Ausführungsergebnis
$ ./signal_degree_of_freedom_system_1.py
10
----------------
s^2 + 0.1 s + 30
Aus der Zustandsgleichung gilt, wenn u (t) = f
m\ddot{x}(t)+c\dot{x}(t)+kx(t)=u(t) \\
Laplace-Konvertierung
ms^2X(s)+cX(s)+kX(s)=U(s) \\
Wenn y = x,
ms^2Y(s)+cY(s)+kY(s)=U(s) \\
\frac{Y(s)}{U(s)}=\frac{1}{ms^2+cs+k}
Die Übertragungsfunktion ist
G(s)=\frac{Y(s)}{U(s)}=\frac{1}{ms^2+cs+k}
Von Oben, Der Code zum Finden der Übertragungsfunktion mit Python-Steuerung lautet wie folgt.
#!/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()
Ausführungsergebnis
$ ./signal_degree_of_freedom_system_2.py
1
--------------------
0.1 s^2 + 0.01 s + 3
Der Beispielcode ist unten gespeichert. https://github.com/nnn112358/python-control_test
Recommended Posts