4. 二阶欠阻尼系统的P控制整定
任务目标
对二阶欠阻尼被控对象施加纯比例控制,使用临界比例度法(Ziegler-Nichols第一法)通过仿真确定临界增益 \(K_u\) 与临界振荡周期 \(T_u\),并据此整定P控制器增益,验证系统稳定性。
被控对象与控制器结构
被控对象传递函数:
G(s) = ωₙ² / (s² + 2ζωₙs + ωₙ²),取 ωₙ = 2 rad/s,ζ = 0.3(欠阻尼)
控制器:\(C(s) = K_p\)(纯比例)。闭环特征方程为 \(1 + K_p G(s) = 0\)。
临界比例度法原理
从较小 \(K_p\) 开始逐渐增大,当闭环系统输出出现等幅持续振荡时,此时的 \(K_p\) 即为临界增益 \(K_u\),振荡周期为 \(T_u\)。对于二阶系统,\(K_u\) 可通过劳斯判据解析求得,仿真用于验证。
关键完整代码(Python + control库)
import numpy as np
import control as ct
import matplotlib.pyplot as plt
# 被控对象参数
wn = 2.0
zeta = 0.3
G = ct.tf([wn**2], [1, 2*zeta*wn, wn**2])
# 解析求临界增益(劳斯判据:s¹行系数 = 2ζωₙ - Kp·ωₙ²/ωₙ² = 0)
Ku_analytic = 2 * zeta * wn # = 1.2
print(f"解析临界增益 Ku = {Ku_analytic:.4f}")
# 仿真扫描:从0.5倍Ku到1.5倍Ku,观察是否等幅振荡
Kp_values = [0.5*Ku_analytic, 0.9*Ku_analytic, 1.0*Ku_analytic, 1.2*Ku_analytic]
t = np.linspace(0, 20, 2000)
plt.figure(figsize=(10, 6))
for Kp in Kp_values:
sys_cl = ct.feedback(Kp * G, 1)
t_resp, y_resp = ct.step_response(sys_cl, t)
plt.plot(t_resp, y_resp, label=f'Kp = {Kp:.3f}')
plt.axhline(1.0, color='gray', ls='--', lw=0.8)
plt.xlabel('时间 (s)')
plt.ylabel('输出 y(t)')
plt.title('不同Kp下的闭环阶跃响应')
plt.legend()
plt.grid(True)
plt.xlim([0, 20])
plt.savefig('p_control_scan.png', dpi=100)
plt.show()
# 在Kp = Ku处提取振荡周期
sys_crit = ct.feedback(Ku_analytic * G, 1)
t_c, y_c = ct.step_response(sys_crit, t)
# 寻找峰值位置(排除初始瞬态)
from scipy.signal import find_peaks
peaks, _ = find_peaks(y_c, height=0.5)
if len(peaks) >= 3:
# 取第2和第3个峰的时间差作为周期
Tu = t_c[peaks[2]] - t_c[peaks[1]]
print(f"临界振荡周期 Tu = {Tu:.4f} s")
print(f"振荡频率 = {2*np.pi/Tu:.4f} rad/s")
else:
print("峰值不足,无法计算周期")
# 整定后的P控制器(临界比例度法推荐:Kp = 0.5*Ku)
Kp_practical = 0.5 * Ku_analytic
sys_practical = ct.feedback(Kp_practical * G, 1)
t_p, y_p = ct.step_response(sys_practical, t)
print(f"整定后 Kp = {Kp_practical:.3f}")
print(f"整定后稳态值 = {y_p[-1]:.4f} (期望1.0)")
print(f"整定后超调量 = {(np.max(y_p)-1)*100:.1f}%")
运行方式
pip install control numpy matplotlib scipy
python p_control_tuning.py
验证方法与判定标准
- 临界增益验证:程序输出解析值 \(K_u = 1.2\)。仿真图中 \(K_p = 1.2\) 的响应曲线应为持续等幅振荡(不衰减也不发散),而 \(K_p = 0.9\) 时振荡衰减,\(K_p = 1.2\) 以上时发散。
- 振荡周期验证:程序输出的 \(T_u\) 应接近理论值 \(2\pi/\omega_d\),其中 \(\omega_d = \omega_n\sqrt{1-\zeta^2} = 2\sqrt{0.91} \approx 1.908\),故 \(T_u \approx 3.29\) s。
- 整定结果验证:采用 \(K_p = 0.5K_u = 0.6\) 时,阶跃响应应稳定收敛,稳态值为1.0(无静差),超调量约在10%~20%范围内(由二阶系统阻尼比决定)。
稳定性分析要点
当 \(K_p < K_u\) 时闭环极点位于左半平面,系统稳定;\(K_p = K_u\) 时极点位于虚轴,产生等幅振荡;\(K_p > K_u\) 时极点进入右半平面,系统不稳定。临界比例度法正是利用这一边界特性确定整定参数。
图中根轨迹从开环极点(\(-0.6 \pm j1.908\))出发,随 \(K_p\) 增大沿虚线方向移动。当轨迹穿越虚轴时对应 \(K_u = 1.2\),此时闭环极点位于 \(\pm j\omega_d\),系统处于临界稳定状态。