STM32-MPU6050+DAM库源码(江协笔记)

news2024/11/28 8:44:46

目录

1、MPU6050简介

2、MPU6050参数

3、MPU6050硬件电路

4、MPU6050结构

5、MPU6000和MPU6050的区别

6、MPU6050应用场景

7、MPU6050电气参数

8、MPU6050时钟源选择

9、MPU6050中断源

10、MPU6050的I2C读写操作

11、DMP库移植

1、MPU6050简介

10轴传感器:3轴加速度传感器+3轴陀螺仪传感器+3轴磁场传感器+气压传感器

欧拉角:以飞机为例,欧拉角便是飞机机身相对于初始3个轴的夹角,用于表达飞机的姿态。飞机机头上倾或者上仰,与z轴的夹角称为俯仰(Pitch);飞机机身左翻滚或者右翻滚,与x轴的夹角称为滚转(Roll);飞机机身保持水平,机头向左转向或者向右转向,这个轴的夹角称为偏航(Yaw)。

3轴加速度传感器:陀螺仪内部x/y/z轴方向分别放置了一个加速度计(原理与压力计相似),可以想象一个内置小球的方框模型,正方体六个面所测到的力就是3个轴的加速度值。如果把芯片水平放置在地球上,便只有底面测力计受到小球的压力,此时XY轴输出为0,z轴输出一个向下的加速度值;如果在自由落体,则xyz输出均为0。需要注意的是,加速度计具有静态稳定性,不具有动态稳定性,用加速度求角度只能在物体静止时使用,当物体运动时,这个角度会受加速度的影响而变得不准确。

3轴陀螺仪传感器:上图模型中,中间是一个有一定质量的旋转轮,外面是3个轴的平衡环。当中间的旋转轮高速旋转时,根据动量守恒的原理,该旋转轮具有保持其原有角动量的趋势,这个趋势可以保持旋转轴方向不变,当外部物体转动时,内部的旋转轴方向并不会转动,这就会在平衡环连接处产生角度偏差,如果在连接处放置一个旋转的电位器,通过测量电位器的电压便可得到旋转的角度。理论是MPU6050是可以直接测量角度的,可能是结构的差异或者工艺的限制,芯片内部的陀螺仪测量的是角速度。陀螺仪测量的xyz轴的角速度值,分别表示此时芯片绕x轴、y轴和z轴旋转的角速度。可以想象一下游乐园的飞轮,中间的轴转的越快,椅子飞的越远,测量椅子飞起的距离或者夹角,便可得到中间值的角度,对角速度进行积分便可得到角度。需要注意的是,陀螺仪具有动态稳定性,不具有静态稳定性,因为角速度积分得到的角度的误差会随着时间而变大,当物体静止时,角速度会因为噪声无法完全归零,然后经过积分的不断累积,这个小噪声就会导致计算出来的角度产生缓慢的漂移。但是该角度不受物体运动的影响。

2、MPU6050参数

ADC:MPU6050需要通过内部ADC将读取到达电压信号转化为数字信号;

加速度满量程:g=9.8m/s^2;

陀螺仪满量程:。/sec(角速度单位),表示每秒旋转的度数。

(如果所测量的物体运动非常剧烈,可将满量程设置大一些,防止加速度或者角速度超出量程;如果所测量的问题运动非常平缓,可将满量程设置小一下,以提高分辨率。)

数字低通滤波器:使输出数据变得平缓;

时钟源和时钟采样分频:时钟源结果分频,可以为AD转换和内部其他电路提供时钟,控制分频系数便可控制AD转换的快慢。

I2C从机地址:在程序在可以直接用二进制表示,如果要用16进制表示,有2种表示方式:1、认为0x68为从机地址,1101000-》0x68,但在I2C通信的时序中,第一个字节的高7位才是从机地址,最低位是读写位,所以发送地址要表示为(0x68<<1)|(读写位);2、认为0xD0为从机地址,即0x68左移一位后的数据,所以发送地址要表示为(0xD0)|(读写位)。

3、MPU6050硬件电路

