lotsbiss 发表于 2013-4-10 23:05:19

终于不用纠结姿态融合的问题了,MPU6050直接内置融合引擎

官方的运动库,必须通过这个才能启用MPU6050的DMP引擎(数据手册里完全不提这个东西,必须在官网注册登录后才有·····)
里面的代码是基于msp430的,不过很容易就能移植到stm32上面。
编译一下,把报错的地方改掉就OK。

唯一需要的就是得提供i2c读写接口,然后在
#define i2c_write(a, b, c, d)   !I2C_BufferWrite(d, c, b, a)
这里替换

剩下的就是照着范例文件依次调用函数
主要是这几个mpu_init();
mpu_set_sensors(INV_XYZ_GYRO | INV_XYZ_ACCEL);
mpu_configure_fifo(INV_XYZ_GYRO | INV_XYZ_ACCEL);mpu_set_sample_rate(DEFAULT_MPU_HZ);
dmp_load_motion_driver_firmware();
dmp_set_orientation(inv_orientation_matrix_to_scalar(gyro_orientation));
dmp_enable_feature(hal.dmp_features);
dmp_set_fifo_rate(DEFAULT_MPU_HZ);                       
run_self_test();
mpu_set_dmp_state(1);其中dmp_load_motion_driver_firmware()这个很重要,失败的话就没法开启DMP
run_self_test();是自检,用来消除漂移的

初始化完成后在死循环里调用dmp_read_fifo(gyro, accel, quat, &sensor_timestamp, &sensors, &more);来读取FIFO
(sensors & INV_WXYZ_QUAT)为真就说明读到四元数,默认是long,得转换成float后除以 1073741824.0f,然后就能使用了,顺序是wxyz

http://player.youku.com/player.php/sid/XNTQwOTczNDE2/v.swf

liuhengpeng123 发表于 2013-4-10 23:18:47

这么好,上位机软件去那里要的?

dxf5200 发表于 2013-4-10 23:24:25

这个资料非常棒。

qwe2231695 发表于 2013-4-10 23:45:17

靠,我说没有任何资料呢呢,终于等到mpu6050的内部隐藏大招了!!

lxl_lw 发表于 2013-4-11 00:08:07

获取的是什么数据?

wangjt1988 发表于 2013-4-11 00:19:10

楼主太给力了!   还有一个资料,gitlab上有大神上传过一个基于arduino的dmp,测试过,也可以用在stm32上
顶楼主!!!

lxl_lw 发表于 2013-4-11 00:49:49

wangjt1988 发表于 2013-4-11 00:19
楼主太给力了!   还有一个资料,gitlab上有大神上传过一个基于arduino的dmp,测试过,也可以用在stm32上
顶 ...

有学长说普通的操作方式读取的6050数据是经过“处理”的,不知道“处理了什么?”

wangjt1988 发表于 2013-4-11 08:03:06

lxl_lw 发表于 2013-4-11 00:49
有学长说普通的操作方式读取的6050数据是经过“处理”的,不知道“处理了什么?” ...

读传感器数据就经过了ad处理,还有可能经过了滤波处理   看你怎么设置了   读dmp数据就更经过处理了……

cctsao1008 发表于 2013-4-11 10:36:28

that will be great.

皮爱了西 发表于 2013-4-11 11:12:32

回去试试看。

yue621 发表于 2013-4-11 11:17:19

牛叉啊!隐藏了这么好的东东~!

zhang1028kun 发表于 2013-4-11 12:55:01

这个资料真的不错啊

蓝海de梦 发表于 2013-4-11 13:43:41

上位机哪找的?

lotsbiss 发表于 2013-4-11 15:36:10

wangjt1988 发表于 2013-4-11 00:19 static/image/common/back.gif
楼主太给力了!   还有一个资料,gitlab上有大神上传过一个基于arduino的dmp,测试过,也可以用在stm32上
顶 ...

那个资料我看过,应该也是某个版本的官方库移植的

Name_006 发表于 2013-4-11 16:02:57

哇塞 果然不错研究研究                                                                                                            

seeyou2013 发表于 2013-4-11 16:11:13

