【STM32+cubemx】0027 HAL库开发:MPU6050陀螺仪和加速度计数据的获取和校准

2023-05-16

在制作平衡车或者飞行器时,不可避免地需要知道设备本身的姿态,一般我们使用陀螺仪和加速度计来获取这些信息。

陀螺仪用来测量物体的角度。传统的机械式陀螺的原理,和我们小时候玩的陀螺一样,是利用了高速旋转的物体能保持轴线稳定的特性;机械式陀螺需要的加工精度非常高,但是测角精度一般。后来发展出来的光纤陀螺和激光陀螺虽然原理上已经有了很大不同,但还是沿用了陀螺仪这个叫法,它们的精度要比机械式的陀螺高很多,价格也较贵。MEMS陀螺是基于微机电技术,它的突出特点是体积小、成本低,但是初始精度低,一般需要校准后才能获得较理想的数据;目前市面上常见的小型飞行器、平衡车,都是用的MEMS陀螺,正是由于低成本MEMS器件的出现,近年来小型无人机得到了飞速发展。

加速度计用来测量物体的加速度,进而可以积分后得到物体的速度和位移。

在一般的姿态测量的应用中,加速度计还可以用于校准陀螺仪的数据。这是因为加速度计可以实时测量重力加速度,根据重力加速度的方向,可以知道物体本身的一些姿态信息。陀螺仪的数据在较短时间内是比较准确的,但是长时间会有误差累积;所以,陀螺仪长时间的数据需要通过加速度计测得的重力角度来修正。

MPU6050集成了3轴陀螺仪和3轴加速度计,可以获取物体的姿态和运动信息。陀螺仪可测范围为±250,±500,±1000,±2000°/秒,加速度计可测范围为±2,±4,±8,±16g,使用16bitAD采样。使用I2C接口通信。

本节我们就来使用STM32获取MPU6050的加速度和角速度数据,并介绍一种简单的初始校准方法,最后使用匿名四轴地面站来显示加速度和角速度的波形图。

1)MPU6050硬件介绍

本文使用的是下图这种MPU6050模块(GY521):

模块的电路板上,已经标明了X轴、Y轴的方向,而Z轴的方向由X轴、Y轴通过右手定则确定。

至于各角速度的方向,也是通过右手定则确定,如下图:

如果想把MPU6050集成到自己的电路板上,可以参考如下原理图设计:

使用LDO降压成3.3V作为MPU6050的供电;对外的接口最少需要连接VCC_5V、GND供电线,SCL、SDA I2C通信线。

本文把I2C的两根线连接到STM32的I2C1对应的引脚上。

2)配置cubemx工程

设置I2C1接口,速率为400KHz:

设置好后,生成keil工程。

3)MPU6050原始数据的获取

STM32的HAL库生成的硬件I2C代码有个bug,这里我们先修正一下:

就是I2C初始化的如下函数,需要添加一句,把时钟初始化的内容提到GPIO初始化之前,如果不修改,硬件I2C有时不能用。

编写代码时,将HAL库的I2C读写代码封装一下,以便于后面使用:

初始化MPU6050,如果我们只用最基本的功能,只要芯片唤醒,设置采样率、滤波器、量程等操作就可以了:(具体的寄存器含义,可以查看芯片数据手册)

初始化完成后,就可以读取MPU6050的数据了,我们需要获取的加速度和角速度数据,在寄存器ACCEL_XOUT_H(0x3B)为起始地址的14个字节中,其中前6个字节是三个方向的加速度,最后6个字节是三个方向的角速度。

主函数中,整个使用过程如下:

先调用MPU6050_Init()初始化、再使用MPU6050_Get()函数循环读取数据,打印输出。

依据前面设置的量程和采样bit位数,将加速度的原始数据还原成了g的倍数,角速度值还原成了°/s:

上述代码运行后,结果如图:

这是把传感器水平放置、静止时的测量原始值打印输出;可以看到,Z轴的加速度初始误差很大,达到了0.3个g左右;同样,X轴的角速度误差也很大。这样大的初始误差是不方便使用的。

4)简单的初始校准方法

