RLC 직렬 회로의 전달 함수 상태 공간 모델과 Pythhon의 시뮬레이션을 이용하여

15582 단어 제어 공학Python

개요


공학을 제어하는 학습 노트.제2탄.
저번 스프링·송·감진기계의 질점의 운동 방정식에서 전달 함수/상태 공간 모델을 구하고 제어계의 파이톤 라이브러리'Python Control Systems Library를 사용하여 시뮬레이션했다.
이번에는 RLC 직렬 회로를 대상으로 회로 방정식에서 전송 함수/상태 공간 모델을 구하고 파이톤을 사용하여 시뮬레이션을 한다.

회로 방정식


일반적으로 다음 전류 $i(t)$를 사용하여 회로 방정식을 만듭니다.
$$ v_{i}(t) = Ri(t) + L\frac{\mathrm{d}}{\mathrm{dt}}i(t) +\frac{1}{C}\int^{t}_{0} i(\tau)\,\mathrm{d}\tau$$
그러나 여기에는 저번의 역학 시스템과 대응하기 위해 아래의 관계를 전하 $q(t)$로 회로 방정식을 쓴다.
$$ i(t) =\frac{\mathrm{d}}{\mathrm{dt}}q(t)$$
전하 $q(t)$로 회로 방정식을 쓰면 다음과 같다.
$$ v_{i}(t) = R\frac{\mathrm{d}}{\mathrm{dt}}q(t) + L\frac{\mathrm{d}^2}{\mathrm{dt}^2}q(t) +\frac{1}{C}q(t) $$
미분을 점 표시로 바꾸어 공식을 정리하다.
$$ L\ddot{q}(t) + R\dot{q}(t) +\frac{1}{C}q(t) = v_{i}(t) $$
이것은 저번와 같은 용수철, 송어, 감진기 시스템에서 1개의 자유도 질점의 운동방정식(이하)과 같다.
$$ m\ddot{y}(t) + c\dot{y}(t) + ky(t) = f(t)$$

전달 함수를 통해 시스템을 모델링하다


역학 모형에서, 우리는 입력 시스템의 힘 $f (t) $를 계산하고, 위치 이동 $y (t) $를 시스템 출력의 전달 함수로 삼았다.
해당되는 경우 전압 $v 입력i(t)달러를 시스템에 입력하고 전하 $q(t)달러를 시스템에서 출력하여 전달 함수를 구하는 형식으로 하지만 전하 $q(t)달러를 직접 관찰하는 것은 간단하지 않다.또 실제로 관심 있는 것은 부속품의 전압이다.따라서 회로의 경우 전압을 출력으로 전달 함수를 구한다.
여기, 전압 $v 입력시스템 $u(t)$에 i (t)$를 입력하고 콘덴서의 양쪽 전압 $v{C} (t) 는 $를 시스템 출력 $y (t) $의 전달 함수로 합니다.
$입력\,\,\,u(t)=v{i}(t) $$
$출력\,\,\,y(t)=v{C}(t) =\frac{1}{C}q(t) $$
상술한 출력은 $q(t)달러의 공식이다.
$$ q(t) = Cy(t) $$
이것은 앞의 회로 방정식 $L\ddot{q}(t)+R\dot{q}(t)+\rac{1} {C}q(t)=v{i} (t) 달러를 대입하면 다음과 같은 결과를 얻을 수 있습니다.
$$ LC\ddot{y}(t) + RC\dot{y}(t) + y(t) = u(t) $$
이것은 라프라스가 변환된 후 시스템의 전달 함수 $G(s)=Y(s)/U(s)$US의 결과입니다(이 때 $\dot{y}(0)=0달러와 $y(0)=0달러로 가정).
$$ LCs^2Y(s) + RCsY(s) + Y(s) = U(s)$$
$$\big(LCs^2+ RC s + 1\big) Y(s) = U(s)$$
$$ G(s) =\frac{Y(s)}{U(s)} =\frac{1}{LC s^2 + RC s + 1}$$
또한 역학 모형에서 입력력, 출력 위치 이동, 질량은 $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$역학과와 회로계는 모두 매우 비슷한 형상이다.
$$ G(s) =\frac{Y(s)}{F(s)} =\frac{1}{m s^2 + c s + k}$$

