目录

概述 

1 核心概念

2 关键寄存器功能介绍

2.1 PWR_MGMT_1 (0x6B)电源管理寄存器

2.2  PWR_MGMT_2 (0x6C)电源管理寄存器

2.3 配置寄存器

2.3.1  配置寄存器(CONFIG (0x1A))

 2.3.2  配置寄存器(SMPLRT_DIV (0x19))

2.3.3 陀螺仪配置寄存器(GYRO_CONFIG (0x1B))

 2.3.4 加速度计配置寄存器(ACCEL_CONFIG (0x1C))

2.4 数据输出寄存器 (只读) 

2.4 中断寄存器

2.5 其他重要寄存器

3  基本使用流程


概述 

MPU6050 拥有众多寄存器,用于配置传感器、读取数据和控制其行为。理解这些寄存器是使用该芯片的关键。以下是一些最重要和最常用的寄存器及其功能概述。

核心概念

  • 地址: 每个寄存器都有一个唯一的7位地址(通常用十六进制表示,如 0x6B)。

  • 访问: 通过 I2C 总线进行读写访问。写操作用于配置,读操作用于获取数据或状态。

  • 位操作: 寄存器通常包含多个配置位。你需要了解每个位的含义来正确设置或读取。

关键寄存器功能介绍

2.1 PWR_MGMT_1 (0x6B)电源管理寄存器

PWR_MGMT_1 (0x6B): 最重要的寄存器之一,其主要功能如下:

  • 控制设备的主要电源状态和时钟源。

  • BIT6 (DEVICE_RESET): 置1复位整个芯片(复位后自动清零)。

  • BIT5 (SLEEP): 置1进入低功耗睡眠模式;置0唤醒设备。

  • BIT3 (CYCLE): 置1进入循环模式(低功耗周期唤醒采样)。

  • BIT[2:0] (CLKSEL): 选择内部时钟源。

    • 000 = 内部8MHz振荡器(默认)。

    • 001 = PLL with X axis gyroscope reference(推荐)。

    • 010 = PLL with Y axis gyroscope reference。

    • 011 = PLL with Z axis gyroscope reference。

    • 100 = PLL with external 32.768kHz reference。

    • 101 = PLL with external 19.2MHz reference。

    • 110 = 保留。

    • 111 = 停止时钟,保持时序发生器复位。

2.2  PWR_MGMT_2 (0x6C)电源管理寄存器

其主要用于控制控制加速度计和陀螺仪各个轴的待机模式,唤醒方式,其各个bit的意义如下:

  • 控制加速度计和陀螺仪各个轴的待机模式。

  • BIT[5:4] (LP_WAKE_CTRL): 循环唤醒频率设置(当CYCLE=1时)。

  • BIT[2:0] (STBY_XA, STBY_YA, STBY_ZA): 置1使对应加速度计轴进入待机。

  • BIT[5:3] (STBY_XG, STBY_YG, STBY_ZG): 置1使对应陀螺仪轴进入待机。

2.3 配置寄存器

2.3.1  配置寄存器(CONFIG (0x1A)

其主要用于配置数字低通滤波器(DLPF)和外部帧同步(FSYNC)。各个bit的功能如下:

  • BIT[2:0] (DLPF_CFG)设置数字低通滤波器带宽。 这个设置直接影响采样率(SMPLRT_DIV)和输出数据速率。

    • 000 = 加速度计260Hz,陀螺仪256Hz (Fs=8kHz)

    • 001 = 加速度184Hz,陀螺188Hz (Fs=1kHz)

    • 010 = 加速度94Hz,陀螺98Hz (Fs=1kHz)

    • 011 = 加速度44Hz,陀螺42Hz (Fs=1kHz)

    • 100 = 加速度21Hz,陀螺20Hz (Fs=1kHz)

    • 101 = 加速度10Hz,陀螺10Hz (Fs=1kHz)

    • 110 = 加速度5Hz,陀螺5Hz (Fs=1kHz)

    • 111 = 禁用DLPF(使用原始传感器输出)。

  • BIT[5:3] (EXT_SYNC_SET): 选择哪个信号输入到FSYNC引脚用于帧同步(通常不用,设为0)。

 2.3.2  配置寄存器(SMPLRT_DIV (0x19)

其主要用于配置采样分频器。其使用方法如下:

  • 采样率分频器。DLPF_CFG配合决定最终输出数据速率(ODR)。

  • 值范围:0-255。

  • ODR = Gyroscope Output Rate / (1 + SMPLRT_DIV)

  • Gyroscope Output Rate 由 DLPF_CFG 决定(通常是1kHz或8kHz)。

  • 例如:DLPF_CFG=001 (Gyro ODR=1kHz), SMPLRT_DIV=9 -> ODR = 1000Hz / (1+9) = 100Hz

2.3.3 陀螺仪配置寄存器(GYRO_CONFIG (0x1B))

其主要用于:配置陀螺仪的自检和量程(Full Scale Range - FSR)

  • BIT[7:5] (XG_ST, YG_ST, ZG_ST): 置1启用对应轴的自检(产生特定输出)。

  • BIT[4:3] (FS_SEL)设置陀螺仪量程。

    • 00 = ±250 °/s

    • 01 = ±500 °/s

    • 10 = ±1000 °/s

    • 11 = ±2000 °/s (默认值)

  • 量程越大,灵敏度越低(LSB/(°/s)值越大),能测量的最大角速度越大。

 2.3.4 加速度计配置寄存器(ACCEL_CONFIG (0x1C))

该寄存器用于配置:加速度计的自检和量程(Full Scale Range - FSR)。

  • BIT[7:5] (XA_ST, YA_ST, ZA_ST): 置1启用对应轴的自检。

  • BIT[4:3] (AFS_SEL)设置加速度计量程。

    • 00 = ±2 g

    • 01 = ±4 g

    • 10 = ±8 g

    • 11 = ±16 g (默认值)

  • 量程越大,灵敏度越低(LSB/g值越大),能测量的最大加速度越大。

2.4 数据输出寄存器 (只读) 

这些寄存器存储最新的传感器数据采样值。读取时通常从第一个寄存器地址开始连续读取多个字节。

  • ACCEL_XOUT_H (0x3B) & ACCEL_XOUT_L (0x3C): 加速度计 X 轴数据 (高8位 / 低8位)。

  • ACCEL_YOUT_H (0x3D) & ACCEL_YOUT_L (0x3E): 加速度计 Y 轴数据。

  • ACCEL_ZOUT_H (0x3F) & ACCEL_ZOUT_L (0x40): 加速度计 Z 轴数据。


  • TEMP_OUT_H (0x41) & TEMP_OUT_L (0x42): 温度传感器数据。

    • Temperature (°C) = (TEMP_OUT / 340.0) + 36.53


  • GYRO_XOUT_H (0x43) & GYRO_XOUT_L (0x44): 陀螺仪 X 轴数据。

  • GYRO_YOUT_H (0x45) & GYRO_YOUT_L (0x46): 陀螺仪 Y 轴数据。

  • GYRO_ZOUT_H (0x47) & GYRO_ZOUT_L (0x48): 陀螺仪 Z 轴数据。


    读取顺序:

  •  通常从 0x3B 开始连续读取14个字节 (AXH, AXL, AYH, AYL, AZH, AZL, TH, TL, GXH, GXL, GYH, GYL, GZH, GZL)。

2.4 中断寄存器

1)INT_ENABLE (0x38): 使能特定的中断源

  • BIT0 (DATA_RDY_EN): 置1使能数据就绪中断(当有新数据可用时触发)。

  • ...其他中断源(如运动检测、自由落体等)。

2) INT_STATUS (0x3A): 读取当前中断状态(哪个中断被触发)

  • BIT0 (DATA_RDY_INT): 置1表示数据就绪中断已发生。

