一开始拿到芯片手册云里雾里,根本没有找到关于磁力数据的寄存器,结果上网一查才知道,这芯片竟然是个胶水芯片。。。

MPU9250内部是MPU6050和AK8963两个芯片合并在一起的,感觉傻傻的。

内部的AK8963是负责三轴磁力传感器采样的芯片,它通过I2C总线与MPU9250连接在一起。

如上图所示,MPU9250还集成了一个I2C主机控制器。默认情况下MPU9250用它的I2C主机控制器与AK8963通信,把磁力值读到出放到指定的寄存器中,这需要设置一堆寄存器,真是麻烦得一逼!!!

幸好MPU9250还预留了I2C直通模式,这个模式相当于MPU9250和AK8963共同使用一条I2C总线,因为它们的通信地址不一样,

MPU9250的地址:0xD0/0xD1

AK8963的地址:0x18/0x19

在写驱动程序的时候,可以把它们当作硬件上分离的两个芯片挂在同一条I2C总线上。

直通模式需要设置MPU9250的第55号寄存器的Bit1写1即可开启。


有了直通模式我们就可以直接与AK8963通信了,AK8963的寄存器不多。

下面讲讲几个关键寄存器操作:

0x00:这个寄存器是芯片ID=0x48,能读出这个ID证明通信OK了。

0x0A:设置工作模式,建议上电后先写入0x0F,读取出芯片校准系数;然后再写0x01,进行单次采样。

0x02:状态寄存器,BIT0为1表示采样完成,可以读取采样数据了。网上有人说读不到数据,加上10毫秒延时就能读出数据,就是因为没有检查状态值。经过实验测试单次采样大概需要6-8毫秒。

0x03-0x08:数据寄存器,三个轴,每个轴的数据都分为高8位和低8位,组成16位的有符号整数。

0x10-0x12:校准寄存器,出厂设置的校准参数,当0x0A寄存器写入0x0F后才可以读出来。

手册上写了数据校准参数的用法:

Hadj是校准后的数据;

H是读出来的原始采样数据;

ASA是校准寄存器读出来的参数;


得到正确的三轴磁力数值后,就可以用来实现一个简单的电子指南针了。

在水平面的方向=180 + arctan(Y, X) * 180 / PI;

由于环境干扰,还需要加入一个平面校准算法:将芯片在水平面原地转360度,记录三个轴的采样值的最大值和最小值,求得(最大值+最小值)除以2得到偏移值。将原始采样值减去偏移值之后,再送入上面的公式计算角度会更准确。

I2C接口读取MPU9250磁力数值相关推荐

  1. STM32F103CBT6单片机I2C接口读取锂电池电量计LC709203F数据

    一.基本情况 LC709203F是一款适用于单节锂离子/聚合物电池应用的电量计,通过HG-CVR算法来测量电池的RSOC(相对电荷状态).精确的RSOC数据有助于改善便携式设备的运行时间和合理使用.利 ...

  2. CH341的I2C接口编程说明

    CH341的I2C接口特性: 1.支持I2C速度20K/100K/400K/750K: 2.默认不支持设备的ACK应答监测,即忽略ACK状态:强制支持需修改软件: 引脚序号 功能说明 24 SCL 2 ...

  3. STM32L1系列I2C读取mpu9250数据

    问题描述:I2C可以读取加速度和陀螺仪的6轴数据,不能读取到磁力计ID和数据,读取到磁力计ID为0x00或者0xFF. I2C读取9250按理应该挺简单.但是困扰了我三天,今天终于解决了.谷歌和百度有 ...

  4. linux i2c调试命令,嵌入式Linux下I2C接口调试

    By Toradex秦海 1).简介 I2C是嵌入式设备最为常用的接口之一,常用于如下面这些应用场景,因此本文就基于嵌入式Linux演示在User Space进行I2C设备调试. - Digital ...

  5. STM32通过I2C接口采集温湿度

    目录 一.I2C总线协议 1. I2C总线简介 1.1 物理接口 1.2 通讯特征 1.3 I2C总线状态 2. I2C总线通信协议 2.1 起始位和结束位 2.2 数据格式与应答 2.3 数据传输通 ...

  6. i2c hid 触摸板不能用_I2C 总线协议初探 - STM32 I2C 接口外设学习笔记

    I2C(Inter-Integrated Circuit)总线是由 PHILIPS(飞利浦) 公司开发的两线式串行总线,用于连接微控制器及其外围设备.是微电子通信控制领域广泛采用的一种总线标准.它是同 ...

  7. EEPROM的操作---SPI接口和I2C接口

    参考:http://blog.csdn.net/yuanlulu/article/details/6163106 ROM最初不能编程,出厂什么内容就永远什么内容,不灵活.后来出现了PROM,可以自己写 ...

  8. UART SPI I2C 接口介绍 转载

    UART SPI I2C 接口介绍@TOC 做单片机开发时UART,SPI和I2C都是我们最经常使用到的硬件接口,我收集了相关的具体材料对这三种接口进行了详细的解释. UART UART是一种通用串行 ...

  9. 【龙芯1c库】封装模拟I2C接口和使用示例

    龙芯1c库是把龙芯1c的常用外设的常用功能封装为一个库,类似于STM32库.Git地址:https://gitee.com/caogos/OpenLoongsonLib1c I2C接口是常用的接口之一 ...

最新文章

  1. VS2015智能提示由英文改为中文
  2. hp打印机怎么连接电脑_hp打印机驱动怎么共享 惠普打印机如何安装【详解】
  3. Docker将镜像上传至私有仓库
  4. LiveVideoStackCon 2020北京站-售票通道关闭倒计时2天
  5. MYSQL的集群的安装与配置(mysql-5.1.21)
  6. 史玉柱吃透了中国人的人性,也引发了争议
  7. jquery 毫秒转换成日期_jquery js 秒 毫秒转时分秒
  8. AOV网和AOE网对比
  9. PHP将图片转换成base64编码,hash函数
  10. 将数字字符转换成整型数字
  11. cloudsim资料收集
  12. Oracle中MONTHS_BETWEEN函数的使用
  13. Blender 制作柱体骨架
  14. 字符串双引号表示c语言,c语言中单引号和双引号的区别(顺利解决从字符串中提取IP地址的困惑)...
  15. 如何才能够有效长高?避免走弯路
  16. MIT-BIH ECG 心电数据的下载和读取图解(重要!)
  17. 澳洲本科计算机世界排名,卧龙岗大学计算机世界排名
  18. 怎样提高英文论文写作水平[转载]
  19. 利用永恒之蓝渗透WIN7
  20. 3亿颗市场规模逐鹿,国产Zigbee芯片盘点

热门文章

  1. h桥控制电机刹车_(2条消息) h桥控制电机刹车
  2. 超赞!的装机软件(我的推荐)
  3. 逻辑模型和物理模型的区别
  4. http://www.cnblogs.com/zjz008/archive/2010/04/19/1715663.html
  5. ORACLE的TX锁和TM锁及解锁
  6. Androidstudio的约束布局,最新Android高级面试题汇总
  7. 自媒体短视频账号运营、涨粉全攻略分享
  8. elementui修改提示文字(placeholder)的字体颜色el-input/el-input-number/el-select/el-cascader/el-time-select适用
  9. 延长硬盘寿命!磁盘碎片整理工具推荐
  10. 领跑(LabelPainter)条码标签设计系统优势功能一览