XCL、XDA:用于外接磁力计或气压计,MPU6050的主机接口可以直接访问这些扩展芯片的数据,把这些扩展芯片数据读取到MPU6050中去,MPU6050的DMP单元对这些数据进行数据融合和姿态解算。但如果不需要MPU6050的解算功能的话,也可以直接挂载到SDA、SCL上,因为I2C可以同时挂载多个设备;

SDA、SCL:MPU6050的该引脚已内置上拉电阻;

AD0:接高电平,7位从机地址为1101001;接低电平,7位从机地址为1101000;悬空默认低电平;

INT:可以配置芯片内部的一些事件,来触发中断引脚的输出,比如数据准备好了、I2C主机错误等;另外,芯片内部还内置了一些实用的小功能,比如自由落体检测、运动检测、零运动检测等,这些信号都可以触发INT引脚产生电平跳变,需要时进行中断配置即可。

4、MPU6050结构

传感器自测单元:用于验证芯片好坏。外力施加到传感器上,这个外力使传感器数据会比平时大一些。先使能自测,读取数据,再失能自测,读取数据,两个数据的差值称为自测响应,如果自测响应在芯片手册规定的范围内,说明芯片没有问题,反之则可能损坏。

电荷泵:一种升压、降压电路,由于陀螺仪内部需要一个高低压支持,所以需要电荷泵进行升压,这在OLED中也有应用。因为电容比较小,所以切换速度要快,再在电压输出端接电源滤波,便可进行平稳升压。

  • 阶段1:输入电压Vin个fly电容充电,Vfly = Vin。

  • 阶段2:改变如图改变电容的接入方式,由于阶段1中电容已经充电,fly电容上端的电压 = Vin + Vfly = 2 * Vin = Vout,实现倍压。

中断状态寄存器:控制内部事件到中断引脚的输出;

先入先出寄存器:对数据流进行缓存;

配置寄存器:对内部各个电路进行配置;

传感器寄存器(数据寄存器):存储各个传感器的数据;

工厂校准:用于内部传感器校准;

数字运动处理器(DMP):芯片内部自带的一个姿态解算的硬件算法,配合官方的DMP库,可以进行姿态解算;

接口旁路选择器:开关接上时,MPU6050和扩展设备均由STM32控制;接下,MPU6050由STM32控制,扩展设备由MPU6050控制。

5、MPU6000和MPU6050的区别

两种型号的陀螺仪功能差不多,仅有些许差异:

  • MPU6050有一个独立的逻辑电源引脚VLOGIC,可以支持供电和IO口不一样的电平等级,而MPU6000没有

  • MPU6000同时支持I2C和SPI通信接口,而MPU6050仅支持I2C通信

6、MPU6050应用场景

  • BlurFreeTM技术(用于视频/静止图像稳定)

  • AirSignTM技术(用于安全/认证)

  • TouchAnywhereTM技术(用于“无触控”UI应用控制/导航)

  • MotionCommandTM技术(用于手势快捷键)

  • 支持动作的游戏和应用框架

  • InstantGesture TMiGTM手势识别

  • 基于位置的服务,兴趣点和航位推算

  • 手机和便携式游戏

  • 基于动作的游戏控制器

  • 用于联网的数字电视和机顶盒的3D遥控器,3D鼠标

  • 用于健康、健身和运动的可穿戴传感器

  • 玩具

7、MPU6050电气参数

(1)绝对最大参数

如果超过绝对最大参数芯片便有可能损坏。

(2)I2C时序表征

MPU6050的I2C的SCL时钟频率最大可达400KHz,如果STM32的I2C时钟频率超过则芯片可能跟不上,当然,I2C是同步时序,对时间的要求不是非常严格,所以400KHz只是一个最大参数,实际速率可以慢一些。

虽然供电绝对最大参数为5~6V,但其电气特性的供电范围为2.375~3.46V,若超过芯片可能无法正常工作,所以使用3.3V供电即可。

8、MPU6050时钟源选择

  • MPU6050内部晶振。

  • X、Z、Y轴陀螺仪。因为陀螺仪内部需要高精度时钟的支持,所以陀螺仪内部也有独立的时钟,这3个时钟可以输出作为内部时钟。

  • 通过外部的CLKIN引脚,输入32.768Hz或者19.2MHz的方波作为系统时钟。

