• MPU6050简单初始化步骤如下(仅供参考):
  1. 复位MPU6050。配置电源管理寄存器1(0x6B),复位:将bit7写1实现,复位后,默认值0x40,然后设置0x00-->唤醒MPU6050。
  2. 选择X/Y/Z其中一个轴作为参考坐标。同样也是配置电源管理寄存器1(0x6B)。
  3. 设置陀螺仪的输出频率。配置采样率分频寄存器(0x07),采样频率 = 陀螺仪输出频率/(1+SMPLRT_DIV) 。当DLPF is disable(DLPF_CFG=0 or 7),陀螺仪输出频率=8kHz;当DLPF is enabled(寄存器26),陀螺仪输出频率=1kHz
  4. 设置低通滤波频率。配置寄存器(0x1A),当滤波频率超过90Hz时无明显滤波效果。
  5. 设置陀螺仪最大量程。配置陀螺仪配置寄存器(0x1B)。
  6. 设置加速计最大量程。配置加速度传感器配置寄存器(0x1C);
//MPU6050初始化
//1:复位设备
//2:关闭复位模式,使用Z轴陀螺仪作为参考时钟
//3:设定陀螺仪的输出频率为1KHz
//4:设置低通滤波频率为42
//5:陀螺仪最大量程 +-2000度每秒
//6:加速度计最大量程 +-8G
void MPU6050_Init(void)
{MPU6050_Write_Byte(MPU6050_RA_PWR_MGMT_1, 0x80); // 复位MPU6050vTaskDelay(100/portTICK_PERIOD_MS);MPU6050_Write_Byte(MPU6050_RA_PWR_MGMT_1, MPU6050_CLOCK_PLL_ZGYRO);    // 使用Z轴参考时钟//采样频率 = 陀螺仪输出频率/(1+SMPLRT_DIV) 当DLPF is disable(DLPF_CFG=0 or 7)//陀螺仪输出频率=8kHz;当DLPF is enabled(寄存器26),陀螺仪输出频率=1kHzMPU6050_Write_Byte(MPU6050_RA_SMPLRT_DIV, 1000/(1000) - 1); MPU6050_Write_Byte(MPU6050_RA_CONFIG, MPU6050_DLPF_BW_42);  //设置低通滤波频率,当滤波频率超过90Hz时无明显滤波效果MPU6050_Write_Byte(MPU6050_RA_GYRO_CONFIG, MPU6050_GYRO_FS);   //陀螺仪最大量程 + - 2000度每秒MPU6050_Write_Byte(MPU6050_RA_ACCEL_CONFIG, MPU6050_ACCEL_AFS); // 加速度计最大量程 +-8GMPU6050_Write_Byte(0x19, MPU6050_GYRO_FS); // 唤醒MPU6050
}
  • 从MPU6050寄存器中读取数据:
  1. 这里只读取MPU6050的陀螺仪、加速度计、温度的值。
  2. 加速度计的值分布在6个字节的地址上,分为X轴的高8位和低8位数据,Y轴的高8位和低8位数据,Z轴的高8位和低8位数据,寄存器地址为0x3B ~ 0x40。
  3. 同样陀螺仪的值也分布在6个字节的地址上,分为X轴的高8位和低8位数据,Y轴的高8位和低8位数据,Z轴的高8位和低8位数据,寄存器地址为0x43 ~ 0x48。
  4. 温度的值分为2个字节的地址,也是高八位和低八位。寄存器地址为0x41 ~ 0x42。
//从MPU6050传感器中获取陀螺仪、加速度计的原始值
//acc : 加速度计的值
//gyro: 陀螺仪的值
bool MPU6050_Read(Vector3i* acc, Vector3i* gyro)
{bool staue = false;uint8_t buf[14] = {0};staue = MPU6050_Read_NByte(MPU6050_RA_ACCEL_XOUT_H,buf,14);if(staue == true){acc->x = (int16_t)buf[0]<<8 | buf[1];acc->y = (int16_t)buf[2]<<8 | buf[3];acc->z = (int16_t)buf[4]<<8 | buf[5];gyro->x = (int16_t)buf[8]<<8 | buf[9];gyro->y = (int16_t)buf[10]<<8 | buf[11];gyro->z = (int16_t)buf[12]<<8 | buf[13];return true;}elsereturn false;
}
  • MPU6050寄存器地址宏定义如下:
