智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 16999|回复: 25
打印 上一主题 下一主题

[电磁] 三轮控制之串级pid(后续)——By 小学生

  [复制链接]

13

主题

137

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2331
威望
1223
贡献
598
兑换币
602
注册时间
2016-12-19
在线时间
255 小时
毕业学校
跳转到指定楼层
1#
发表于 2018-7-31 11:35:26 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
        如同电路中的串并联一样,pid控制也可以被串并联,在这里我只讲串联。
        先说一下三轮中控制的流程吧,首先是感应电动势的ADC采集,然后分析这些值,得出一个偏差,再依据这个偏差和车期望的前进速度,算出左右轮的期望速度,以此来控制车的前进。其实在这里,就已经存在着第一级pid控制了(先假设没转速闭环):
        第一级pid控制:反馈量:电感值。进而算出偏差,也可以理解为反馈为车的偏差。
                                期望值:因为要车寻迹,因此期望车的偏差为0,所以期望值恒为0。
                                输出量:根据反馈与期望,经pid计算得到一个输出,这个输出直接和差速成正比,再和期望前进速度加减,得到左右                            轮的期望速度。
        在这里。通过电感的反馈,完成了第一级pid的控制,这里就一个pid控制,接下来再加进去一个pid控制,和它串起来,就形成了2个pid
控制串联起来的串级控制。如何再加呢?电机转速那里可以根据编码器的反馈再形成一个pid控制,这个时候控制流程变成这样:
        计算偏差->一级pid控制->得出一级pid输出->以此计算左右电机期望速度->二级pid控制->得出二级pid输出(也就是占空比)
        这里就形成了串级控制,它和单级pid控制相比起来,多了一路反馈,如果说单级pid是能使车逼近偏差为0的控制的话,串级pid就是在使车逼近偏差为0的的基础上,再使电机转速逼近我的期望的控制。串级相比单级,能控制的物理量变,使车的控制性能变得更好,相信大多数用了电机闭环的都感受得到和没闭环的天差地别吧。
         接下来再讲一讲角速度在串级控制中的引入,以形成三个pid控制的串级控制。
         首先是我这个pid控制该放在什么位置?我先给这三个控制编个号。偏差闭环为1,转速闭环为2,角速度闭环为3.既然是串级,那么我123,132,213,231,312,321都是串联啊,那么我随便串都行?答案肯定是否,在控制中,逻辑的先后非常重要,就如同直立的控制,肯定是角度外环角速度内环,而不能反着来。再举个比较粗鲁的例子,是先有你父母,再有你,而不能倒着来。在这里,我是用的132这样的串联方式,为什么?任何控制系统都得有一个输入,而与输入直接相关的,就是电感,所以把1偏差闭环放前面,而转速闭环2是在期望速度确认的情况下进行的pid控制,而角速度闭环3是根据角速度的反馈来调节差速,或者说调节左右电机的期望速度,所以应该放在2的前面.
          这个时候控制流程如下:
          计算偏差->控制1->一级pid输出->以此计算左右电机期望速度->控制3->二级pid输出(调整后的左右电机期望速度)->控制2->三级pid输出(也就是占空比)
           至此,就完成的3个pid的串联(串级控制)了,当然,在这过程中会遇到许多问题,比如我是角速度,如何调整左右电机的速度?
根据高中物理知识,差速=角速度*间距,便可将角速度与差速联系起来,进而控制左右轮的期望速度了。除此之外,还有许多细节,这里我就不一一细说了,毕竟自己探究出来的,才有成就感,才有自己学到了东西的感觉嘛。
            做了2年了,说实话并没有在论坛上学到什么,我这个老司机也快要下车了,希望走之前能用行动改变一下这里。毕竟这比赛都做了这么多年了,感觉强的还是那么些人,那么些学校。如果大家全民提速,百花齐放,思想多分享分享,也不至于这样吧。
            话不多说,闪人
回复

使用道具 举报

4

主题

24

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2377
QQ
威望
1198
贡献
769
兑换币
779
注册时间
2015-8-12
在线时间
205 小时
毕业学校
成都信息工程大学
推荐
发表于 2018-7-31 17:09:00 | 只看该作者
通常内环频率要大于等于外环,编码器采样通常使用10ms,那么内环控制频率仅有100Hz,即使是5ms也只是200Hz,远低于最外环传感器和中间环角速度,这样的串级控制效果就被大打折扣,甚至可能还不如直接用传感器单环控制的效果。串级的方案不止一种,各有优缺点。比如将传感器数据拟合成期望转向半径R,根据当前速度就可以直接计算出期望转向角速度,直接控制角速度环即可,6050最高可以8KHz。也可以使用当前角速度和当前速度直接计算出当前转向半径,直接控制转向半径环,频率同样可以做到很高
回复 支持 1 反对 0

