找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[宁静清幽的平衡小车进程帖]

查看数: 10782 | 评论数: 19 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2016-2-4 11:52

正文摘要:

本帖最后由 宁静清幽 于 2016-2-5 11:24 编辑 组装晒图 来几发小车照片,晒一晒。 小车主控板正面照片 写好程序编译,在左侧选好单片机型号,串口号,用的是内部时钟,填好IRC频率,为了方便通信嘛, ...

回复

ID:200681 发表于 2017-5-14 17:31
值得学习学习,我也在做小车,希望最后能够成功
ID:145818 发表于 2016-11-2 22:11
不错!!!!值得学习!
ID:114829 发表于 2016-5-4 12:43
楼主能否给我一份具体的资料啊  ?
ID:102157 发表于 2016-4-21 10:47
厉害,大神,请接下我的膝盖你做了转向没?
ID:104166 发表于 2016-3-24 12:55
进阶实验

2.     PID调试

关于小车PID的调试,也在网上找了好多资料,也看了喵大的角度环视频,调试经验有从网上学的也有些自己简单的体会。
原来没接触的时候也是一头雾水(毕竟不是学自控的孩子),后来在网上搜了一些资料,对这些基本概念也有了大概的了解,下面说一下我对PID的了解吧!1)我对PID的理解:PID分增量式和位置式,增量式的计算结果是在上一次的控制量基础上需要增加的量,或减少的量;位置式的每一次计算都是一个新的控制量的大小,而不是增加量,也不知道这说对不对(表达能力有限)。喵大的貌似是位置式,我的代码也是参考喵大的。PID控制一定要有反馈,要不然何谈控制(有点像废话)。PID控制就是比例P、积分I、微分控制D,这些运算是对于偏差来说的。    (1)比例运算:对偏差进行比例运算,就是偏差乘上一个系数,把这个偏差放大或缩小,对于平衡小车角度环来说,偏差角度=目标角度-当前角度,目标角度就是平衡时候的角度,就是0喽,比例控制量=偏差*比例系数,偏差大了,就是小车倾斜程度大了,我们给小车的电机大点电压,使小车加速运动,来减小偏差,从而使小车趋向平衡,同理,偏差小,给电机的电压小点,这就是比例控制,比例参数过小,小车“没劲”,不能抵消自身重力,太大的话,大幅度摇摆太厉害。
    (2)积分运算:对偏差进行积分,就是把偏差进行累加,偏差和=偏差和+偏差*积分系数;只要出现偏差,通过累加就会使偏差和变大,我们给电机的电压就要大,来使小车趋向平衡,直到偏差和为零的时候,积分这一部分对电压控制没有贡献。相对于比例参数来说,积分系数是很小的,但积分系数过小累加和变化不明显,控制也就不明显,过大,即出现了一个很小的误差,通过积分系数放大了好多,累加和也会变得很大,使系统不稳定。
    (3)微分控制:就是偏差对时间求导,得到的是偏差的变化率。对于小车的角度环来说偏差d=C-f(t);C就是我们目标角度,是一个恒定值,一般是0,f(t)是当前的角度值,偏差d对时间求导=常数C对时间求导+f(t)对时间求导,常数的导数是0,所以偏差d对时间求导相当于角度对时间求导,得到的是角速度,角速度可以直接从陀螺仪上面获取,就不用我们运算了,不过我们注意角速度的正负号。角速度的正负号代表小车像前还是向后倒下了,可以自己规定。角速度的绝对值代表小车倒下的速度,小车倒下的速度越快,我们就要给小车电机更大的电压,来抵消小车倒下,微分控制起到加快调节的作用。微分控制量=角速度*微分系数,我们把角速度乘以一个系数(也就是微分系数)就得到微分控制部分的控制量的大小了。微分系数太小也不能抵消小车的倒下,太大了会使小车小幅度高频震荡,容易烧驱动。