学习啊,,

sunliezhi 发表于 2013-4-11 17:40:52

收藏!!!!

lotsbiss 发表于 2013-4-12 14:22:23

Name_006 发表于 2013-4-11 16:02 static/image/common/back.gif
哇塞 果然不错研究研究                                                                              ...

没短消息权限,我就在这说吧
移植时注意MPU6050的i2c的地址(st.hw->addr),有0x68和0x69这2种,如果是网上的某个stm32模拟i2c接口,地址还得左移一位,就是0xD0和0xD2

Name_006 发表于 2013-4-12 14:35:13

lotsbiss 发表于 2013-4-12 14:22 static/image/common/back.gif
没短消息权限,我就在这说吧
移植时注意MPU6050的i2c的地址(st.hw->addr),有0x68和0x69这2种,如果是网 ...

恩 这都没问题 前面的初始化 都完成了读写 前面的业没什么错误基本驱动都是用了好久的    但就是 写入memory 的那块我试了 1字节1字节写 能写进去 读出来也对而且 其他也return 0
但是最后 fifo没数据就是16字节 16字节写写入的跟读出的不一致 导致校验那一步return 2 ,,,。。。。。

lotsbiss 发表于 2013-4-12 14:48:15

Name_006 发表于 2013-4-12 14:35 static/image/common/back.gif
恩 这都没问题 前面的初始化 都完成了读写 前面的业没什么错误基本驱动都是用了好久的    但就是 写 ...

想起来了,struct gyro_reg_s 里得删掉
    unsigned char accel_cfg2;
    unsigned char lp_accel_odr;
    unsigned char accel_intel;
否则后面赋值时地址可能会错位

sedulity11 发表于 2013-4-12 18:40:27

好资料,研究下

chenjiawei7 发表于 2013-4-13 22:05:59

怎么用?用的什么编译器?

Elec_Ramble 发表于 2013-4-13 22:48:37

Mark
来自:amoBBS 阿莫电子论坛 Windows Phone 7 客户端

daming326 发表于 2013-4-13 23:59:13

太深奥,不懂

kexiao 发表于 2013-4-14 15:06:07

这个给力啊

炎阳 发表于 2013-4-15 10:57:46

终于啊。天上掉肉饽饽了。楼主太给力。顶{:lol:}{:lol:}{:lol:}

jiangjian1219 发表于 2013-4-15 15:46:40

楼主上位机也发一个.

残忆视觉 发表于 2013-4-18 12:20:18

不懂,也得顶一个

七弦桐 发表于 2013-4-18 16:11:59

应该打开哪个文件啊 怎么用~

sailing8 发表于 2013-4-18 21:52:28

好资料,研究下,貌似下不了,郁闷。。。

sailing8 发表于 2013-4-18 22:00:55

可以下了,是服务器不很稳定,真的是好资料,值得研究,非常感谢楼主分享!

jslx 发表于 2013-4-19 16:11:09

楼主这玩意用什么软件打开啊?加压后不知道怎么办了

xukkkkkk 发表于 2013-4-19 16:36:33

楼主搞到什么文档说明没有,一个功能也搞的这么神秘,inv的说明书的确不详细

lotsbiss 发表于 2013-4-19 20:12:05

xukkkkkk 发表于 2013-4-19 16:36 static/image/common/back.gif
楼主搞到什么文档说明没有,一个功能也搞的这么神秘,inv的说明书的确不详细 ...





文档我就这2个

tusson 发表于 2013-4-19 20:27:42

先顶一下

cai_mouse 发表于 2013-4-19 23:22:34

谢谢分享。

firewise 发表于 2013-4-20 13:54:49

不错研究研究{:smile:}

canopen 发表于 2013-4-20 14:40:17

还带隐藏技能的、、、、、、、、、、、

zouyf12 发表于 2013-4-20 22:20:19

MAKE收藏

shang445751741 发表于 2013-4-21 00:46:08

mark啦   楼主好人啊

kuailesyj 发表于 2013-4-21 05:58:51

请问这一部分代码怎么处理的,为什么总是error:expected an expression

Mrdingding 发表于 2013-4-21 16:25:04