一般使用前2种。

9、MPU6050中断源

以自由落体检测为例:自由落体时,3个加速度值均为0,当加速度值低于预设的阈值时,开始计数,当计数足够多时,发生自由落体事件,可以配置这个事件去触发中断引脚的电平跳变。

运动检测和零运动检测也是类似的逻辑。需要注意的是,运动检测会有一个高通滤波器,用来滤除重力造成的稳定数据偏置,即滤除加速度计静置时那1gd的重力加速度,不需要时可不理会。

10、MPU6050的I2C读写操作

11、MPU6050的I寄存器

寄存器上电后默认为0x00,除了ID号寄存器(0x68)和电源管理寄存器1(0x40,即上电后默认为睡眠模式,所以操作时要注意解除睡眠,否则操作其他寄存器无效)。

(1)采样频率寄存器

8位为一个整体作为分频值,可以配置采样频率的分频系数。分频越小,内部的AD转换越快,数据寄存器刷新就越快,反之越慢。以陀螺仪时钟源为例,

采样频率(数据刷新率)=陀螺仪输出时钟频率/(1+分频值),注意,不使用低通滤波器时,陀螺仪时钟频率为8KHz,使用则频率为1KHz。

(2)配置寄存器

由外部同步设置和低通滤波器配置组成,外部同步一般不使用。

低通滤波器可以使输出数据变得平滑,配置滤波器参数越大,输出数据抖动越小。

设为0时,即不使用低通滤波器,陀螺仪时钟频率为8KHz;使用则频率为1KHz。设为7时,是保留位,一般不使用。

(3)陀螺仪寄存器

高3位:X、Y、Z轴的自测使能位;

  • 自测响应=自测使能时的数据-自测失能时的数据,上电后,先使能自测,读取数据,再失能自测,读取数据,自动进行求差。自测响应规定范围如下:

中间两位:满量程选择位;

(4)加速度计配置寄存器

高3位:X、Y、Z轴的自测使能位;

中间两位:满量程选择位;

低3位:配置高通滤波器。内置小功能如运动检测所用到的,对数据输出无影响。

读取数据的话直接读取数据寄存器即可,寄存器中的数据是一个16进制的有符号数,以二进制补码的方式存储。读出高8位和低8位,高位左移8次或上低位数据并存在一个int16_t的变量里,便可得到数据。温度传感器数据和陀螺仪传感器数据同理。

(5)电源管理寄存器1

Bit7:设备复位,写1,则所有寄存器恢复到默认值;

Bit6:睡眠模式,写1,芯片随眠,不工作,进入低功耗模式,省电;

Bit5:循环模式,写1,设备进入低功耗模式,每过一段时间启动一次,唤醒的频率由电源管理寄存器2决定;

Bit3:温度传感器失能,写1,禁用内部温度传感器;

Bit2~0:选择系统时钟来源。

最好选择陀螺仪晶振,因为其更为精确

(6)电源管理寄存器2

Bit7/6:设置唤醒电源管理寄存器1的唤醒频率;

Bit5~0:可以分别控制6个轴进入待机模式,如果只需要部分数据,可以让其他轴待机,省电;

(7)ID号寄存器

该寄存器为只读寄存器,ID号不可修改,表示该芯片的I2C地址。

Bit7:为0;

Bit6~1:固定为110100;

Bit0:为0;

所以该寄存器的值为0x68;

需要注意的是,AD0引脚的值并不反映在这个寄存器上,所以虽然I2C的地址可以通过AD0引脚进行配置,但是ID号寄存器的最低位并不随AD0引脚的变化而变化,读出的ID号始终为0x68,当然ID号并不是非要与I2C地址一致;

11、DMP库移植

MPU6050是一款集成了陀螺仪和加速度计的6轴运动处理组件,能够提供丰富的运动数据。然而,要从这些原始数据中准确解算出姿态角(如滚转角、俯仰角、偏航角),需要进行复杂的数学运算和数据融合。而DMP(Digital Motion Processor)库是Invensense公司针对其产品推出的软件包,它内部实现了复杂的滤波和数据融合算法,能够直接输出四元数或欧拉角等姿态信息。这大大简化了外围微处理器的工作负担,使得开发者无需深入了解底层的数学运算和数据融合原理,即可快速获取准确的姿态信息。

