STC12做的平衡车,使用mpu6050DMP,开源。
本帖最后由 老魏 于 2015-6-8 10:20 编辑13年就想做平衡车,拖延症的毛病,让我拖到了今天。这个周末调整的总算是能前行,后退,转弯了。行进中依然有不稳的情况,先共享出来吧!大家指导一下。本人是业余爱好,PID这块始终是没搞太懂,感觉很多时候都是无从下手。说一下小车的配置。电机使用的是Namiki直流减速电机,12v 80:1减速 输出120转。电机自带带码盘,一个码盘两个光电管,每转2个脉冲,用码盘就能判断电机转动的方向。
单片机用stc12c5608,传感器用MPU6050,分别尝试了两种方法,1:读取一个轴的角速度,和一个轴的加速度,依赖重力计算与水平面的夹角,使用互补滤波方法滤波。2:直接使用DMP方式读取,采用pitch角,然后再读取角速度,不用滤波。两个的效果相差不大。
电路图。
在网上找到的DMP的例子多数是STM32的,51的很少,能用的就更少了,这里代码开源,希望更多人使用,也能帮忙指出程序中的问题。程序自认为写的算工整的。各个模块也做了分离。有很好的移植性。
通讯使用24L01,使用2节18650电池,用3r33升压到12v。自己在嘉立创打的板,板上有MPU6050的焊盘,但是在测试过程中烧掉了,焊接技术不好,再焊上去的总是不能正常读写。所以使用了外接的模块。
电机驱动用L298N。
电机,联轴器,轮子。这个电机的轴太长,联轴器的螺丝没法落在轴的缺口上,所以自己在螺丝位置磨了个缺口。
码盘用LM339获得标准的0、1送给单片机。
不用速度环能够很稳定的站立。
http://www.tudou.com/programs/view/zJsoOGWNUw8/
用了速度环,控制前进后退,就不是太稳定。很羡慕那些能满世界飞跑的平衡车。
http://www.tudou.com/programs/view/ZQeRhoAt0BI/
附上程序。
怎么贴视频啊?为什么我的都是链接呢? {:smile:}{:smile:}{:smile:}{:smile:}{:smile:} 顶,支持一下。 不错不错,赞一个 之前也做过平衡车,尝试移植dmp库到51失败,用的滤波,看你这个效果不错,赞一个, {:victory:}{:lol:}{:z支持!y:} 谢谢分享 已经很不错了.顶一个. 支持楼主。 应该让楼主女儿也上个镜。 mpu6050要用到PID算法吗 //转换成四元数
quartf = (float)(((long)dmpdatas << 24) | ((long)dmpdatas << 16) | ((long)dmpdatas << 8) | dmpdatas)/1073741824.0f;
quartf = (float)(((long)dmpdatas << 24) | ((long)dmpdatas << 16) | ((long)dmpdatas << 8) | dmpdatas)/1073741824.0f;
quartf = (float)(((long)dmpdatas << 24) | ((long)dmpdatas << 16) | ((long)dmpdatas << 8) | dmpdatas)/1073741824.0f;
quartf = (float)(((long)dmpdatas << 24) | ((long)dmpdatas << 16) | ((long)dmpdatas << 8) | dmpdatas)/1073741824.0f;
quar_add=quartf*quartf+quartf*quartf+quartf*quartf+quartf*quartf;
if(quar_add<0.99 || quar_add>1.01 ) return;
*pangel=asin(-2 * quartf * quartf + 2 * quartf* quartf)* 57.3/2.4;
I2C_reads(GYRO_YOUT_H ,7,&gyroxh);
I2C_reads(GYRO_YOUT_H ,7,&gyroxl);
gyrox=((int)gyroxh<<8|gyroxl);
*pgyrox=(float)(gyrox/16.384);
楼主你好,首先多谢你的DMP移植程序!但我有一点不明白 *pangel=asin(-2 * quartf * quartf + 2 * quartf* quartf)* 57.3/2.4;为什么要再除2.4,2.4是什么含义??? 爱新觉罗_极刚霸 发表于 2015-7-30 11:29
//转换成四元数
quartf = (float)(((long)dmpdatas
看了一遍,真没留意到这里为什么多了个/2.4,看了一下自己的程序,不知什么时间多的这个部分,可以确认是错误的。应该删去。 赞楼主专研并分享的精神! 老魏 发表于 2015-7-30 11:52
看了一遍,真没留意到这里为什么多了个/2.4,看了一下自己的程序,不知什么时间多的这个部分,可以确认是 ...
多谢啦~楼主很厉害!51的DMP移植找了好久!! LZ你好~我上次看到网上STC12c5a60s2的DMP移植,现在看到你的,发现不错,程序相差不大==可为什么 用到我的stc12c5a60S2 单片 就不行了~加载到运动裤配置出不来,而且6050的灯也灭了!!可能是什么原因~ "6050的灯也灭了"?? 6050的灯是怎么回事?如果是6050的模块,那个灯应该是电源指示灯啊!如果灯灭了那就意味着断电了!感觉你应该是接错线了。反正4条线,两条电源 + -,两条IIC信号线。6050似乎没想出那个地方合适控制LED的。所以还是检查一下接线吧! 老魏 发表于 2015-7-31 09:18
"6050的灯也灭了"?? 6050的灯是怎么回事?如果是6050的模块,那个灯应该是电源指示灯啊!如果灯灭了那就意 ...
实在感谢 楼主,问题老师帮我已经解决了~~~我把2.4 去掉 不过 也只能读到 80度 。往后面好像就不行了~~~不知道 能不能改进~~万分 感谢楼主的分享~~~~ 参数整定有什么技巧么?? 顶,赞赞赞! 楼主,我想请教一个问题,我移植DMP读取数据是没问题的,但是每次重启之后,不管怎么放置都默认是水平的,是不是我哪里配置的问题!!!!! 涵潇舒雅 发表于 2015-8-13 08:26
楼主,我想请教一个问题,我移植DMP读取数据是没问题的,但是每次重启之后,不管怎么放置都默认是水平的, ...
嗯,我回去再试着读一下数据。我的系统没有做复位的功能,所以每次都是重上电,感觉无论开始是什么角度,都能正确识别出水平面,但是在上电开始的几十秒内,读数会偏大一些。 老魏 发表于 2015-8-13 14:28
嗯,我回去再试着读一下数据。我的系统没有做复位的功能,所以每次都是重上电,感觉无论开始是什么角度, ...
我上传一下我的工程, 赞楼主专研并分享的精神!已经很不错了 不错不错,赞一个 {:smile:},楼主弄稳定了,我做一个小车上班用, 不错,不错,改天做个玩玩{:smile:} 楼主 留个方式呗,我也在做程序遇到了点问题 我是个单片机新手,这两天在论坛上看到好多帖子都提到DMP,我我想知道这是什么东西?是官方库一类的吗?还是开源代码管理软件之类的? 阿伟 发表于 2015-10-13 09:20
我是个单片机新手,这两天在论坛上看到好多帖子都提到DMP,我我想知道这是什么东西?是官方库一类的吗?还 ...
算是个官方库吧,有了dmp,芯片就自带处理功能了。 老魏 发表于 2015-10-13 15:17
算是个官方库吧,有了dmp,芯片就自带处理功能了。
那请问我在哪里能下再到芯片对应的DMP呢? 似乎是下载不到,官方没有开放使用。现在大家在用的DMP都是别人从成品中读取出来的内容,所以在程序中都是一大堆数字。 研究下,我也想做一个 酷,楼主做了很多人想做而做不了的事。 学习学习~~~ 很好的大盆友的玩具,学习了 读DMP不是上电的时候确定为0角度嘛,那岂不是要先把车摆在平衡位置再上电? qrytian 发表于 2015-11-13 13:23
读DMP不是上电的时候确定为0角度嘛,那岂不是要先把车摆在平衡位置再上电? ...
不是,DMP怎么找0的我不是很明白,但是上电后 能自动检测到水平的。至于为啥,我也不懂,猜测是用重力校正的。 顶贴,在下只是调试过姿态传感器,还真没去做过平衡类的实验,试试!!!!
页:
[1]