#define MPU6050_ADDRESS_AD0_LOW 0xD0 // address pin low (GND), default for InvenSense evaluation board
#define MPU6050_ADDRESS_AD0_HIGH 0xD2 // address pin high (VCC)#define MPU6050_DEFAULT_ADDRESS MPU6050_ADDRESS_AD0_HIGH
#define MPU6050_RA_XG_OFFS_TC 0x00 //[7] PWRMODE, [6:1] XGOFFS_TC, [0] OTPBNKVLD
#define MPU6050_RA_YG_OFFS_TC 0x01 //[7] PWRMODE, [6:1] YGOFFS_TC, [0] OTPBNKVLD
#define MPU6050_RA_ZG_OFFS_TC 0x02 //[7] PWRMODE, [6:1] ZGOFFS_TC, [0] OTPBNKVLD
#define MPU6050_RA_X_FINE_GAIN 0x03 //[7:0] XFINEGAIN
#define MPU6050_RA_Y_FINE_GAIN 0x04 //[7:0] YFINEGAIN
#define MPU6050_RA_Z_FINE_GAIN 0x05 //[7:0] ZFINEGAIN
#define MPU6050_RA_XA_OFFS_H 0x06 //[15:0] XA_OFFS
#define MPU6050_RA_XA_OFFS_L_TC 0x07
#define MPU6050_RA_YA_OFFS_H 0x08 //[15:0] YA_OFFS
#define MPU6050_RA_YA_OFFS_L_TC 0x09
#define MPU6050_RA_ZA_OFFS_H 0x0A //[15:0] ZA_OFFS
#define MPU6050_RA_ZA_OFFS_L_TC 0x0B
#define MPU6050_RA_PRODUCT_ID   0x0C
#define MPU6050_RA_XG_OFFS_USRH 0x13 //[15:0] XGOFFSUSR
#define MPU6050_RA_XG_OFFS_USRL 0x14
#define MPU6050_RA_YG_OFFS_USRH 0x15 //[15:0] YGOFFSUSR
#define MPU6050_RA_YG_OFFS_USRL 0x16
#define MPU6050_RA_ZG_OFFS_USRH 0x17 //[15:0] ZGOFFSUSR
#define MPU6050_RA_ZG_OFFS_USRL 0x18
#define MPU6050_RA_SMPLRT_DIV 0x19  //采样率分频寄存器:0x07(125Hz)
#define MPU6050_RA_CONFIG 0x1A   //配置寄存器:0x06(5Hz)
#define MPU6050_RA_GYRO_CONFIG 0x1B  //陀螺仪配置寄存器
#define MPU6050_RA_ACCEL_CONFIG 0x1C //加速度传感器配置寄存器
#define MPU6050_RA_FF_THR 0x1D
#define MPU6050_RA_FF_DUR 0x1E
#define MPU6050_RA_MOT_THR 0x1F //运动检测阀值设置寄存器
#define MPU6050_RA_MOT_DUR 0x20
#define MPU6050_RA_ZRMOT_THR 0x21
#define MPU6050_RA_ZRMOT_DUR 0x22
#define MPU6050_RA_FIFO_EN 0x23  // FIFO使能寄存器
#define MPU6050_RA_I2C_MST_CTRL 0x24 // IIC主机控制寄存器
#define MPU6050_RA_I2C_SLV0_ADDR 0x25 // IIC从机0器件地址寄存器
#define MPU6050_RA_I2C_SLV0_REG 0x26 // IIC从机0数据地址寄存器
#define MPU6050_RA_I2C_SLV0_CTRL 0x27 // IIC从机0控制寄存器
#define MPU6050_RA_I2C_SLV1_ADDR 0x28 // IIC从机1器件地址寄存器
#define MPU6050_RA_I2C_SLV1_REG 0x29 // IIC从机1数据地址寄存器
#define MPU6050_RA_I2C_SLV1_CTRL 0x2A // IIC从机1控制寄存器
#define MPU6050_RA_I2C_SLV2_ADDR 0x2B // IIC从机2器件地址寄存器
#define MPU6050_RA_I2C_SLV2_REG 0x2C // IIC从机2数据地址寄存器
#define MPU6050_RA_I2C_SLV2_CTRL 0x2D // IIC从机2控制寄存器
#define MPU6050_RA_I2C_SLV3_ADDR 0x2E // IIC从机3器件地址寄存器
#define MPU6050_RA_I2C_SLV3_REG 0x2F // IIC从机3数据地址寄存器
#define MPU6050_RA_I2C_SLV3_CTRL 0x30 // IIC从机3控制寄存器
#define MPU6050_RA_I2C_SLV4_ADDR 0x31 // IIC从机4器件地址寄存器
#define MPU6050_RA_I2C_SLV4_REG 0x32 // IIC从机4数据地址寄存器
#define MPU6050_RA_I2C_SLV4_DO 0x33 // IIC从机4写数据地址寄存器
#define MPU6050_RA_I2C_SLV4_CTRL 0x34 // IIC从机4控制寄存器
#define MPU6050_RA_I2C_SLV4_DI 0x35 // IIC从机4读数寄存器
#define MPU6050_RA_I2C_MST_STATUS 0x36 // IIC主机状态寄存器
#define MPU6050_RA_INTPINCFG 0x37 // 中断/旁路设置寄存器
#define MPU6050_RA_INT_ENABLE 0x38 // 中断使能寄存器
#define MPU6050_RA_DMP_INT_STATUS 0x39
#define MPU6050_RA_INT_STATUS 0x3A // 中断状态寄存器
#define MPU6050_RA_ACCEL_XOUT_H 0x3B //0x3B~0x40 加速度传感器数据输出寄存器  H高8位 L低8位
#define MPU6050_RA_ACCEL_XOUT_L 0x3C
#define MPU6050_RA_ACCEL_YOUT_H 0x3D
#define MPU6050_RA_ACCEL_YOUT_L 0x3E
#define MPU6050_RA_ACCEL_ZOUT_H 0x3F
#define MPU6050_RA_ACCEL_ZOUT_L 0x40
#define MPU6050_RA_TEMP_OUT_H 0x41 // 温度传感器的值  H高8位  L低8位
#define MPU6050_RA_TEMP_OUT_L 0x42
#define MPU6050_RA_GYRO_XOUT_H 0x43 // 0x43~0x48 陀螺仪数据输出寄存器 H高8位  L低8位
#define MPU6050_RA_GYRO_XOUT_L 0x44
#define MPU6050_RA_GYRO_YOUT_H 0x45
#define MPU6050_RA_GYRO_YOUT_L 0x46
#define MPU6050_RA_GYRO_ZOUT_H 0x47
#define MPU6050_RA_GYRO_ZOUT_L 0x48
#define MPU6050_RA_I2C_SLV0_DO 0x63 // IIC从机0数据寄存器
#define MPU6050_RA_I2C_SLV1_DO 0x64 // IIC从机1数据寄存器
#define MPU6050_RA_I2C_SLV2_DO 0x65 // IIC从机2数据寄存器
#define MPU6050_RA_I2C_SLV3_DO 0x66 // IIC从机3数据寄存器
#define MPU6050_RA_I2C_MST_DELAY_CTRL 0x67 // IIC主机延时管理寄存器
#define MPU6050_RA_SIGNAL_PATH_RESET 0x68 // 信号通道复位寄存器
#define MPU6050_RA_MOT_DETECT_CTRL 0x69 // 运动检测控制寄存器
#define MPU6050_RA_USER_CTRL 0x6A // 用户控制寄存器
#define MPU6050_RA_PWR_MGMT_1 0x6B  // 电源管理寄存器1,复位:将bit7写1实现,复位后,默认值0x40,然后设置0x00-->唤醒MPU6050
#define MPU6050_RA_PWR_MGMT_2 0x6C // 电源管理寄存器2#define MPU6050_CLOCK_INTERNAL 0x00   // 内部8M晶振
#define MPU6050_CLOCK_PLL_XGYRO 0x01    // 参考X轴陀螺仪
#define MPU6050_CLOCK_PLL_YGYRO 0x02  // 参考y轴陀螺仪
#define MPU6050_CLOCK_PLL_ZGYRO 0x03    // 参考z轴陀螺仪
#define MPU6050_CLOCK_PLL_EXT32K 0x04   // 外部32.768KHz
#define MPU6050_CLOCK_PLL_EXT19M 0x05   // 外部19.2MHz
#define MPU6050_CLOCK_KEEP_RESET 0x07
// Register 26 ?Configuration
#define MPU6050_CFG_DLPF_CFG
#define MPU6050_DLPF_BW_256 0x00 // 当陀螺仪频率=8kHz时有效,#define MPU6050_GYRO_YG_ST 0x40
#define MPU6050_GYRO_ZG_ST 0x20
#define MPU6050_GYRO_FS_250 0x00 // +-250°/s
#define MPU6050_GYRO_FS_500 0x08 // +-500°/s
#define MPU6050_GYRO_FS_1000 0x10 // +-1000°/s
#define MPU6050_GYRO_FS_2000 0x18 // +-2000°/s
// Register 28 - Accelerometer Configuration
#define MPU6050_GYRO_XA_ST 0x80 // Self-test response = Sensor output with self-test enabled - Sensor output without self-test enabled
#define MPU6050_GYRO_YA_ST 0x40
#define MPU6050_GYRO_ZA_ST 0x20
#define MPU6050_ACCEL_AFS_2 0x00 // +-2g
#define MPU6050_ACCEL_AFS_4 0x08 // +-4g
#define MPU6050_ACCEL_AFS_8 0x10 // +-8g
#define MPU6050_ACCEL_AFS_16 0x18 // +-16g
  • HMC5883L磁力计初始化步骤如下(仅供参考):
  1. 设置采样平均数,输出速率,模式。配置寄存器A(地址0)。
  2. 设置周围磁场强度及高斯增益(地磁场强度大约0.5~0.6高斯)。配置寄存器B(地址1)。
  3. 设置测量模式。配置模式寄存器(地址2)。
