目录
1 mpu6050 学习
1.1 概述
- 1 mpu6050 学习
- 1.1 概述
- 1.2 引脚
- 1.3 关于中断信号
- 1.4 I2C通信协议
- 2 mpu6050驱动
- 2.1 初始化配置
- 2.2 获取数据
- 2.3 测试工程
- 3 预告
MPU-60X0:
- 具有嵌入式3轴MEMS陀螺仪、3轴MEMS加速度计和数字运动处理器(Digital Motion Processor,DMP)硬件加速器引擎,带有辅助I2C端口。
- 三个16位模数转换器(ADC),用于采样陀螺仪的输出。
- 三个16位模数转换器(ADC),用于采样加速度计的输出。
- 可编程陀螺仪满量程范围为±250、±500、±1000和±2000°/sec(dps),用户可编程加速计满量程范围为±2g、±4g、±8g和±16g。
- 使用最高400kHz的I2C或1MHz的SPI(仅限MPU-6000)与设备的所有寄存器进行通信。
- MPU-6000和MPU-6050完全相同,只是MPU-6050仅支持I2C串行接口,并且有一个单独的VLOGIC参考引脚。
AUX_DA和AUX_CL是一组辅助I2C接口,用于连接外部传感器。 SDA 和 SCL 是主I2C接口,用于我们读取数据。 AD0 为地址LSB选择引脚。 INT 为中断输出。
1.3 关于中断信号中断功能通过中断配置寄存器进行配置。可配置的项目包括INT引脚配置、中断锁定和清除方法,以及中断触发器。可触发中断的项目包括
- 1 锁定到新参考振荡器的时钟发生器(在切换时钟源时使用);
- 2 可读取新数据(从FIFO和数据寄存器);
- 3 加速计事件中断;
- 4 MPU-60X0没有从辅助I2C总线上的辅助传感器接收到确认。中断状态可以从中断状态寄存器中读取。
中断源可以配置为:
器件地址: b110100(AD0)
2 mpu6050驱动 2.1 初始化配置主要的寄存器:
- 1 复位
配置 0x6B 为 0x80 ,复位后 DEVICE_RESET 自动清零。默认值为0x40。 配置 0x6B 为 0x00 ,清除睡眠模式。
- 2 配置参数 设置满量程范围 配置 0x1B 为 0x18 , 陀螺仪满量程配置为 ± 2000 °/s。 配置 0x1C 为 0x00 , 陀螺仪满量程配置为 ± 2 g。
设置中断 配置 0x38 为 0x00 , 禁用中断
设置AUX I2C接口 配置 0x6A 为 0x00
设置FIFO 配置 0x23 为 0x00
设置采样率 Sample Rate = Gyroscope Output Rate / (1 + SMPLRT_DIV) Gyroscope Output Rate = 8kHZ(reg26.DLPF_CFG=0或7),Gyroscope Output Rate = 1kHZ(reg26.DLPF使能), 配置 0x19 为 0x63,Sample Rate = 1KHz / (1 + 99) = 100Hz
设置数字低通滤波器, 我们的采样率为100Hz,设置带宽为44Hz即可。 配置 0x1A 为 0x13。
设置系统时钟源为X轴陀螺仪PLL参考时钟 设置 0x6B 为 0x09
使能传感器 设置 0x6C 为 0x00
初始化函数:
// 初始化寄存器列表
static const uint8_t mpu6050_init_cmd[11][2] = {
{0x6B, 0x80}, // PWR_MGMT_1, DEVICE_RESET
// need wait
{0x6B, 0x00}, // cleat SLEEP
{0x1B, 0x18}, // Gyroscope Full Scale Range = ± 2000 °/s
{0x1C, 0x00}, // Accelerometer Full Scale Range = ± 2g
{0x38, 0x00}, // Interrupt Enable.disenable
{0x6A, 0x00}, // User Control.auxiliary I2C are logically driven by the primary I2C bus
{0x23, 0x00}, // FIFO Enable.disenable
{0x19, 0x63}, // Sample Rate Divider.Sample Rate = 1KHz / (1 + 99)
{0x1A, 0x13}, // EXT_SYNC_SET = GYRO_XOUT_L[0]; Bandwidth = 3
{0x6B, 0x01}, // Power Management 1.PLL with X axis gyroscope reference
{0x6C, 0x00} // Power Management 2
};
/**
* @brief 初始化 mpu6050
*/
esp_err_t mpu6050_init()
{
esp_err_t esp_err;
i2c_config_t conf = {
.mode = I2C_MODE_MASTER,
.sda_io_num = MPU6050_I2C_SDA, // select GPIO specific to your project
.sda_pullup_en = GPIO_PULLUP_ENABLE,
.scl_io_num = MPU6050_I2C_SCL, // select GPIO specific to your project
.scl_pullup_en = GPIO_PULLUP_ENABLE,
.master.clk_speed = MPU6050_I2C_FREQ, // select frequency specific to your project
// .clk_flags = 0, /*!< Optional, you can use I2C_SCLK_SRC_FLAG_* flags to choose i2c source clock here. */
};
esp_err = i2c_param_config(MPU6050_I2C_PORT_NUM, &conf);
printf("i2c_param_config: %d \n", esp_err);
esp_err = i2c_driver_install(MPU6050_I2C_PORT_NUM, I2C_MODE_MASTER, 0, 0, 0);
printf("i2c_driver_install: %d \n", esp_err);
for (size_t i = 0; i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?