第四章 控制参数调优:PID参数整定误区、速度环与位置环的配合、前馈补偿的应用

参数调优这件事,说难不难,说简单也不简单。我见过太多工程师拿着示波器戳半天,最后把电机调得跟抽风似的。其实很多时候不是你不会调,而是你踩进了那几个常见的坑里。

这一章咱们就聊聊PID整定里那些容易翻车的地方,以及怎么让速度环和位置环好好配合。最后再讲讲前馈补偿——这个用好了一本万利,用不好就是个摆设。

控制参数调优核心知识框架 PID整定误区 速度环与位置环配合 前馈补偿应用 积分饱和 微分噪声放大 带宽匹配 响应优先级 速度前馈 加速度前馈 核心逻辑 1. 先避开PID整定误区,再谈配合 2. 速度环是内环,位置环是外环,内环带宽必须大于外环 3. 前馈补偿不改变系统稳定性,但能大幅提升跟踪精度 4. 三个模块按顺序排查,不要跳步

4.1 PID整定的三个常见误区

先说说PID整定。很多人一上来就调比例增益,觉得P越大响应越快。这话没错,但只对了一半。

误区一:盲目追求高增益

增益太高,系统会震荡。增益太低,响应又慢。我见过一个项目,工程师把P从10一路加到200,电机开始尖叫,他还以为是共振。其实那是增益太高导致的极限环振荡。

怎么判断?用手摸电机外壳,如果温度异常升高,或者运行时有高频啸叫,八成是增益过了。我个人习惯是先给一个保守的P值,然后慢慢往上加,每次加10%,观察响应曲线。

误区二:积分时间设置不当

积分的作用是消除静差,但积分太强会导致超调,甚至积分饱和。我曾经调试一个龙门架,积分时间设得太短,结果每次定位都过冲,然后积分项疯狂累积,电机来回晃了五六下才停住。

积分饱和怎么处理?两个办法:一是加积分限幅,二是用条件积分——只在误差小于某个阈值时才启用积分。代码里可以这样写:

// 条件积分示例
if (abs(error) < INTEGRAL_THRESHOLD) {
    integral += error * dt;
} else {
    integral = 0;  // 误差太大时清零积分
}
integral = clamp(integral, -INTEGRAL_LIMIT, INTEGRAL_LIMIT);
误区三:微分项滥用

微分能预测误差变化趋势,但它对噪声极其敏感。你想想看,如果速度反馈信号上有毛刺,微分项会把毛刺放大,结果就是电机高频抖动。

我建议:要么在微分前加一个低通滤波器,要么干脆不用微分。很多现代伺服驱动器默认D=0,不是没有道理的。

4.2 速度环与位置环的配合

速度环和位置环的关系,说白了就是内环和外环的关系。速度环跑得快,位置环跑得慢。这个顺序不能乱。

参数 速度环(内环) 位置环(外环)
带宽要求 高(通常 50-200 Hz) 低(通常 5-30 Hz)
响应速度 快 慢
主要目标 抑制扰动、跟踪速度指令 消除位置误差、保证定位精度
整定顺序 先调 后调

调的时候有个铁律:先调速度环,再调位置环。速度环调不好,位置环怎么调都没用。我记得有一次帮客户调试一个贴片机,位置环怎么调都抖,后来发现是速度环的带宽只有20Hz,位置环却设了30Hz——内环比外环还慢,不抖才怪。

配合原则:
  • 速度环带宽至少是位置环的3-5倍
  • 位置环的比例增益不要太大,否则会激发速度环的谐振
  • 位置环的积分项通常不需要,因为速度环已经能消除稳态误差

实际操作中,我习惯先把速度环调稳,然后给一个阶跃位置指令,观察位置响应。如果位置响应有超调,就减小位置环的P值。如果响应太慢,就适当增加P值,但不要超过速度环带宽的1/5。

4.3 前馈补偿的应用

前馈补偿这个东西,很多人觉得高大上,其实原理很简单。它不改变反馈环路的稳定性,而是提前给一个补偿量,让系统更快地跟上指令。

举个例子:你开车看到前方有弯道,你不会等车跑偏了再打方向盘,而是提前打方向。前馈就是这个道理。

常用的前馈有两种:

  • 速度前馈:根据位置指令的变化率,提前给速度环一个指令
  • 加速度前馈:根据位置指令的二阶导数,提前给转矩一个补偿

代码实现大概是这样:

// 速度前馈计算
float velocity_feedforward = Kff_v * (target_position - last_target_position) / dt;

// 加速度前馈计算
float acceleration_feedforward = Kff_a * (target_velocity - last_target_velocity) / dt;

// 最终输出 = 反馈输出 + 前馈输出
float output = pid_output + velocity_feedforward + acceleration_feedforward;
前馈调参技巧:

先设Kff_v=0,调好反馈环。然后慢慢增加Kff_v,观察跟踪误差。当误差曲线变得对称时,说明前馈量合适。如果误差偏向一侧,说明前馈过大或过小。

我曾经调试一个高速贴片机,位置跟踪误差一直有0.5mm,怎么调反馈都降不下来。后来加了速度前馈,误差直接降到0.05mm。你想想看,这就是前馈的威力。

注意:

前馈不能完全替代反馈。如果系统有模型误差或者扰动,前馈是补偿不了的。前馈负责「预判」,反馈负责「纠偏」,两者缺一不可。

最后说一句:前馈系数不要设得太大,否则指令突变时会有冲击。我一般把前馈系数限制在0.8以内,留点余量给反馈去修正。