Course materials · Control Engineering II

W6_SystemModeling

English translation

!pip install control
Collecting control
  Downloading control-0.10.0-py3-none-any.whl (513 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 513.9/513.9 kB 5.4 MB/s eta 0:00:00
[?25hRequirement already satisfied: numpy>=1.23 in /usr/local/lib/python3.10/dist-packages (from control) (1.25.2)
Requirement already satisfied: scipy>=1.8 in /usr/local/lib/python3.10/dist-packages (from control) (1.11.4)
Requirement already satisfied: matplotlib>=3.6 in /usr/local/lib/python3.10/dist-packages (from control) (3.7.1)
Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=3.6->control) (1.2.0)
Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=3.6->control) (0.12.1)
Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=3.6->control) (4.50.0)
Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=3.6->control) (1.4.5)
Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=3.6->control) (24.0)
Requirement already satisfied: pillow>=6.2.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=3.6->control) (9.4.0)
Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=3.6->control) (3.1.2)
Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=3.6->control) (2.8.2)
Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-dateutil>=2.7->matplotlib>=3.6->control) (1.16.0)
Installing collected packages: control
Successfully installed control-0.10.0
import numpy as np
import control as ctl
import matplotlib.pyplot as plt

Cruise Model

mv̇+bv=uy=v\begin{aligned}m\dot{v} + bv &= u \\ y &= v \end{aligned}

𝒙̇=v̇=[−bm]v+[1m]uy=[1]v\begin{aligned}\dot{\mathbf{x}} = \dot{v} &= [\frac{-b}{m}]v + [\frac{1}{m}]u \\ y&=[1] v \end{aligned}

m = 1000
b = 50

A = -b/m
B = 1/m
C = 1
D = 0

G = ctl.ss(A, B, C, D)

input = 500
t,y = ctl.step_response(500*G)
plt.plot(t,y)
plt.xlabel('Time')
plt.title('Response of a Cruise System')
Text(0.5, 1.0, 'Response of a Cruise System')
<Figure size 640x480 with 1 Axes>
실행 결과

Motor Model

Jθ̈+bθ̇=K⋅iLdidt+R⋅i=V−Kθ̇\begin{aligned} J \ddot{\theta} + b \dot{\theta} &= K \cdot i \\ L \frac{di}{dt} + R \cdot i &= V - K \dot{\theta} \end{aligned} (J⋅s2+b⋅s)⋅Θ(s)=K⋅I(s)(L⋅s+R)⋅I(s)=V(s)−K⋅s⋅Θ(s)\begin{aligned} (J \cdot s^2 + b \cdot s) \cdot \Theta(s) &= K \cdot I(s) \\ (L \cdot s + R) \cdot I(s) &= V(s) - K \cdot s \cdot \Theta(s) \end{aligned} G(s)=s⋅Θ(s)V(s)=K(J⋅s+b)(L⋅s+R)+K2G(s) = \frac{s \cdot \Theta(s)}{V(s)} = \frac{K}{(J\cdot s+b)(L\cdot s+R)+K^2}

J = 0.01
b = 0.1
K = 0.01
R = 1
L = 0.5
s = ctl.tf([1,0],[1])
G = K/((J*s+b)*(L*s+R)+K**2)

t,y = ctl.step_response(G)
plt.plot(t,y)
plt.xlabel('Time')
plt.title('Response of a Motor')
Text(0.5, 1.0, 'Response of a Motor')
<Figure size 640x480 with 1 Axes>
실행 결과