파이썬 모델링 시뮬레이션


Python의 Python Control Systems Library를 사용하여 시뮬레이션합니다.전달 함수를 설정하여 시스템을 모델링하고 걸음걸이 응답을 시뮬레이션합니다.
역학 시스템에서, 우리는 펄스 응답을 시뮬레이션하여, 질점에 순간적인 힘을 가할 때의 위치를 관찰하였으나, 회로에서 입력 전압은 $v이다{i} (t)=1\, (t\ge0)이 $로 설정된 콘덴서 전압 $v관측 {C}달러라는 설정은 자연스러우므로 절차를 보고 응답해야 한다.
준비(GoogleColab. 환경)
!pip install --upgrade sympy
!pip install slycot
!pip install control
스텝 응답의 시뮬레이션 (전달 함수)
import numpy as np
import control.matlab as ctrl
import matplotlib.pyplot as plt

R = 2       # 抵抗値
L = 1e-3    # インダクタンス
C = 10e-6   # 静電容量

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()
실행 결과
      1
------------
s^2 + s + 10

입력 전압 $v{i}(t)=1\,(t\ge0)$일 경우 콘덴서 전압 $v{C} 달러의 최초 진동을 알고 $1\, [\mathrm{V}] 달러로 안정되었습니다.

상태 공간 모형화


시스템을 다음과 같은 상태 공간 모델 $\mathcal{P} 달러로 설명합니다.
\mathcal{P}\,:\,\left\{
\begin{array}{l}
\dot{\boldsymbol{x}} = \mathbf{A}\boldsymbol{x} + \mathbf{B}\boldsymbol{u}& 状態方程式\\
\boldsymbol{y} = \mathbf{C}\boldsymbol{x} + \mathbf{D}\boldsymbol{u}& 出力方程式(観測方程式)
\end{array}
\right.
회로 방정식 $LC\ddot {y} (t) + RC\dot {y} (t) + y (t) = u (t) $를 변형했다.
$$\ddot{y}(t) = -\frac{1}{LC} y(t)-\frac{R}{L}\dot{y}(t) +\frac{1}{LC} u(t)$$
$x_1(t)=y(t)$、$x_2(t)=\dot{y}(t)달러, 상태확정$\boldsymbol{x}=[x1],\,x2]^T달러.
이것보다 $\dot{x}1(t)=\dot{y}(t)=x_2달러입니다.또한 $\dot{x}2(t)=-\frac{1}{LC}y(t)-\frac{R}{L}\dot{y}(t)+\frac{1}{LC}u(t)$.
이상, 아래의 상태 방정식을 얻을 수 있다.
\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
\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
$$\dot{\boldsymbol{x}}
=\mathbf{A}\boldsymbol{x} +\mathbf{B} u$$
또한 다음 출력 방정식(관측 방정식)(콘덴서 전압 $v{C}달러 상태 $x1달러, 전류 $Cx2(=C\dot{y}(t)=C\dot{v}{C} (t) = C\big (\racc {1} {C}\dot {q} (t)\big) =\dot {q} (t) = i (t)\,) $의 형식을 관찰합니다.
y = \left[
    \begin{array}{cc}
      1 & 0\\
      0 & C\\
    \end{array}
  \right]   \left[
    \begin{array}{c}
      x_1 \\
      x_2
    \end{array}
  \right]
$$y
=\mathbf{C}\boldsymbol{x} +\mathbf{D} u$$
그러나 $\mathbf{D}=0$입니다.

파이썬 모델링 시뮬레이션


상태 공간 모델에서 걸음걸이 응답을 시뮬레이션합니다.
다이어그램에서 일본어로 사용할 준비(Google Colab. 환경)
!pip install japanize-matplotlib
보진 응답의 시뮬레이션 (상태 공간 모델)
import numpy as np
import control.matlab as ctrl
import matplotlib.pyplot as plt
import japanize_matplotlib

R = 2       # 抵抗値
L = 1e-3    # インダクタンス
C = 10e-6   # 静電容量

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(['コンデンサ電圧','電流']) :
  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()

좋은 웹페이지 즐겨찾기