搜索
bottom↓
回复: 26

【代码发布】适配MK60系列的MPU9150_DMP工程

[复制链接]

出0入0汤圆

发表于 2014-2-15 11:52:39 | 显示全部楼层 |阅读模式
本帖最后由 Daniel_Lau 于 2014-2-16 11:22 编辑

代码移植自 论坛里 _spetrel 的STM32版本。平台是野火的MK60FX/DN CORE

全部测试完毕。之间遇到的问题在众多MPU6050 DMP里也都有提过,都进行了修正。

大家可以测试一下,其他的硬件平台不敢保证,不过理论上是可以用到所有MK60平台上的。

希望大家一起完善一下。上位机坛子里有很多,大家可以试试效果如何。有问题在下面反馈就行。



附件怎么发啊.....先贴出BaiDu网盘的链接吧

http://pan.baidu.com/s/1hqwYy4s


UPDATE  1# : 在main.c里面  定义的 run_self_test() 函数,其中  if (result == 0x3) 这里应该是0x3,上传的代码是0x7,但0x7的话自检不会自我纠正偏移,大家自己更改一下吧



  1. static void run_self_test(void)
  2. {
  3.     int result;
  4. // char test_packet[4] = {0};
  5.     long gyro[3], accel[3];

  6.     result = mpu_run_self_test(gyro, accel);
  7.     if (result == 0x3) {
  8.         /* Test passed. We can trust the gyro data here, so let's push it down
  9.          * to the DMP.
  10.          */
  11.         float sens;
  12.         unsigned short accel_sens;
  13.         mpu_get_gyro_sens(&sens);
  14.         gyro[0] = (long)(gyro[0] * sens);
  15.         gyro[1] = (long)(gyro[1] * sens);
  16.         gyro[2] = (long)(gyro[2] * sens);
  17.         dmp_set_gyro_bias(gyro);
  18.         mpu_get_accel_sens(&accel_sens);
  19.         accel[0] *= accel_sens;
  20.         accel[1] *= accel_sens;
  21.         accel[2] *= accel_sens;
  22.         dmp_set_accel_bias(accel);
  23.                 printf("setting bias succesfully ......\n");
  24.     }
  25.         else
  26.         {
  27.                 printf("bias has not been modified ......\n");
  28.         }

  29.     /* Report results. */
  30. //    test_packet[0] = 't';
  31. //    test_packet[1] = result;
  32. //    send_packet(PACKET_TYPE_MISC, test_packet);
  33. }
复制代码



补张效果图


本帖子中包含更多资源

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

x

出0入0汤圆

 楼主| 发表于 2014-2-15 12:43:14 | 显示全部楼层
1L自己顶,人好少呀~

出0入0汤圆

发表于 2014-2-15 12:58:03 | 显示全部楼层
谢谢楼主的分享

出0入0汤圆

发表于 2014-2-16 06:08:57 来自手机 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2014-2-16 22:52:28 | 显示全部楼层

谢谢分享

出0入0汤圆

发表于 2014-2-28 01:25:50 | 显示全部楼层
飞思卡尔K60的驱动程序?

出0入0汤圆

 楼主| 发表于 2014-2-28 12:10:35 | 显示全部楼层
SHIYOULAN 发表于 2014-2-28 01:25
飞思卡尔K60的驱动程序?

嗯,是的

出0入0汤圆

发表于 2014-3-3 20:50:51 | 显示全部楼层
请问楼主:使用DMP功能输出的四元数数据是做过滤波处理的吗?类似互补滤波或卡尔曼滤波那种。

出0入0汤圆

 楼主| 发表于 2014-3-4 13:00:21 | 显示全部楼层
wangyeqing333 发表于 2014-3-3 20:50
请问楼主:使用DMP功能输出的四元数数据是做过滤波处理的吗?类似互补滤波或卡尔曼滤波那种。 ...

DMP输出的四元数,是经过芯片内部处理的了。用来计算Roll, Pitch都是很稳定的。但是Yaw不能直接使用,还需要根据AHRS或者IMU的算法来进行融合

出0入0汤圆

发表于 2014-3-4 19:02:32 | 显示全部楼层
虽说不懂,但看起来很牛叉的样子

出0入0汤圆

 楼主| 发表于 2014-3-4 22:29:40 | 显示全部楼层
本帖最后由 Daniel_Lau 于 2014-3-4 22:33 编辑

UPDATE  1# : 在main.c里面  定义的 run_self_test() 函数,其中  if (result == 0x3) 这里应该是0x3,上传的代码是0x7,但0x7的话自检不会自我纠正偏移,大家自己更改一下吧



UPDATE  2# :  关于 run_self_test()这个函数,它的作用是自检并修正偏差,举个例子。假设你的MEMS放置在真实的水平面上,自检过后MEMS输出的是以该水平面为参考的PITCH ROLL,若不是放置在真实水平环境中,运行自检函数后,系统会进行纠正,并以MEMS的实际物理位置为参考系输出PITCH ROLL。



