I2C接口读取MPU9250磁力数值
一开始拿到芯片手册云里雾里,根本没有找到关于磁力数据的寄存器,结果上网一查才知道,这芯片竟然是个胶水芯片。。。
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磁力数值相关推荐
- STM32F103CBT6单片机I2C接口读取锂电池电量计LC709203F数据
一.基本情况 LC709203F是一款适用于单节锂离子/聚合物电池应用的电量计,通过HG-CVR算法来测量电池的RSOC(相对电荷状态).精确的RSOC数据有助于改善便携式设备的运行时间和合理使用.利 ...
- CH341的I2C接口编程说明
CH341的I2C接口特性: 1.支持I2C速度20K/100K/400K/750K: 2.默认不支持设备的ACK应答监测,即忽略ACK状态:强制支持需修改软件: 引脚序号 功能说明 24 SCL 2 ...
- STM32L1系列I2C读取mpu9250数据
问题描述:I2C可以读取加速度和陀螺仪的6轴数据,不能读取到磁力计ID和数据,读取到磁力计ID为0x00或者0xFF. I2C读取9250按理应该挺简单.但是困扰了我三天,今天终于解决了.谷歌和百度有 ...
- linux i2c调试命令,嵌入式Linux下I2C接口调试
By Toradex秦海 1).简介 I2C是嵌入式设备最为常用的接口之一,常用于如下面这些应用场景,因此本文就基于嵌入式Linux演示在User Space进行I2C设备调试. - Digital ...
- STM32通过I2C接口采集温湿度
目录 一.I2C总线协议 1. I2C总线简介 1.1 物理接口 1.2 通讯特征 1.3 I2C总线状态 2. I2C总线通信协议 2.1 起始位和结束位 2.2 数据格式与应答 2.3 数据传输通 ...
- i2c hid 触摸板不能用_I2C 总线协议初探 - STM32 I2C 接口外设学习笔记
I2C(Inter-Integrated Circuit)总线是由 PHILIPS(飞利浦) 公司开发的两线式串行总线,用于连接微控制器及其外围设备.是微电子通信控制领域广泛采用的一种总线标准.它是同 ...
- EEPROM的操作---SPI接口和I2C接口
参考:http://blog.csdn.net/yuanlulu/article/details/6163106 ROM最初不能编程,出厂什么内容就永远什么内容,不灵活.后来出现了PROM,可以自己写 ...
- UART SPI I2C 接口介绍 转载
UART SPI I2C 接口介绍@TOC 做单片机开发时UART,SPI和I2C都是我们最经常使用到的硬件接口,我收集了相关的具体材料对这三种接口进行了详细的解释. UART UART是一种通用串行 ...
- 【龙芯1c库】封装模拟I2C接口和使用示例
龙芯1c库是把龙芯1c的常用外设的常用功能封装为一个库,类似于STM32库.Git地址:https://gitee.com/caogos/OpenLoongsonLib1c I2C接口是常用的接口之一 ...
最新文章
- VS2015智能提示由英文改为中文
- hp打印机怎么连接电脑_hp打印机驱动怎么共享 惠普打印机如何安装【详解】
- Docker将镜像上传至私有仓库
- LiveVideoStackCon 2020北京站-售票通道关闭倒计时2天
- MYSQL的集群的安装与配置(mysql-5.1.21)
- 史玉柱吃透了中国人的人性,也引发了争议
- jquery 毫秒转换成日期_jquery js 秒 毫秒转时分秒
- AOV网和AOE网对比
- PHP将图片转换成base64编码,hash函数
- 将数字字符转换成整型数字
- cloudsim资料收集
- Oracle中MONTHS_BETWEEN函数的使用
- Blender 制作柱体骨架
- 字符串双引号表示c语言,c语言中单引号和双引号的区别(顺利解决从字符串中提取IP地址的困惑)...
- 如何才能够有效长高?避免走弯路
- MIT-BIH ECG 心电数据的下载和读取图解(重要!)
- 澳洲本科计算机世界排名,卧龙岗大学计算机世界排名
- 怎样提高英文论文写作水平[转载]
- 利用永恒之蓝渗透WIN7
- 3亿颗市场规模逐鹿,国产Zigbee芯片盘点
热门文章
- h桥控制电机刹车_(2条消息) h桥控制电机刹车
- 超赞!的装机软件(我的推荐)
- 逻辑模型和物理模型的区别
- http://www.cnblogs.com/zjz008/archive/2010/04/19/1715663.html
- ORACLE的TX锁和TM锁及解锁
- Androidstudio的约束布局,最新Android高级面试题汇总
- 自媒体短视频账号运营、涨粉全攻略分享
- elementui修改提示文字(placeholder)的字体颜色el-input/el-input-number/el-select/el-cascader/el-time-select适用
- 延长硬盘寿命!磁盘碎片整理工具推荐
- 领跑(LabelPainter)条码标签设计系统优势功能一览