使用道具 举报

11

主题

55

帖子

0

精华

高级会员

Rank: 4

积分
960
威望
501
贡献
293
兑换币
321
注册时间
2017-5-23
在线时间
83 小时
毕业学校
哈圣盾神学院
推荐
发表于 2018-8-5 14:58:46 | 只看该作者
楼楼我看你这个思路好几天了 关于角速度窜进去 当差速 调整期望速度  我一直没看懂。。
偏差PID得到差速 (左右轮期望速度)后,还需要角速度怎么调整,不应该直接接编码器(真实差速)然后PID吗?实在不知,还望解答😛
回复 支持 1 反对 0

使用道具 举报

13

主题

137

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2331
威望
1223
贡献
598
兑换币
602
注册时间
2016-12-19
在线时间
255 小时
毕业学校
推荐
 楼主| 发表于 2018-7-31 17:42:19 | 只看该作者

感谢顶贴
回复 支持 1 反对 0

使用道具 举报

4

主题

24

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2377
QQ
威望
1198
贡献
769
兑换币
779
注册时间
2015-8-12
在线时间
205 小时
毕业学校
成都信息工程大学
推荐
发表于 2018-8-2 10:42:34 | 只看该作者
北一前三 发表于 2018-8-1 23:26
大佬 那我是不是可以 让内环执行几次之后再执行外环呢  这样串级的效果会不会好一点?

正确的做法是让内环频率提高,而不是为了让内环比外环快而去降低外环频率
回复 支持 0 反对 1

使用道具 举报

13

主题

137

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2331
威望
1223
贡献
598
兑换币
602
注册时间
2016-12-19
在线时间
255 小时
毕业学校
推荐
 楼主| 发表于 2018-8-9 14:17:01 | 只看该作者
767124048 发表于 2018-8-8 15:56
我理解的  3  2后面窜起来作用有点雷同,我一直用的1 3窜,一直想用132窜 。 如果3 2都是进行差速调整。3 ...

你可以这样理解,每个pid控制都对应一个指标的具体控制3 角速度闭环,也就是使车的加速度能达到我的期望
2 轮子转速闭环,也就是使车轮的转速能达到我的期望
所以32雷同,不是很准确的。只能说他们具体表现出来的结果都是使车的差速达到我的期望。但是他们的途径是不一样的
一个是强行使轮子速度达到我的期望速度,它们之间的差也就是差速,可控了。
一个是强行使车的角速度达到期望,角速度和差速成正比,也就是差速可控了。
既然都能使差速可控,为什么还要串呢? 首先是3 和 2对应的物理量不一样,你在控制某个东西时,是从单一面控制好还是从多个方面都控制好?粗略理解的话大概就是这个道理吧。
3  2  作用都是和1 相减?不是很理解这句
132 一起串,2 不应再特殊情况用(参考上面我的分析),
pid间如何串联的话, 就是 吧一个pid的输出作为另一个pid 的输入,这样pid就串起来了
1 输出 作为3 输入  3 输出作为 2 输入   2 输出作为电机pwm波  就这样
回复 支持 1 反对 0

使用道具 举报

1

主题

10

帖子

0

精华

功勋会员

Rank: 10Rank: 10Rank: 10

积分
228
威望
130
贡献
98
兑换币
86
注册时间
2022-12-5
在线时间
0 小时
27#
发表于 2022-12-24 22:39:38 | 只看该作者
小学生做车来了 发表于 2018-8-9 14:17
你可以这样理解,每个pid控制都对应一个指标的具体控制3 角速度闭环,也就是使车的加速度能达到我的期望
...

大佬,我真的想不明白了 偏差环得到值 给角速度环  角速度环输出 给速度环

偏差环时位置与位置的偏差  角速度环是什么的偏差啊 大佬 偏差环输出是 加减期望速度和z轴角速度*半径 吗 还是和x轴角速度 大佬 求指点
按大佬的写之后 角速度环是偏差环输出加减期望速度和z轴角速度*半径 但是角速度*半径会飙到3000 大佬求指点
回复 支持 反对

使用道具 举报

13

主题

137

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2331
威望
1223
贡献
598
兑换币
602
注册时间
2016-12-19
在线时间
255 小时
毕业学校
26#
 楼主| 发表于 2019-5-23 17:14:50 | 只看该作者
anyint 发表于 2019-3-2 22:25
大佬,请问串级pid,方向环调好了,速度环怎么调?,方向环pid输出作为输入给速度环,速度环是空载的时候调 ...