UPDATE   3# :   关于YAW,也就是航偏角我还没有处理。这个需要开启内部的磁强计来进行YAW的融合。算法稳定后会更新下一版本的工程。说一下 DEFAULT_MPU_HZDMP_SAMPLE_RATE(这个在inv_mpu_dmp_motion_driver.c里面定义),目前快速的搭配是 200Hz : 200Hz, 请不要小于50Hz, 并且保证前者可以整除后者。



UPDATE   4# :   还是关于YAW,参照了坛子里面AHRSUpdate和IMUUpdate的算法,也就是 @zksniper 的版本,进行过测试。但在电磁环境不好的地方,基本就无法测出YAW了,干扰很严重的。而且随时得进行椭圆矫正,这就是一项很大的工程了。有兴趣的坛友可以再开发吧。


出0入0汤圆

发表于 2014-3-24 12:44:28 | 显示全部楼层
LZ  网盘怎么没了?

出0入0汤圆

发表于 2014-4-28 16:34:41 | 显示全部楼层
楼主啊,网盘跪了

出0入0汤圆

发表于 2014-4-28 16:36:43 | 显示全部楼层

楼主不见咯,兄弟能发一下楼主的代码吗 251407133@qq.com 多谢

出0入0汤圆

发表于 2014-4-28 21:54:07 | 显示全部楼层
whiteqqy 发表于 2014-4-28 16:36
楼主不见咯,兄弟能发一下楼主的代码吗  多谢

我也没下载,找楼主吧

出0入0汤圆

 楼主| 发表于 2014-4-30 18:31:28 | 显示全部楼层
重新开放链接了。DMP的效果真的很一般,望大家自己斟酌,其效果确实不如AHRS

http://pan.baidu.com/s/1o6BbzYE

出0入0汤圆

 楼主| 发表于 2014-4-30 18:32:37 | 显示全部楼层
whiteqqy 发表于 2014-4-28 16:36
楼主不见咯,兄弟能发一下楼主的代码吗  多谢

已重新分享

出0入0汤圆

 楼主| 发表于 2014-4-30 18:33:00 | 显示全部楼层
bygreencn 发表于 2014-4-28 21:54
我也没下载,找楼主吧

已重新分享

出0入0汤圆

发表于 2014-4-30 20:47:16 | 显示全部楼层

多谢楼主~

出0入0汤圆

发表于 2014-5-9 09:01:26 | 显示全部楼层
链接失效了,能帮忙发邮箱里吗??1550206001@qq.com

出0入0汤圆

 楼主| 发表于 2014-5-9 12:16:44 | 显示全部楼层
Yanise 发表于 2014-5-9 09:01
链接失效了,能帮忙发邮箱里吗??

整理网盘的时候不下心清掉了,再来

http://pan.baidu.com/s/1eQ8Aq5O

出0入0汤圆

发表于 2014-5-12 14:38:45 | 显示全部楼层
Daniel_Lau 发表于 2014-3-4 22:29
UPDATE  1# : 在main.c里面  定义的 run_self_test() 函数,其中  if (result == 0x3) 这里应该是0x3,上传 ...

楼主你好,关于你提到的第二点,是说硬件无论摆放成任意位置,经过自检之后都会以这个任意位置为初始坐标吗?

出0入0汤圆

 楼主| 发表于 2014-5-13 17:54:59 | 显示全部楼层
a44416434 发表于 2014-5-12 14:38
楼主你好,关于你提到的第二点,是说硬件无论摆放成任意位置,经过自检之后都会以这个任意位置为初始坐标 ...

对的,DMP会把这个位置设为坐标系原点,关掉自检就行了

出0入0汤圆

发表于 2014-5-14 08:35:12 | 显示全部楼层
Daniel_Lau 发表于 2014-5-13 17:54
对的,DMP会把这个位置设为坐标系原点,关掉自检就行了

但根据我实际操作,我将板子摆成任意角度来进行初始化时,初始坐标并不以水平坐标系或者机体坐标系来作为初始坐标,而是在水平坐标系和机体坐标系之间的一个平分角度中建立了初始坐标,我想问一下您实际操作是是否也像我这样还是就是以那个任意角度来建立初始坐标。如果你是输入后者,那我就怀疑是我DMP移植时出了问题了。

出0入0汤圆

发表于 2014-5-14 13:06:05 | 显示全部楼层
楼主,链接怎么会失效了?

出0入0汤圆

发表于 2014-5-14 13:06:51 | 显示全部楼层
楼主,链接怎么会失效了?

出0入0汤圆

 楼主| 发表于 2014-5-17 11:11:22 | 显示全部楼层
westloveohyeah 发表于 2014-5-14 13:06
楼主,链接怎么会失效了?

在21楼,前面的确实失效了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-5 12:46

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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