一种简单的初始值校准方法,可以依据下面的方法实现:将MPU6050传感器固定好一个角度(如Z轴竖直向上),并且保持静止;这样它测量到的加速度值就只有单一的重力加速度,而角速度应为0,我们只要记录一定数据的数据取平均,就能得知初始的加速度、角速度偏移。

具体实现的代码实现如下:

执行完后,ax_cl、ay_cl…等几个变量中,就保存好了各方向的加速度、角速度的零位偏移值,以后使用时,获取原始数据后,再减去这些零位偏移,就能获得校准后的值。

将MPU6050_Get()函数作如下改写,就能实现获取校准后的值:

主函数中,while(1)之前增加一次校准函数MPU6050_calibrate()的调用,再次测试结果如下:

可以看到,三个方向的加速度的偏差已经非常小,X轴和Y轴的角速度的偏差也比未校准前小了几个数量级。对于MPU6050这种精度较低的MEMS器件,依靠这样一个方向的校准数据也可以获取不错的效果。

5)波形显示

为了跟直观地显示各方向的加速度和角速度值,我们可以通过一些工具来显示波形图,这里我们使用匿名四轴的上位机软件来显示。

只需要按照它的格式将数据发到上位机,就能显示出波形,匿名四轴上位机的通信协议(V7版)如下:

我们按此格式将加速度、角速度的值填入,通过串口发送到上位机,就能显示了,实际测试图形如下:(显示的是Z轴的加速度和角速度)

在实际的应用中,加速度计和陀螺仪的数据需要融合,比如通过互补滤波或者卡尔曼滤波,才能获取更准确的姿态信息;传感器数据的初始校准,也不仅仅是测试一个方向、剔除零位这么简单。有兴趣的可以找更专业的书籍深入学习。

好了,本节关于MPU6050的一些基本应用就讲到这里了。

