§5 调参指南
参数总览 · 推荐调参顺序 · 故障诊断
水箱液位控制实验 · 推荐初始值:p=40, pu=5, β=0.7, λ=2, α=0.9, λ_RLS=0.995
1. 参数总览
| 参数 | 含义 | 推荐初始值 | 调节方向 |
|---|---|---|---|
| $p$ | 预测时域 | 40 | 一般不动;系统不稳定时可增大 |
| $p_u$ | 控制时域 | 5 | 一般不动 |
| $\beta$ | 阶梯衰减因子 | 0.7 | 0.5~0.9;越小控制越激进 |
| $\lambda$ | 控制增量权重 | 2 | 控制量振荡→增大;响应太慢→减小 |
| $\alpha$ | 柔化因子 | 0.9 | 超调大→增大(0.9~0.95);响应慢→减小 |
| $\lambda_\text{RLS}$ | RLS 遗忘因子 | 0.995 | 参数漂移→增大;跟踪慢→减小 |
| $\Delta u_\text{max}$ | 增量限幅 | 0.1(归一化) | 控制冲击大→减小 |
2. 推荐调参顺序
★ 核心
按以下顺序调,每步只动一个参数,观察效果后再进行下一步:
- 确认稳态:SP 不变,观察 $y$ 是否稳定在 SP 附近(无静差)
- 调响应速度:给一个小阶跃(如 1V→1.5V),观察上升时间。调 $\lambda$
- 压超调:给较大阶跃(1V→2V),观察超调量。调 $\alpha$
- 平滑控制量:观察 $u$ 曲线是否有高频抖动。调 $\beta$ 或 $\Delta u_\text{max}$
- 验证抗扰:稳态时手动扰动水位,观察恢复速度
原则
先保证稳定(无振荡),再追求快速(响应速度),最后优化平滑(控制量)。不要同时调多个参数。
3. 第一步:确认稳态
○ 诊断
SP 固定,等待系统稳定后,观察 $y$ 是否收敛到 SP。
| 现象 | 可能原因 | 处理 |
|---|---|---|
| $y$ 收敛但有静差 | CARIMA 积分未生效,或工作点估计偏差 | 检查 $\tilde A$ 构造是否正确 |
| $u$ 立刻打到上限(20mA) | 稳态增益估计错误,$b_0$ 太小 | 检查归一化空间辨识是否正确 |
| $y$ 持续振荡 | $\lambda$ 太小或 $\alpha$ 太小 | 增大 $\lambda$(先试 5~10) |
| $y$ 完全不动 | 丢番图递推 bug,$G_2$ 全零 | 检查 $F_j$ 维度和 $G\_\text{mat}$ 索引 |
4. 第二步:调响应速度
○ 调节
给小阶跃(1V→1.5V),观察上升时间(从 10% 到 90% 的时间)。
水箱系统时间常数 $\tau \approx 64$ 步,加上 $k=24$ 步时延,理论上升时间约 100~150 步。
| 现象 | 调节 |
|---|---|
| 上升太慢(>200步) | 减小 $\lambda$(从 2 → 1 → 0.5) |
| 上升太快但振荡 | 增大 $\lambda$(从 2 → 5 → 10) |
| 上升正常但有超调 | 进入第三步调 $\alpha$ |
$\lambda$ 的物理含义
$\lambda$ 越大,控制律越"保守",每步控制增量越小,响应越慢但越平稳。$\lambda=0$ 时退化为纯最小方差控制(可能不稳定)。
5. 第三步:压超调
○ 调节
$\alpha=0.95$:约 60 步逼近 SP,超调小但慢
$\alpha=0.98$:约 200 步逼近 SP,几乎无超调但非常慢
给大阶跃(1V→2V 或 1V→3V),观察超调量(超过 SP 的最大偏差)。
超调的根本原因:$k=24$ 步时延,控制量推出去后要等 24 步才看到效果,容易冲过头。
| 超调量 | 调节 |
|---|---|
| >20% | 增大 $\alpha$(0.9 → 0.92 → 0.95) |
| 10%~20% | $\alpha=0.9$ 是合理范围,可接受 |
| <5% | $\alpha$ 可能过大,响应偏慢 |
$\alpha$ 与响应速度的 trade-off
$\alpha=0.9$:约 30 步逼近 SP,适中$\alpha=0.95$:约 60 步逼近 SP,超调小但慢
$\alpha=0.98$:约 200 步逼近 SP,几乎无超调但非常慢
6. 第四步:平滑控制量
○ 调节
观察 $u(t)$ 曲线,理想情况是平滑的 S 形上升,不应有高频抖动。
| 现象 | 调节 |
|---|---|
| $u$ 高频抖动(每步大幅跳变) | 减小 $\Delta u_\text{max}$(0.1 → 0.05)或增大 $\lambda$ |
| $u$ 在设定值切换时有大尖峰 | 增大 $\alpha$(柔化设定值跳变) |
| $u$ 长时间饱和在 20mA | 检查 $b_0$ 是否太小(稳态增益问题) |
$\beta$ 的作用
$\beta$ 控制控制序列的衰减速度,不直接影响超调,但影响控制量的平滑程度。$\beta=0.7$ 是经验最优值,一般不需要调。
7. 常见故障诊断
⚠ 故障排查
| 故障现象 | 根本原因 | 解决方法 |
|---|---|---|
| 控制量立刻打到 20mA 上限 | $b_0$ 太小(稳态增益不足),或归一化空间辨识错误 | 重新在归一化空间辨识,验证 $K_{ss} = b_0/(1+a_1) \approx 1.5$ |
| $y$ 完全不跟踪 SP | $F_j$ 维度错误(2项而非3项) | 检查 na_t = len(A_tilde)-1 = 2 |
| G2 数值异常(比 Python 大 4 倍) | $G\_\text{mat}$ 索引偏移 | 检查 G_new[jj] = e*b0(最高项在 jj,不是 jj+1) |
| RLS 参数持续漂移 | 遗忘因子 $\lambda$ 太小 | $\lambda=0.98 \to 0.995$ |
| MSVC C2374 编译错误 | 同一函数作用域内多次声明 int i/j/k | 每个 for 循环用 { } 包裹 |
| 初始控制量爆到上限 | u_prev=0 对应 4mA,但系统需要更高电流维持水位 | 将 u_prev 初始化为稳态电流对应的归一化值 |