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

这篇具有很好参考价值的文章主要介绍了【STM32+cubemx】0027 HAL库开发:MPU6050陀螺仪和加速度计数据的获取和校准。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

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

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

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

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

1)MPU6050硬件介绍

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

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

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

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

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

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

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

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

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

2)配置cubemx工程

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

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

设置好后,生成keil工程。

3)MPU6050原始数据的获取

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

4)简单的初始校准方法

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

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

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

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

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

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

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

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

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

5)波形显示

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

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

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

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

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

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

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

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

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

 文章来源地址https://www.toymoban.com/news/detail-403085.html

到了这里,关于【STM32+cubemx】0027 HAL库开发:MPU6050陀螺仪和加速度计数据的获取和校准的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 陀螺仪MPU6050(IIC&源码)

    1. 陀螺仪 1.1   什么是陀螺仪? 检测角度变化的一个装置。 1.1.1  有什么用?? 用于检测角度变化,用角度变化的值判断物体的运动轨迹。 1.1.2  我们怎么用? 我们是使用这个装置(或者说设备)获取到数据,再使用这个数据得到我们想要的信息。 这里我使用陀螺仪获取板

    2024年02月13日
    浏览(39)
  • MPU6050六轴陀螺仪外围电路分析

    MPU6050六轴陀螺仪常用的外围电路设计分析 AUX_DA引脚:用于传输辅助数据。通过该引脚,MPU6050可以与外部设备或其他传感器进行数据交换。可以将其他传感器(如磁力计)连接到AUX_DA引脚,以获取额外的数据或实现其他特殊功能。 AUX_CL引脚:用于提供辅助时钟信号。MPU6050可

    2024年01月25日
    浏览(39)
  • MPU6050 加速度计和陀螺仪传感器与 Arduino 连接

    MPU6050是一款非常流行的加速度计陀螺仪芯片,具有六轴感应和 16 位测量分辨率。这种意义上的高精度和低廉的成本使其在 DIY 社区中非常受欢迎。甚至许多商业产品都配备了 MPU6050。陀螺仪和加速度计的组合通常被称为惯性测量单元或 IMU。 IMU 传感器用于各种应用,例如手机

    2024年02月02日
    浏览(54)
  • 物联网AI MicroPython传感器学习 之 mpu6050六轴陀螺仪传感器

    学物联网,来万物简单IoT物联网!! MPU6050是一款6轴运动传感器,它集成了3 轴MEMS 陀螺仪,3 轴MEMS加速度计,以及一个可扩展的数字运动处理器DMP(Digital Motion Processor),可用I2C接口连接一个第三方的数字传感器,比如磁力计。扩展之后就可以通过其I2C 或SPI 接口输出一个

    2024年04月17日
    浏览(54)
  • 【CubeMX配置STM32驱动MPU6050】

    一、使用CubeMX进行相关配置 1、配置OLED的IIC接口 OLED的具体使用方法我就不细说了,我前面的文章里面有讲OLED的,如果有需要可以去看看。 2、配置MPU6050的接口 我用MPU6050使用的是 软件IIC (其实是只找到软件IIC的驱动),所以我们只需要配置两个GPIO口就可以实现对MPU6050的控

    2024年02月12日
    浏览(46)
  • stm32 mpu6050 cubemx DMP法读取角度

    文件 记录使用dmp库来读取mpu6050的角度。 这是参考文件 参考1–主要参考 github参考 参考2 参考三 相关文件在这里下载(未填,不过可以在上面的git中下载) over

    2024年02月15日
    浏览(50)
  • stm32cubemx配置mpu6050——10分钟0基础到灵活使用

    10分钟速通!你没看错,就是10min,从0基础到灵活运用mpu6050。 不信?往下看看就会:嗷~原来如此 下载github开源代码。 首先声明,此代码不是本人所写,为某俄罗斯大佬提供。 如果你访问不了github不用担心,我在文章最后附上下载下来的文件 软件 根据github开源项目的Readm

    2024年02月03日
    浏览(42)
  • 01_STM32软件+硬件I2C读取MPU6050(HAL库)

    目录 1、I2C简介 2、I2C时序单元 2.1 起始条件 2.2 终止条件 2.3 发送一个字节 2.4 接收一个字节 2.5 发送应答 2.6 接收应答 3、I2C完整时序 3.1 指定地址写一个字节 3.2 当前地址读一个字节 3.2 指定地址读一个字节 4、简单软件I2C代码(HAL) 4.1 软件I2C 4.2 软件I2C读MPU6050寄存器 5、ST

    2024年04月17日
    浏览(47)
  • 【STM32F4系列】【HAL库】【模块介绍】MPU6050设置与DMP库使用

    MPU6050是一个3轴陀螺仪(测角加速度)和3轴加速度计(测量线加速度)的测量芯片 内部自带运算单元(DMP),可以输出经姿态融合计算后的 四元数 (一种表示旋转的方法) 而且MPU6050的价格较低(10r以下),常被用于精度不高的场合作为姿态感知的芯片 如经典项目平衡车,某年电赛题目风力摆

    2024年02月05日
    浏览(39)
  • MPU6050(读取原数据、移植DMP、stm32f4、HAL库、KEIL5)

    记录一下自己遇到的问题及解决方法,希望能帮助到一些人。 第一步,读取芯片的原始数据。需要注意两点:1、对HAL库提供的IIC读取写入函数进行再包装。(千万不要觉的这步多此一举,后面移植DMP时用得到) 2、芯片的地址(这里面有俩坑)第一就是,芯片的 I2C 设备地址

    2023年04月08日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包