手工 PI 与反算法搭建
从最基本的 PI 结构开始,一步一步接好反算反馈,分清积分限幅与输出限幅。
积分限幅为什么还不够
PI 的未限幅输出为 u_raw = Kp × e + xI。当比例项很大时,即使积分贡献 xI 已经受限,总输出依然可能超出执行器能力。
积分限幅只限制 xI 的范围;总输出限幅限制送往下一环节的命令。单有这两种限幅,积分状态仍可能与实际送出的控制量不匹配,导致退出饱和后恢复缓慢或超调。
反算法把“实际限幅后的输出”和“想要的输出”作差,再反馈给积分器。
目标结构
┌── Kp ─────────────┐
误差 e ─────────────┤ + ─ u_raw ─ Saturation ─ u_sat
└── Ki ─ (+) ─ ∫ ───┘ │
↑ │
└── Kb × (u_sat − u_raw) ─┘
u_raw = Kp × e + xI
u_sat = clip(u_raw, output_lower, output_upper)
积分器输入 = Ki × e + Kb × (u_sat − u_raw)
xI 由离散积分器计算,并独立施加积分限幅
这里的反算反馈位于 Ki 增益之后、积分器之前。如果把反算差值先与 e 相加再一起乘 Ki,Kb 的实际含义就变了。
在 Simulink 中逐步搭建
- 在基础模型副本中打开速度 PI 子系统
ω。从误差输入分出两路:一路乘 Kp,另一路乘 Ki。 - Ki 路连接 Discrete-Time Integrator。保留其当前离散积分方法,采样周期设置为
1e-6。其输出就是积分贡献 xI。 - 用一个 Sum 将比例项和 xI 相加,得到 u_raw。
- 在总和后放置 Saturation。速度环 Upper limit 为
30,Lower limit 为-30,输出就是 u_sat = iq*。 - 增加一个 Sum,将 List of signs 设置为
+-。正端接 u_sat,负端接 u_raw。 - 将这个差值接入一个 Gain,增益设置为 Kb。速度环使用
1600。 - 在 Ki 输出和积分器输入之间增加一个
++Sum,将Ki × e与反算反馈相加,再送入积分器。 - 打开积分器参数,启用输出限制。速度积分上限
23、下限-23,初始状态保持当前基线设置。 - 保持所有其他对象与限幅不变,记录 u_raw、u_sat、xI 和转速,在阶跃时检查反算方向。
若 u_raw > 30 A,则 u_sat − u_raw < 0,反算项应压低积分。如果看到它进一步推高积分,优先检查差值正负号。
从模型已有 PI 修改时,先“查看封装内部”理解连线,不必重新拖一套模块,也不要改变自动测试使用的 ω、Id、Iq 名称。
三个 PI 应填什么
| 环 | Kp | Ki | Kb | 总输出限幅 | 积分贡献限幅 |
|---|---|---|---|---|---|
| 速度 ω | 1.2 | 1000 | 1600 | ±30 A | ±23 A |
| d 电流 Id | 9 | 800 | 89 | ±323 V | ±160 V |
| q 电流 Iq | 12 | 3000 | 250 | ±323 V | ±160 V |
Ki 和 Kb 直接填入增益框,不要先乘采样时间。离散积分器负责按其方法和采样周期累积。速度误差单位是 rpm,电流误差单位是 A,Kb 单位为 1/s。
积分限幅能直接算出来吗
可以由物理约束得到设计范围,但通常无法只用一个公式得到“最佳值”。
速度稳态时误差近零,比例贡献较小,积分器需要维持负载所需电流:
iq,steady ≈ (TL + B × ωm) / (1.5 × p × ψf)
例如 1500 rpm、15 N·m,按当前参数约需 22.39 A,±23 A 积分限幅能够覆盖这一稳态需求,但余量有限。若负载或转速范围改变,需要重新检查。
输出限幅 ±30 A 代表允许的电流命令范围;积分限幅应兼顾稳态需求、瞬态比例贡献和恢复过程。它不是越小越好,也不应该大到完全失去约束作用。
电流环积分限幅要连同电阻压降、反电势、交叉耦合与可用电压分析。当前 ±160 V 是本模型验证过的设定,不能直接作为任意电机的通用值。
怎样验证接对了
- 不饱和时 u_sat = u_raw,反算项应接近零。
- 正向饱和时,反算项应抑制积分继续增大;反向饱和时方向相反。
- 在同一组 PI 增益和限幅下,仅将三个 Kb 设为 0,构成消融对照。
- 同时看超调、精细调节、电流峰值与积分状态,不只看整段速度曲线。
发布包中的 run_report.m 已包含这一消融试验。在 实验台 可以直接查看结果。