极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 124772|回复: 174

低成本、低档自平衡小车历程(超声自平衡小车)

  [复制链接]
发表于 2014-11-18 11:07:59 | 显示全部楼层 |阅读模式
本帖最后由 wujingyu 于 2015-1-25 13:05 编辑

第二阶段目标:

如标题所述,真正的入门级平衡车,真的低成本,不用陀螺仪和加速度传感器,用超声波测距实现平衡的小车!!!
见 114# 介绍!!!

第一阶段总结:
1# 第一版详细资料。

42# MPU6050-DMP输出稳定性测试,DMP每次启动后均要20秒左右后角度输出才稳定,使用者要注意此问题!!!

43# 第二版小车,硬件做了块PCB底板,换了一个全光耦隔离的L298N模块,这个版本做两款软件:一是单侧码盘测速,另一是用PWM输出值取代测速码盘,效果也不错。

50# 蓝牙手机控制助手,编写了一个简单的安卓控制平衡小车的程序。

56# 自平衡小车参数整定方法,针对前面一些经验和教训,总结了参数调整中的一些问题。

63# 不用MPU6050的DMP输出,采用原始数据一阶互补滤波解算角度,也不用PID库,直接编写PID计算,效率更高,稳定性与控制效果也更好。

65# 第三版源代码,测试数据和最新视频效果。

2014.12.4

以下为原1#贴内容

一、基本材料
1、Arduino Pro Mini模块
2、CP2102模块
3、MPU6050模块
4、CH06蓝牙模块
5、L298N驱动模块
6、测速传感器模块
7、小车底盘


