4. PID 参数整定进阶:从经验法到基于模型的自整定

各位工程师朋友,欢迎来到第四章。前几章我们聊了运动控制卡的基础架构和信号链路,算是把“硬件骨架”搭好了。从这一章开始,我们要真正进入“调参”这个核心环节。

PID 参数整定,说白了就是让电机听话。但怎么让它“又快又稳又不超调”?这里面的门道,远不止调三个增益那么简单。我个人习惯把整定方法分成两个阶段:先靠经验法快速“稳住”系统,再用基于模型的方法“榨干”性能。

核心观点:经验法解决“能不能用”,模型法解决“好不好用”。两者不是替代关系,而是递进关系。

4.1 从经验法说起:为什么我还在用 Ziegler-Nichols?

很多人觉得 Z-N 法太老,不够“智能”。但我在项目中遇到过好几次,现场没有上位机、没有示波器,只有一台手持终端。这时候,Z-N 法就是救命稻草。

Z-N 法的核心思路很简单:先让系统震荡起来,再根据震荡周期和增益反推参数。具体步骤我总结了一下:

  1. 纯比例控制:先把 I 和 D 设为 0,只保留 P 增益。
  2. 增大 P 增益:慢慢往上加,直到系统输出出现等幅震荡。记录此时的临界增益 Ku 和震荡周期 Tu。
  3. 查表计算:根据下表算出 P、I、D 的初始值。
控制器类型 Kp Ki Kd
P 控制器 0.5 Ku — —
PI 控制器 0.45 Ku 1.2 Kp / Tu —
PID 控制器 0.6 Ku 2 Kp / Tu Kp Tu / 8

注意:Z-N 法算出来的参数通常偏“激进”,系统容易有 10%~20% 的超调。我一般把它当成“安全上限”,然后手动往回调 20%~30%。

4.2 基于模型的自整定:让算法替你干活

如果你手头有上位机,或者控制器支持在线辨识,那就可以上模型法了。它的核心是两步走:

  • 系统辨识:给电机一个激励信号(比如伪随机二进制序列 PRBS),采集响应数据,拟合出系统的传递函数。
  • 参数优化:基于辨识出的模型,用极点配置、LQR 或 IMC(内模控制)等方法算出最优 PID 参数。

我常用的一个方法是“继电反馈自整定”。它比 Z-N 法更温和,不需要让系统进入等幅震荡,而是通过一个继电环节让系统产生小幅极限环。这样对机械结构的冲击小很多。

我的经验:继电反馈法特别适合那些“金贵”的设备——比如精密转台或光刻机平台。我曾经在一台晶圆搬运机器人上用过,整定过程几乎没有肉眼可见的抖动,最终定位精度提升了 40%。

下面这张图展示了从系统辨识到参数自整定的完整流程:

基于模型的自整定流程图 施加激励信号 采集响应数据 拟合传递函数 计算最优 PID 参数 写入控制器 常用:阶跃信号 / PRBS 幅值不宜过大,避免冲击 常用:ARX / ARMAX 模型 阶次一般取 2~4 阶 方法:极点配置 / IMC / LQR 可加入鲁棒性约束

4.3 积分分离:别让积分“闯祸”

积分项的作用是消除稳态误差,但它在启动或大幅给定变化时,会积累很大的“积分饱和”。结果就是系统超调严重,甚至震荡。

积分分离的思路很简单:误差大的时候,把积分项关掉;误差小的时候,再把它打开。我一般这样设置:

// 积分分离伪代码
if (abs(error) > threshold) {
    integral = 0;  // 误差大,积分清零
} else {
    integral += error * dt;  // 误差小,正常积分
}
output = Kp * error + Ki * integral + Kd * derivative;

阈值怎么选?我习惯把阈值设为目标位置的 5%~10%。比如定位到 100mm,那误差超过 10mm 时就关掉积分。这个值可以根据实际响应微调。

4.4 微分先行:让微分“安静”下来

标准的 PID 算法里,微分项是对误差求导。但问题来了——如果给定信号本身有阶跃变化,误差的导数会瞬间变得很大,产生一个“尖峰”输出。这在运动控制里非常致命,电机会猛地抖一下。

微分先行的做法是:只对反馈信号求导,不对给定信号求导。说白了就是:

  • 标准微分: D = Kd * d(error)/dt
  • 微分先行: D = Kd * d(feedback)/dt

这样一来,给定信号再怎么跳变,微分项都不会“激动”。我在做飞剪控制时用过这个技巧,切出来的材料长度一致性从 ±2mm 提升到了 ±0.3mm。

注意:微分先行对高频噪声比较敏感。如果编码器信号有毛刺,建议先做一阶低通滤波,再送入微分通道。我一般把滤波截止频率设在 50~100Hz。

4.5 前馈补偿:让系统“预判”你的动作

前馈补偿是我个人最喜欢的技巧。它不依赖反馈误差,而是直接根据给定信号的变化,提前给一个“补偿量”。

举个例子:你要让一个负载以恒定加速度启动。反馈控制只能在误差出现后才去修正,而前馈控制可以在启动瞬间就给出一个加速度对应的力矩。这样系统的跟随误差能降低一个数量级。

前馈通常分两种:

类型 公式 适用场景
速度前馈 Kvff * 目标速度 匀速跟踪、轮廓加工
加速度前馈 Kaff * 目标加速度 启停频繁、高速定位

我的经验:前馈系数不是越大越好。调得太大,系统会“过冲”。我一般先给一个理论值(比如根据负载惯量估算),然后现场微调,直到误差曲线变得平坦。

4.6 四种进阶技巧的对比与选择

最后,我把这四种技巧放在一起做个对比。你想想看,你的项目里最需要解决什么问题?

技巧 解决的核心问题 副作用 推荐优先级
积分分离 启动超调、积分饱和 可能引入稳态误差 ⭐⭐⭐⭐⭐
微分先行 给定跳变引起的抖动 对噪声更敏感 ⭐⭐⭐⭐
速度前馈 匀速段跟随误差 需要精确的速度信号 ⭐⭐⭐
加速度前馈 加减速段动态误差 需要加速度估算 ⭐⭐⭐

嗯,这一章的内容就到这里。从经验法到模型法,从积分分离到前馈补偿,每一步都是我在现场踩过坑之后总结出来的。希望你能在自己的项目里用上这些技巧,让电机跑得更顺、更准。