Notes d'étude d'ingénierie de contrôle. La deuxième.
Dernière fois est une bibliothèque Python pour les systèmes de contrôle, "[[] J'ai simulé en utilisant "Python Control Systems Library" (https://python-control.readthedocs.io/en/0.8.3/index.html).
Cette fois, pour ** circuit série RLC **, nous trouverons la fonction de transfert / modèle d'espace d'état à partir de l'équation du circuit et la simulerons en utilisant 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)
Normalement, l'équation du circuit est formulée en utilisant ** current ** $ i (t) $ comme suit.
Cependant, ici, afin de correspondre au système mécanique de précédent, ** charge ** $ q (t) $ en utilisant la relation suivante. J'écrirai l'équation du circuit en utilisant.
L'équation de circuit avec la charge $ q (t) $ est la suivante.
Organisez la formule en changeant la différenciation en notation par points.
Cela a la même forme que l'équation de mouvement (ci-dessous) du point de qualité avec un degré de liberté dans le système ressort-masse-amortisseur montré dans précédent. Tu peux voir ça.
Dans le modèle de la mécanique, la fonction de transfert a été calculée avec la force $ f (t) $ comme ** entrée ** au système et le déplacement $ y (t) $ comme ** sortie ** du système.
Si cela correspond à cela, la fonction de transfert est obtenue en utilisant la tension d'entrée $ v \ _i (t) $ comme ** entrée ** pour le système et la charge $ q (t) $ comme ** sortie ** du système. Cependant, il n'est pas facile d'observer directement (mesurer) ** charge ** $ q (t) $ ** **. Aussi, en réalité, c'est la tension de chaque élément qui est intéressante. Par conséquent, ** dans le cas d'un circuit électrique, la fonction de transfert est calculée en utilisant la tension comme sortie **.
Ici, la tension d'entrée $ v \ i (t) $ est ** input ** $ u (t) $ au système, la tension aux bornes du condensateur $ v {C} (t) $ est la ** sortie ** du système. Trouvez la fonction de transfert avec $ y (t) $.
Faites de la sortie ci-dessus une expression pour $ q (t) $.
Remplacez ceci par l'équation de circuit ci-dessus $ L \ ddot {q} (t) + R \ dot {q} (t) + \ frac {1} {C} q (t) = v_ {i} (t) $ Remplacez pour obtenir:
Conversion Laplace de ceci pour trouver le système ** fonction de transfert ** $ G (s) = Y (s) / U (s) $ (à ce moment, $ \ dot {y} (En supposant 0) = 0 $ et $ y (0) = 0 $).
Dans le modèle dynamique, la fonction de transfert avec la force comme entrée et le déplacement comme sortie, la masse comme $ m $, le coefficient d'amortissement comme $ c $ et la constante de ressort comme $ k $ est la suivante. Vous pouvez voir que le système mécanique et le système de circuits ont des formes très similaires.
Utilisez la ** Python Control Systems Library ** de Python pour la simulation. Définissez la fonction de transfert pour modéliser le système et simuler la ** réponse par étapes **.
Dans le système mécanique, nous avons simulé la ** réponse impulsionnelle ** pour observer le déplacement lorsqu'une force est appliquée au point de qualité pendant un moment, mais dans le circuit électrique, la tension d'entrée $ v_ {i} (t) = 1 \ Puisqu'il est plus naturel d'observer la tension du condensateur $ v_ {C} $ quand, (t \ ge0) $ est défini, regardons la ** réponse en échelon **.
Préparation (Google Colab.environnement)
!pip install --upgrade sympy
!pip install slycot
!pip install control
Simulation de réponse de pas (fonction de transmission)
import numpy as np
import control.matlab as ctrl
import matplotlib.pyplot as plt
R = 2 #Valeur de résistance
L = 1e-3 #Intensité
C = 10e-6 #Capacitance
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()
Résultat d'exécution
1
------------
s^2 + s + 10
Si la tension d'entrée est $ v_ {i} (t) = 1 , (t \ ge0) $, la tension du condensateur $ v_ {C} $ vibre d'abord et enfin $ 1 , \ [\ Vous pouvez voir qu'il s'installe en mathrm {V} ] $.
Décrivez le système comme le modèle d'espace d'états $ \ mathcal {P} $ comme suit.
python
\mathcal{P}\,:\,\left\{
\begin{array}{l}
\dot{\boldsymbol{x}} = \mathbf{A}\boldsymbol{x} + \mathbf{B}\boldsymbol{u}&Équation d'état\\
\boldsymbol{y} = \mathbf{C}\boldsymbol{x} + \mathbf{D}\boldsymbol{u}&Équation de sortie (équation d'observation)
\end{array}
\right.
En guise de préparation, l'équation de circuit $ LC \ ddot {y} (t) + RC \ dot {y} (t) + y (t) = u (t) $, $ \ ddot {y} (t) = .. Transformez-le en. $.
Comme $ x \ _1 (t) = y (t) $, $ x \ _2 (t) = \ dot {y} (t) $, ** état ** $ \ boldsymbol {x} = \ [x \ _1 , , x \ _2] ^ T $ est défini.
À partir de là, $ \ dot {x} \ _1 (t) = \ dot {y} (t) = x \ _2 $. En outre, $ \ dot {x} \ _2 (t) = - \ frac {1} {LC} y (t) - \ frac {R} {L} \ dot {y} (t) + \ frac {1} {LC} u (t) $.
À partir de ce qui précède, l '** équation d'état ** suivante peut être obtenue.
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
De plus, on obtient ** l'équation de sortie ** suivante (équation d'observation) (** tension du condensateur ** $ v_ {C} $ état correspondant $ x_1 $ et ** courant ** correspondant $ 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) ,) $ est observé).
python
y = \left[
\begin{array}{cc}
1 & 0\\
0 & C\\
\end{array}
\right] \left[
\begin{array}{c}
x_1 \\
x_2
\end{array}
\right]
Cependant, $ \ mathbf {D} = 0 $.
Simulez une ** réponse d'étape ** dans le modèle d'espace d'états.
Préparation à l'utilisation du japonais sur les graphiques (Google Colab.environnement)
!pip install japanize-matplotlib
Simulation de réponse de pas (modèle d'espace d'états)
import numpy as np
import control.matlab as ctrl
import matplotlib.pyplot as plt
import japanize_matplotlib
R = 2 #Valeur de résistance
L = 1e-3 #Intensité
C = 10e-6 #Capacitance
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(['Tension du condenseur','Courant']) :
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