MPU6050的DMP库原本是针对特定处理器(如MSP430)设计的,我们要直接将官方的DMP库移植到STM32还需要进行一系列的修改,这里就不讲了,因为网上已经有许多开源,参考:

MPU6050获取欧拉角—超详细DMP移植教程_mpu6050移植dmp详细步骤-CSDN博客

STM32平台下官方DMP库6.12超详细移植教程_mpu motion driver下载-CSDN博客

百度网盘

链接:https://pan.baidu.com/s/1bBqZZIv48LP_2kcbqCE4Dg?pwd=0obc 
提取码:0obc

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2186802.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用CSS实现酷炫加载

使用CSS实现酷炫加载 效果展示 整体页面布局 <div class"container"></div>使用JavaScript添加loading加载动画的元素 document.addEventListener("DOMContentLoaded", () > {let container document.querySelector(".container&q…

Unity初识+面板介绍

Unity版本使用 小版本号高&#xff0c;出现bug可能性更小&#xff1b;一台电脑可以安装多个版本的Unity&#xff0c;但是需要安装在不同路径&#xff1b;安装Unity时不能有中文路径&#xff1b;Unity项目路径也不要有中文。 Scene面板 相当于拍电影的片场&#xff0c;Unity程…

前缀和+思维,CF 1984C2 - Magnitude (Hard Version)

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 1984C2 - Magnitude (Hard Version) 二、解题报告 1、思路分析 C1 是只要…

Docker巩固十七问

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 1. 如何批量清理临时镜像文件&#xff1f; 所谓的“临时镜像”或“虚悬镜像”&#xff08;dangling images&#xff09;是指那些…

动态规划算法专题(二):路径问题

1. 不同路径 . - 力扣&#xff08;LeetCode&#xff09; 1.1 算法原理 状态表示dp[i][j]&#xff1a;走到(i,j)位置&#xff0c;一共有多少种方法&#xff08;以(i,j)位置为结尾&#xff09;状态转移方程&#xff1a;dp[i][j]dp[i-1][j]dp[i][j-1];初始化&#xff1a;dp[0][1…

SSM超市进销存管理系统源码

主要功能说明&#xff1a; 管理员角色包含以下功能&#xff1a;管理员登录、进货管理、商品信息、类别管理、库存管理、销售管理、 客户信息管理、供应商管理、员工管理、修改管理员个人信息等功能。 员工角色包含以下功能&#xff1a;员工登录、进货信息查看、退货信息管理…

大华智慧园区综合管理平台系统存在多处漏洞

漏洞描述 大华智慧园区综合管理平台是一个集智能化、信息化、网络化、安全化为一体的智慧园区管理平台&#xff0c;旨在为园区提供一站式解决方案&#xff0c;包括安防、能源管理、环境监测、人员管理、停车管理等多个方面。 FOFA app"dahua-智慧园区综合管理平台"…

【Linux庖丁解牛】—Linux基本指令(中)!

&#x1f308;个人主页&#xff1a;秋风起&#xff0c;再归来~&#x1f525;系列专栏&#xff1a; Linux庖丁解牛 &#x1f516;克心守己&#xff0c;律己则安 目录 1、rmdir与rm指令 2、man指令 3、cp指令 4、mv指令 5、cat与tac指令 6、重定向 7、more指令 8、…

【AIGC】ChatGPT账号的常见封号原因与解封方法

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;ChatGPT封号背景与常见原因ChatGPT封号行动背景ChatGPT常见的封号原因 &#x1f4af;OpenAl封号规则总结&#x1f4af;使用ChatGPT时防止封禁需要特别注意的细节和建议&a…

2025年数字人直播还能做吗?数字人直播的套路骗局须知网

2025年数字人直播还能做吗&#xff1f;数字人直播的套路骗局须知网 数字人直播是利用先进的数字技术和算法&#xff0c;创建出了一个具有人类形象的虚拟数字人&#xff0c;那通过模仿人类的行为、语言和情感进行事实的互动和内容的展示。 这种直播方式突破了传统的限制&#…

性能测试笔记1

为什么要进行性能测试&#xff1f;&#xff08;在真实项目商用时&#xff0c;需要大量的用户进行使用&#xff0c;因此需要模拟大量用户的使用场景 &#xff09; 1、业务需求 电商双 11 活动 / 微信春晚抢红包 /12306 春运订票 当前服务器配置是否支持 20000 人同时使用 技术…

深度学习中的结构化概率模型 - 使用图来描述模型结构篇

序言 在深度学习的探索之路上&#xff0c;结构化概率模型以其独特的视角和强大的表达能力&#xff0c;成为了研究复杂数据关系的重要工具。这一模型的核心在于其巧妙地利用图来描述模型结构&#xff0c;将随机变量间的复杂交互关系可视化、结构化。图的引入&#xff0c;不仅为…

【笔记】原子结构的近代理论

近代原子结构理论的建立是从氢原子光谱得到启示的。 一、氢原子光谱与波尔理论 1.氢原子光谱 在装有两个电极的真空玻璃管内通入极少量高纯氢气&#xff0c;通高压电使之放电&#xff0c;管中发出的光束通过分光棱镜&#xff0c;得到分立的谱线&#xff0c;称为线状光谱。 发…

系统安全 - Linux /Docker 安全模型及实践

文章目录 导图Linux安全Linux 安全模型用户层权限管理的细节多用户环境中的权限管理文件权限与目录权限 最小权限原则的应用Linux 系统中的认证、授权和审计机制认证机制授权机制审计机制 小结 内网安全Docker安全1. Docker 服务隔离机制Namespace 机制Capabilities 机制CGroup…

B 私域模式升级:开源技术助力传统经销体系转型

一、引言 1.1 研究背景 随着市场竞争加剧&#xff0c;传统经销代理体系面临挑战。同时&#xff0c;开源技术发展迅速&#xff0c;为 B 私域升级带来新机遇。在当今数字化时代&#xff0c;企业面临着日益激烈的市场竞争。传统的经销代理体系由于管理效率低下、渠道局限、库存压…

移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——13.mapset(模拟实现)

1.对红黑树进行改造 1.1treenode模板参数改变 之前构建treenode模板参数传的是class k,class v(set为k&#xff0c;k&#xff1b;map是k&#xff0c;v&#xff09;&#xff0c;现在直接用T代替 template<class T> //这里直接传了T作为模板参数&#xff0c;T可能是pai…

【高阶数据结构】深度探索二叉树进阶:二叉搜索树概念及其高效实现

高阶数据结构相关知识点可以通过点击以下链接进行学习一起加油&#xff01; 本章是高阶数据结构笔记的第一篇文章&#xff0c;将分享二叉搜索树的进阶概念及其高效实现的相关知识&#xff0c;欢迎大家阅读&#xff01; &#x1f308;个人主页&#xff1a;是店小二呀 &#x1f3…

五子棋双人对战项目(5)——对战模块

目录 一、需求分析 二、约定前后端交互接口 三、实现游戏房间页面&#xff08;前端代码&#xff09; game_room.html game_room.css srcipt.js 四、实现后端代码 GameAPI Room Mapper 五、线程安全问题 一、需求分析 在对局中&#xff0c;玩家需要知道实时对局情况&…

高阶数据结构-------图

文章目录 图图的基本概念图的存储结构邻接矩阵邻接表 图的遍历广度优先遍历深度优先遍历 最小生成树Kruskal算法Prim算法 最短路径单源最短路径-Dijkstra算法单源最短路径-Bellman-Ford算法多源最短路径-Floyd-Warshall算法 图 图的基本概念 图的基本概念 图是由顶点集合和边的…

【10】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-泛型基础全解(泛型函数、泛型接口、泛型类)及参数、接口补充

序言&#xff1a; 本文详细讲解了关于ArkTs语言中的泛型&#xff0c;其中包含泛型函数、泛型接口、泛型约束、泛型类及其中参数的使用方法&#xff0c;补充了一部分接口相关的知识&#xff0c;包括接口的继承和具体实现&#xff0c;也写到了一些边边角角的小知识&#xff0c;剩…