基于STM32单片机控制mpu6050六轴陀螺仪模块读取加速度和角速度

欢迎入群共同学习交流
时间记录:2024/11/14

一、知识点记录

400KHz的IIC接口
1.端口介绍

端口名 介绍
VCC 电源引脚接3.3V
GND 电源地
SCL 时钟引脚
SDA 数据引脚
XDA 从IIC接口数据引脚
XCL 从IIC接口时钟引脚
AD0 设备地址选择引脚,AD0=0,则设备地址为0x68,AD0=1,则设备地址为0x69,地址最低位表示读写
INT 中断输出引脚

2.初始化步骤
1)初始化IIC接口
2)复位MPU6050
3)设置角速度传感器和加速度传感器的满量程范围
4)设置其他参数
5)设置系统时钟
6)使能角速度和加速度传感器

3.常用寄存器介绍
1)电源管理寄存器1(0x6B)

Bit7 6 5 4 3 2 1 0
DEVICE_RESET SLEEP CYCLE - TEMP_DIS CLK[2:0]

DEVICE_RESET=1,复位MPU6050,复位完成后,自动清零
SLEEP=1,进入睡眠模式,SLEEP=0,正常工作模式
TEMP_DIS=0,使能温度传感器,TEMP_DIS=1,失能温度传感器
CLKSEL[2:0] – 时钟源
000 – 内部8M RC晶振
001 – PLL,使用X轴陀螺作为参考,一般选择此时钟源
010 – PLL,使用Y轴陀螺作为参考
011 – PLL,使用Z轴陀螺作为参考
100 – PLL,使用外部32.768KHz作为参考
101 – PLL,使用外部19.2MHz作为参考
110 – 保留
111 – 关闭时钟,保持时序产生电路复位状态
2)陀螺仪配置寄存器(0x1B)

Bit7 6 5 4 3 2 1 0
XG_ST YG_ST ZG_ST FS_SEL[1:0] - - -

XYZG_ST,用于自测试
FS_SEL[1:0],用于设置陀螺仪的满量程范围0,±250°/S;1,±500°/S;2,±1000°/S;3,±2000°/S,假设设置为3,由于陀螺仪ADC为16位分辨率,所以灵敏度为65536/4000=16.4LSB/(°/S)
3)加速度传感器配置寄存器(0x1C)

Bit7 6 5 4 3 2 1 0
XA_ST YA_ST ZA_ST AFS_SEL[1:0] - - -

XYZA_ST,用于自测试
AFS_SEL[1:0],用于设置满量程范围,0,±2g;1,±4g;2,±8g;3,±16g,假设设置为0,灵敏度为65536/4=16384LSB/g
4)陀螺仪采样率分频寄存器(0x19)
8位SMPLRT_DIV[7:0],设置采样频率,计算公式为:采样频率=陀螺仪输出频率/(1+SMPLRT_DIV),陀螺仪输出频率为1KHz或8KHz,与数字低通滤波器(DLPF)的设置有关,当DLPF_CFG=0/7时,频率为8KHz,其他情况为1KHz
5)配置寄存器(0x1A)

Bit7 6 5 4 3 2 1 0
- - EXT_SYNC_SET[2:0] DLPF_CFG[2:0]

DLPF_CFG
一般设置带宽=1/2采样率
6)电源管理寄存器2(0x6C)

Bit7 6 5 4 3 2 1 0
LP_WAKE_CTRL[1:0] STBY_XA STBY_YA STBY_ZA STBY_XG STBY_YG STBY_ZG

LP_WAKE_CTRL[1:0]控制低功耗时的唤醒频率,其余6位分别控制加速度和陀螺仪的x/y/z轴是否进入待机模式
7)加速度传感器数据输出寄存器(0x3B-0x40)
3B:ACCEL_XOUT[15:8]
3C:ACCEL_XOUT[7:0]
3D:ACCEL_YOUT[15:8]
3E:ACCEL_YOUT[7:0]
3F:ACCEL_ZOUT[15:8]
40:ACCEL_ZOUT[7:0]
高位在前,低位在后组成16位数据,最高位表示符号
8)陀螺仪数据输出寄存器(0x43-0x48)
43:GYRO_XOUT[15:8]
44:GYRO_XOUT[7:0]
45:GYROL_YOUT[15:8]
46:GYRO_YOUT[7:0]
47:GYRO_ZOUT[15:8]
48:GYRO_ZOUT[7:0]
9)温度数据输出寄存器(0x41-0x42)
41:TEMP_OUT[15:8]
42:TEMP_OUT[7:0]
计算公式temp = 36.53+regval/340(℃),regval为读取到的寄存器值

二、示例代码

头文件

#ifndef __MPU6050_H__
#define __MPU6050_H__

#include "stm32f10x.h"

void mpu6050Init(void);
void mpu6050GetData(int16_t* ax, int16_t* ay, int16_t* az, int16_t* gx, int16_t* gy, int16_t* gz);

#endif

源文件

#include "mpu6050.h"
#include "delay.h"

/**
 * IIC通信过程
 * 起始位+(8位地址+读写位)寻址+应答+数据+应答+停止位
*/

#define SCLOUT(x)   GPIO_WriteBit(GPIOB, GPIO_Pin_9, (BitAction)(x))
#define SDAOUT(x)   GPIO_WriteBit(GPIOB, GPIO_Pin_8, (BitAction)(x))
#define SDAIN       GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_8)

// MPU6050 REG ADDR
#define MPU6050_ADDR 0x68 // 0110 1000
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值