In [1]:
#106회 PI 제어기가 에러가 적은이유 증명
import control as ct
import numpy as np
import matplotlib.pyplot as plt
In [2]:
#Plant
num_G1 = [1]
den_G1 = [1, 1]
sys_G1 = ct.tf(num_G1, den_G1)
sys_G1
Out[2]:
$$\frac{1}{s + 1}$$
In [3]:
#Controller(P)
K = 10
num_DP = [K]
den_DP = [1]
sys_DP = ct.tf(num_DP, den_DP)
sys_DP
Out[3]:
$$\frac{10}{1}$$
In [4]:
sysT_open = sys_G1*sys_DP
sysT_open
Out[4]:
$$\frac{10}{s + 1}$$
In [5]:
sysT_uc = ct.feedback(sys_G1*sys_DP,1)
sysT_uc
Out[5]:
$$\frac{10}{s + 11}$$
In [6]:
time, response = ct.step_response(sysT_uc)
plt.plot(time, response, label='Step Response')
plt.show()
In [7]:
s = ct.TransferFunction.s
G_s = sysT_open
E_s = 1 / (1 + G_s)
# Final Value Theorem to find steady-state error
sse_step = ct.evalfr(E_s, 0)  # Evaluate E(s) at s=0
print(f"Steady-State Error for Step Input: {sse_step}")
Steady-State Error for Step Input: (0.09090909090909091+0j)
In [8]:
#PI controller
KP = K
KI = 1
num_DPI = [KP, KI]
den_DPI = [1, 0]
sys_DPI = ct.tf(num_DPI, den_DPI)
sys_DPI
Out[8]:
$$\frac{10 s + 1}{s}$$
In [9]:
sysT_PI_open = sys_G1*sys_DPI
sysT_PI_open
Out[9]:
$$\frac{10 s + 1}{s^2 + s}$$
In [10]:
# transfer fucntion compensator 
# sysTc = sys_C* sysTuc/(1+sys_C* sysTuc)
sysTc = ct.feedback(sysT_PI_open, 1)
sysTc
Out[10]:
$$\frac{10 s + 1}{s^2 + 11 s + 1}$$
In [11]:
time_tc, response_tc = ct.step_response(sysTc)
plt.plot(time_tc, response_tc, label='Step Response')
plt.show()
In [12]:
s = ct.TransferFunction.s
# G_s = sysTc
G_s = sysT_PI_open
E_s = 1 / (1 + G_s)
# Final Value Theorem to find steady-state error
sse_step = ct.evalfr(E_s, 0)  # Evaluate E(s) at s=0
print(f"Steady-State Error for Step Input: {sse_step}")
Steady-State Error for Step Input: 0j