3) INT_PIN_CFG (0x37): 配置中断引脚(INT)的行为。

  • BIT7 (ACTL): 置1使中断引脚低电平有效(默认高电平有效)。

  • BIT6 (OPEN): 置1配置中断引脚为开漏输出(默认推挽)。

  • BIT5 (LATCH_INT_EN): 置1使中断信号锁存(需要读取INT_STATUS清除);置0为脉冲(50us)。

  • BIT4 (INT_RD_CLEAR): 置1表示读取INT_STATUS寄存器会自动清除所有中断标志(与锁存模式配合)。

2.5 其他重要寄存器

1) WHO_AM_I (0x75)

 只读寄存器,包含设备ID(对于MPU6050通常是0x68)。用于检查I2C通信是否正常。

2) USER_CTRL (0x6A): 用户控制功能

  • BIT7 (DMP_EN): 置1使能DMP(数字运动处理器)。

  • BIT6 (FIFO_EN): 置1使能FIFO缓冲区。

  • BIT5 (I2C_MST_EN): 置1使能MPU6050作为I2C主机(连接其他I2C设备,如磁力计HMC5883L/AK8963)。

  • BIT1 (I2C_IF_DIS): 置1禁用辅助I2C总线(如果只想用主I2C接口)。

  • BIT0 (SIG_COND_RESET): 置1复位所有信号路径和FIFO。

3) FIFO_EN (0x23):

控制哪些数据流(加速度计、陀螺仪、温度、辅助I2C)被写入FIFO缓冲区。

4) I2C_SLV* (0x25 - 0x40): 

一组寄存器,用于配置MPU6050作为I2C主机时如何与辅助I2C设备(如磁力计)通信(设置从机地址、寄存器、读写操作等)。

5) Registers 73 to 96 – External Sensor Data : 扩展Sensor的数据寄存器

3  基本使用流程

  1. 初始化I2C总线。

  2. 检查WHO_AM_I寄存器(0x75 确认设备连接正常(返回0x68)。

  3. 唤醒设备: 写PWR_MGMT_1寄存器(0x6B),将SLEEP位(BIT6)清零(通常同时设置CLKSEL001)。

  4. 配置量程: 写GYRO_CONFIG0x1B)设置陀螺仪量程(FS_SEL)。写ACCEL_CONFIG0x1C)设置加速度计量程(AFS_SEL)。

  5. 配置采样率和滤波器: 写SMPLRT_DIV0x19)设置分频系数。写CONFIG0x1A)设置DLPF_CFG

  6. (可选) 配置中断: 如果需要数据就绪中断,配置INT_PIN_CFG0x37),使能DATA_RDY_EN位(BIT0)在INT_ENABLE0x38)中。

  7. 循环读取数据:

    • 轮询INT_STATUS0x3A)的DATA_RDY_INT位或等待硬件中断。

    • ACCEL_XOUT_H0x3B)开始连续读取14个字节。

    • 将高低字节组合成16位有符号整数。

    • 根据配置的量程(FS_SELAFS_SEL)将原始值转换为物理量(°/s, g)。

    • 按公式转换温度数据。

参数配置范例:

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