参考资料

参考资料说明:

用户手册时针对电路设计者的,一般时芯片的一些电气特性和经典电路,同时,也会说明该芯片的一些测量精度。

寄存器地图是针对驱动开发者的,主要告诉开发者如何使用(控制和读取)传感器。我们把精力放在寄存器地图这个文档即可。

资料下载:PDF

I2C

MPU9250 是由两个模块(MPU6500+AK8963)组合而成。其中MPU6500可以测量加速度和角加速度(6轴)。AK8963可以测量各个方向磁场数据(3轴)。一共是9轴。

MPU6500的I2C地址为0x68

BMP280的I2C地址为0x76

使用树莓派4B可以用以下指令查询:

sudo i2cdetect -y 1
# 查询数据 最后一个1的含义指的是树莓派的第二个i2c总线,第一个为0
sudo i2cdump -y 1 0x68
# 后面跟一个地址可查询对应的数据,查询Register Map可以知其具体含义。

设备ID

MPU6500的设备ID是** 0x70**。地址为0x75

BMP设备ID是0x58,ID地址为0xD0

可以根据ID判断传感器是否正确连接。

关键数据读取

说明:在读取数据之前,还需要对传感器进行一些参数设定,这个部分可以参考Register Map的提示设定。(比如电源模式,测量精度,FIFO模式等)

MPU6500:读取加速度数据&换算单位

查询手册,找到关键数据的寄存器地址,如下图:

可以知道,测量的数据的起始地址是0x3B,分别是ax, ay, az, gx, gy, gz。每一个数据是16位,也就是2个字节,总测量数据长度是12个字节。在终端中,读取数据如下

利用树莓派的smbus库,可以编写如下代码片段

def readAccel(self): # 这里以读取加速度为例,角加速度同理
data = bus.read_i2c_block_data(self.address, ACCEL_OUT, 6) # 读取六个字节
# 这里读取的数据的格式是补码,可以从手册里查询到。
x = self.dataConv(data[1], data[0]) # 这里需要按照高位数据在高位的规则左位运算,补码
y = self.dataConv(data[3], data[2]) # 同上
z = self.dataConv(data[5], data[4]) # 同上 x = round(x*self.ares, 3) # 单位换算&四舍五入
y = round(y*self.ares, 3) # 同上
z = round(z*self.ares, 3) # 同上

**这里的单位换算需要根据测量精度乘以对应数值。**这个地方可以这样理解,传感器就像一把尺子,有单位长度(即测量的最小长度)和量程。一把尺子的刻度的数量是固定的,这里的传感器的刻度数量同样固定,不同的是传感器的单位长度是可调整的,根据 单位长度x刻度数量 =量程。 当单位长度变大时,量程也随之变大,但是测量精度会随之下降。反之,量程变小,测量精度提升。

具体代码实现如下:(这里的2G,4G,8G,16G是量程,32768是正刻度数量。)

if afs == AFS_2G: self.ares = 2.0/32768.0
elif afs == AFS_4G: self.ares = 4.0/32768.0
elif afs == AFS_8G: self.ares = 8.0/32768.0
else: #afs == AFS_16G:
self.ares = 16.0/32768.0

BMP280: 读取温度和气压信息 & 单位换算

具体同上。这里列举一些关键信息如下:

各个数据段含义:

测量精度控制:

具体换算实例

推荐库

(可直接使用或者少量修改可用)

Arduino: https://github.com/thejmart/GY_91-.git

Python: https://github.com/qi-xmu/FaBo9AXIS-MPU9250-Python.git 说明:这个库是克隆别人的,使用的是python2,同时只有MPU9250的代码。可以等我的后期更新。

C/C++: https://github.com/ricardozago/GY91-MPU9250-BMP280.git

最新文章

  1. Minor【 PHP框架】1.简介
  2. 通过Java代码实现对数据库的数据进行操作:增删改查
  3. jquery ui 中的插件开发
  4. hibernate用注解替代映射文件
  5. Silverlight管理系统源代码(SilverlightOAFlame开发框架主要提供二次开发)
  6. (转)The 9 Deep Learning Papers You Need To Know About (Understanding CNNs Part 3)
  7. POJ2411 Mondriaan's Dream 轮廓线dp
  8. python调用smtplib模块发送邮件
  9. tableview刷新某个区域(section)或者某一行(row)
  10. HDU 1054 Strategic Game(树形DP)
  11. 常系数齐次线性递推 & 拉格朗日插值
  12. fang
  13. 非阻塞tcp服务器与阻塞的tcp服务器对比
  14. 浅谈C中操作字符串函数的用法(一)
  15. 使用iframe方式获得svg中的DOM元素,和svg 的 contentDocument 返回 null
  16. mysql 开发进阶篇系列 19 MySQL Server(innodb_flush_log_at_trx_commit与sync_binlog)
  17. 广州商学院16级软工一班&二班-第一次作业成绩
  18. 【LOJ】#2082. 「JSOI2016」炸弹攻击 2
  19. C#获取MySql 数据常用的代码
  20. CSS个人笔记

热门文章

  1. C++ 遍历磁盘文件 非递归方法 和递归方法
  2. Mybatis 懒加载使用及源码分析
  3. 关于Copy On Write Array List,你会安全使用么
  4. 踩坑,发现一个ShardingJdbc读写分离的BUG
  5. 自定义View3-水波纹扩散(仿支付宝咻一咻)实现代码、思想
  6. 字节跳动端智能工程链路 Pitaya 的架构设计
  7. TCP/UDP报文格式
  8. 【多服务场景化解决方案】智能家居(UrbanHome)
  9. OOM故障处理流程
  10. KingbaseES R3 集群一键修改集群用户密码案例