//函数功能 : 磁力计初始化程序,初始化步骤为:
//1.设置采样平均数为0 , 输出速率为75Hz,正常模式
//2.设置周围磁场强度+-4.3Ga,高斯增益1090 (地磁场强度大约0.5~0.6高斯)
//3.设置为连续测量模式
void HMC5883L_Init(void)
{HMC5883L_Write_Byte(HMC58X3_R_CONFA, 0x78);    // 采样平均数默认,频率75Hz,正常模式HMC5883L_Write_Byte(HMC58X3_R_CONFB,0x20); // 设置周围磁场强度+-4.3Ga,高斯增益1090 (地磁场强度大约0.5~0.6高斯)HMC5883L_Write_Byte(HMC58X3_R_MODE,0x00); // 设置为连续测量模式
}
  • 从HMC5883L中读取数据:
  1. 磁力计的原始数据分布在6个字节的地址上,分为分为X轴的高8位和低8位数据,Y轴的高8位和低8位数据,Z轴的高8位和低8位数据,寄存器地址为3 ~8。(其中 7和8地址为Y轴的高八位和低八位)
bool statt = false;
//函数名称 : HMC5883L_Read
//函数输入 :
//1.mag : 读取到的三轴磁力计数据
//函数返回 : bool : 成功 返回true 失败 返回false
//函数功能 : 读取三轴磁力计的原始数据
bool HMC5883L_Read(Vector3i* mag)
{uint8_t buf[6] = {0};statt = HMC5883L_Read_NByte(HMC58X3_R_XM, buf, 6);if(statt == true){mag->x = (int16_t)buf[0] << 8 | buf[1];mag->y = (int16_t)buf[4] << 8 | buf[5];mag->z = (int16_t)buf[2] << 8 | buf[3];return true;}elsereturn false;
}

