大家好,又见面了,我是你们的朋友全栈君。
简述
接下来的内容将对MPU9250的基本的功能进行详细的介绍,主要会分模块进行阐述。
时钟
MPU9250有两个内部时钟源,以及一个PLL。 内部时钟源:
时钟源 | 说明 |
---|---|
内部振荡器 | 功耗低,但时钟精度略差 |
X,Y或Z方向的Gyro | MEMS时钟,功耗较高,但时钟精确(只要Gyro一经启用,就会使用该时钟源) |
时钟的选择需要综合平衡 时钟精度和功耗两个因素,所以从MPU9250的性能参数可以看到,一旦Gyro开启,功耗都是在mA级别,而加速度计和磁力计都是在uA级别的功耗。
I2C接口
MPU9250有两个可选I2C接口,一个用来连接外部的第三方传感器(I2C Master方式),另一个I2C接口可以用来发送Motion数据给外部的控制器(I2C Slave方式)。 当然这两个I2C接口都是可选的,连接外部的第三方传感器的I2C接口只有需要连接外部传感器时才用(而且性能有限)。而用来发送Motion数据的I2C接口也是可选的,因为和SPI接口是复用的,因此只能二选一。 MPU9250 I2C接口:
第三方传感器的I2C接口
该接口用于接外部的第三方传感器,就是如果觉得MPU9250的9轴传感器还不够用,还可以外接第三方的传感器,比如压力传感器。 这个附加I2C接口有两种模式,I2C Master Mode和Pass-Through Mode。 该I2C接口因为MPU9250的性能限制,其对于外部传感器的初始化管理必须要借助于外部控制器来完成才行。MPU9250中有一个bypass multiplexer的机制,可以将与外部控制器连接的I2C接口(SDA, SCL)直接bypass到外部传感器的I2C接口(AUX_DA, AUX_CL)。 即连接着的外部传感器初始化时,MPU9250会通过bypass multiplexer的机制将其转接到外部控制器的I2C接口进行初始化配置,在配置完成后,MPU9250会关闭bypass multiplexer,接过对外部传感器的控制权,并获取外部传感器的数据。
发送Motion数据的I2C Slave
引脚物理连接要求 SDA, SCL: 通常的I2C这两根引脚是开漏的,支持双向通信(即数据可以Master发往Slave,也可以从Slave发往Master),但是MPU9250的这两根引脚需要通过上拉电阻上拉到VDD,最高速率为400kHz。 I2C通信设备角色划分 I2C通信分为Master和Slave角色,Master角色可以在I2C线上置入Slave地址,对应的Slave就需要向Master做出ACK。 MPU9250的I2C地址 MPU9250的I2C Slave地址为b110100X,其中的X是由AD0引脚的电平来决定的,这样的地址设置,可以在同一I2C总线上连接两个MPU9250的设备。
I2C通信协议
Start与Stop条件
数据格式与ACK
通信
MPU9250 I2C Write
MPU9250 I2C Read
SPI接口
MPU9250只有一个SPI接口(SPI Slave),四线(CS, SDO, SCLK, SDI),两根作为控制线,两根作为数据线。MPU9250作为SPI Slave角色。 CS线为片选,为低时选中,为高时不选。
SPI功能特性 1. 数据传输为MSB first, LSB last 2. 数据在SCLK的上升沿被锁定(latched) 3. 数据在SCLK的下降沿发送 4. SCLK最大频率为1MHz 5. SPI读写操作需要在16个或更多个时钟周期(2个或2个Bytes以上)。第一个Byte包括了SPI地址,接下来的Bytes为SPI data。第一个Byte的第一个Bit为读写标志(Read-1, Write-0)
- 支持多个字节的读写。
SPI Master与Slave连接图示:
自检
自检用于对传感器的机械和电子部分进行测试,自检的触发是通过对应的self-test寄存器来激活的。 自检被激活时,传感器启动并产生输出信号,输出信号用于观察自检回复。
代码语言:javascript复制自检回复 = 传感器带自检输出 - 传感器不带自检输出
当自检回复的值在合理范围内,该部分自检就会通过。当自检回复超出合理范围,就表明该部分自检失败。
传感器数据寄存器
数据类别 | 作用 | 特性 |
---|---|---|
gyroscope/ accelerometer/ magnetometer/ auxiliary-sensor/ temperature | 保存最新的传感器数据 | 只读,任何时候都可以通过串行口(SPI or I2C)读取 |
FIFO
大小 | 配置寄存器 | Counter | 读取 | 中断 |
---|---|---|---|---|
512bytes | 选定哪些数据可以暂存入FIFO,可选gyro-data, accelerometer-data, temperature, auxiliary-sensor-data, FSYNC-input | FIFO中的字节数 | 串行口访问(SPI or I2C) 支持burst read | 可以触发中断 |
中断
中断功能 | 详细说明 | 中断状态 |
---|---|---|
中断配置寄存器 | Interrupt Status Register | |
INT引脚配置 | 配置引脚中断方式 | |
中断latching | 配置中断锁定方式 | |
中断clearing | 配置中断清除方式 | |
中断triggers | (1)Clock generator locked to new reference oscillator (used when switching clock sources); (2) new data is available to be read (from the FIFO and Data registers); (3) accelerometer event interrupts; (4) the MPU-9250 did not receive an acknowledge from an auxiliary sensor on the secondary I2C bus |
INT引脚中断配置
INT引脚上可以配置(enable/disable)如下的中断类型:
中断状态标志可以查看是哪一类中断发生。
Motion Detection(Wake-on-Motion)中断
通过编程可以预先设定一个threshold阈值,这样,在动作采样时其采样得到的绝对值超出该threshold,就会发生Wake-on-Motion中断。Wake-on-Motion的配置流程如下:
高级硬件特性
通过硬件寄存器配置和使能硬件特性。 初始上电时高级硬件特性均默认关闭,必须要单独打开和配置。
硬件特性 | 说明 |
---|---|
Low Power Quaternion | 3轴Gyro和6轴Gyro Accel |
Android Orientation | Android屏幕旋转算法低功耗实现 |
Tap | 敲击手势检测 |
Pedometer | 计步 |
Significant Motion Detection | 有效动作检测 |
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/126614.html原文链接:https://javaforall.cn