搜索
bottom↓
回复: 32

【开源】模拟IIC读取MPU9250九轴+温度数据

  [复制链接]

出0入0汤圆

发表于 2015-6-17 18:49:34 | 显示全部楼层 |阅读模式
本帖最后由 恋芜 于 2015-6-17 20:00 编辑

主控是stm32f103c8t6,采用正点原子开发板提供的模拟IIC程序,uart1输出数据,希望能给正在调试mpu9250的同学提供一个参考


  1. void IIC_MPU9250_init(void)
  2. {
  3.         IIC_Write_OneByte(MPU9250_I2C_ADDR,MPU9250_PWR_MGMT_1,0x00);                        //唤醒mpu9250
  4.         IIC_Write_OneByte(MPU9250_I2C_ADDR,MPU9250_CONFIG,0x06);                            //低通滤波5hz
  5.         IIC_Write_OneByte(MPU9250_I2C_ADDR,MPU9250_GYRO_CONFIG,0x18);                        //不自检,2000deg/s
  6.         IIC_Write_OneByte(MPU9250_I2C_ADDR,MPU9250_ACCEL_CONFIG,0x00);                        //(0x00 +-2g;)  ( 0x08 +-4g;)  (0x10 +-8g;)  (0x18 +-16g)
  7.         IIC_Write_OneByte(MPU9250_I2C_ADDR,MPU9250_INT_PIN_CFG,0x02);
  8.         IIC_Write_OneByte(MPU9250_I2C_ADDR,MPU9250_USER_CTRL,0x00);                                //使能I2C
  9.        
  10.         IIC_Write_OneByte(AK8963_I2C_ADDR,AK8963_CNTL1,0x10);
  11.         delay_ms(50);
  12.         IIC_Write_OneByte(AK8963_I2C_ADDR,AK8963_CNTL1,0x11);                                        //单测量模式,16位精度
  13. }

  14. void GetMPU9250Data(void)
  15. {
  16.         s16 buf[20];
  17.         u8 i;
  18. /*------------------------------------------------------------------------------------------------------------------------------------*/       
  19. //读取加速度、陀螺仪
  20.         IIC_Start();               
  21.         IIC_Send_Byte(MPU9250_I2C_ADDR); //发送地址设备
  22.         IIC_Wait_Ack();          
  23.         IIC_Send_Byte(MPU9250_ACCEL_XOUT_H);  //发送寄存器地址
  24.         IIC_Wait_Ack();          
  25.         IIC_Start();            
  26.         IIC_Send_Byte(MPU9250_I2C_ADDR+1);//发送设备地址+读信号
  27.         IIC_Wait_Ack();
  28.         for(i=0;i<14;i++)
  29.         {
  30.                 if(i==13)buf[i]=IIC_Read_Byte(0);//读一个字节+不继续再读,发送NACK
  31.                 else buf[i]=IIC_Read_Byte(1);        //读一个字节+继续读,发送ACK
  32.         }
  33.         IIC_Stop();                                       
  34.        
  35. /*-----------------------------------------------------------------------------------------------------------------------------------*/       
  36. //读取地磁传感器
  37.         IIC_Start();         
  38.         IIC_Send_Byte(AK8963_I2C_ADDR);  //发送地址设备
  39.         IIC_Wait_Ack();          
  40.         IIC_Send_Byte(AK8963_HXL);   //发送寄存器地址
  41.         IIC_Wait_Ack();          
  42.         IIC_Start();               
  43.         IIC_Send_Byte(AK8963_I2C_ADDR+1);//发送地址设备+读
  44.         IIC_Wait_Ack();
  45.         for(i=14;i<20;i++)
  46.         {
  47.                 if(i==19)buf[i]=IIC_Read_Byte(0);//读一个字节+不继续再读,发送NACK
  48.                 else buf[i]=IIC_Read_Byte(1);        //读一个字节+继续读,发送ACK
  49.         }
  50.         IIC_Stop();               
  51.        
  52.         IIC_Write_OneByte(AK8963_I2C_ADDR,AK8963_CNTL1,0x11);//每读一次,ak8963自动进入powerdown模式,这里需要重新设定单测量模式
  53. /*-------------------------------------------------------------------------------------------------------------------------------------*/               
  54. //加速度
  55.         mpu9250.acc_x=(buf[0]<<8)+buf[1];
  56.         mpu9250.acc_y=(buf[2]<<8)+buf[3];
  57.         mpu9250.acc_z=(buf[4]<<8)+buf[5];
  58. //温度
  59.         mpu9250.temp =(buf[6]<<8)+buf[7];
  60. //陀螺仪
  61.         mpu9250.gyro_x=(buf[8]<<8)+buf[9];
  62.         mpu9250.gyro_y=(buf[10]<<8)+buf[11];
  63.         mpu9250.gyro_z=(buf[12]<<8)+buf[13];
  64. //地磁
  65.         mpu9250.mag_x=(buf[15]<<8)+buf[14];
  66.         mpu9250.mag_y=(buf[17]<<8)+buf[16];
  67.         mpu9250.mag_z=(buf[19]<<8)+buf[18];
  68. }
复制代码

本帖子中包含更多资源

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

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2015-6-17 19:02:07 | 显示全部楼层
一楼顶了

出0入0汤圆

发表于 2015-6-17 19:07:06 | 显示全部楼层
这个很不错的哦。

出0入0汤圆

发表于 2015-6-18 11:53:29 | 显示全部楼层
九轴和角速度传感器有硬件,需要购买定制姿态结果的软件,只需要结果,不需要源码,请问谁有的

出0入0汤圆

