极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 25664|回复: 7

MPU6050 DMP 树莓派驱动

[复制链接]
发表于 2014-1-11 22:24:01 | 显示全部楼层 |阅读模式
本帖最后由 jytong 于 2014-1-13 20:09 编辑

经朋友介绍发现了树莓派,觉得挺好玩,想用它做个自平衡小车玩,可又什么都不懂,
只能慢慢学习,比较了一气看大家都介绍 MPU6050 不错,各种搜索发现没有树莓派上的
驱动库,好在自己稍微懂一点编程,就动手从 Embedded MotionDriver 5.1 移植
了一份过来,加了个 C++ 的简单接口,感觉用起来挺方便,原有的 C 接口也保留了。
由于是门外汉,基本概念都是刚学习的还模糊不清,还请各位朋友多多指正。

下一步开始调怎么能平衡,好多都不懂,随时来请教。

这个库我也很会继续维护尽点微薄之力,链接:https://github.com/jytong/mpu6050Pi

随时更新,需要的请去 githu 下载吧,上面的地址。
回复

使用道具 举报

发表于 2014-1-12 12:41:49 | 显示全部楼层
这个要顶下,不知道LZ是否在RPI上实际测试过呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-12 13:01:58 | 显示全部楼层
呵呵,试了一下。包里面example目录下是个测试,可以直接编译了跑。
cd example
./configure
make
sudo ./dmptest

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

发表于 2014-1-12 15:35:42 | 显示全部楼层
楼主好厉害,不知道楼主哪里参考的手册用c++写的驱动库和接口,求指教......
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-12 17:50:47 | 显示全部楼层
本帖最后由 jytong 于 2014-1-12 17:58 编辑

我主要是看的这几个:
http://www.invensense.com/developers/index.php?_r=downloads&ajax=dlfile&file=Embedded_MotionDriver_v5.1.zip
http://invensense.com/mems/gyro/documents/RM-MPU-6000A.pdf
http://www.invensense.com/mems/gyro/documents/PS-MPU-6000A-00v3.4.pdf


我这里面主要包括两部分,

1.把 Embedded_MotionDriver_v5.1 移植到树莓派上。

  这是它目前的最新版本了,本来以为能直接用,下载下来一看是用在 msp430 上的,我也不知道是个什么玩意,
  树莓派上I2C接口是i2c-dev库,所以只能移植了,用 __MOTION_DRIVER_TARGET_RASPBERRY_PI 宏括住的都是
  移植的代码,挺繁琐。还有一点点自己测试需要用到的小扩展。

2.增加C++接口。

  这部分是完全自己做的。原驱动是用C语言开发的,C语言面向过程,写起复杂的逻辑太累了,而且要使用者实时
  处理。而我想搞的系统还要做许多其他的事情,比如测距、语音识别、图像识别、网络交互、控制其他的东西等,
  而且还可能有耦合,所以要各个模块都要有足够的自决能力,超出一定的阀值、或者突发事件、或者需要交互,才
  要控制模块调度处理。原驱动接口不适用,需要更高级的接口,所以只能自己搞一个,由于目前需求不明确(还都
  是瞎想),需要定义尽量宽泛,适用各种需求,所以这个接口做了三个模式:
  Push、Pull、Realtime:

  Push  是驱动模块向注册的回调函数实时推送采集的数据,通过对回调函数的扩展,可以进行一定的统计、自决和
          事件定义、上报。
  Pull   是拉模式,主程序根据需要随机时从驱动拉当前数据,得到的一定是当前最新数据。
  Realtime 是直接从设备拉数据了,不过必须实时的拉数据,慢了得到的数据可能就不是最新的了,而且太慢了还会
           使设备FIFO溢出,目前还只有测试使用这个模式。

  前两种模式都需要驱动有自己的线程,但是数据交换需要互斥锁,高频率的系统锁在树莓派这种小玩意上代价太大
  了,何况 MPU6050 只是系统中的一个小模块,所以想到用三个数据槽,既可以避免互斥锁的使用还可以保证数据
  的实时性。就是代码中的 class __DataSwap 这个玩意,代码里画了个简单的图说明数据流转流程。

3.里面有个测试,在 example 目录下,是我测试用的,也扔在里面了。

  大概测了一下,100Hz采样率接口的消耗大概是 2% CPU,感觉可以接受,目前暂时这样,开始考虑玩其他的东西
  了,比如调速什么的,随着需求的增加和发现问题,再不断的维护这个接口。
回复 支持 反对

使用道具 举报

发表于 2014-1-22 12:26:18 | 显示全部楼层
这个非常有参考价值,
忙过这段,趁春节放假要好好研究下
回复 支持 反对

使用道具 举报

发表于 2014-4-7 09:41:51 | 显示全部楼层
楼主好人,这个帮我大忙了。发现在我的树莓上面跑不起来,mpu_set_lpf failed 设置低通滤失败,楼主帮忙查下什么原因,十分感谢。
回复 支持 反对

使用道具 举报

发表于 2015-1-11 12:27:24 | 显示全部楼层
好,多谢分享啦
回复 支持 反对

使用道具 举报

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

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

Archiver|联系我们|极客工坊

GMT+8, 2024-4-24 01:11 , Processed in 0.043512 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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