欢迎入群共同学习交流
时间记录: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] |
一般设置带宽=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