发表于 2015-7-4 09:16:39 | 显示全部楼层
tanto 发表于 2015-6-18 11:53
九轴和角速度传感器有硬件,需要购买定制姿态结果的软件,只需要结果,不需要源码,请问谁有的 ...

这个软件圆点博士,匿名科创都有的。


另外请教怎么校准数据?

出0入0汤圆

发表于 2015-7-6 16:01:11 | 显示全部楼层
不错,留着以后用。

出0入0汤圆

发表于 2015-7-6 17:10:58 | 显示全部楼层
顶上去,感谢分享

出0入0汤圆

发表于 2015-7-7 18:41:08 | 显示全部楼层
谢谢楼主分享,收藏备用了!

出0入0汤圆

发表于 2015-7-11 12:18:33 | 显示全部楼层
本帖最后由 傲翼伟縢 于 2015-7-11 12:24 编辑

楼主,你好,你地磁怎么去零点的?还有读出的地磁原始数据乘以一个系数是取多少?数据手册上说地磁计是16位,测量范围   ±4800uT ,是不是用4800/32767

出0入0汤圆

发表于 2015-7-14 16:51:52 | 显示全部楼层
地磁出来的原始数据仿真貌似有问题啊?

出0入0汤圆

发表于 2015-7-28 08:35:00 | 显示全部楼层
用的SPI。

出0入0汤圆

发表于 2015-8-19 17:58:05 | 显示全部楼层
刚看了您模拟IIC读9250的帖子,有个疑问,就是x轴的角速度,怎么那么大,4000多。用你的程序,验证了下,发现静止不动的时候,x轴的角速度都有4000多。请问这是怎么回事?

出0入0汤圆

发表于 2015-9-6 20:58:25 | 显示全部楼层
可以用,谢谢分享

出20入0汤圆

发表于 2015-9-7 12:21:17 | 显示全部楼层
  谢谢分享,收藏备用。

出0入0汤圆

发表于 2015-10-30 11:38:39 | 显示全部楼层

出0入0汤圆

发表于 2015-10-30 11:48:48 | 显示全部楼层
很多开源的飞控都是采用硬件IIC操作传感器的

出0入0汤圆

发表于 2015-11-1 21:40:01 | 显示全部楼层

出0入0汤圆

发表于 2015-11-14 08:54:05 | 显示全部楼层
楼主,我试了一下您写的驱动,读出了正确的设备ID,角速度(跳变大),加速计(跳变大),但磁力计无法读出来,

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2015-11-14 09:07:22 | 显示全部楼层
感谢楼主分享啊

出0入0汤圆

发表于 2016-2-6 12:15:47 | 显示全部楼层
很不错啊,给我提供了很大的帮助

出0入0汤圆

发表于 2016-3-17 16:41:37 | 显示全部楼层
我的9250里面磁力计的数据特别大,而且还跳的厉害,请问这是什么原因啦?两块板子都一样的

出0入0汤圆

发表于 2016-3-30 23:10:48 | 显示全部楼层
fy_bk 发表于 2016-3-17 16:41
我的9250里面磁力计的数据特别大,而且还跳的厉害,请问这是什么原因啦?两块板子都一样的 ...

可能是有外部磁场影响,正常16bit模式应该在正负300之间,14bit模式在正负70之间。

出0入0汤圆

发表于 2016-4-5 14:48:02 | 显示全部楼层
ianmay 发表于 2016-3-30 23:10
可能是有外部磁场影响,正常16bit模式应该在正负300之间,14bit模式在正负70之间。 ...

嗯嗯,谢谢你,我找到问题了,我的地磁数据高低为弄反了

出0入0汤圆

发表于 2016-4-6 15:31:51 | 显示全部楼层
现在调试AK8963时遇到了一些问题不明白:
1、测量模式无论是单次测量还是连续测量,每次采样后都需要重新配置模式,否则数据不会更新,参考手册上不是说只有单次采样才会自动进入powerdown吗?
2、AK8963输出的数据范围X:-11-434;Y:-13-487;Z:-490-43,数据输出的范围偏离好大,这样正常吗?

出0入0汤圆

发表于 2016-4-21 18:30:47 | 显示全部楼层
#在这里快速回复#你好,我发现我读出来的值特别大,你的值怎么那么小呢?

出0入0汤圆

发表于 2016-4-22 02:47:18 | 显示全部楼层
fy_bk 发表于 2016-4-6 15:31
现在调试AK8963时遇到了一些问题不明白:
1、测量模式无论是单次测量还是连续测量,每次采样后都需要重新配 ...

问题1,在连续模式下,每次读完数据必须读一下st2寄存器地址(就是磁的数据地址后面紧跟着的一位),这样9250才会刷新新的数据。不然他会认为你没有读完,就会处于锁定状态。不去更新新的数据,防止你在一个读取期间,读到了2次测量的数据。

出0入0汤圆

发表于 2016-8-25 12:37:20 | 显示全部楼层
最近也在搞这个,基本上全部搞定了,角度计算,卡尔曼融合滤波等,还在测试,效果还可以

出0入0汤圆

发表于 2016-11-21 15:17:39 | 显示全部楼层
最近也在搞这个,学习下!

出0入0汤圆

发表于 2017-9-6 17:27:24 | 显示全部楼层
这资料确实不错,不好意思,时隔两年来挖资源。。

出0入0汤圆

发表于 2019-4-29 13:32:34 | 显示全部楼层
资料不错,谢谢分享

出0入0汤圆

发表于 2019-5-16 15:50:02 | 显示全部楼层
谢谢分享,正用得着!

出0入0汤圆

发表于 2019-5-16 21:24:49 | 显示全部楼层
感谢楼主无私分享!!!!

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-4-25 03:48

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

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