先针对你说的最后的问题,没有波形分析,可以使用串口吧波形发给电脑上位机显示。我用的软件是虚拟示波器回答你前面的问题,(如果你是需要电机作差速控制转向时,比如三轮,直立)我建议你先调速度环,调试方法为观测其空载阶跃响应。当速度环调试好了后再调方向环。方向环的输出作为速度环的输入。PID闭环阶跃响应效果比较好时,不会轻易受外界干扰的影响的,但是会受控对象(电机)本身的影响,而且比较大。如果你只用速度环转向,因为电机是惯性较大的系统,其本身的这个特性导致它在作用转向控制时会出现明显滞后,需要在前面加上方向环作用速度环输入,才能消除你说的晃来晃去的问题。(如果你是需要电机作差速辅助转向时,比如四轮车),则方向环与差速环分开独立调试,在都有较好的响应性能后,再将他们通过一定的物理关系式联系起来,共同控制转向。


回复 支持 反对

使用道具 举报

0

主题

10

帖子

0

精华

注册会员

Rank: 2

积分
177
威望
89
贡献
60
兑换币
56
注册时间
2018-11-28
在线时间
14 小时
25#
发表于 2019-5-18 21:47:57 | 只看该作者
顶,优秀
回复 支持 反对

使用道具 举报

2

主题

18

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
341
威望
177
贡献
96
兑换币
112
注册时间
2019-3-21
在线时间
34 小时
24#
发表于 2019-4-15 21:08:03 | 只看该作者
嗯嗯 感谢
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
356
QQ
威望
199
贡献
105
兑换币
86
注册时间
2017-4-14
在线时间
26 小时
毕业学校
临平职业高级中学
23#
发表于 2019-3-2 22:25:04 | 只看该作者
大佬,请问串级pid,方向环调好了,速度环怎么调?,方向环pid输出作为输入给速度环,速度环是空载的时候调好的,但是上了赛道就感觉速度环滞后了车老是晃来晃去,或者说由于摩擦系数不同,导致速度环控制电机反应不过来。怎么调外环(速度环)?大佬求教,直接上赛道调有点蒙蔽,没有波形分析实在是有点难受
回复 支持 反对

使用道具 举报

13

主题

137

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2331
威望
1223
贡献
598
兑换币
602
注册时间
2016-12-19
在线时间
255 小时
毕业学校
22#
 楼主| 发表于 2018-12-28 16:48:42 | 只看该作者
Pandakai 发表于 2018-12-26 18:54
楼主你好有些地方我不太理解,我想请问一下比如一阶pid算出一个输入值a,那么这个a作为输入给二阶,二阶pid ...

首先。。pid;理论上是能算出大概的,但很复杂,所以我们基本上是“调试”出来 的。
其实,第一个pid计算的输出作为第二级pid的输入,  那始终也是输入,那么久应该跟反馈做负反馈运算,进行第二次pid运算
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

注册会员

Rank: 2

积分
100
威望
52
贡献
32
兑换币
33
注册时间
2018-9-11
在线时间
8 小时
21#
发表于 2018-12-26 18:54:17 | 只看该作者
楼主你好有些地方我不太理解,我想请问一下比如一阶pid算出一个输入值a,那么这个a作为输入给二阶,二阶pid中的P项I项D项这些值怎么算,a应该和什么数相减
回复 支持 反对

使用道具 举报

13

主题

137

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2331
威望
1223
贡献
598
兑换币
602
注册时间
2016-12-19
在线时间
255 小时
毕业学校
19#
 楼主| 发表于 2018-8-9 00:19:26 | 只看该作者
767124048 发表于 2018-8-8 15:56
我理解的  3  2后面窜起来作用有点雷同,我一直用的1 3窜,一直想用132窜 。 如果3 2都是进行差速调整。3 ...

3的作用是使角速度稳定可控,且有强的响应能力,也就是使差速稳定可控
2的作用是使转速稳定可控
它们的闭环控制的量,或者说指标是不一样的,但是最终都是控制左右轮的速度,所以体现出来感觉一样都是进行差速调整。
你说的3   2的作用都是和1相减是啥意思,不是很明白。
你还是不懂怎么串可以这么理解。每一个pid控制都是加强了对某个指标的控制
而你只用1  3 的话 ,也就是实现了偏差为0 ,且角速度是我期望角速度的控制,也就是使偏差和角速度这两个指标的控制被加强了
而引入  1 3  2 的话,就在1  3 的基础上,对电机轮子的转速控制也加强了
至于如何串起了    就是一个pid 的输出 作为另一个pid 的输入  这样,2个pid就串起来了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-9-27 20:29 , Processed in 0.092007 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表