欢迎关注我的微信公众号:小白白学电子,可留言“资料”获取所有源码和参考资料:

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【STM32+cubemx】0027 HAL库开发:MPU6050陀螺仪和加速度计数据的获取和校准 的相关文章

  • 教你玩转Linux—用户账号的管理

    导读用户账号的管理工作主要涉及到用户账号的添加 修改和删除 添加用户账号就是在系统中创建一个新账号 xff0c 然后为新账号分配用户号 用户组 主目录和登录Shell等资源 刚添加的账号是被锁定的 xff0c 无法使用 1 添加新的用户账号
  • 【CMAKE系列】cmake中CMakeLists.txt脚本的常用语法

    在不同的平台编译的时候 xff0c 会用到一些系统内置的变量 xff0c 比如操作系统名称 xff0c 版本号之类 xff1a CMAKE SYSTEM xff1a 系統全名 xff0c 如 Linux 2 4 22 xff0c FreeB
  • linux usb usbip驱动详解(一)

    在分析usbip驱动前 xff0c 我们先来学习一下usb总线在linux系统下的表示 我们知道在linux中 xff0c proc和 sys这个两个文件系统包含了很多有用的信息 xff0c 所以usb的信息自然也少不了利用它们来展示 1
  • linux usb usbip驱动详解(二)

    终于来到usbip驱动代码分析了 xff01 我们在做产品时 xff0c 通常是先讨论方案 制定协议 编码和测试 usbip的方案是行得通的 xff0c 它是从URB对象获取信息 xff0c 然后从tcp发送出去的 xff0c URB是li
  • linux usb usbip驱动详解(四)

    我们先讲解vhci hcd驱动 xff08 linux 4 20 14的usbip驱动 xff09 usb主机控制器驱动hcd学习心得 xff1a 可以阅读某款SOC的主机控制器驱动代码 xff0c 譬如TI的am3358芯片 xff0c
  • docker 启动 centos-7 xrpd server

    docker 启动 centos 7 xrpd server 效果预览 docker 启动 centos 7 xrpd server 连接容器 docker run dit name 61 xrdp p 10022 22 p 13389 3
  • 常见数据结构和算法 的图形界面可视化实现

    解压后 xff0c 运行里面的index html xff0c 推荐火狐浏览器下 针对某一数据结构 或 算法的实现 xff0c 有动态的界面演示 xff0c 并且有相应的代码 xff0c 对学习有很好的参考作用 http pan baidu
  • 再见,2012,你好,2013.

    其实这篇日志过年前 xff0c 已经写得差不多 xff0c 但是忘记发了 xff0c 现在补上 xff0c 现在应该还不是太晚吧 ps xff1a 想了一个很俗的标题 61 61 2012年 xff0c 是对我意义最不平凡的一年 这一年 x
  • 无人机—加速度计与光流数据融合

    加速度计与光流数据融合 无人机的定点定高飞行时实现目标识别追踪 xff0c 航点规划 xff0c 循迹巡线等下一个任务的基础 xff0c 稳定的定高定点飞行才能执行其他高级算法 在室内没有GPS的情况下 xff0c 要想实现这个目标 xff
  • 【转】C语言中 -> 是什么意思?

    gt 是一个整体 xff0c 它是用于指向结构体 C 43 43 中的class等含有子数据的指针用来取子数据 换种说法 xff0c 如果我们在C语言中定义了一个结构体 xff0c 然后申明一个指针指向这个结构体 xff0c 那么我们要用指
  • GIS开发学习推荐书目

    书名 作者 出版社 版次 GIS 基础 地理信息系统导论 US Kang tsung Chang xff1b 陈健飞 译 电子工业出版社 第七版 ArcGIS地理信息系统空间分析实验教程 汤国安 杨昕 科学出版社 第二版 编程 基础 C语言
  • SINS/GNSS组合导航:组合导航设计(卡尔曼滤波)

    SINS GNSS组合导航将SINS输出信息与GNSS信息进行组合 xff0c 状态量为 卡尔曼滤波原理参照卡尔曼滤波 xff08 KF xff09 与扩展卡尔曼滤波 xff08 EKF xff09 讲解与推导 xff0c 核心就是五个递推
  • VSLAM学习(一) 三维运动、相机模型、SLAM模型

    目录 VSLAM学习 一 三维运动 相机模型 SLAM模型 VSLAM学习 二 非线性优化 VSLAM学习 三 单目相机位姿估计 VSLAM学习 四 Bundle Adjustment 一 三维空间刚体运动 1 1 旋转矩阵 同一向量在不同
  • ssh远程提示“找不到匹配的keyexchange算法”解决方案

    20230216更新 xff1a xshell官网地址 xff1a https www xshell com zh free for home school 新的知识 xff1a 是因为openssh版本比自己的ssh工具如xshell4版
  • JAVA中的类和对象之this的详解

    系列文章目录 第一章 JAVA中的类和对象之this的详解 目录 前言 一 为什么要有this引用 二 this的三种用法 1 this 成员变量 2 this 成员方法 3 this 调用其它的构造方法 三 this的引用特性 前言 JA
  • 这么学,好玩,有趣,逗死了!(2017年系统规划与管理师上午综合知识试题试题解析(六))

    IT服务风险管理中 xff0c 对风险的识别是很重要的一项工作 识别方法中 xff0c 通常采用文档审查 信息收集技术 检查表 分析假设和图解技术 下面 xff08 xff09 选项不属于信息采集技术 xff08 51 xff09 A 德尔
  • 松滋历史(1)--松滋县建县历史考证

    刘鲋鮈总共4个儿子 xff1a 刘建德 刘梁 刘延年 刘度 长沙顷王刘鲋鮈的儿子刘梁 汉昭帝始元六年 xff08 公元前81年 xff09 xff0c 六月乙未封高城节侯 汉宣帝元康元年 xff08 公元前65年 xff09 xff0c 正
  • 松滋历史(2)--高成县为什么这么高光?

    东汉开国皇帝刘秀 xff0c 是长沙定王刘发第5代世孙 也就是说 xff0c 东汉开国皇帝刘秀爷爷的爷爷与高城侯刘梁 xff08 高城县 xff08 松滋县前身 xff09 创始人 xff09 的爷爷是亲兄弟 在哪个特别讲血统的年代 xff
  • 为什么要报考系统架构设计师考试

    为什么要报考系统架构师考试 最近一年多 xff0c 很多朋友来信 xff0c 问我什么要报考系统架构设计师考试 为什么参加这个考试 xff0c 这个考试有用吗 xff1f 对自己的职业会带来什么好处 xff1f 我想有以下几个方面 xff1
  • Unity中使用暴风魔镜进行VR游戏开发

    64 VR简介 虚拟现实VR Virtual Reality 和增强现实AR Argument Reality 的概念其实在很多年前就已经出现 xff0c 2015年下半年开始变得火热 xff0c 在各大媒体圈子中频繁出现 xff0c 而今