磁力计寄存器地址如下:

#define HMC58X3_R_CONFA  0
#define HMC58X3_R_CONFB 1
#define HMC58X3_R_MODE 2
#define HMC58X3_R_XM 3
#define HMC58X3_R_XL 4
#define HMC58X3_R_YM 7 //!< Register address for YM.
#define HMC58X3_R_YL 8 //!< Register address for YL.
#define HMC58X3_R_ZM 5 //!< Register address for ZM.
#define HMC58X3_R_ZL 6 //!< Register address for ZL.
#define HMC58X3_R_STATUS 9
#define HMC58X3_R_IDA 10
#define HMC58X3_R_IDB 11
#define HMC58X3_R_IDC 12
#define HMC5583l_ADDR 0x3C
#define CALIBRATING_MAG_CYCLES 3000 // n*20ms
#define HMC5583l_GAIN   1090    // 高斯增益

无人机底层开发-MPU6050六轴传感器+磁力计初始化相关推荐

  1. Micro Python———MPU6050六轴传感器

    目录 1.什么是MPU6050? MPU6050介绍: MPU6050寄存器介绍: 2.例程 1.平台 2.目的 3.讲解 1.查阅原理图 2.流程分析 3.代码讲解 3.结果 1.什么是MPU605 ...

  2. mpu6050六轴传感器msp430驱动程序

    玩智能车的可以参考 #include <msp430g2553.h> #include"mpu6050.h" #include "USCI_A0.h" ...

  3. 正点原子 第65讲 MPU6050 六轴传感器实验

    1.MPU6050 简介 2 硬件 连接 3 源码讲解& 例程测试 上图中2   单位表示的是  度/每秒 INT  为中断输出脚 CS 为片选脚 AD0/SD0   用于设置地址    AD ...

  4. 《手把手教你学STM32》—MPU6050六轴传感器实验

    预备知识(基于STM32开发板(正点原子)) 1.MPU6050简介 1.1.MPU6050简介-什么是MPU6050? MPU6050是InvenSense公司推出的全球首款整合性6轴运动处理组件, ...

  5. i.MX6ULL终结者MPU6050 六轴传感器例程原理分析

    MPU6050的原理部分,如图 1所示: 图 1 从原理我们可以看到MPU6050的电源使用3.3V,和i.MX6ULL通过I2C2接口,地址选择引脚AD0接到了GND上.

  6. 【飞控开发基础教程6】疯壳·开源编队无人机-SPI(六轴传感器数据获取)

    COCOFLY教程 --疯壳·无人机·系列 SPI(六轴传感器数据获取)          图1               一.ICM20602 简介     六轴传感器在当今智能穿戴和定位导航产品 ...

  7. 【开源教程13】疯壳·开源编队无人机-SPI(六轴传感器数据获取)

    COCOFLY教程 --疯壳·无人机·系列 SPI(六轴传感器数据获取)          图1               一.ICM20602 简介     六轴传感器在当今智能穿戴和定位导航产品 ...

  8. 如何利用小熊派获取MPU6050六轴原始数据

    摘要:使用小熊派开发板,通过硬件IIC与MPU6050六轴传感器模块通信,完成相应寄存器配置,成功获取陀螺仪.加速度计数据. 本问主要讲述使用小熊派开发板+MPU6050六轴传感器,获取加速度计以及陀 ...

  9. 六轴传感器基础知识学习:MPU6050特性,四元数,姿态解算,卡尔曼滤波

    实际上,只要说到多少轴的传感器一般是就是指加速度传感器(即加速计).角速度传感器(即陀螺仪).磁感应传感器(即电子罗盘).这三类传感器测量的数据在空间坐标系中都可以被分解为X,Y,Z三个方向轴的力,因 ...

  10. STM32学习值传感器篇——MPU6050六轴加速度传感器

    这个传感器整体来说不难只要将模拟iic的时序写对基本问题不大 剩下的驱动文件 按照我介绍的加进去就可以实现了,还是有官方算法的好啊,直接用就完事了,很方便,节省了不少代码开发时间, 注意mpu6050 ...

