3. 直流电机速度闭环PID控制
任务目标
在直流电机速度闭环中综合使用P、I、D三项控制,通过整定PID参数使阶跃响应快速且无超调,并与PI控制进行对比,观察微分项对超调量和调节时间的影响。
被控对象与仿真模型
采用直流电机电枢控制的一阶惯性加积分模型(忽略电感),传递函数为:
G(s) = K / (s * (T*s + 1))
其中K=2.0,T=0.4。使用Python+控制库进行离散化仿真,采样周期Ts=0.01s。
关键完整代码
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import lti, step
# 被控对象参数
K = 2.0 # 增益
T = 0.4 # 机电时间常数
Ts = 0.01 # 采样周期
# 连续对象传递函数: G(s) = K / (s*(T*s+1))
num = [K]
den = [T, 1, 0]
sys = lti(num, den)
# 仿真时间
t_end = 6.0
t = np.arange(0, t_end, Ts)
n = len(t)
# 目标速度
target = 100.0
# PID参数(整定后)
Kp_pid, Ki_pid, Kd_pid = 1.8, 0.6, 0.35
# PI参数(仅去掉微分项)
Kp_pi, Ki_pi = 1.8, 0.6
def simulate(Kp, Ki, Kd):
"""离散化PID速度闭环仿真"""
y = 0.0 # 实际速度
e_prev = 0.0
integral = 0.0
y_out = np.zeros(n)
for i in range(n):
e = target - y
integral += e * Ts
derivative = (e - e_prev) / Ts
u = Kp*e + Ki*integral + Kd*derivative
# 限幅
u = np.clip(u, -150, 150)
# 对象离散化(前向欧拉)
dy = (K*u - y) / T
y += dy * Ts
y_out[i] = y
e_prev = e
return y_out
# 运行两种控制
y_pid = simulate(Kp_pid, Ki_pid, Kd_pid)
y_pi = simulate(Kp_pi, Ki_pi, 0.0)
# 计算性能指标
def metrics(y):
idx = np.argmax(y)
overshoot = (y[idx] - target) / target * 100
# 进入±2%误差带的时间
settle_idx = np.where(np.abs(y - target) < 2.0)[0]
settle_t = t[settle_idx[0]] if len(settle_idx) > 0 else t_end
return overshoot, settle_t
ov_pid, st_pid = metrics(y_pid)
ov_pi, st_pi = metrics(y_pi)
print(f"PID: 超调量={ov_pid:.1f}%, 调节时间={st_pid:.2f}s")
print(f"PI: 超调量={ov_pi:.1f}%, 调节时间={st_pi:.2f}s")
# 绘图对比
plt.figure(figsize=(8, 4))
plt.plot(t, y_pid, label='PID', linewidth=2)
plt.plot(t, y_pi, label='PI', linewidth=2, linestyle='--')
plt.axhline(target, color='gray', linestyle=':', label='目标值')
plt.xlabel('时间 (s)')
plt.ylabel('速度')
plt.legend()
plt.grid(True)
plt.title('PID vs PI 速度阶跃响应对比')
plt.tight_layout()
plt.savefig('pid_vs_pi.png', dpi=100)
plt.show()
运行与验证
依赖安装:
pip install numpy scipy matplotlib
运行方式:将代码保存为dc_motor_pid.py,执行python dc_motor_pid.py。
通过条件:
- 控制台输出PID的超调量接近0%(小于2%),调节时间约1.5~2.5s;
- PI控制有明显超调(约10%~20%),调节时间比PID更长;
- 生成的
pid_vs_pi.png中,PID曲线无超调且快速到达目标值,PI曲线存在超调后回落。
整定思路与差异分析
先整定PI:增大Kp提高响应速度,同时增加Ki消除稳态误差,但Kp过大会导致超调。加入微分项Kd后,微分作用在误差变化时产生阻尼,抑制超调。本案例中Kp=1.8、Ki=0.6时PI超调约15%,加入Kd=0.35后超调被完全抑制,调节时间缩短约30%。微分项对噪声敏感,实际系统中需配合低通滤波使用。
参数调节规律:若增大Kp至2.5,PID仍无超调但调节时间缩短至约1.2s;若减小Kd至0.2,会出现约5%超调。实际整定时可先令Kd=0调PI,待出现临界超调后再逐步增加Kd消除超调。