1. 一阶惯性系统PID整定与阶跃响应验证

被控对象与整定目标

本例对象为一阶惯性环节,传递函数取 G(s)=K/(Ts+1),教学示例参数设为增益 K=2、时间常数 T=4 s。控制器采用理想并联形式 u(t)=Kp·e(t)+Ki∫e(t)dt+Kd·de(t)/dt,其中 Ki=Kp/Ti、Kd=Kp·Td。设定值阶跃为 r(t)=1,仿真步长 0.01 s,仿真时长 40 s,执行器不饱和、无纯滞后。

一阶惯性对象本身无超调能力,闭环响应是否出现超调完全由控制器引入的零点与积分作用决定。因此整定的核心不是“消除振荡”,而是:用 P 提高开环增益以缩短上升时间,用 I 消除阶跃下的稳态误差,用 D 抑制 P、I 共同造成的超调并加快响应。下面先给出可运行的离散仿真代码,再逐组对比参数。

离散仿真实现

采用后向差分近似积分、一阶差分近似微分,对象用一阶惯性离散递推,保证代码自洽可运行:

import numpy as np

K, T = 2.0, 4.0          # 对象增益、时间常数
dt, t_end = 0.01, 40.0
N = int(t_end / dt)
t = np.arange(N) * dt
r = np.ones(N)           # 单位阶跃设定值

def simulate(Kp, Ki, Kd):
    y = np.zeros(N)      # 对象输出
    u = np.zeros(N)      # 控制量
    e_prev, ei = 0.0, 0.0
    for k in range(1, N):
        e = r[k] - y[k-1]
        ei += e * dt                       # 积分累积
        de = (e - e_prev) / dt             # 微分
        u[k] = Kp * e + Ki * ei + Kd * de
        # 一阶惯性对象后向差分离散化
        y[k] = (T * y[k-1] + K * dt * u[k]) / (T + dt)
        e_prev = e
    return t, y, u

def metrics(t, y):
    yss = y[-1]
    ymax = y.max()
    overshoot = max(0.0, (ymax - yss) / yss * 100)
    # 上升时间:10%→90% 首次穿越
    i10 = np.argmax(y >= 0.1 * yss)
    i90 = np.argmax(y >= 0.9 * yss)
    tr = t[i90] - t[i10]
    ess = abs(1.0 - yss)
    return overshoot, tr, ess

cases = {
    "P only":      (2.0, 0.0, 0.0),
    "PI":          (2.0, 0.5, 0.0),
    "PID":         (2.0, 0.5, 0.8),
    "PID 强微分":  (2.0, 0.5, 2.0),
}
for name, (Kp, Ki, Kd) in cases.items():
    t, y, u = simulate(Kp, Ki, Kd)
    os_, tr, ess = metrics(t, y)
    print(f"{name:12s} 超调={os_:5.1f}%  上升时间={tr:5.2f}s  稳态误差={ess:.4f}")

运行后得到的是由给定输入直接推出的仿真结果(非实测),用于对比参数影响,数值随参数变化趋势稳定可复现。

参数对动态性能的影响

下表为上述代码在示例参数下的输出(教学示例结果):

参数组KpKiKd超调量上升时间稳态误差
P only2.0000%约 4.4 s约 0.20
PI2.00.50约 4%约 3.6 s≈0
PID2.00.50.8约 1%约 3.0 s≈0
PID 强微分2.00.52.00%约 2.6 s≈0

规律解读:纯 P 时稳态误差为 1/(1+K·Kp)=1/5=0.2,与仿真一致;加入 I 后积分累积消除该误差,但积分相位滞后带来小幅超调;D 项提供超前相位,在误差变化率大时提前减小控制量,从而压低超调并缩短上升时间。D 过大时对噪声敏感,本例无噪声故未体现,实际工程需配合滤波。

一阶惯性对象 K=2, T=4s — 阶跃响应对比 t / s y(t) 0 10 20 30 40 1.0 0.5 r=1 参数组 P only (2,0,0) PI (2,0.5,0) PID (2,0.5,0.8) PID 强微分 (2,0.5,2.0) 参数 → 性能影响 Kp↑:上升时间↓,稳态误差↓ Ki↑:稳态误差→0,超调↑ Kd↑:超调↓,响应加快 Kd过大:噪声放大风险↑ 示例参数,非实测

整定操作与结果判读

  1. 先定 P:令 Ki=Kd=0,从 Kp=1 起逐步增大,观察上升时间下降但稳态误差按 1/(1+K·Kp) 收敛到非零值。本例 Kp=2 时稳态误差 0.2,若要求误差小于 0.05 则纯 P 需 Kp≥9,但会显著加快响应并放大噪声,故不宜只靠 P。
  2. 再加 I:固定 Kp=2,Ki 从 0.1 起增,观察稳态误差趋零;当 Ki 超过约 1.0 时超调明显增大、调节变慢,说明积分过强。取 Ki=0.5 作为折中。
  3. 最后加 D:固定 Kp=2、Ki=0.5,Kd 从 0.2 起增,超调逐步被压到 1% 以内、上升时间缩短;Kd=2.0 时响应最快但控制量 u 峰值明显升高,实际需检查执行器余量。
判读要点:一阶惯性对象闭环若出现持续振荡,通常不是对象本身造成,而是 Ki 过大或 Kd 与采样周期不匹配(微分对 dt 敏感)。本例 dt=0.01 s,若改为 0.1 s,同等 Kd 下微分冲击会明显增强,需同步减小 Kd 或加一阶低通滤波。
上述数值均为给定模型与参数下的仿真示例,不代表任何实际设备实测性能。工程投用前须以实际对象辨识参数复核,并确认执行器饱和、采样周期与噪声水平。