最新文章

  1. 从pandas resample说起,然后再超越resample,通过pd.Grouper、groupby、agg
  2. 图灵出品的人气O'Reilly动物书,你更钟意哪本?
  3. Nosql简介 Redis,Memchche,MongoDb的区别
  4. java开发的增查改删_在Java中实现增、删、改、查功能?
  5. 天津理工大学 计算机网络综合实验,天津理工大学计算机网络 实验二
  6. 学完php在学python_写给PHP程序员的 Python学习指南(建议去看原文)
  7. 根据注释生成项目文档
  8. 开源中国 4 周年, 三个平台客户端全面开源
  9. 华为证实 P40 将没有 Google 服务;李世石退役;Python 3.8.1 发布 | 极客头条
  10. 电脑照片抠图软件哪个好?来看看这两个简单好用的工具
  11. 小程序tabBar图标显示太大
  12. 2022年全国图书参考联盟读秀5.0/4.0/3.0/2.0/1.0书库网盘数据索引在线搜索查询系统搭建教程,可以实现ISBN/SS号/书封面链接/书名/作者/出版社…等信息一键搜索查询
  13. MXF Operational Pattern 1a (OP1a)
  14. 2022年10月总结 (距离激动人心的928已经过去一个多月了)
  15. 隐藏Excel单元格重要数值,不显示数值
  16. 关于 SwiperJS 的初次使用
  17. 苏州驾考科目三考试攻略
  18. 为什么越长大越不想过生日
  19. 单页双曲面 matlab,在matlab中画函数(x^2+y^2)/9-z^2/4=1的旋转单叶双曲面
  20. android 双卡铃声,铃声多多双卡版

热门文章

  1. 颜值即正义的时代,你还不懂直播特效的实现原理与难点?
  2. html连接有道词典api,调用网易有道词典api
  3. python交通流预测代码,使用python进行交通流量预测
  4. PS CC 2014使用到期解决方法,其他类似
  5. 路由器(无线桥接)中继模式遇到无法上网的解决方案
  6. 微信开发之百度地图API学习(一)
  7. 语义分割学习——残差网络ResNet
  8. 手机投屏不是全屏怎么办_手机投屏怎么设置全屏
  9. paypal android app,PayPal
  10. 算法快学笔记(一):算法入门