这里帮我解决了太多问题,感谢阿莫论坛{:smile:}

Gost 发表于 2013-4-21 20:24:28

上位机亮爆了,资料弄来看看先

提线木偶 发表于 2013-4-21 20:57:32

学习了

rantingting 发表于 2013-4-21 21:28:15

最酷的是上位机啊,还请LZ大侠分享啊,不然就是有数据也不能搞这么好啊

wscjun 发表于 2013-4-22 12:51:03

谢谢分享

doudoumf 发表于 2013-4-23 09:51:01

wangjt1988 发表于 2013-4-11 00:19 static/image/common/back.gif
楼主太给力了!   还有一个资料,gitlab上有大神上传过一个基于arduino的dmp,测试过,也可以用在stm32上
顶 ...

你有那个移植STM32的程序么,可以分享下啊!{:smile:}

doudoumf 发表于 2013-4-23 09:54:16

Name_006 发表于 2013-4-12 14:35 static/image/common/back.gif
恩 这都没问题 前面的初始化 都完成了读写 前面的业没什么错误基本驱动都是用了好久的    但就是 写 ...

我也是写入之后,也不能够从FIFO中读出数据,请问你是怎么解决的,求帮助

whyjld 发表于 2013-4-23 10:14:11

学习,感谢楼主

Name_006 发表于 2013-4-23 10:22:34

doudoumf 发表于 2013-4-23 09:54 static/image/common/back.gif
我也是写入之后,也不能够从FIFO中读出数据,请问你是怎么解决的,求帮助 ...

我还没弄出来主要是写入 memory 那部分数据写入不成功   驱动是没问题的不知道怎么写不进去   写进去跟读出来的数据不一样

孤独飞行 发表于 2013-4-23 11:59:27

想移植到STM8上,不知道行不行~

sz_works 发表于 2013-4-23 14:06:16

goodgood

doudoumf 发表于 2013-4-23 15:04:13

Name_006 发表于 2013-4-23 10:22 static/image/common/back.gif
我还没弄出来主要是写入 memory 那部分数据写入不成功   驱动是没问题的不知道怎么写不进去   写进去 ...

我移植到LPC2131,写进去了,读出来也对,就是读不出FIFO,╮(╯▽╰)╭

yiyamala 发表于 2013-4-23 17:01:41

怎么移植到51上啊

甲方乙方 发表于 2013-4-24 09:34:00

到底什么是融合呀

ZMHCISS 发表于 2013-4-24 09:59:55

很好,谢谢

rifjft 发表于 2013-4-24 11:05:42

好资料,顶起

甲方乙方 发表于 2013-4-24 16:03:42

好好研究下

keysmith 发表于 2013-4-24 21:58:44

自己就带融合算法???研究一下看看!

qwe2231695 发表于 2013-4-25 01:05:04

用iic写入DMP固件 这个部分真蛋疼。~有大侠用stm32成功了吗。 ps:这个历程写的真复杂。各种宏定义

Mxj 发表于 2013-4-25 10:19:16

Name_006 发表于 2013-4-23 10:22 static/image/common/back.gif
我还没弄出来主要是写入 memory 那部分数据写入不成功   驱动是没问题的不知道怎么写不进去   写进去 ...

我也是FIFO没有数据,求大神指点呀!

zhanghua315 发表于 2013-4-25 10:58:37

MARK 不错

落叶随风 发表于 2013-4-25 12:26:46

这个资料实在是太棒了,谢谢楼主

jiangjian1219 发表于 2013-4-25 14:53:48

qwe2231695 发表于 2013-4-25 01:05 static/image/common/back.gif
用iic写入DMP固件 这个部分真蛋疼。~有大侠用stm32成功了吗。 ps:这个历程写的真复杂。各种宏定义 ...

兄弟,我也遇到了 ,正在痛苦中..

zhousf85 发表于 2013-4-25 15:00:03

真的很难看的懂,跟别说移植了。

yh1036164041 发表于 2013-4-27 10:45:22

楼主,你那个程序适用于stc89c52吗?

yzaka 发表于 2013-4-27 15:22:13

