狂暴战车 直流电机转速闭环,pid调试过程

发布于 2019-08-01 10:32:43
    本帖最后由 sogw 于 2019-8-1 13:48 编辑


[p=30, 2, left]当我们给小车设定速度时,自然是希望它能够按照预设的速度运行,但因为外界阻力,显然轮子的转速会受到影响,达不到预设值或变的不稳定。这个时候就需要闭环控制了,来使车轮的转速在受到一定的干扰时也能稳定在预设值上下。[/p]
[p=30, 2, left]谈到闭环控制算法,最经典的当然是PID了,rt-robot 中提供了PID的算法,其中有增量式PID和位置式PID,对于电机的控制,增量式PID更为合适。 在PID调试过程中, 观察波形是很有必要的。 可以显示波形的工具有很多, 在这里,我使用的是 ANO_TC匿名科创地面站, 它不仅可以图形化显示数据,而且还有调参接口,支持串口、UDP等通信方式。 ANO_TC 上位机有一套自己的协议,下位机(小车)需要实现这部分,才能够使用它。[/p]
[img=1145,706][/img]

在与上位机通信对接完成后,就可以开搞了。调参过程中,增量式与位置式略有不同, 增量式先加大 Ki.

!:所用电机不太好。同时因为IO口不够用,没能使用MCU定时器的编码器接口(硬件),只好用软件包中的提供的编码器接口(软件)。
测速稍有影响,明显的可以看到在相互干扰,所以在看以下调试过程中的波形时,不要太过苛刻啊。
[img=376,266]https://github.com/sogwms/images/raw/master/pid/ab.png[/img]


以下是具体的调参过程,仅供参考 (ps:两驱小车,使用同一套PID参数)


1.0: 首先设置KP=0,KD=0,KI=0.1。观察波形,可以看到稳定过慢,值太小
[img=867,566]https://github.com/sogwms/images/raw/master/pid/0.1.png[/img]


1.1:保持Kp、Kd不变,设置Ki为1.0。观察波形,稳定加快。
[img=876,566]https://github.com/sogwms/images/raw/master/pid/1.png[/img]

1.2:保持Kp、Kd不变, 设置Ki为2.0。观察波形,有振荡的趋势
[img=876,566]https://github.com/sogwms/images/raw/master/pid/2.png[/img]

1.3:保持Kp、Kd不变,设置Ki=4.0。观察波形,振荡趋势更加明显
[img=876,566]https://github.com/sogwms/images/raw/master/pid/4.png[/img]

1.4:保持Kp、Kd不变,设置Ki=8.0。观察波形,在有规律的振幅渐小的振荡
[img=876,566]https://github.com/sogwms/images/raw/master/pid/8.png[/img]

1.5:保持Kp、Kd不变,设置Ki=16.0。观察波形,来回大幅度振荡,此时Ki已经过大了
[img=876,566]https://github.com/sogwms/images/raw/master/pid/16.png[/img]

[p=30, 2, left]
    经过 1 过程后,暂定Ki为8.0

[/p]
2.0:设置Kp=0.1、Ki=8.0、Kd=0.0。观察波形,几乎没有什么影响
[img=876,566]https://github.com/sogwms/images/raw/master/pid/0.1-8.0-0.0.png[/img]

2.1:保持Ki、Kd不变,设置Kp=1.0。观察波形,变化不大
[img=876,566]https://github.com/sogwms/images/raw/master/pid/1.0-8.0-0.0.png[/img]

2.2:保持Ki、Kd不变,设置Kp=2.0。观察波形,振荡有被消减
[img=876,566]https://github.com/sogwms/images/raw/master/pid/2.0-8.0-0.0.png[/img]

2.3:保持Ki、Kd不变,设置Kp=4.0。观察波形,变化不大
[img=876,566]https://github.com/sogwms/images/raw/master/pid/4.0-8.0-0.0.png[/img]

2.4:保持Ki、Kd不变,设置Kp=8.0。观察波形,振荡明显减弱
[img=876,566]https://github.com/sogwms/images/raw/master/pid/8.0-8.0-0.0.png[/img]

2.5:保持Ki、Kd不变,设置Kp=16.0。观察波形,新的振荡出现,此时Kp已经过大了
[img=876,566]https://github.com/sogwms/images/raw/master/pid/16-8.0-0.0.png[/img]

[p=30, 2, left]
    经过 2 过程后,暂定Kp为8.0
[/p]
3.0:设置Kp=8.0、Ki=8.0、Kd=0.1。观察波形。看不出变化
[img=876,566]https://github.com/sogwms/images/raw/master/pid/7.6-8.0-0.1.png[/img]

3.1:保持Kp、Ki不变,设置Kd=1.0。观察波形,超调幅度被消弱
[img=876,566]https://github.com/sogwms/images/raw/master/pid/7.6-8.0-1.0.png[/img]

3.2:保持Kp、Ki不变,设置Kd=2.0。观察波形,无明显变化
[img=876,566]https://github.com/sogwms/images/raw/master/pid/7.6-8.0-2.0.png[/img]

3.3:Kd=6.0。观察波形,超调幅度继续消弱
[img=876,566]https://github.com/sogwms/images/raw/master/pid/7.6-8.0-6.0.png[/img]

3.4 Kd=8.0。观察波形,超调幅度无明显变化,且有要振荡的趋势
[img=876,566]https://github.com/sogwms/images/raw/master/pid/7.8-8.0-8.0.png[/img]
3.5:Kd=16.0。观察波形,大幅振荡,此时Kd已经过大了
[img=876,566]https://github.com/sogwms/images/raw/master/pid/7.8-8.0-16.0.png[/img]

[p=30, 2, left]
    经过 3 过程后,暂定Kd为8.0。至此,已经得到了一套PID参数,之后就是基于这套参数,反复调节,寻找更优的参数。
[/p]
[p=30, 2, left]
    PID的参数并不是彼此孤立的,并不是确定了一个参数后,就一直不变,对于调一个参数时需要改动其它参数的情况是很常见的。以上只是方便展示,希望大家看过后,不要有误解。上述过程只是为了大致确定参数的数量级和敏感度。
[/p]

n:最后选定的参数是:Kp=6.6、Ki=6.5、Kd=7.6。效果如下
[img=876,566]https://github.com/sogwms/images/raw/master/pid/6.6-6.5-7.6.png[/img]


查看更多

关注者
0
被浏览
1.1k
3 个回答
whj467467222
whj467467222 2019-08-01
PID整定参数的选择之试凑法
Carry
Carry 2019-12-02
博主能分享一下你的 ”ANO_TC匿名科创地面站” 软件吗?
我最近调通了这个robot框架的电机闭环,发现框架内有现成的传参函数。
你的这个版本在匿名网站上找不到了,谢谢啦。
sogw
sogw 2019-12-05
Carry 发表于 2019-12-2 16:32
博主能分享一下你的 ”ANO_TC匿名科创地面站” 软件吗?
我最近调通了这个robot框架的电机闭环,发现框架 ...


https://pan.baidu.com/s/1Zbvmzr8Mbt9Mytft31IcCw

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友