MPU6050模块详解:从寄存器配置到数据读取(中) | 零基础入门STM32第九十步

主题 内容 教学目的/扩展视频
加速度传感器 电路连接。手册分析。驱动程序,读出数据。 能读出3轴数据。

师从洋桃电子,杜洋老师


文章目录

    • 一、MPU6050驱动程序分析概述
      • 1.1 驱动程序核心原理
      • 1.2 驱动开发关键点
    • 二、MPU6050数据手册关键解析
      • 2.1 芯片型号对比
      • 2.2 核心特征
    • 三、寄存器映射与关键寄存器详解
      • 3.1 寄存器地址空间
      • 3.2 关键寄存器配置示例
        • 3.2.1 陀螺仪配置(GYRO_CONFIG)
        • 3.2.2 电源管理(PWR_MGMT_1)
    • 四、原始数据显示程序分析
      • 4.1 数据读取流程
      • 4.2 数据转换公式
      • 4.3 典型配置序列
    • 五、相关资源


▲ 回顾上期MPU6050模块详解:从原理到STM32驱动指南(上) | 零基础入门STM32第八十九步


一、MPU6050驱动程序分析概述

1.1 驱动程序核心原理

MPU6050驱动程序的核心是通过I2C总线与芯片通信,读写内部寄存器实现功能配置和数据采集。其核心流程包括:
初始化配置:设置量程、采样率、滤波参数等
数据采集:读取加速度、陀螺仪原始数据寄存器
数据处理:原始数据转换与实际物理量计算

1.2 驱动开发关键点

I2C初始化
寄存器配置
数据采集
数据解析
数据应用

二、MPU6050数据手册关键解析

2.1 芯片型号对比

特性 MPU6050 MPU6000
接口 I2C(400kHz) SPI(20MHz)/I2C
逻辑电平 独立VLOGIC引脚 共用VDD供电
封装尺寸 4x4x0.9mm QFN 相同封装
应用场景 消费电子、穿戴设备 工业级应用

2.2 核心特征

9轴数据融合:3轴陀螺仪 + 3轴加速度计 + 外接磁力计
数字运动处理器(DMP):硬件级姿态解算
可编程配置
• 陀螺仪量程:±250°/s ~ ±2000°/s
• 加速度计量程:±2g ~ ±16g
• 数字低通滤波器可调


三、寄存器映射与关键寄存器详解

3.1 寄存器地址空间

#define SMPLRT_DIV  0x19   // 采样率分频器
#define CONFIG      0x1A   // 配置寄存器
#define GYRO_CONFIG 0x1B   // 陀螺仪配置
#define ACCEL_CONFIG 0x1C  // 加速度计配置
#define FIFO_EN     0x23   // FIFO使能
#define INT_PIN_CFG 0x37   // 中断引脚配置
#define ACCEL_XOUT_H 0x3B  // 加速度X轴高字节
#define GYRO_XOUT_H  0x43  // 陀螺仪X轴高字节
#define PWR_MGMT_1  0x6B   // 电源管理

3.2 关键寄存器配置示例

3.2.1 陀螺仪配置(GYRO_CONFIG)
// 设置量程为±2000°/s
writeByte(MPU6050_ADDR, GYRO_CONFIG, 0x18);

位域解析:

[7-5] X/Y/Z轴自检
[4-3] FS_SEL:00(±250), 01(±500), 10(±1000), 11(±2000)
3.2.2 电源管理(PWR_MGMT_1)
// 唤醒设备,选择时钟源
writeByte(MPU6050_ADDR, PWR_MGMT_1, 0x01);

时钟源选择:

000: 内部8MHz RC振荡器
001: PLL with X轴陀螺仪参考

四、原始数据显示程序分析

4.1 数据读取流程

void readRawData(int16_t* accel, int16_t* gyro){
    uint8_t buffer[14];
    readBytes(MPU6050_ADDR, ACCEL_XOUT_H, 14, buffer);
    
    accel[0] = (buffer[0]<<8) | buffer[1];  // X轴加速度
    accel[1] = (buffer[2]<<8) | buffer[3];  // Y轴加速度
    accel[2] = (buffer[4]<<8) | buffer[5];  // Z轴加速度
    
    gyro[0]  = (buffer[8]<<8)  | buffer[9];  // X轴陀螺仪
    gyro[1]  = (buffer[10]<<8) | buffer[11]; // Y轴陀螺仪
    gyro[2]  = (buffer[12]<<8) | buffer[13]; // Z轴陀螺仪
}

4.2 数据转换公式

加速度转换(以±2g量程为例):

实际值(g) = 原始值 / 16384

陀螺仪转换(以±2000°/s量程为例):

角速度(°/s) = 原始值 / 16.4

4.3 典型配置序列

void initMPU6050(){
    writeByte(MPU6050_ADDR, PWR_MGMT_1, 0x00);    // 解除休眠
    writeByte(MPU6050_ADDR, SMPLRT_DIV, 0x07);    // 1kHz/(7+1)=125Hz
    writeByte(MPU6050_ADDR, CONFIG, 0x06);        // 5Hz低通滤波
    writeByte(MPU6050_ADDR, GYRO_CONFIG, 0x18);  // ±2000°/s
    writeByte(MPU6050_ADDR, ACCEL_CONFIG, 0x10); // ±8g
}

五、相关资源

[1] 洋桃电子B站课程-STM32入门100步
[2] STM32官方文档手册
[3] STM32F103固件函数库用户手册(中文)
[4] MPU6050(加速度传感器)数据手册
[5] MPU6050原始数据显示程序
[6] MPU6050原理与驱动.pptx


技术讨论(请在评论区留言~)

下期预告:下一期将探讨MPU6050驱动程序分析2,欢迎持续关注!

点击查阅往期【STM32专栏】文章

版权声明:本文采用[CC BY-NC-SA 4.0]协议,转载请注明来源
实测开发版:洋桃1号开发版(基于STM32F103C8T6)
更新日志

  • v1.0 初始版本(2025-03-31)

你可能感兴趣的:(STM32入门教程(100步),stm32,驱动开发,单片机,嵌入式硬件,物联网)