参考:《新手开发实战指南》——喵呜实验室
角度环PID
选定PD控制的原因
- 两轮自平衡小车的姿态检测信号中不可避免地存在噪声信号,这些噪声信号经过积分I环节会随着时间不断地累积,从而导致积分器失去消除静差的调节功能并产生控制误差;
- 两轮自平衡小车的轮胎与地面的摩擦会产生阻尼作用,这种阻尼可以克服小车姿态倾角静差的持续增加。
参数整定步骤
- 确定 P极性 (令 D=0)
- 确定 P大小 :P一直增加,直到出现大幅度低频振荡
- 确定 D极性 (令 P=0)
- 确定 D大小 :令 P 等于刚才整定值,让D一直增加到出现小幅度高频振荡
- 将 P、D的值同时乘以0.6
达到效果
小车运行非常平稳,但是依然无法保持长时间的直立,直立很短一段时间后会往一个方向加速倒下。这个需要加上速度环后才能得到更好的性能。只有角度环是很难让小车达到很好的直立效果的。
速度环PID
选定PI控制的原因
直立控制使用了 PD 控制。因为编码器可能存在的噪声,为防止噪声被放大并消除系统的静差,所以速度控制使用 PI 控制。
低通滤波,使速度更平滑
g_fCarSpeed_2 = 0.3 * g_fCarSpeed + 0.7 * fCarSpeedPrev;
fCarSpeedPrev = g_fCarSpeed_2;
红色线是滤波前的速度值,绿色线是滤波后的速度值,可以看出低通滤波后速度更加平滑。
速度环控制频率
速度环的控制频率是要比角度环低的,速度环的控制频率设为40Hz(25ms),角度环的控制频率设为 200Hz(5ms)。
参数整定步骤
- 确定 P、I的极性 :
设定 P=0.1,I=P/20。如果当我们旋转其中一个小车轮胎的时候,两个轮胎会往相同的方向加速,直至电机的最大速度,这是典型的正反馈效果,也是我们期望看到的,则极性正确。 - 确定 P、I的大小 :
此时需要在角度环调好的基础上进行,先调试 I 的大小,一点点增加,直到出现小车来回摆动的现象,I的值不需要太大,出现摆动的现象即可。
再调试P的大小,慢慢加,加过多会加剧小车的振荡,加到合适的值平衡小车基本上就已经调得差不多了。
达到效果
小车可以自己保持平衡了,起码不会倒下,受外界干扰也能重新恢复平衡状态。要想达到更好的效果,让小车受到干扰后的振荡减小的话,就再调高角度环的D。