i love you{:lol:}

wickedseason 发表于 2013-4-28 19:21:46

LZ能把上位机分享一下么- -

Andre.Gorz 发表于 2013-4-29 06:49:53

好东西当然要收藏着嘿嘿。

可与愉快谔谔 发表于 2013-4-29 08:46:34

姿态融合,有点深奥

凌海滨 发表于 2013-4-29 09:19:57

顶,上位机不错

~just_yy 发表于 2013-5-6 21:58:11

为什么这么好的功能不写进datasheet里面呢?

一棵葱 发表于 2013-5-6 22:23:25

楼主好人,我来看看!!

cai_mouse 发表于 2013-5-6 23:03:34

请问这个软件用到IRQpin脚吗

cai_mouse 发表于 2013-5-6 23:04:09

好像跟github上的DMP很像的

windless 发表于 2013-5-7 17:55:27

楼主能把移植的stm32文件发布一下学习学习么?

ljc2012 发表于 2013-5-7 22:43:41

mark                        

ljc2012 发表于 2013-5-7 23:35:04

heh 如果本来就是用的MSp430 那不很爽啊。。。。{:handshake:}不过习惯了用IAR,这CCS软件编写的,还是压力山大,不过谢谢了,先去研究去了

CrystalShell 发表于 2013-5-8 09:21:32

wangjt1988 发表于 2013-4-11 00:19 static/image/common/back.gif
楼主太给力了!   还有一个资料,gitlab上有大神上传过一个基于arduino的dmp,测试过,也可以用在stm32上
顶 ...

gitlab上有大神上传过一个基于arduino的dmp……大神,求网址,我玩的是Arduino

chenjy 发表于 2013-5-8 13:16:56

经过dmp后的数据,我们得到了哪些值啊 是不是和四元数算法最后得出的值是一样啊????

残忆视觉 发表于 2013-5-9 16:44:52

楼主,能不能移植到飞思卡尔单片机上啊,XSDG128,官网地址没查到啊,给发个链接吧,看看去

xixiangfeng 发表于 2013-5-12 23:58:57

非常好的资料,谢谢LZ。很难找到官方的motion app。移植了来自于Arduino中的DMP,但是有问题,而且移植起来累死了。

问乐寻音 发表于 2013-5-13 09:09:22

好东西啊,果断顶!!!

mcu1234mcu 发表于 2013-5-15 11:07:03

帅呆了      

mcu1234mcu 发表于 2013-5-15 16:21:37

kuailesyj 发表于 2013-4-21 05:58 static/image/common/back.gif
请问这一部分代码怎么处理的,为什么总是error:expected an expression

我的也是这个问题,不知道什么原因。

mcu1234mcu 发表于 2013-5-16 09:34:04

lotsbiss 发表于 2013-4-19 20:12 static/image/common/back.gif
文档我就这2个


请问这个函数是什么意思?

reg_int_cb(void (*cb)(void), unsigned char port, unsigned char pin)

王者归来 发表于 2013-5-16 10:02:13

先下载来看看,感谢楼主咯

mcu1234mcu 发表于 2013-5-16 10:18:37

本帖最后由 mcu1234mcu 于 2013-5-16 15:36 编辑

已解决         

mcu1234mcu 发表于 2013-5-16 15:35:48

版主你们用的开发环境是MDK还是IAR,哪个版本的?我移植到IAR 中这个函数int mpu_init(struct int_param_s *int_param)会出现问题,还有就是Error while running C/C++ Compiler 这个问题。
移植到MDK中
static struct gyro_state_s st = {
    &reg,//.reg = &reg,
    &hw,//.hw = &hw,
    &test//.test = &test
};
这个会出现问题,请问楼主应该怎么修改,谢谢了。

kai1011 发表于 2013-5-16 17:39:59

正需要这个!谢谢分享

kai1011 发表于 2013-5-16 23:12:28

CrystalShell 发表于 2013-5-8 09:21 static/image/common/back.gif
gitlab上有大神上传过一个基于arduino的dmp……大神,求网址,我玩的是Arduino ...

应该是这个吧
https://github.com/jrowberg/i2cdevlib/tree/master/Arduino/MPU6050

