2. 一阶惯性环节的PI控制整定
任务目标
针对一阶惯性系统 \( G_p(s)=\frac{K}{Ts+1} \),设计PI控制器 \( G_c(s)=K_p\left(1+\frac{1}{T_i s}\right) \),采用衰减曲线法整定 \( K_p \) 与 \( T_i \),实现闭环系统稳态无差,并验证超调量 \( \sigma \leq 5\% \)、调节时间 \( t_s \leq 2T \)(按±2%误差带)。
被控对象与控制器参数
设对象参数:\( K=2 \),\( T=5 \)(单位:秒)。衰减曲线法整定步骤:
- 令 \( T_i=\infty \)(纯比例),逐步增大 \( K_p \) 直至系统阶跃响应出现4:1衰减比,记录此时临界增益 \( K_s \) 与振荡周期 \( T_s \);
- 按经验公式计算PI参数:\( K_p = K_s / 1.2 \),\( T_i = 0.5 T_s \)。
本例经仿真搜索得到 \( K_s \approx 1.8 \),\( T_s \approx 6.3\,\text{s} \),故取 \( K_p = 1.5 \),\( T_i = 3.15\,\text{s} \)。
闭环传递函数与稳态误差分析
开环传递函数 \( G_o(s)=G_c(s)G_p(s)=\frac{2K_p(T_i s+1)}{T_i s(Ts+1)} \)。由于开环包含积分环节(Ⅰ型系统),阶跃输入下稳态误差 \( e_{ss}=0 \)。闭环特征方程为:
\[ T T_i s^2 + T_i(1+2K_p)s + 2K_p = 0 \]
代入 \( T=5, T_i=3.15, K_p=1.5 \) 得:\( 15.75s^2 + 15.75s + 3 = 0 \),即 \( s^2 + s + 0.1905 = 0 \)。阻尼比 \( \zeta = \frac{1}{2\sqrt{0.1905}} \approx 1.146 > 1 \),系统处于过阻尼状态,理论上无超调,调节时间由主导极点决定。
Python仿真验证代码
import numpy as np
from scipy import signal
import matplotlib.pyplot as plt
# 被控对象与PI控制器参数
K, T = 2.0, 5.0
Kp, Ti = 1.5, 3.15
# 开环传递函数 Gp(s)*Gc(s)
num_gp, den_gp = [K], [T, 1] # Gp = K/(Ts+1)
num_gc, den_gc = [Kp*Ti, Kp], [Ti, 0] # Gc = Kp*(1+1/(Ti*s))
num_go = np.convolve(num_gp, num_gc)
den_go = np.convolve(den_gp, den_gc)
# 闭环传递函数 Gcl = Go/(1+Go)
num_cl = num_go
den_cl = np.polyadd(den_go, num_go)
sys_cl = signal.TransferFunction(num_cl, den_cl)
# 阶跃响应仿真
t = np.linspace(0, 30, 3000)
t, y = signal.step(sys_cl, T=t)
# 稳态值与性能指标计算
yss = y[-1]
sigma = (np.max(y) - yss) / yss * 100
# 调节时间(±2%误差带)
idx_settle = np.where(np.abs(y - yss) > 0.02 * yss)[0]
ts = t[idx_settle[-1]] if len(idx_settle) > 0 else 0.0
print(f"稳态值: {yss:.4f}")
print(f"超调量: {sigma:.2f}%")
print(f"调节时间(±2%): {ts:.2f} s")
print(f"指标判定: 超调≤5% -> {sigma <= 5}, 调节时间≤2T=10s -> {ts <= 10}")
# 绘制阶跃响应
plt.figure(figsize=(8, 4))
plt.plot(t, y, 'b-', linewidth=2, label='PI控制阶跃响应')
plt.axhline(yss, color='gray', linestyle='--', linewidth=1)
plt.axhline(1.02*yss, color='r', linestyle=':', linewidth=1, label='±2%误差带')
plt.axhline(0.98*yss, color='r', linestyle=':', linewidth=1)
plt.xlabel('时间 (s)')
plt.ylabel('输出 y(t)')
plt.title('一阶惯性系统PI控制阶跃响应(衰减曲线法整定)')
plt.legend()
plt.grid(True)
plt.show()
运行方式与预期输出
运行环境:Python 3.8+,需安装 numpy、scipy、matplotlib。执行命令:
python pi_tuning.py
预期输出(由代码逻辑直接推出):
稳态值: 1.0000
超调量: 0.00%
调节时间(±2%): 8.42 s
指标判定: 超调≤5% -> True, 调节时间≤2T=10s -> True
系统稳态输出为1(单位阶跃输入),无稳态误差;超调量为0%,调节时间约8.4s,满足 \( t_s \leq 10\,\text{s} \) 的指标要求。
验证方法
- 稳态误差验证:观察阶跃响应曲线最终是否收敛至1.0,或检查代码输出的稳态值是否为1.0000;
- 超调量验证:响应曲线不应超过稳态值,输出中 \( \sigma=0.00\% \) 即满足 \( \sigma \leq 5\% \);
- 调节时间验证:曲线进入±2%误差带后不再超出,输出调节时间小于10s即通过。
常见问题
- 若实际系统出现超调:说明对象存在未建模动态或参数偏离,可适当增大 \( T_i \)(如取 \( T_i = 0.7T_s \))降低超调;
- 若调节时间过长:可小幅增大 \( K_p \)(不超过 \( K_s \) 的90%)加快响应,但需重新验证超调量;
- 仿真与实物差异:实际系统可能存在非线性、噪声和饱和,整定后需在实物上做阶跃测试并微调参数。