-
详解
MPU6050
,用
STM32
读取原始数据,并相互融合算出俯仰角、
翻滚角、
偏航角
(2014-01-16
16:53:41)
转
载
▼
6050
是什么?
MPU6050
是一个
6
轴运动处理组件,包含了
3
轴加速度
和
3
轴陀螺仪。
MPU-6000
为
全球首例整合性
6
轴运动处理组件,相较于多组件方案,免除了
组合陀螺仪与加速器时之轴间差的问题,减少了大量的包装空间。
MPU-6000
整合了
3
轴陀螺仪
、
3
轴加速器,并含可藉由第二个
I2
C
端口连接其他厂牌之加
速器、磁力传感器、或其他传感器的数
位运动处理
(DMP: Digital Motion
Pr
ocessor)
硬件加速引擎,由主要
I2C
端口以单一数据流的形式,向应用端输出
完整的
9
p>
轴融合演算技术
InvenSense<
/p>
的运动处理资料库,可处理运动感测的复杂数据,降低了运动处理
运算对操作系统的负荷,并为应用开发提供架构化的
API
。<
/p>
MPU-6000
的角速度全格感测范
围为
±
250
、
±
500
、
±
1000
与
±
2000°
/sec (dps)
,可
准确追緃快速与慢速动
作,并且,用户可程式控制的加速器全格感测范围为
±
2g
p>
、
±
4g±
8g<
/p>
与
±
16g
。产
品传输可透过最高至
400kHz
的
I
2C
或最高达
20MHz
的
SPI
。
MPU-60
00
可在不同电压下工作,
VDD
供电
电压介为
2.5V±
5%
、
3.0V±
5%
或
3.3
V±
5%
,逻辑接口
VVDIO
供电为
1.8V±
5%
。
MPU-6000
的包装尺寸
4
x4x0.9mm(QFN)
,在业界是革命性的尺寸。其他的特征包含内建的温度感测
器、
包含在运作环境中仅有
±
1%
p>
变动的振荡器。
2.
加速度传感器是干嘛用的?
总而言这,加速度传感器,其实是力传感器。用来检查上下左
右前后哪几个面都受了多少
力(包括重力),然后计算
角度
p>
。
3.
陀螺仪是干嘛用的?
简而言之,陀螺仪就是
角速度
检测仪。比如,一块
板,以
X
轴为轴心,在一秒钟的时间转
到了
90
度,那么它在
X
轴上的角速度就是
90
度
/
秒
(
DPS,
角速度单位,
Degree Per
Second
的缩写
°
/S
,体现了转动的快慢)
6050
分辨率是多少?
3
轴加速度
和
3
轴陀螺仪分别用了
3
个
16
位的
ADC,
也就是说,加速度有
3
个
16
位
ADC
< br>,
其中每个轴使用了一个。也是说,每个轴输出的数据,是
2^16
也就是
-32768 ----
+32768
。
陀螺仪也是一样。
5.
单位换算
上面说的
-32768 --- +32768
,那么这个数字到底代表了什么呢?比如陀螺仪
32768
到底是
指角速度达到多少度
/
秒
?
这个其实是根据
MPU6050
设置的量程来决定的
,量程不一样,
32768
代表的值就不一样。
MPU6050
的量程设置,在
MPU6050::initialize()
(
库)初始化函数中进行了
设置:
setFullScaleGyroRange(MPU6050_GYRO_FS_250);
p>
setFullScaleAccelRange(MPU6050_ACCEL_FS_2
);
分别设置为,
250
度
/
秒
, 2g
按陀螺仪来说,
MPU6050
有四个量程可选:
±
250
,
±
500
,
±
1000
,
±
2000
度
/s
比方说,设置了是
±
250 ,
那么
-32768 ---- +32768
就代表了
-250 ---- +250
< br>。此时它的
LSB(
拉傻
B
p>
,最低有效位
)
是
131
LSB/(
度
/s)
STM32
自带
I2C
,但
一般有两个
I2C1
(
PB6,PB7
)和
I2C2
(
PB10,PB11
),而且,
I2C
分
为硬件、和模拟。
软件
i2c
是程序员使用程序控制
SCL,SDA<
/p>
线输出高低电平,模拟
i2c
协议的时序
.
硬件
i2c
程序员只要调用
i2c
的控制函数即可,不用直接的去控制<
/p>
SCL,SDA
高低电平的输
出
本模块采用的是
I
IC
通信方式,所以我们只需要连接四跟线就可以完成电路的连接,简单
方便!
原始数据有:
AX<
/p>
、
AY
、
AZ
GX
、
GY
、
GZ
简单的算法之后可以得到
Roll
,
pitch
,
yaw
参考
MPU-6050
数据手册
引脚说明:
VDD
供电电压为
2.5V±
5%
、
3.0V±
5%
、
3.3V±
5%
;
VDDIO
为
1.8V±
5%
内建振荡器在工作温度范围内仅有
±
1%
频率变化。可选外部时钟输入
32.768kHz
或
19.2MHz
找出几个重要的寄存器:
1
)
Register 25
–
Sample Rate Divider
(
SMPRT_DIV
)
1
)
SMPLRT_DIV
8
位无符号值,通过该值将陀螺仪输出分频,得到采样频率
该
寄存器指定陀螺仪输出率的分频,用来产生
MPU-60X0
的
采样率。
传感器寄存器的输出、
FIFO
输出、
DMP
采样和运动检测的都是基于该采样率。
采样率的计算公式
采样率
=
陀螺仪的输出率
/ (1 + SMPLRT_DIV)
当数字低通滤波器没有使能的时候,陀螺仪的输出平路等于
8KHZ
,反之等于
1KHZ
。
2
)
Register 26
–
Configuration
(
CONFIG
)
1
)
EXT_SYNC_SET
3
位无符号值,配置帧同步引脚的采样
2
)
DLPF_CFG
3
位无符号值,配置数字低通滤波器
该寄存器为陀螺仪和加速度计配置外部帧同步(
FSYNC
)引脚采样和数字低通滤波器
(
DLPF
)。
p>
通过配置
EXT_SYNC_SET
,可以
对连接到
FSYNC
引脚的一个外部信号进行采样。
FSYNC
引脚上
的信号变化会被锁存,这样就能捕获到很短的频闪信号。
<
/p>
采样结束后,锁存器将复位到当前的
FSYNC
< br>信号状态。
根据下面的表格
定义的值,采集到的数据会替换掉数据寄存器中上次接收到的有效数据
数字低通滤波器是由
DLPF_CF
G
来配置,根据下表中
DLPF_CFG
的值对加速度传感器和
陀螺仪滤波
3
)
Register 27
–
Gyroscope Configuration
(
GYRO_CONFIG
)
1
)
XG_ST
设置此位,
X
轴陀螺仪进行自我测试。
2
)
YG_ST
设置此位,
Y
轴陀螺仪进行自我测试。
3
)
ZG_ST
设置此位,
Z
轴陀螺仪进行自我测试。
4
)
FS_SEL
2
位无符号值。选择陀螺仪的量程。
这个寄存器是用来触发陀螺仪自检和配置陀螺仪的满量程范围。
陀螺仪自检允许用户测试陀螺仪的机械和电气部分,通过
设置该寄存器的
XG_ST
、
YG_
ST
和
ZG_ST bits
可以激
活陀螺仪对应轴的自检。每个轴的检测可以独立进行或同时进
行。
自检的响应
=
打开自检功能时的传感器输出
-
未启用自检功能时传感器的输出
在
MPU-6000/MPU-6050
数据手册的电气特性表中已经给出了每个轴的限制范围。当自
检的响应值在规定的范围
内,就能够通过自检;反之,就不能通过自检。
p>
根据下表,
FS_SEL
选择陀螺仪输出的
量程:
4
)
Register 28
–
Accelerometer
Configuration
(
ACCEL_CONFIG
)