-
1.
//
技术文档未公布的寄存器
主要用于官方
DMP
操作
2.
#define
MPU6050_RA_XG_OFFS_TC 0x00
//[bit7] PWR_MODE, [6:1] XG_OFFS_TC,
[bit 0]
OTP_BNK_VLD
3.
#define
MPU6050_RA_YG_OFFS_TC 0x01
//[7]
PWR_MODE, [6:1] YG_OFFS_TC, [0]
OTP_BNK_VLD
4.
p>
//bit7
的定义
,
当设置为
1,
辅助
I2C
总线高电平是
VDD
。当设置为
0,
辅助
I2C
总线高电平是
VLOGIC
5.
6.
#define
MPU6050_RA_ZG_OFFS_TC 0x02
//[7]
PWR_MODE, [6:1] ZG_OFFS_TC, [0]
OTP_BNK_VLD
7.
#define MPU6050_RA_X_FINE_GAIN
0x03
//[7:0] X_FINE_GAIN
8.
#define
MPU6050_RA_Y_FINE_GAIN 0x04
//[7:0] Y_FINE_GAIN
9.
#define
MPU6050_RA_Z_FINE_GAIN 0x05
//[7:0] Z_FINE_GAIN
10.
11.
#
define MPU6050_RA_XA_OFFS_H
0x06
//[15:0] XA_OFFS
两个寄存器合在一起
12.
#
define
MPU6050_RA_XA_OFFS_L_TC 0x07
13.
14.
#
define MPU6050_RA_YA_OFFS_H
0x08
//[15:0] YA_OFFS
两个寄存器合在一起
15.
#
define
MPU6050_RA_YA_OFFS_L_TC 0x09
16.
17.
#
define MPU6050_RA_ZA_OFFS_H
0x0A
//[15:0] ZA_OFFS
两个寄存器合在一起
18.
#
define
MPU6050_RA_ZA_OFFS_L_TC 0x0B
19.
20.
#
define
MPU6050_RA_XG_OFFS_USRH 0x13
//[15:0] XG_OFFS_USR
两个寄存器合在一起
21.
#
define
MPU6050_RA_XG_OFFS_USRL 0x14
22.
23.
#
define
MPU6050_RA_YG_OFFS_USRH 0x15
//[15:0] YG_OFFS_USR
两个寄存器合在一起
24.
#
define
MPU6050_RA_YG_OFFS_USRL 0x16
25.
26.
#
define
MPU6050_RA_ZG_OFFS_USRH 0x17
//[15:0] ZG_OFFS_USR
两个寄存器合在一起
27.
#
define
MPU6050_RA_ZG_OFFS_USRL 0x18
28.
29.
/
*
陀螺仪的采样频率
*/
30.
/
*
传感器的寄存器输出
,FIFO
输出<
/p>
,DMP
采样、运动检测、
31.
*
零运动检测和自由落体检测都是基于采样率。
32.
*
通过
SMPLRT_DIV
把陀螺仪输
出率分频即可得到采样率
33.
*
采样率
=
陀螺仪输出率
/ (1 +
SMPLRT_DIV)
34.
*
禁用
DL
PF
的情况下
(DLPF_CFG =
0
或
7)
,陀螺仪输出率
= 8 khz
35.
*
在启用
DLPF(
见寄存器
26)
时,陀螺仪输出率
= 1
khz
36.
*
加速度传感器输出率是
1 khz<
/p>
。这意味着
,
采样率大于
1 khz
时
,
37.
*
同一个加速度传感器的样品可能会多次输入到
FIFO
、
DMP
和传感器寄存器
*/
38.
#
define
MPU6050_RA_SMPLRT_DIV 0x19
//[0-7]
陀螺仪输出分频采样率
39.
40.
/
*
配置外部引脚采样和
DLPF
数字低通
滤波器
*/
41.
#
define MPU6050_RA_CONFIG
0x1A
42.
/
/bit5-bit3
一个连接
到
FSYNC
端口的外部信号可以通过配置
EXT_SYNC_SET
来采样
43.
/
/
44.
/
/
也
就是说
,
这里设置之后
,FSYNC<
/p>
的电平
0
或
1<
/p>
进入最终数据寄存器
,
具体如下
0
不使用
1
FSYNC
电平进入所有数据寄存器
2
FSYNC
电平进入
GYRO_XOUT_L 3 FSYNC
电平进入
GYRO_YOUT_L
45.
/
/
46.
/
/
4
FSYNC
电平进入
GYRO_ZOUT_L
5
FSYNC
电平进入
ACCEL_XOUT_L
6
FSYNC
电平进入
ACCEL_YOUT_L
7 FSYNC
电平进入
SYNC_A
CCEL_ZOUT_L
47.
/
/bit2-bit0
数字低通滤波器
用于滤除高频干扰
高于这个频率的干扰被滤除掉
48.
/
*
对应关系如下
49.
*
*
|
加速度传感器
|
陀螺仪
50.
*
* DLPF_CFG |
带宽
|
延迟
|
带宽
|
延迟
|
采样率
51.
*
-------------+--------+-------+--------+------+---
----------
52.
* 0
| 260Hz | 0ms | 256Hz | 0.98ms
| 8kHz
53.
* 1
| 184Hz | 2.0ms | 188Hz | 1.9ms
| 1kHz
54.
* 2
| 94Hz | 3.0ms | 98Hz | 2.8ms
| 1kHz
55.
* 3
| 44Hz | 4.9ms | 42Hz | 4.8ms
| 1kHz
56.
* 4
| 21Hz | 8.5ms | 20Hz | 8.3ms
| 1kHz
57.
* 5
| 10Hz | 13.8ms | 10Hz | 13.4ms
| 1kHz
58.
* 6
| 5Hz | 19.0ms | 5Hz | 18.6ms
| 1kHz
59.
* 7
| Reserved | Reserved |
Reserved
60.
* */
61.
62.
63.
/
*
陀螺仪的配置
,
主要是配置陀螺仪的量
程与自检
(
通过相应的位
7 6 5
开启自检
)*/
64.
#
define
MPU6050_RA_GYRO_CONFIG 0x1B
65.
/
/bit4-bit3
量程设置如下
66.
/
/
67.
/
/
68.
/
/
69.
/
/
70.
0 = +/- 250
度
/
秒
1 = +/- 500
度
/
秒
2 = +/- 1000
度
/
秒
3 = +/- 2000
度
/<
/p>
秒
*/
71.
/
*
加速度计的配置
,
主要是配置加速度计
的量程与自检
(
通过相应的位
7 6
5
开启自检
)
72.
*
另外
,
还能配置系统的高通滤波器
p>
*/
73.
#
define
MPU6050_RA_ACCEL_CONFIG 0x1C
74.
/
/bit7
启动
X
自检
加速度计的自检
75.
/
/bit6
启动
Y
自检
76.
/
/bit5
启动
Z
自检
77.
/
/bit4-bit3
加速度传感器的量程配置
78.
/
/
79.
/
/
80.
/
/
81.
/
/
0 = +/- 2g
1 =
+/- 4g
2 = +/-
8g
3 = +/- 16g*/
82.
/
/
bit0
到
bit2
加速度传感器的高通滤波器
83.
/
*
DHPF
是在路径中连接于运动探测器
(
自由落体
,
运动阈值
,
零运动
)
的一个滤波器模块。
84.
*
高通滤波器的输出值不在数据寄存器中
85.
*
高通滤波器有三种模式:
86.
*
重置
:
在一个样本中将滤波器输出值设
为零。
这有效的禁用了高通滤波器。
这种模式可以快速切换滤波
器的设置
模式。
87.
*
开启
:
高通滤波器能通过高于截止频率
的信号
88.
*
持续
:<
/p>
触发后
,
过滤器持续当前采样。过滤器输
出值是输入样本和持续样本之间的差异
89.
*
设置值如下所示
90.
*
ACCEL_HPF |
高通滤波模式
|
截止频率
91.
*
----------+-------------+------------------
92.
* 0 | Reset |
None
93.
* 1 | On |
5Hz
94.
* 2 | On |
2.5Hz
95.
* 3 | On |
1.25Hz
96.
* 4 | On |
0.63Hz
97.
* 7 | Hold |
None
98.
*/
99.
100.
#define
MPU6050_RA_FF_THR 0x1D
101.
102.
103.
104.
/*
自由落体加速度的阈值
*
这个寄存器为自由落体的阈值检测进行配置。
*FF_THR
的单位是
1LSB
= 2mg
。当加速度传感器测量而得的三个轴的绝对值
*
都小于检测阈值时,就可以测得自由落体值。这种情况下,
(
加速度计每次检测到就
+1
以下
,
所以还要依
靠加
速度采样率
)
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
*
自由落体时间计数器计数一次
(
寄
存器
30)
。当自由落体时间计数器达到
*FF_DUR
中规定的时间时,自由落体被中断
(
或发生自由落体中断
)
**/
#define MPU6050_RA_FF_DUR
0x1E
/*
*
自由落体加速度的时间阈值
*
这个寄存器为自由落体时间阈值计数器进行配置。
*
时间计数频率为
1 khz,
p>
因此
FF_DUR
的单位是
1 LSB = 1
毫秒。
*
当加速度器测量而得的绝对值都小于检测阈值时,
*
自由落体时间计数器计数一次。当自由落体时间计数器
*
达到该寄存器的规定时间时,自由落体被中断。
*
(
或发生自由落体中断
)
* */
#define MPU6050_RA_MOT_THR
0x1F
/*
*
运动检测的加速度阈值
*
这个寄存器为运动中断的阈值检测进行配置。
*MOT_THR
的单位是
1LSB = 2mg
。
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
*
当加速度器测量而得的绝对值都超过该运动检测的阈值时,
*
即可测得该运动。这一情况下,运动时间检测计数器计数一
次。
*
当运动检测计数器达到
p>
MOT_DUR
的规定时间时,运动检测被中断。
< br>
*
运动中断表明了被检测的运动
< br>MOT_DETECT_STATUS (Register 97)
的轴和极性。
*/
#define
MPU6050_RA_MOT_DUR 0x20
/*
*
运动检测时间的阈值。
*
这个寄存器为运动中断的阈值检测进行配置。
*
时间计数器计数频率为
1 kHz
,因此
MOT_THR
的单位是
1LSB = 1ms
。
*
当加速度器测量而得的绝对值都超过该运动检测的阈值时
(Register 31)
,
*
运动检测时间计数器计数一次。当运动检测计数器达到该寄存器规定的时间时,
*
运动检测被中断。
**/
#define MPU6050_RA_ZRMOT_THR
0x21
/*
*
零运动检测加速度阈值。
*
这个寄存器为零运动中断检测进行配置。
*
ZRMOT_THR
的单位是
1LSB =
2mg
。
*
当加速度器测量而得的三个轴的绝对值都小于检测阈值时,
*
就可以测得零运动。这种情况下,零运动时间计数器计数一次
(
寄存器
34)
。
*
当自零运动时间计数器达到
ZRMOT_DUR
(Register 34)
中规定的时间时,零运动被中断。
*
与自由落体或运动检测不同的是,
当零运动首次检测到以及当零运动检测不到时,
零运动检测都被中断。
< br>
*
当零运动被检测到时
,<
/p>
其状态将在
MOT_DETECT_STATUS
寄存器
(
寄存器
97)
中显示出来。
*
< br>当运动状态变为零运动状态被检测到时
,
状态位设置为<
/p>
1
。当零运动状态变为运动状态被检测到时
,
*
状态位设置为
0
。
**/
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
#define MPU6050_RA_ZRMOT_DUR
0x22
/*
*
零运动检测的时间阈值
*
这个寄存器为零运动中断检测进行时间计数器的配置。
*
时间计数器的计数频率为
16 H
z,
因此
ZRMOT_DUR
的单位是
1 LSB = 64 ms
。
*
当加速度器测量而得的绝对值都小于检测器的阈值
(Register 33)
时,
*
运动检测时间计数器计数一次。当零运动检测计数器达到该
寄存器规定的时间时,
*
零运动检测被中断。
**/
/*
*
设
备的各种
FIFO
使能
,
包括温度
加速度
陀螺仪
从机
*
将相关的数据写入
FIFO
缓冲中
**/
#define MPU6050_RA_FIFO_EN
0x23
//bit7
温度
fifo
使能
//bit6
陀螺仪
Xfifo
p>
使能
//bit5
陀螺仪
Yfifo
使能
//bit4
陀螺仪
Zfifo
p>
使能
//bit3
加速度传感器
fifo
使能
//bit2
外部从设备
2fifo
使能
//bit1
外部从设备
1fifo
使能
//bit0
外部从设备
0fifo
使能
#define MPU6050_RA_I2C_MST_CTRL
0x24
//
配置单主机或者多主机
下的
IIC
总线
//bit7
监视从设备总线
,
p>
看总线是否可用
MULT_MST_EN
设置为
1
时
,MPU-60X0
的总线仲裁检测逻辑被打
开
183.
184.
//bit6
延迟数据就绪中断
,
直达从设备数据也进入主机再
触发
相当于数据同步等待
//bit5
当设置为
1
时
,
与
Slave3 <
/p>
相连的外部传感器数据
(
寄存器
73
到寄存器
96)
写入
FIFO
缓冲中
,
每
次都写入
185.
//bit4
主机读取一个从机到下一个从机读取之间的动作
为
0
读取之间有一个
restart,
为
1
下一
次读取
前会有一个重启
,
然后
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
//
一直读取直到切换写入或者切换设备
//bit3-bit0
配置
MPU
作为
IIC
主机时的时钟
,
基于
MPU
内部
8M
的分频
/*
I2C_MST_CLK | I2C
主时钟速度
|
8MHz
时钟分频器
* ----
--------+------------------------+----------------
---
* 0
| 348kHz |
23
* 1
| 333kHz |
24
* 2
| 320kHz |
25
* 3
| 308kHz
| 26
* 4
| 296kHz
| 27
* 5
| 286kHz
| 28
* 6
| 276kHz
| 29
* 7
| 267kHz
| 30
* 8
| 258kHz
| 31
* 9
| 500kHz
| 16
* 10
| 471kHz |
17
* 11
| 444kHz |
18
* 12
| 421kHz |
19
* 13
| 400kHz |
20
* 14
| 381kHz |
21
* 15
| 364kHz |
22
* */
/**************************MPU
链接
IIC
从设备控制寄存器
,
没
使用从机连接的基本不用考虑这些
************************
************/
211.
212.
213.
214.
/*
指定
slave (0-3)
p>
的
I2C
地址
*
注意
Bit 7 (MSB)
p>
控制了读
/
写模式。如果设置了
Bit 7,
那么这是一个读取操作
,
*
如果将其清除
,
< br>那么这是一个编写操作。其余位
(6-0)
是
slave
设备的
7-bit
设备地址。
*
在读取模式中<
/p>
,
读取结果是存储于最低可用的
EXT_
SENS_DATA
寄存器中。
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
* MPU-6050
p>
支持全
5
个
sla
ve
,但
Slave
4
有其特殊功能
(getSlave4*
和
setSlave4*)
。
*
如寄存器
25
中所述,
I2C
数据转换通过采样率体现。用户负责确保<
/p>
I2C
数据转换能够
*
在一个采样率周期内完成。
* I2C
slave
数据传输速率可根据采样率来减小。
*
减小的传输速率是由
I2C_MS
T_DLY(
寄存器
52)
所决定的。
* slave
数据传输速率是否根
据采样率来减小是由
I2C_MST_DELAY_CTRL (
寄存器
103)
所决定的。
* slave
的处理指令是固定的。
Slave
的处理顺序是
Slave 1, Slave 2,
Slave 3
和
Slave
4
。
*
如
果某一个
Slave
被禁用了,那么它会被自动忽略。
*
每个
slave
可按采样率或降低的采样率来读取。在有些
slave
以采样率读取有些以减小
*
的采样率读取的情况下,
slave
的读取顺序依旧不
变。然而,
*
如果一些
slave
的读取速率不能在特定循环中进行读取,那么它们会被自动忽略
*
更多降低的读取速率相关信息<
/p>
,
请参阅寄存器
52
。
* Slave
是否按采样率
或降低的采样率来读取由寄存器
103
得
Delay Enable
位来决定
**/
//
从机
0
设置相关
#define MPU6050_RA_I2C_SLV0_ADDR
0x25
//bit7
当前
IIC
从设备
< br>0
的操作
,1
为读取
0
写入
//bit6-bit0
从机设备的地址
/*
要读取或者要写入的设备内部的寄存器地址
,
不管读
取还是写入
*/
#define
MPU6050_RA_I2C_SLV0_REG 0x26
/*iic
从机系统配置寄存器
*/
#define MPU6050_RA_I2C_SLV0_CTRL
0x27
//bit7
启动或者禁
止这个设备的
IIC
数据传送过程
//bit6
当设置为
1
时
,
字节交换启用。当启用字节交换时
,
词对的高低字节即可交换
//bit5
当
I2C_SLV0_REG_DIS
置
1
,只能进行读取或者写入数据。当该位清
0
,可以再读取
//
或写入数据之前写入一个寄存器地址。当指定从机设备内部的
寄存器地址进行发送或接收
242.
243.
244.
245.
246.
//
数据时,该位必须等于
0
//bit4
指定从寄存器收到的字符对的分组顺序。当该位清
0
,寄存器地址
//
//
0
和
1,
2
和
3
的字节是分别成对
(甚至,
奇数寄存器地址
)
,
作为一个字符对。
当该位置
1
,
寄存器地址
1
和
2
,
3
和
4
的字节是分别成对的,作为一个字符对
//bit3-bit0
指定从机
0
发送字符的长度。由
Slave
0
转换而来和转换至
Slave 0
的
字节数
,(IIC
一
次传输的长度
p>
)
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
//
/*IIC SLAVE1
p>
配置寄存器
,
与
0
相同
*/
#define MPU6050_RA_I2C_SLV1_ADDR
0x28
#define
MPU6050_RA_I2C_SLV1_REG 0x29
#define MPU6050_RA_I2C_SLV1_CTRL
0x2A
/*IIC SLAV
E2
配置寄存器
,
与
< br>0
相同
*/
#define MPU6050_RA_I2C_SLV2_ADDR
0x2B
#define
MPU6050_RA_I2C_SLV2_REG 0x2C
#define MPU6050_RA_I2C_SLV2_CTRL
0x2D
/*IIC SLAV
E3
配置寄存器
,
与
< br>0
相同
*/
#define MPU6050_RA_I2C_SLV3_ADDR
0x2E
#define
MPU6050_RA_I2C_SLV3_REG 0x2F
#define MPU6050_RA_I2C_SLV3_CTRL
0x30
/*slave4
p>
的
I2C
地址
I
IC4
与前几个的寄存器定义有所不同
*/
#define MPU6050_RA_I2C_SLV4_ADDR
0x31
//
与
IIC
SLAVE1
类似
该位清
0
,
I2C_SLV0_EN
位自动置
0.
#define MPU6050_RA_I2C_SLV4_REG
0x32
/*slave4
的当前内部寄存器
*/
#define
MPU6050_RA_I2C_SLV4_DO 0x33
/*
写于
s
lave4
的新字节这一寄存器可储存写于
slave4
的数据。
*
如
果
I2C_SLV4_RW
设置为
1<
/p>
(设置为读取模式),那么该寄存器无法执行操作
*/
#define MPU6050_RA_I2C_SLV4_CTRL
0x34
//
当设置为
1
时,此位启用了
slave4
的转换操作。当设置为
0
时,则禁用该操作
#define MPU6050_I2C_SLV4_EN_BIT
7
-
-
-
-
-
-
-
-
-
上一篇:mpu6050详细C语言程序
下一篇:姿态测量系统开发——上位机监控毕业论文