Studiennotizen zur Steuerungstechnik. Der Zweite.
Letztes Mal ist eine Python-Bibliothek für Steuerungssysteme. "[[] Ich habe mit "Python Control Systems Library" (https://python-control.readthedocs.io/en/0.8.3/index.html) simuliert.
Dieses Mal finden wir für die ** RLC-Reihenschaltung ** das Übertragungsfunktions- / Zustandsraummodell aus der Schaltungsgleichung und simulieren es mit Python.
![2020-04-28_09h00_39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152805/f10d0f88-eba1-d2ca-9ebc-75858504a7d3. png)
Normalerweise wird die Schaltungsgleichung unter Verwendung von ** Strom ** $ i (t) $ wie folgt formuliert.
Um jedoch dem mechanischen System von vorherige zu entsprechen, berechnen Sie ** $ q (t) $ unter Verwendung der folgenden Beziehung. Ich werde die Schaltungsgleichung mit schreiben.
Die Schaltungsgleichung mit der Ladung $ q (t) $ lautet wie folgt.
Organisieren Sie die Formel, indem Sie die Differenzierung in Punktnotation ändern.
Dies hat die gleiche Form wie die Bewegungsgleichung (unten) des Qualitätspunkts mit einem Freiheitsgrad in dem in [vorherigen] gezeigten Feder-Masse-Dämpfer-System (https://qiita.com/code0327/items/10fb56090a1e56046fa4). Sie können sehen, dass.
Im Modell der Mechanik wurde die Übertragungsfunktion mit der Kraft $ f (t) $ als ** Eingabe ** in das System und der Verschiebung $ y (t) $ als ** Ausgabe ** vom System berechnet.
Wenn dies dem entspricht, wird die Übertragungsfunktion erhalten, indem die Eingangsspannung $ v \ _i (t) $ als ** Eingang ** für das System und die Ladung $ q (t) $ als ** Ausgang ** vom System verwendet wird. Es ist jedoch nicht einfach, die ** Gebühr ** $ q (t) $ ** ** direkt zu beobachten (zu messen). In der Realität ist auch die Spannung jedes Elements von Interesse. Daher ** Im Fall eines Stromkreises wird die Übertragungsfunktion unter Verwendung der Spannung als Ausgang ** berechnet.
Hier ist die Eingangsspannung $ v \ i (t) $ ** Eingang ** $ u (t) $ in das System, die Spannung über dem Kondensator $ v {C} (t) $ ist der Systemausgang **. Finden Sie die Übertragungsfunktion mit $ y (t) $.
Machen Sie die obige Ausgabe zu einem Ausdruck für $ q (t) $.
Ändern Sie dies in die obige Schaltungsgleichung $ L \ ddot {q} (t) + R \ dot {q} (t) + \ frac {1} {C} q (t) = v_ {i} (t) $ Ersatz zu bekommen:
Laplace-Konvertierung davon, um das System zu finden ** Übertragungsfunktion ** $ G (s) = Y (s) / U (s) $ (zu diesem Zeitpunkt $ \ dot {y}) (Angenommen 0) = 0 $ und $ y (0) = 0 $).
Im dynamischen Modell ist die Übertragungsfunktion mit Kraft als Eingabe und Verschiebung als Ausgabe, Masse als $ m $, Dämpfungskoeffizient als $ c $ und Federkonstante als $ k $ wie folgt. Sie können sehen, dass sowohl das mechanische System als auch das Schaltungssystem sehr ähnliche Formen haben.
Verwenden Sie zur Simulation die ** Python Control Systems Library ** von Python. Stellen Sie die Übertragungsfunktion ein, um das System zu modellieren und die ** Sprungantwort ** zu simulieren.
Im mechanischen System haben wir die ** Impulsantwort ** simuliert, um die Verschiebung zu beobachten, wenn eine Kraft für einen Moment auf den Qualitätspunkt ausgeübt wird, aber im Stromkreis ist die Eingangsspannung $ v_ {i} (t) = 1 \ Da es natürlicher ist, die Kondensatorspannung $ v_ {C} $ zu beobachten, wenn (t \ ge0) $ eingestellt ist, schauen wir uns die ** Sprungantwort ** an.
Vorbereitung (Google Colab.Umgebung)
!pip install --upgrade sympy
!pip install slycot
!pip install control
Sprungantwortsimulation (Übertragungsfunktion)
import numpy as np
import control.matlab as ctrl
import matplotlib.pyplot as plt
R = 2 #Widerstandswert
L = 1e-3 #Intensität
C = 10e-6 #Kapazität
sys = ctrl.tf((1),(L*C,R*C,1))
print(sys)
t_range = (0,0.01)
y, t = ctrl.step(sys, T=np.linspace(*t_range, 400))
plt.figure(figsize=(7,4),dpi=120,facecolor='white')
plt.hlines(1,*t_range,colors='gray',ls=':')
plt.plot(t,y)
plt.xlim(*t_range)
plt.ylim(bottom=0)
plt.show()
Ausführungsergebnis
1
------------
s^2 + s + 10
Wenn die Eingangsspannung $ v_ {i} (t) = 1 , (t \ ge0) $ ist, vibriert die Kondensatorspannung $ v_ {C} $ zuerst und schließlich $ 1 , \ [\ Sie können sehen, dass es sich auf mathrm {V} ] $ einstellt.
Beschreiben Sie das System wie folgt als Zustandsraummodell $ \ mathcal {P} $.
python
\mathcal{P}\,:\,\left\{
\begin{array}{l}
\dot{\boldsymbol{x}} = \mathbf{A}\boldsymbol{x} + \mathbf{B}\boldsymbol{u}&Zustandsgleichung\\
\boldsymbol{y} = \mathbf{C}\boldsymbol{x} + \mathbf{D}\boldsymbol{u}&Ausgangsgleichung (Beobachtungsgleichung)
\end{array}
\right.
Zur Vorbereitung ist die Schaltungsgleichung $ LC \ ddot {y} (t) + RC \ dot {y} (t) + y (t) = u (t) $, $ \ ddot {y} (t) = .. Verwandle es in. $.
Als $ x \ _1 (t) = y (t) $, $ x \ _2 (t) = \ dot {y} (t) $, ** Zustand ** $ \ boldsymbol {x} = \ [x \ _1 , , x \ _2] ^ T $ ist gesetzt.
Daraus ergibt sich $ \ dot {x} \ _1 (t) = \ dot {y} (t) = x \ _2 $. Außerdem ist $ \ dot {x} \ _2 (t) = - \ frac {1} {LC} y (t) - \ frac {R} {L} \ dot {y} (t) + \ frac {1} {LC} u (t) $.
Aus dem Obigen kann die folgende ** Zustandsgleichung ** erhalten werden.
python
\left[
\begin{array}{c}
\dot{x}_1 \\
\dot{x}_2
\end{array}
\right]
=\left[
\begin{array}{cc}
0 & 1 \\
-\frac{1}{LC} & -\frac{R}{L}
\end{array}
\right]
\left[
\begin{array}{c}
x_1 \\
x_2
\end{array}
\right]
+ \left[
\begin{array}{c}
0 \\
\frac{1}{LC}
\end{array}
\right] u
python
\dot{\boldsymbol{x}}
=\left[
\begin{array}{cc}
0 & 1 \\
-\frac{1}{LC} & -\frac{R}{L}
\end{array}
\right]
\boldsymbol{x} + \left[
\begin{array}{cc}
0 \\
\frac{1}{LC}
\end{array}
\right] u
Zusätzlich wird die folgende ** Ausgangsgleichung ** (Beobachtungsgleichung) erhalten (** Kondensatorspannung ** $ v_ {C} $ entsprechender Zustand $ x_1 $ und ** Strom ** entsprechen $ Cx \ _2 (= C \ dot {y} (t) = C \ dot {v} _ {C} (t) = C \ big (\ frac {1} {C} \ dot {q} (t) \ big) = \ dot {q} (t) = i (t) ,) $ wird beobachtet).
python
y = \left[
\begin{array}{cc}
1 & 0\\
0 & C\\
\end{array}
\right] \left[
\begin{array}{c}
x_1 \\
x_2
\end{array}
\right]
$ \ Mathbf {D} = 0 $.
Simulieren Sie eine ** Sprungantwort ** im Zustandsraummodell.
Vorbereitung für die Verwendung von Japanisch in Diagrammen (Google Colab.Umgebung)
!pip install japanize-matplotlib
Sprungantwortsimulation (Zustandsraummodell)
import numpy as np
import control.matlab as ctrl
import matplotlib.pyplot as plt
import japanize_matplotlib
R = 2 #Widerstandswert
L = 1e-3 #Intensität
C = 10e-6 #Kapazität
A = [[0,1],[-1/(L*C), -R/L]]
B = [[0],[1/(L*C)]]
C = [[1,0],[0,C]]
D = 0
sys = ctrl.ss(A,B,C,D)
#print(sys)
t_range = (0,0.01)
y, t = ctrl.step(sys, T=np.linspace(*t_range, 400))
fig, ax = plt.subplots(nrows=2, figsize=(7,5),dpi=120,sharex='col')
fig.patch.set_facecolor('white')
fig.subplots_adjust(hspace=0.1)
for i,s in enumerate(['Kondensatorspannung','Aktuell']) :
ax[i].hlines(0,*t_range,colors='gray',ls=':')
ax[i].plot(t,y[:,i])
ax[i].set_ylabel(s)
ax[i].set_xlim(*t_range)
plt.show()
Recommended Posts