原文地址:https://club.rt-thread.org/ask/question/12262.html 原文作者:sogw
当我们给小车设定速度时,自然是希望它能够按照预设的速度运行,但因为外界阻力,显然轮子的转速会受到影响,达不到预设值或变的不稳定。这个时候就需要闭环控制了,来使车轮的转速在受到一定的干扰时也能稳定在预设值上下。
谈到闭环控制算法,最经典的当然是PID了,rt-robot 中提供了PID的算法,其中有增量式PID和位置式PID,对于电机的控制,增量式PID更为合适。 在PID调试过程中, 观察波形是很有必要的。 可以显示波形的工具有很多, 在这里,我使用的是 ANO_TC匿名科创地面站, 它不仅可以图形化显示数据,而且还有调参接口,支持串口、UDP等通信方式。 ANO_TC 上位机有一套自己的协议,下位机(小车)需要实现这部分,才能够使用它。
在与上位机通信对接完成后,就可以开搞了。调参过程中,增量式与位置式略有不同, 增量式先加大 Ki.
所用电机不太好。同时因为IO口不够用,没能使用MCU定时器的编码器接口(硬件),只好用软件包中的提供的编码器接口(软件)。
测速稍有影响,明显的可以看到在相互干扰,所以在看以下调试过程中的波形时,不要太过苛刻啊。
以下是具体的调参过程,仅供参考 (ps:两驱小车,使用同一套PID参数)
1.0: 首先设置KP=0,KD=0,KI=0.1。观察波形,可以看到稳定过慢,值太小
1.1:保持Kp、Kd不变,设置Ki为1.0。观察波形,稳定加快。
1.2:保持Kp、Kd不变, 设置Ki为2.0。观察波形,有振荡的趋势
1.3:保持Kp、Kd不变,设置Ki=4.0。观察波形,振荡趋势更加明显
1.4:保持Kp、Kd不变,设置Ki=8.0。观察波形,在有规律的振幅渐小的振荡
1.5:保持Kp、Kd不变,设置Ki=16.0。观察波形,来回大幅度振荡,此时Ki已经过大了
经过 1 过程后,暂定Ki为8.0
2.0:设置Kp=0.1、Ki=8.0、Kd=0.0。观察波形,几乎没有什么影响
2.1:保持Ki、Kd不变,设置Kp=1.0。观察波形,变化不大
2.2:保持Ki、Kd不变,设置Kp=2.0。观察波形,振荡有被消减
2.3:保持Ki、Kd不变,设置Kp=4.0。观察波形,变化不大
2.4:保持Ki、Kd不变,设置Kp=8.0。观察波形,振荡明显减弱
2.5:保持Ki、Kd不变,设置Kp=16.0。观察波形,新的振荡出现,此时Kp已经过大了
经过 2 过程后,暂定Kp为8.0
3.0:设置Kp=8.0、Ki=8.0、Kd=0.1。观察波形。看不出变化
3.1:保持Kp、Ki不变,设置Kd=1.0。观察波形,超调幅度被消弱
3.2:保持Kp、Ki不变,设置Kd=2.0。观察波形,无明显变化
3.3:Kd=6.0。观察波形,超调幅度继续消弱
3.4 Kd=8.0。观察波形,超调幅度无明显变化,且有要振荡的趋势
3.5:Kd=16.0。观察波形,大幅振荡,此时Kd已经过大了
经过 3 过程后,暂定Kd为8.0。至此,已经得到了一套PID参数,之后就是基于这套参数,反复调节,寻找更优的参数。
PID的参数并不是彼此孤立的,并不是确定了一个参数后,就一直不变,对于调一个参数时需要改动其它参数的情况是很常见的。以上只是方便展示,希望大家看过后,不要有误解。上述过程只是为了大致确定参数的数量级和敏感度
最后选定的参数是:Kp=6.6、Ki=6.5、Kd=7.6。效果如下