MPU6050:
MPU6050是一个6轴姿态传感器,可以测量芯片自身X、Y、Z轴的加速度、角速度参数,通过数据融合,可进一步得到姿态角,常应用于平衡车、飞行器等需要检测自身姿态的场景
3轴加速度计(Accelerometer):测量X、Y、Z轴的加速度
3轴陀螺仪传感器(Gyroscope):测量X、Y、Z轴的角速度
6轴:3轴加速度,3轴角加速度
9轴:3轴加速度,3轴角加速度,3轴磁场强度
10轴: 3轴加速度,3轴角加速度,3轴磁场强度,一个气压强度
加速度计测量的是加速度(可以看作测力计,根据牛顿第二定律F=ma可以计算加速度),加速度计具有静态稳定性,不具有动态稳定性
MPU6050
的陀螺仪测量的是角速度,角度可以通过角速度积分得到
,具有动态稳定性,不具有静态稳定性
- MPU6050参数:
- 16位ADC采集传感器的模拟信号,量化范围:-32768~32767
- 加速度计满量程选择:±2、±4、±8、±16(g|9.8m/s2)
- 陀螺仪满量程选择: ±250、±500、±1000、±2000(°/sec)
- 可配置的数字低通滤波器
- 可配置的时钟源
- 可配置的采样分频
- I2C从机地址:1101000(AD0=0) 1101001(AD0=1)
若从中间拆开,110 1000十六进制就是0x68,
发送第一个字节时将(0x68<<1) | 0/1, 0xD0/0xD1;
所以I2C的从机地址有两种说法:
0x68是直接把7位地址转换16进制得到的
0xD0是 融入了读写位的从机地址
- MPU6050硬件电路:
LDO:低压差线性稳压器
CON1:八针的排针
引脚:
- VCC、GND
- SCL、SDA
- XCL、XDA
- AD0
- INT
功能:
- 电源
- I2C通信引脚(内置了两个4.7K的电阻,已经为弱上拉模式,所以可直接接GPIO,不用添加电阻)
- 主机I2C通信引脚
通常可外接磁力计和气压计,弥补6轴功能不全的情况,同时MPU6050的主机接口可以直接访问这些拓展芯片的数据,在MPU6050里有DMP单元,会进行数据融合·和姿态解算
- 从机地址最低位
1101000 / 1101001
图中可以看到AD0接电阻默认下拉到低电平了,若引脚悬空,就是低电平。若想置高电平,就把AD0直接引到VCC,强上拉至高电平
- 中断信号输出
配置芯片内部的一些事件,来触发中断引脚的输出
LDO是电源供电的逻辑,MPU6050的芯片VDD供电是2.375~3.46V,属于3.3V供电的设备,不能直接接5V,所以接入了一个3.3V的稳压器,电源(5V)可在3.3V到5V之间给芯片端供电
LED是电源指示灯。
MPU6050的模块框图:
灰色部分是芯片内部的传感器,包括XYZ轴的加速度计和陀螺仪,还内置了一个温度传感器,每个传感器前面都有一个自测单元,是用来验证芯片好坏的
Charge Pump:是一个电荷泵,进行升压,因为陀螺仪内部是需要一个高电压支持的。
右边的部分是寄存器和通信接口部分了。
寄存器:
Interrupt Status Register(中断状态寄存器):可控制内部的哪些事件到中断引脚的输出。
FIFo(先入先出寄存器):可对数据流进行缓存,
Config Register (配置寄存器):可以对内部的各个电路进行配置。
Sensor Register(传感器寄存器):也就是数据寄存器,存储了各个传感器的数据
Factory Calibration (工厂校准):内部的传感器都进行了校准
Digital Motion Processor(DMP):数字运动处理器,简称DMP,是芯片内部自带的一个姿态解算的硬件算法,配合官方的DMP库,可以进行姿态解算。
通信接口:
上面的8,9,23,24是从机的I2C和SPI通信接口,用于和STM32通信;下面的6,7是主机的I2C和SPI接口,用于和MPU6050拓展的设备进行通信。
- 寄存器表格:
第一列:Register Adress (十六进制/HEX)
第二列:Register Adress(十进制)
第三列:Register Name(寄存器名称)
第四列:读写权限,RW代表可读可写,R代表可读,W可写
后面的是寄存器内每一位的名字。
以下是黄色标识寄存器的名字(十进制的排序):
每个寄存器都是八位。
- 采样频率分频器
八位为一个整体作为分频值,这个寄存器可以配置采样频率的分频系数,简单来说就是分频越小,内部AD转换就越快,数据寄存器刷新就越快
- 配置寄存器
内部有两部分:外部同步设置和低通滤波器配置,配置滤波器的参数越大,输出数据抖动就越小,0是不使用滤波器,陀螺仪时钟为8KHz,使用了滤波器陀螺仪时钟为1KHz
- 陀螺仪寄存器
高三位是XYZ轴的自测使能位,中间两位是满量程选择位,后三位没用到
- 加速度计寄存器
高三位是XYZ轴的自测使能位,中间两位是满量程选择位,
低三位是用来配置高通滤波器(内置小功能,运动检测用的对输出没用影响)
下面三行中 _L表示低八位,_H表示高八位
59~64. 加速度计的XYZ轴的数据寄存器
想读取数据的话,就读取数据寄存器就行,这是一个16位的有符号数以二进制补码的方式存储,读出高八位和低八位,高位左移八次 或逻辑上 低位数据,最后在存在一个uint16_t的变量里,就能得到数据了
65~66. 温度传感器数据寄存器
和加速度计一样操作方法
67~72. 陀螺仪XYZ轴的数据寄存器
同上
107~108. 电源管理寄存器1、2
电源管理寄存器1:
第1位(最高位Bit7)设备复位,置1所有寄存器恢复到默认值
第2位 睡眠模式,置1,芯片睡眠/不工作,进入低功耗
第3位 循环模式,置1,设备进入低功耗,过一段时间启动一次
第4位 空
第5位 温度传感器失能,置1,禁用内部的温度传感器
最后三位 用来选择系统时钟来源
117. 器件的ID号(我是谁)
只读,中间六位固定110100,最高位和最低位都是0,I2C地址0x68