2. PID控制原理:比例、积分、微分环节的作用、PID参数对系统响应的影响、位置环与速度环PID

PID控制,说白了就是三个字:快、准、稳。

我刚开始做机器人关节控制时,总觉得PID太简单,不就是调三个数嘛。直到有一次,我调了一整天的参数,电机还是抖得像筛糠……嗯,从那以后我老老实实把每个环节的原理啃透了。

这一章,咱们就把P、I、D这三个家伙彻底聊明白。

2.1 比例环节(P)—— 当前误差的“放大器”

比例环节干的事很简单:误差越大,输出越大。

公式长这样:

u(t) = Kp * e(t)

其中 e(t) 是当前误差,Kp 是比例增益。

举个例子:你让电机转到90度,它现在停在0度。误差是90度。Kp=2时,输出就是180。电机猛转过去。但快到90度时,误差变小,输出也变小。最后可能停在89度——这就是稳态误差。

关键点:纯P控制一定有静差。想消除它?得靠I。

我在项目中遇到过:调Kp时,从0.5开始慢慢往上加。加到某个点,电机开始嗡嗡响——那是临界振荡。再往上加,系统就发散、飞车了。所以我的习惯是:先找到临界值,然后取一半。

2.2 积分环节(I)—— 消除静差的“老黄牛”

积分环节看的是历史误差的累积。

u(t) = Ki * ∫e(t)dt

说白了,只要误差一直存在,积分项就会一直增长,直到把误差推平。你想想看,如果电机停在89度,差1度,P项输出很小。但积分项会慢慢累积,最终输出足够大,把电机推到90度。

注意:积分太强会带来“积分饱和”。我曾经在调试一个六轴机械臂时,积分项设太大,结果电机到位后还继续冲,直接撞上了限位块……后来我加了抗积分饱和(Anti-windup)才解决。

积分的作用总结一下:

  • 消除稳态误差
  • 提高系统精度
  • 但会降低响应速度
  • 容易引起超调和振荡

2.3 微分环节(D)—— 预测未来的“先知”

微分环节看的是误差的变化趋势。

u(t) = Kd * de(t)/dt

误差变化越快,微分输出越大。它相当于在说:“哥们,误差正在快速变大,赶紧刹车!”

我个人的经验:微分项对噪声特别敏感。有一次我在AGV小车的速度环上加微分,结果轮子一直在微抖。查了半天,发现是编码器信号有毛刺,微分把噪声放大了。后来加了低通滤波才搞定。

小技巧:实际工程中,微分项通常只用在位置环,速度环很少用D。因为速度信号本身已经是一阶微分了,再微分会引入大量噪声。

2.4 PID参数对系统响应的影响

调参就像炒菜——盐多了咸,糖多了甜。下面这张表是我多年调参的经验总结:

参数 上升时间 超调量 稳态误差 稳定性
Kp ↑ 加快 增大 减小 降低
Ki ↑ 加快 增大 消除 降低
Kd ↑ 减慢 减小 无影响 提高

调参顺序我建议这样:

  1. 先调P:从小到大,找到临界振荡点,然后取50%-60%
  2. 再加I:从0开始慢慢加,直到稳态误差消失
  3. 最后加D:如果超调太大,加一点D压一压

避坑指南:我曾经在调一个云台电机时,上来就三个参数一起调,结果系统乱成一锅粥。后来老老实实按这个顺序来,半小时就搞定了。

2.5 位置环与速度环PID

在机器人关节控制中,PID通常分两层:

  • 位置环(外环):控制最终位置,输出是目标速度
  • 速度环(内环):控制实际速度,输出是目标电流/力矩

为什么这么分?因为速度环响应更快。位置环算得慢一点没关系,速度环必须快速跟上。

我画了一张图,帮你理清这两层的关系:

位置环与速度环PID结构图 目标位置 位置环PID 目标速度 速度环PID 目标电流 电机 编码器 说明 外环:位置环 内环:速度环 虚线:反馈路径

实际调试时,我习惯先调内环,再调外环。具体步骤:

  1. 把位置环增益设小,只调速度环的PI
  2. 速度环调稳后,再调位置环的P
  3. 最后微调位置环的D(如果需要)

经验之谈:速度环的Ki一般设得比位置环大。因为速度环需要快速响应,而位置环更看重精度。我在调一个协作机器人时,速度环Ki设了0.5,位置环Ki只设了0.05——效果很好。

2.6 实际调参中的常见问题

最后分享几个我踩过的坑:

  • 电机嗡嗡响:P太大,或者微分噪声。先降P,再检查编码器信号
  • 到位后慢慢爬:I太小,或者积分饱和。加大Ki,加抗饱和
  • 响应太慢:P太小,或者速度环限幅太低。先提P,再检查限幅
  • 超调太大:P太大,或者D不够。降P,加D

重要提醒:调参时一定要记录每次改的参数和对应的响应曲线。我刚开始时凭感觉调,调完就忘,第二天又从头来。后来用Excel记录,效率翻倍。