随机推荐

  • 我的2013

    我的 2013 一 工作 分为 2 个阶段 1 上半年 岗位 xff1a 系统架构师 心得体会 xff1a 1 多跟领导 团队 公司其他部门 客户 协助第三方多沟通 xff1b 2 快速理顺业务逻辑关系 xff0c 弄清楚业务流程 xff0
  • 2014年24段魔尺变三叶花视频教程

    2014年24段魔尺变三叶花视频教程 xff08 升级版 xff09 偶是真心喜欢24段魔尺制作的三叶花 xff0c 那是相当漂亮 xff0c 体现了几何美 xff0c 对称美 xff0c 空间美 xff0c 色彩美 xff0c 见下图 三
  • 24段魔尺,可以折出哪些精美图案

    24段魔尺 xff0c 可以折出哪些精美图案 24段魔尺 xff0c 究竟可以叠成哪些精美图案 xff1f 球 小乌龟 十字架 三叶花 三角形 牛魔王 音符是大家比较熟悉的 偶对这个问题 xff0c 比较感兴趣 先将网络上流传的24段魔尺折
  • 软考证到底有多大个鸟用?

    软考证到底有多大个鸟用 xff1f 小虎以信息系统项目管理师高级证书为例 xff0c 来说说这个证 xff0c 到底有什么用 xff1f 1 求职简历上 xff0c 可以浓彩重抹一笔 xff0c 好好吹嘘下自己 xff0c 是IT高级人才
  • 明朝开国第一重臣李善长长子李祺之长子李芳后裔在松滋

    明朝开国第一重臣李善长长子李祺之长子李芳后裔在松滋 李善长 xff0c 何许人也 肩比汉代丞相萧何 xff1b 功臣里排位第一 xff0c 比刘伯温 徐达 汤和 常遇春 蓝玉 李文忠地位高 xff1b 太师 xff0c 左丞相 xff0c
  • 程序员很少上《非诚勿扰》电视节目相亲之分析

    程序员很少上 非诚勿扰 电视节目相亲之分析 偶观看有线电视32 频道的江苏卫视 非诚勿扰 电视相亲节目 xff0c 半年有余 问题 为什么程序员很少上 非诚勿扰 节目进行相亲呢 xff1f 难道是程序员当中 xff0c 很少有大龄的剩男剩女
  • 2018年CSDN博客排名第一名,花落谁家?

    截止2018年10月9日 https blog csdn net stpeace 小虎问题 xff1a 通过搜索引擎例如 xff1a 百度 搜狗 Bing等 如何快速搜索 xff0c 定位谁是CSDN博客的第几名 xff1f 想知道谁CSD
  • 客家刘开七、刘广传刘氏七律族诗赏析V2.0

    七律 刘氏族诗 南宋 刘广传 骏马骑行各出疆 xff0c 任从随地立纲常 年深外境皆吾境 xff0c 日久他乡即故乡 早晚勿忘亲命语 xff0c 晨昏须顾祖炉香 苍天佑我卯金氏 xff0c 八七男儿共炽昌 一 平仄性赏析 除了 卯 字 xf
  • 无限制递归

    1006 无限制检查上层数目 无限制检查上层法则 最后跳出循环 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 1115 问题的解决在于把规模条理化 然后选取较小的规模 xf
  • 【模电】0009 方波和三角波产生电路(RC和比较器实现)

    本节我们来分析几个波形产生电路 xff0c 包括方波 三角波等波形产生电路 这类电路一般由比较器 电阻 电容等组成 我们先来看看比较器的特性 1 xff09 比较器的特性 比较器的原理图符号如下 xff1a 与运放的画法是一样的 xff0c
  • Ubuntu系统安装、配置与美化(Ubuntu20.04)

    阅读指南 目的 本文的写作目的在于帮助完全零基础的小白不理解原理而可以无脑安装Linux系统 xff0c 同时也是为自己进行的一个整理 xff0c 相较于网上大多数的教程 xff0c 本教程将一些内容进行了整合与整理 xff0c 加之本人在
  • 【模电】0010 正弦波产生电路(RC正弦波振荡电路)

    上一节我们分析了使用比较器产生方波和正弦波的电路 xff0c 其本质上是在电容充放电的一段延时后 xff0c 利用比较器产生电平翻转 而本节分析的正弦波产生电路 xff0c 产生的原理不同 1 xff09 振荡产生的原理 正弦波产生电路 x
  • 一种锂电池充放电及外部供电自动切换的电路

    介绍一种单节锂电池充放电一体的电路 该电路在外接电源时 xff0c 使用外接电源供电 xff0c 并且为锂电池充电 xff1b 在无外接电源时 xff0c 系统自动切换为锂电池供电 电路的原理如下图 xff1a 1 xff09 图中VBUS
  • 【STM32+cubemx】0008 HAL库开发:ADC的四种用法:轮询、中断、DMA、定时器触发

    ADC即模数转换器 xff0c 能把模拟量 xff08 电压 xff09 转换为数字量 这一节我们讲讲stm32的ADC用法 xff0c stm32自带的ADC有四种用法 xff1a 轮询 中断 DMA 定时器触发 1 xff09 ADC轮
  • 【STM32+cubemx】0011 HAL库开发:I2C总线访问加速度传感器ADXL345

    本节我们介绍I2C总线 xff0c 并使用stm32的I2C总线来访问加速度传感器ADXL345 1 xff09 I2C基础知识 I2C总线通信比较适合设备内部各芯片间的通信 xff0c 它只需要两根信号线 I2C可以挂载多个主机和从机 x
  • 【STM32+cubemx】0013 HAL库开发:SPI总线访问气压计BMP280/BME280

    本节我们介绍stm32的SPI总线接口 xff0c 并使用SPI接口来访问气压计BMP280 1 xff09 SPI基础知识 SPI xff08 Serial Peripheral Interface xff09 串行外围设备接口 xff0
  • 【STM32+cubemx】0017 HAL库开发:usb HID鼠标设备实现

    Cubemx可以生成多种usb设备的初始化代码 xff0c 本节我们就使用它来生成一个usb HID鼠标的工程 xff0c 在开发板上运行以后 xff0c 可以模拟usb鼠标的功能 1 xff09 生成USB HID工程 仍然使用串口工程
  • 【STM32+cubemx】0018 HAL库开发:自定义usb HID设备实现

    前面几节我们使用Cubemx生成了usb的两个使用例子 xff08 虚拟串口 HID鼠标 xff09 xff0c 本节我们进一步学习 xff0c 如何用生成自定义的HID设备 本节的例子在开发板上运行以后 xff0c 可以通过usb HID
  • 【STM32+cubemx】0026 HAL库开发:NRF24L01无线2.4G通信模块的应用

    NRF24L01是NORDIC公司生产的一款无线通信通信芯片 xff0c 可以工作在免费开放的2 4GHz频段 xff1b 通信速率可以达到最高2Mbps xff1b MUC可以使用SPI接口与它交互 本节我们就来使用stm32驱动NRF2
  • 【STM32+cubemx】0027 HAL库开发:MPU6050陀螺仪和加速度计数据的获取和校准

    在制作平衡车或者飞行器时 xff0c 不可避免地需要知道设备本身的姿态 xff0c 一般我们使用陀螺仪和加速度计来获取这些信息 陀螺仪用来测量物体的角度 传统的机械式陀螺的原理 xff0c 和我们小时候玩的陀螺一样 xff0c 是利用了高速