4. 螺旋桨负载突变下的推进控制器抗扰整定

扰动场景与抗扰指标

螺旋桨在巡航中吸入漂浮物时,负载转矩会在极短时间内阶跃上升,转速环必须在不产生过大超调的前提下把转速拉回设定值。本例以一台额定 1500 r/min 的推进电机为对象,设定 0.5 s 时负载转矩由 40% 额定值阶跃至 85% 额定值,要求转速跌落不超过 8%、恢复时间(回到 ±1% 误差带)不超过 1.2 s,且恢复过程超调不超过 3%。

抗扰整定的核心矛盾在于:积分项负责消除稳态误差、加快恢复,但过强会带来恢复段超调;微分项能抑制跌落初期的转速变化率、减小最大跌落,但对反馈噪声敏感。因此本例在已辨识的推进系统模型上,先固定比例增益,再以“积分时间常数 Ti 与微分时间常数 Td”为整定变量做参数扫描,用跌落幅度与恢复时间两个指标共同筛选。

转速环抗扰结构 转速给定 n* = 1500 r/min − 转速环 PID Kp 固定 / 整定 Ti、Td 电流环 + 推进电机 转矩输出 Te 螺旋桨负载 TL 阶跃扰动 0.5 s 负载阶跃 40% → 85% 额定转矩 转速反馈 n(含测量噪声) 负载阶跃下的转速响应与判读 t / s n n* +1% −1% 扰动 t=0.5 s 最大跌落 ≤ 8% 恢复时间 ≤ 1.2 s 恢复超调 ≤ 3% 整定变量与筛选 Kp:固定(沿用初整定值) Ti:增大 → 恢复慢、超调小 Td:增大 → 跌落小、噪声敏感 判据:跌落 ≤ 8% 且 恢复 ≤ 1.2 s 超调 > 3% 则回退 Ti

仿真模型与整定流程

采用一阶惯性加积分环节近似推进轴系:转速环被控对象传递函数取 G(s)=K/(Ts+1)·(1/s),其中 K=0.85、T=0.12 s(示例辨识值)。负载转矩以阶跃形式叠加到转矩平衡方程 J·dω/dt = Te − TL 上。仿真步长 1 ms,总时长 3 s,扰动在 0.5 s 注入。

整定按以下顺序进行:先固定 Kp=2.4(由前序临界比例度法得到的初值),在 Ti∈[0.15, 0.60] s、Td∈[0, 0.08] s 的网格上扫描;对每组参数记录最大跌落 Δn_max、恢复时间 t_r 与恢复段超调 σ;先剔除 σ>3% 的组合,再在剩余组合中选 t_r 最小且 Δn_max≤8% 的一组。

import numpy as np

K, T, J = 0.85, 0.12, 0.045      # 示例辨识参数
Kp = 2.4                          # 固定比例增益
n_ref = 1500.0
dt, t_end = 1e-3, 3.0
t = np.arange(0, t_end, dt)

def simulate(Ti, Td, TL_step=0.85, TL0=0.40):
    n = 0.0; integ = 0.0; d_filt = 0.0; n_prev = 0.0
    TL = TL0
    log = np.zeros_like(t)
    for k, tk in enumerate(t):
        if tk >= 0.5:
            TL = TL_step
        e = n_ref - n
        integ += e * dt
        d_raw = (e - (n_ref - n_prev)) / dt if k else 0.0
        d_filt += (d_raw - d_filt) * dt / (0.02 + dt)   # 微分一阶滤波 20 ms
        u = Kp * (e + integ / Ti + Td * d_filt)
        Te = K * u
        dn = (Te - TL * 1.0) / J * dt
        n_prev = n
        n = max(n + dn, 0.0)
        log[k] = n
    return log

def metrics(n):
    i0 = int(0.5 / dt)
    seg = n[i0:]
    dn_max = (n_ref - seg.min()) / n_ref * 100
    band = 0.01 * n_ref
    idx = np.where(np.abs(seg - n_ref) > band)[0]
    t_r = (idx[-1] + 1) * dt if len(idx) else 0.0
    overshoot = max(0.0, (seg.max() - n_ref) / n_ref * 100)
    return dn_max, t_r, overshoot

best = None
for Ti in np.arange(0.15, 0.61, 0.05):
    for Td in np.arange(0.0, 0.081, 0.02):
        dn, tr, os_ = metrics(simulate(Ti, Td))
        if os_ <= 3.0 and dn <= 8.0:
            if best is None or tr < best[2]:
                best = (Ti, Td, tr, dn, os_)
print("Ti=%.2f Td=%.2f tr=%.2fs dn=%.1f%% os=%.1f%%" % best)
微分项必须带一阶滤波(本例取 20 ms),否则转速反馈噪声会被放大成执行器抖动,反而恶化跌落判读。滤波时间常数过大会削弱 Td 的抗扰作用,需与 Td 同步微调。

结果判读与参数取舍

示例扫描中,Ti 偏小(0.15~0.25 s)时恢复快但恢复段超调常超过 3%;Ti 偏大(0.50 s 以上)时超调合格但恢复时间超过 1.2 s。Td 从 0 增至 0.04 s 可明显压低最大跌落,继续增大到 0.08 s 时跌落改善趋缓而噪声引起的转矩抖动上升。综合判据,示例推荐 Ti=0.35 s、Td=0.04 s,对应跌落约 6.5%、恢复时间约 0.9 s、超调约 2%。

验证时除看时域指标外,还应检查扰动后 1 s 内转矩指令是否出现高频抖动;若抖动明显,优先增大微分滤波时间常数而非减小 Td,以保留抗扰能力。

Ti / sTd / s最大跌落恢复时间恢复超调结论
0.200.046.0%0.7 s4.2%超调超标
0.350.009.1%0.8 s1.5%跌落超标
0.350.046.5%0.9 s2.0%推荐
0.550.046.8%1.4 s0.8%恢复超时
表中数值为示例模型在给定参数下的仿真结果,实际机组需用现场辨识的 K、T、J 重新扫描;若负载阶跃幅度更大,应按比例收紧跌落判据并复核 Ti 上限。