陀螺仪MPU6050(IIC&源码) 您所在的位置:网站首页 陀螺仪六轴线加速度怎么调节 陀螺仪MPU6050(IIC&源码)

陀螺仪MPU6050(IIC&源码)

2024-07-11 00:16| 来源: 网络整理| 查看: 265

1. 陀螺仪

1.1 什么是陀螺仪?

检测角度变化的一个装置。

1.1.1 有什么用??

用于检测角度变化,用角度变化的值判断物体的运动轨迹。

1.1.2 我们怎么用?

我们是使用这个装置(或者说设备)获取到数据,再使用这个数据得到我们想要的信息。

这里我使用陀螺仪获取板子的运动轨迹(其实是陀螺仪的运动轨迹)。

​​​​​​​1.1.4 看原理图

 

又又又使用的是IIC通信协议,而且引脚又是PB6和PB7。

​​​​​​​1.1.5 地址是多少??

结合原理图可以知道地址是0x68。 

​​​​​​​1.1.6 陀螺仪如何工作?

陀螺仪在你设置好参数之后,就会根据你设置的参数获取数据,数据存储在对应的寄存器中,你可以通过对应寄存器读取到想要的数据。

​​​​​​​1.1.7 参数怎么设置?

源码m:

mpu6050.c

#include "mpu6050.h" #include "systick.h" #include "usart1.h" /********************************************************************************************************* * 函 数 名 : Mpu6050_Init * 功能说明 : 初始化MPU6050 * 形 参 : 无 * 返 回 值 : 0:成功;其他:错误代码 * 备 注 : 无 *********************************************************************************************************/ unsigned char Mpu6050_Init(void) { unsigned char res; GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_SetBits(GPIOB, GPIO_Pin_6 | GPIO_Pin_7); Mpu6050_WriteByte(MPU_PWR_MGMT1_REG, 0X80); //复位MPU6050 delay_ms(500); delay_ms(500); Mpu6050_WriteByte(MPU_PWR_MGMT1_REG, 0X00); //唤醒MPU6050 Mpu6050_SetGyroFsr(3); //陀螺仪传感器,±2000dps Mpu6050_SetAccelFsr(0); //加速度传感器,±2g Mpu6050_SetRate(50); //设置采样率50Hz Mpu6050_WriteByte(MPU_INT_EN_REG, 0X00); //关闭所有中断 Mpu6050_WriteByte(MPU_USER_CTRL_REG, 0X00); //I2C主模式关闭 Mpu6050_WriteByte(MPU_FIFO_EN_REG, 0X00); //关闭FIFO Mpu6050_WriteByte(MPU_INTBP_CFG_REG, 0X80); //INT引脚低电平有效 res = Mpu6050_ReadByte(MPU_DEVICE_ID_REG); if(res == MPU_ADDR){ //器件ID正确 Mpu6050_WriteByte(MPU_PWR_MGMT1_REG, 0X01); //设置CLKSEL,PLL X轴为参考 Mpu6050_WriteByte(MPU_PWR_MGMT2_REG, 0X00); //加速度与陀螺仪都工作 Mpu6050_SetRate(50); //设置采样率为50Hz }else{ return 1; } return 0; } /********************************************************************************************************* * 函 数 名 : Mpu6050_SetGyroFsr * 功能说明 : 设置MPU6050陀螺仪传感器满量程范围 * 形 参 : fsr:0,±250dps;1,±500dps;2,±1000dps;3,±2000dps * 返 回 值 : 0:成功;其他:失败 * 备 注 : 无 *********************************************************************************************************/ unsigned char Mpu6050_SetGyroFsr(unsigned char fsr) { return Mpu6050_WriteByte(MPU_GYRO_CFG_REG, fsr= 20){ data = 4; }else if(lpf >= 10){ data = 5; }else{ data = 6; } return Mpu6050_WriteByte(MPU_CFG_REG, data); //设置数字低通滤波器 } /********************************************************************************************************* * 函 数 名 : Mpu6050_SetRate * 功能说明 : 设置MPU6050的采样率(假定Fs=1KHz) * 形 参 : rat:4~1000(Hz) * 返 回 值 : 0:成功;其他:失败 * 备 注 : 无 *********************************************************************************************************/ unsigned char Mpu6050_SetRate(unsigned short rate) { unsigned char data; if(rate > 1000){ rate = 1000; } if(rate < 4){ rate = 4; } data = 1000/rate - 1; data = Mpu6050_WriteByte(MPU_SAMPLE_RATE_REG, data); //设置数字低通滤波器 return Mpu6050_SetLPF(rate/2); //自动设置LPF为采样率的一半 } /********************************************************************************************************* * 函 数 名 : usart1_report_imu * 功能说明 : 通过串口一上报姿态数据 * 形 参 : roll:横滚角;pitch:俯仰角;yaw:航向角; * 返 回 值 : 无 * 备 注 : 此函数上报至匿名上位机(v7),传入的角度数据应扩大100倍 *********************************************************************************************************/ void usart1_report_imu(short roll, short pitch, short yaw) { unsigned char tbuf[20] = {0}; unsigned char cnt = 0, i = 0; unsigned char sumcheck = 0; unsigned char addcheck = 0; tbuf[cnt++] = 0xaa; //帧头 tbuf[cnt++] = 0xff; //目标地址 tbuf[cnt++] = 0x03; //功能码,0x03:飞控姿态,欧拉角模式 tbuf[cnt++] = 0x07; //数据长度固定7个 tbuf[cnt++] = BYTE0(roll); tbuf[cnt++] = BYTE1(roll); tbuf[cnt++] = BYTE0(pitch); tbuf[cnt++] = BYTE1(pitch); tbuf[cnt++] = BYTE0(yaw); tbuf[cnt++] = BYTE1(yaw); tbuf[cnt++] = 255; //融合状态 for(i=0; i


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有