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\) 时极点进入右半平面,系统不稳定。临界比例度法正是利用这一边界特性确定整定参数。

二阶欠阻尼系统P控制根轨迹示意 实轴 虚轴 0 × 开环极点 Kp=Ku 临界点 ← 稳定区域 不稳定区域 → Kp增大 β=arccos(ζ) 图例 开环极点 根轨迹

图中根轨迹从开环极点(\(-0.6 \pm j1.908\))出发,随 \(K_p\) 增大沿虚线方向移动。当轨迹穿越虚轴时对应 \(K_u = 1.2\),此时闭环极点位于 \(\pm j\omega_d\),系统处于临界稳定状态。