以上只是我的简单理解,有什么不对或者不全的地方还请大家指出,共同进步
2)调试
关于平衡车的控制,用到了两个环的控制,分别是角度环和速度环,角度环用PD,速度环用PI,在只有角度环的时候我也用过PID,以可以达到平衡,但是由于没有速度环,小车不一定跑到哪了。
写一下主要的公式:

    角度环:角度偏差d_Angle=SetAngle-CarAngle;     AngleCtrlOut=d_Angle*P_Angle+w*D_Angle;    w是角速度,在这之前还要对小车的角度进行滤波,前面的实验有过介绍,AngleCtrlOut是角度环的PWM输出
    速度环:速度偏差d_Speed=SetSpeed-CarSeed;  Car_I=Car_I+d_Speed*I_Speed;    SpeedCtrlOut=d_Speed*P_Speed+CarI;  SpeedCtrlOut是速度环的PWM输出。这些系数与单片机PWM的最大量有关系,比如单片机PWM的最大量是10000;在调角度环的时候一般是先让微分系数D_Angle=0,先只调比例系数,这样AngleCtrlOut=d_Angle*P_Angl;当偏差角度 d_Angle=10度,比例系数P_Angle=10,AngleCtrlOut才=100,小车PWM输出占PWM最大量的1%,理论上小车电机的转速为最快转速的1%(实际上达不到,也有可能死区电压都没过),这样小车没有足够的加速度来克服重力使车达到平衡。比例系数P_Angle还需要调大。但是当单片机PWM的最大量是256的时候,偏差角度 d_Angle=10度,比例系数P_Angle=10的时候,AngleCtrlOut还是=100,约占PWM最大量的39%,这个系数可能还靠点谱,所以说这些系数PWM最大量是有关系的。
    调试这些系数的过程:先调角度环,再速度环。关于反馈类型说的文邹邹点:角度环是负反馈,速度环是正反馈。说的通俗点:角度环中,偏差角度变大时,小车要控制偏差角度减小,就是让车轮朝着倒下的方向加速转。速度环中,速度变大,我们得给小车更快的速度,让小车追上自己,保持平衡。在调试的时候,可以分别调一下两个环,注意参数的正负,保证每个环,都是使车轮朝向小车倾斜的方向转就行了,在只有速度环时,手动转一个车轮,另一个车轮会慢慢转起来,最终两个车轮越转越快。
    调角度环时,一般是先让微分系数D_Angle=0,先只调比例系数,调到能使小车站起来,在平衡位置来回的摆动,再稍微增加比例系数,加入微分系数D_Angle,微分系数D_Angle从小到大。调到小车能够比较稳定的平衡,这时候,你轻推小车,小车会朝着一个方向加速跑过去,直至倒下。这个也是正常的,当然小车能接近平衡跑的越远说明参数越好,加入速度环可以解决这个问题,如果不加速度环,在角度环里面加入对偏差的积分(累加偏差),也能使小车平衡。只是对小车的速度没法控制。
    调速度环时,一般是先让积分系数I_Speed=0,先只调比例系数,由0开始增加,调到你推一下小车,小车能有足够的加速度来使小车保持平衡,这时小车新的平衡位置不再原地了,感觉小车能够很好的保持平衡之后,这时再加速度积分,加入速度积分后,小车会趋向于原地平衡
    我的理解就是这些,有什么不对或者不全的还请大家指出来,一块讨论共同学习哈。我自己感觉对于车速控制的理解还不够深,对于两个车轮速度分别控制还有待加强。
    挺感谢喵大的这个平台的,给我提供了学习平衡车基础,有机会让我这样的平衡车入门级玩家能从头到尾深刻了解平衡车的原理。给这个网站平台点个赞,给喵大的开源精神点个赞,给喵大的热心肠点个赞。
    本想弄点图片的,电池,又让我弄过放了,废了,平衡充接电池的时候,接反了一下,灯不亮了,平衡冲也出问题了。唉我勒个去,我也是被自己整无语了。在下个实验中在上图片吧。

ID:104166 发表于 2016-3-9 21:35
腾飞的龙 发表于 2016-3-8 10:37
真是高手,佩服啊,长见识啦,谢谢分享

啥高手,参数调不好,上面的都是跟着喵大学的!
ID:79544 发表于 2016-3-8 10:37
真是高手,佩服啊,长见识啦,谢谢分享
ID:94185 发表于 2016-2-27 17:47
宁静清幽 发表于 2016-2-26 01:10
进阶实验:

1.     多传感器数据融合

非常好。继续加油。把小车都学透~
ID:104166 发表于 2016-2-23 22:31
moyuqilin 发表于 2016-2-23 20:36
你串口助手很好啊,是什么?

为了看数据方便,就动手写了这么个不能再简陋的助手。
ID:77578 发表于 2016-2-23 20:36
你串口助手很好啊,是什么?
ID:104166 发表于 2016-2-6 00:20
bjyxyc 发表于 2016-2-6 00:03
用什么型号的芯片呢

IPA15w4k61s4
ID:94185 发表于 2016-2-5 18:05
666

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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