二、硬件设计
1、Arduino Pro Mini + MPU6050测试验证
Arduino Pro Mini模块与MPU6050模块的连线图见前面图片,即:SDA接A4,SCL接A5,VCC接VCC,GND接GND,INT接2。
下载:i2cdevlib-master(https://github.com/jrowberg/i2cdevlib
****MPU6050库的安装方法*************************
a. 下载arduino编译器,目前版本为1.0.5。
b. 下载MPU6050库。进入“https://github.com/jrowberg/i2cdevlib”,点击“zip”即可。
c. 安装。将上一步下载的“I2Cdev”、“MPU6050”两个文件夹拷贝到“arduino-1.0.5\libraries”目录下。
运行arduino可以在例子中看到MPU6050。OK!

2、硬件原理图



其中D2S为外部中断0的接线选择:一种选择是MPU6050的DMP方式,这种方式就只能用一个测速码盘计数了;另一种选择是用两个测速码盘计数,但不能用MPU6050的DMP方式。

三、软件设计

1、源代码


2、说明
此处虽然用了速度PID,但这个的输入是码盘计数值,这个值其实不是速度,而是速度的累加,也就是速度的积分,所以其Sd、Sp这两个参数分别对应于速度环的P系数和I系数,也就实现了速度环的比例和积分这两项。

PID调节公式:PWMOut = KAp*angle + KAd*angle_velocity + KSp*speed + KSi*position

四、参数整定
1、先将 kp、ki、 kd、 sp、 si、sd 均设置为0;
2、先设定一个电机的起步补偿值,因为这个之不同,就相当于使用了不同的电机,这个值的选择,是根据你自己搭建完平台后,通过测试左右电机的起步值和停止值,然后综合考虑设定的,也没什么理论指导,在起步和停止之间分别候选几个,然后根据不同的补偿值,在分别调整PID的系数,这样优选一组即可;
3、逐渐增大 kp 使得小车刚刚来回摆动;
4、再逐渐增大 kd 使得小车的摆动消失,再继续增大 kd 小车会出现抖动,适当减小 kd,使得小车相对平稳即可;
5、接下来调节 sd(注意不是 sp,理由见软件设计的说明部分),使得小车能够来回走动(不是摆动,也不是抖动);
6、最后逐渐增大 sp,使得小车能够相对稳定;
7、什么程度为好,自己花一定的时间慢慢摸索,就能逐渐体会到自己的一套“主观”标准了!
8、最后一个参数也要注意,就是“抗积分饱和”值,这个值的选择我感觉与 sp 的大小有关,自己摸索吧,这个值如果选择太大会出现往一边跑,最后跌倒在地;如果太小会很快倒地。

五、初步成果
1、静态照片


2、运行曲线图


3、视频



六、问题及解决方案
1、电机性能测试
小车平台装配完毕,应测试一下,两个电机的特性,测试程序如下:



用此程序分别测试两个电机的启动值和停止值,也可测量两个电机的速差。

2、电机干扰问题
电机一起动,Arduino + MPU6050就无法工作,这个问题,在各论坛中均有提及,我这里采取的措施是,电机单独用一块7.4V的锂电供电,并且L298N的所有控制线均用光耦隔离。

3、系统供电
除上述电机供电外,系统其他部分的供电绝不可仅用 Arduino Pro Mini 上的稳压电源给其他部分供电, Arduino Pro Mini 上的稳压电源输出所能提供的电流有限,我这里仅用他给 MPU6050 模块供电,蓝牙串口模块单独用一个低压差稳压模块给其供电。

七、参考资料
1、pz_cloud 的:做了一个小小的自平衡小车(更新完整版,附视频)
http://www.geek-workshop.com/thread-5688-1-1.html
2、匠人的百宝箱:《自平衡两轮车》讲义 http://bbs.21ic.com/blog-24110-84728.html
3、求助:用MPU6050,L298N控制的平衡小车,运行1分钟就死机,(含详细代码注释!已上...
http://www.geek-workshop.com/thread-1548-1-1.html
4、MPU6050库,https://github.com/jrowberg/i2cdevlib

5、PID库:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2014-11-18 11:44:47 | 显示全部楼层
感谢分享.  
请问这是两轮自平衡小车吗?  相片中好像前端是有支撑的, 是否会把前半部份分割开?
手上也有相关的硬件, 期待楼主的资料, 让我也试试看.
回复 支持 反对

使用道具 举报

发表于 2014-11-18 15:14:41 | 显示全部楼层
好贴收藏,回头也让自己的小车站起来!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-18 19:00:59 | 显示全部楼层
Super169 发表于 2014-11-18 11:44
感谢分享.  
请问这是两轮自平衡小车吗?  相片中好像前端是有支撑的, 是否会把前半部份分割开?
手上也有相 ...

用的是三轮小车的车体,但去掉了前端支撑做成的两轮自平衡小车,本帖已有更新,请关注!
回复 支持 反对

使用道具 举报

发表于 2014-11-18 19:24:47 | 显示全部楼层
好贴,谢谢楼主
回复 支持 反对

使用道具 举报

发表于 2014-11-18 19:31:50 | 显示全部楼层
wujingyu 发表于 2014-11-18 19:00
用的是三轮小车的车体,但去掉了前端支撑做成的两轮自平衡小车,本帖已有更新,请关注!

謝謝樓主.

實在太好了, 完成手上的測試, 下一個項目就嘗試跟你的做一個.  
之前的干擾問題, 還未有時間去研究, 希望今次不會有同樣問題.

回复 支持 反对

使用道具 举报

发表于 2014-11-19 08:45:45 | 显示全部楼层
非常详尽的好帖子
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-19 08:53:56 来自手机 | 显示全部楼层
palm 发表于 2014-11-19 08:45
非常详尽的好帖子

以前在论坛上经常看到各种帖子,感觉不是缺点这个就是缺点那个,所以我把做这个低级的平衡车的有关信息都贴在这里,如果还有什么欠缺的,我尽量补充!
回复 支持 反对

使用道具 举报

发表于 2014-11-20 20:28:01 | 显示全部楼层
非常好!感谢分享!香蕉电机太差!
回复 支持 反对

使用道具 举报

发表于 2014-11-20 23:06:00 | 显示全部楼层
非常详细的,不错的
回复 支持 反对

使用道具 举报

发表于 2014-11-21 10:16:51 | 显示全部楼层
楼主您好~!
我想问一下。不用码盘可以吗?就是不用测速的用角度PID可以站起来吗?还有L298N光耦怎么接?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-21 15:59:59 | 显示全部楼层
ohyeahfy 发表于 2014-11-21 10:16
楼主您好~!
我想问一下。不用码盘可以吗?就是不用测速的用角度PID可以站起来吗?还有L298N光耦怎么接?

不用速度PID也可以站起来,但很不稳定,L298N光耦的接法,参看给出的原理图
回复 支持 反对

使用道具 举报

发表于 2014-11-21 16:03:56 | 显示全部楼层
wujingyu 发表于 2014-11-21 15:59
不用速度PID也可以站起来,但很不稳定,L298N光耦的接法,参看给出的原理图

非常感谢楼主。我的站起来了。就是MPU6050过会就会不稳定。我换了2阶互补滤波就好了。只用了一个Kd就站起来了 还很稳。就是推一下走的不稳。是因为没有加微分的原因吗?
回复 支持 反对

使用道具 举报

发表于 2014-11-21 16:05:58 | 显示全部楼层
wujingyu 发表于 2014-11-21 15:59
不用速度PID也可以站起来,但很不稳定,L298N光耦的接法,参看给出的原理图

打错了  是只用了一个比例 Kp  就能站起来。。推动小车走不稳是因为没有加微分还是积分呢?而且我也没有用您程序里的码盘测速的。如果用了那个是不是可以控制前进?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-21 16:56:18 | 显示全部楼层
本帖最后由 wujingyu 于 2014-11-21 16:59 编辑
ohyeahfy 发表于 2014-11-21 16:05
打错了  是只用了一个比例 Kp  就能站起来。。推动小车走不稳是因为没有加微分还是积分呢?而且我也没有用 ...


用Kp就能站起来,继续增大Kp就会出现摆动,这时让他有点摆动(在不倒的前提下),然后增大Kd,摆动就会消失,如果继续增大Kd,这时,小车就会抖动了,降低点Kd,你感觉满意就OK!用了测速会更稳定,不至于乱跑。控制前进后退可以通过设定平衡角度来实现
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-19 19:27 , Processed in 0.045413 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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