W7_PIDController
!pip install controlCollecting control Downloading control-0.10.0-py3-none-any.whl (513 kB) [?25l [90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━[0m [32m0.0/513.9 kB[0m [31m?[0m eta [36m-:--:--[0m [2K [91m━━━[0m[90m╺[0m[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━[0m [32m41.0/513.9 kB[0m [31m1.2 MB/s[0m eta [36m0:00:01[0m [2K [91m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━[0m[91m╸[0m [32m512.0/513.9 kB[0m [31m7.9 MB/s[0m eta [36m0:00:01[0m [2K [90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━[0m [32m513.9/513.9 kB[0m [31m6.5 MB/s[0m eta [36m0:00:00[0m [?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 pltMotor Model
PID Controller
Controller performance specification
- Rise time < 0.04 s
- %OS < 10%
- Steady State error ~ 0
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)
Kp = 500
Ki = 300
Kd = 30
C = Kp + Ki/s + Kd*s
sys_cl = ctl.feedback(C*G,1)
t,y = ctl.step_response(sys_cl,np.arange(0,0.5,0.01))
plt.plot(t,y)
plt.xlabel('Time')
plt.title('Response of a Cruise System')
plt.axis([0, 0.5, 0, 1.1])
info = ctl.step_info(sys_cl)
for item in info:
print(item,format(info[item],'.2f'))
RiseTime 0.03 SettlingTime 0.09 SettlingMin 0.91 SettlingMax 1.02 Overshoot 2.07 Undershoot 0.00 Peak 1.02 PeakTime 0.08 SteadyStateValue 1.00
<Figure size 640x480 with 1 Axes>