mcu1234mcu 发表于 2013-5-17 10:57:36

kuailesyj 发表于 2013-4-21 05:58 static/image/common/back.gif
请问这一部分代码怎么处理的,为什么总是error:expected an expression

直接改为
    0x75,//.who_am_i       = 0x75,
    0x19,//.rate_div       = 0x19,
    0x1A,//.lpf            = 0x1A,
这个形式就可以了,gun c和标准C差别比较大。

mcu1234mcu 发表于 2013-5-17 11:00:08

mcu1234mcu 发表于 2013-5-15 16:21 static/image/common/back.gif
我的也是这个问题,不知道什么原因。

已解决      

mcu1234mcu 发表于 2013-5-17 11:00:31

mcu1234mcu 发表于 2013-5-16 15:35 static/image/common/back.gif
版主你们用的开发环境是MDK还是IAR,哪个版本的?我移植到IAR 中这个函数int mpu_init(struct int_param_s...

已解决   

pan020503 发表于 2013-5-17 15:43:45

mcu1234mcu 发表于 2013-5-17 11:00 static/image/common/back.gif
已解决

亲,你是怎么解决这个问题的?可不可以发程序上来看看?万分感谢

yssdsz 发表于 2013-5-18 20:44:43

mark~~~~{:smile:}

MCU_fans 发表于 2013-5-19 03:36:09

天哪!!!!

gadwgdsk77gg 发表于 2013-5-19 16:36:47

Name_006 发表于 2013-4-23 10:22 static/image/common/back.gif
我还没弄出来主要是写入 memory 那部分数据写入不成功   驱动是没问题的不知道怎么写不进去   写进去 ...

我的也是,程序初始化到
result =
       dmp_load_motion_driver_firmware();
就出错了。就如看,把错误信息发回来,发现是写到mem的内容和读出来的不一样。
if (mpu_write_mem(ii, this_write, (unsigned char*)&firmware))
      return -2;
if (mpu_read_mem(ii, this_write, cur))
   return -3;

这里一个写一个读,但是执行 if (memcmp(firmware+ii, cur, this_write))时就发现写入和读出不一样
写入第一个16Bytes和dmp_memory定义一致
00 10 00 00 70 00 00 00 00 24 00 00 00 02 00 03 00 00
但是读出的是
00 10 00 00 00 00 00 00 68 00 00 00 00 00 00 00 00 00
已经调了两天了,还是解决不了问题。
用的i2c是内部的,以前不用DMP的时候都没有问题,用来做别的大项目也没有发现问题。我想应该不会i2c的问题。

gadwgdsk77gg 发表于 2013-5-19 16:39:17

楼主大哥,可否帮忙解决一下问题
程序初始化到
result =
         dmp_load_motion_driver_firmware();
就出错了(返回-2)。进去看,把错误信息发回来,发现是写到mem的内容和读出来的不一样。
if (mpu_write_mem(ii, this_write, (unsigned char*)&firmware))
      return -2; //我改的,上面的-2是原本的
if (mpu_read_mem(ii, this_write, cur))
   return -3;//我改的

这里一个写一个读,但是执行 if (memcmp(firmware+ii, cur, this_write))时就发现写入和读出不一样
写入第一个16Bytes和dmp_memory定义一致
00 10 00 00 70 00 00 00 00 24 00 00 00 02 00 03 00 00
但是读出的是
00 10 00 00 00 00 00 00 68 00 00 00 00 00 00 00 00 00
已经调了两天了,还是解决不了问题。
用的i2c是内部的,以前不用DMP的时候都没有问题,用来做别的大项目也没有发现问题。我想应该不会i2c的问题。

lotsbiss 发表于 2013-5-19 16:47:58

gadwgdsk77gg 发表于 2013-5-19 16:39 static/image/common/back.gif
楼主大哥,可否帮忙解决一下问题
程序初始化到
result =


这个真不清楚···
我用的时候没有在这卡过
都是直接就过去了··
页: [1] 2 3 4
查看完整版本: 终于不用纠结姿态融合的问题了,MPU6050直接内置融合引擎