PID 参数就是控制算法里的三个“调节旋钮”:P(比例)、I(积分)、D(微分)。它们决定控制器对“误差”的反应有多强、多快、多稳。
公式大致是:
其中 e(t)=目标值−实际值e(t)=目标值−实际值,u(t)u(t) 是输出控制量。
所以三个参数就是:
Kp:比例增益
Ki:积分增益
Kd:微分增益
1. P:比例项
看当前误差,差多少就出多大力。
Kp 越大:反应越快,但容易超调、振荡。
Kp 越小:反应迟钝,可能一直有稳态误差。
作用:让系统快速靠近目标。
例子:机器人关节要转到 90°,现在在 0°,P 就是“差 90° 就输出大一点”。
2. I:积分项
看历史误差,一直差就一直加力,用来消除稳态误差。
Ki 越大:消除稳态误差越快,但容易超调、振荡。
Ki 越小:消除慢,可能永远差一点。
作用:让最终值精确到达目标。
例子:电机带负载后总差 2°,I 会慢慢补偿这 2°。
3. D:微分项
看误差变化趋势,快到了就提前刹车。
Kd 越大:抑制超调、减少振荡,但对噪声非常敏感。
Kd 越小:阻尼不足,容易冲过头。
作用:让系统更稳,像“阻尼器”。
例子:平衡车快倒时,D 根据倾斜速度提前给反向力。
一句话记忆
P:现在差多少
I:过去差多少
D:未来会差多少
调参口诀通常是:
P 负责快,I 负责准,D 负责稳。
参数增大的影响
| 参数 | 响应速度 | 超调 | 稳态误差 | 稳定性 |
|---|---|---|---|---|
| Kp ↑ | 变快 | 变大 | 减小 | 变差 |
| Ki ↑ | 变快 | 变大 | 消除 | 变差 |
| Kd ↑ | 略快 | 减小 | 无影响 | 变好,但怕噪声 |
手动调参大概步骤
先只加 P:从小到大,直到系统开始等幅振荡,再往回退一点。
再加 I:从小往大,直到稳态误差消失,略有超调就停。
最后加 D:抑制超调和振荡,但注意噪声,必要时加低通滤波。
反复微调:P、I、D 会互相影响。
嵌入式/机器人里要注意
采样周期要固定,离散化后常用:
输出要限幅,防止执行器过载。
积分要限幅,防止“积分饱和”。
微分对噪声敏感,通常加滤波或“不完全微分”。
不同对象调法不同:电机速度、温度、位置、平衡车,参数差别很大。
简单说,PID 参数就是调 P、I、D 三个数,让系统又快、又准、又稳。
平衡车一般不是单环 PID,而是串级 PID:
直立环(内环) + 速度环(外环) + 转向环
其中直立环是核心,通常只用PD;速度环用PI;转向环用P 或 PD。
1. 直立环:让车不倒
输入:角度、角速度
输出:电机 PWM
text
角度误差 = 目标角度 - 实际角度 直立输出 = Kp_angle * 角度误差 + Kd_angle * 角速度
Kp_angle:越大,回正越快,太大高频抖动。
Kd_angle:抑制抖动,像阻尼,太大对陀螺仪噪声敏感。
一般不用 I:积分会滞后,反而容易倒。
调法:
先只给 P,从小往大加,直到车能向平衡位置回正,但会抖。
再加 D,从小往大加,直到抖动明显减弱、响应变硬。
目标角度要设成机械中值,不是 0°,因为电池、重心会影响。
2. 速度环:让车不漂
输入:编码器速度
输出:叠加到目标角度上
text
速度误差 = 目标速度 - 实际速度 速度输出 = Kp_speed * 速度误差 + Ki_speed * 积分 目标角度 = 机械中值 + 速度输出
Kp_speed:车漂移时把它拉回来。
Ki_speed:消除静差,让车真正停住。
输出限幅:通常限制在 ±5° ~ ±10°,否则会干扰直立。
调法:
直立环稳定后,车会慢慢前后漂。
加速度环 P,让车能缓慢回中心。
再加 I,消除最后一点漂移。
如果出现低频前后摆动,说明速度环太强,减小 P 或 I。
3. 转向环:控制左右转
输入:遥控转向量、陀螺仪 Z 轴
输出:左右轮差速
text
转向输出 = Kp_turn * 转向误差 + Kd_turn * 转向角速度 左PWM = 直立输出 - 转向输出 右PWM = 直立输出 + 转向输出
Kp_turn:转向力度,太大容易甩尾。
Kd_turn:抑制转向过冲,让转向更稳。
原地转向时注意电机死区,可加一点补偿。
4. 调参顺序
确认极性:车往前倾,轮子要往前加速;反了会直接飞车。
调直立环:先 P 后 D,直到能静止站立。
调速度环:先 P 后 I,直到不漂移。
调转向环:先 P 后 D,直到转向跟手。
联调:轻推、遥控、加负载、换地面,再微调。
5. 常见问题
一上电就疯转:电机方向或角度符号反了。
高频抖动:直立环 Kp 太大,或 Kd 太大引入噪声。
低频前后摆:速度环太强,或直立环阻尼不够。
往一边跑:机械中值没校准,或陀螺仪零偏。
加速后倒:速度环输出限幅太大,或电池电压下降。
积分饱和:积分项要限幅,倾倒时及时清零。
6. 代码注意
采样周期固定,比如 5ms。
角度用互补滤波或卡尔曼,角速度直接用陀螺仪,别用角度差分。
微分项对噪声敏感,加低通滤波。
PWM 输出必须限幅,防止烧电机。
电池电压变化会影响参数,最好做电压补偿。
经验数量级(仅参考)
以角度单位“度”、PWM 0~1000 为例:
直立环:Kp ≈ 30~100,Kd ≈ 0.5~3
速度环:Kp ≈ 0.5~5,Ki ≈ 0.01~0.1
转向环:Kp ≈ 1~10,Kd ≈ 0~0.5
但不同电机、轮径、重量、单位差别很大,不能照抄。