一、MPU6050简介

MPU6050是一个6轴姿态传感器(3轴加速度计和3轴陀螺仪传感器),可以测量芯片自身X、Y、Z轴的加速度、角度参数,通过数据融合,可以得到姿态角。

二、简介分析

1.常见的姿态传感器以及它的组成部分:

2.姿态角(欧拉角):

简单地描述以飞机为例,飞机机身对应三个轴的夹角,机头下倾或者上仰,这个轴的夹角叫俯仰(pitch)。飞机机身左翻滚或者右翻滚,这个轴的夹角叫做滚转(roll),飞机机身向左转向或者向右转向,这个轴的夹角叫做偏航(raw)。

所以欧拉角就是表述姿态的一个参数。为了保持飞机的姿态平稳,必须要得到一个精确且稳定的欧拉角。一种传感器不能获得精确且稳定的欧拉角,要获得精确稳定的欧拉角,需要多个传感器进行数据融合。常见的数据融合算法有互补滤波、卡尔曼滤波等。

3. X、Y、Z轴的定义:

横向的是x轴,纵向的是Y轴,垂直与芯片的是Z轴。

4.加速度计:

以下图为例,中间是一个具有一定质量,左右有弹簧的小滑块,小滑块移动时,滑块上的电位器也跟着移动,通过电位器的电压,就能够知道滑块的加速度值。
这个加速度计实际上是一个弹簧测力计,根据牛顿第二定律F=ma,想要测量加速度a,只需要找一个单位质量的物体,测量它所受的力F就行了。

在MPU6050中,X、Y、Z轴都具有一个加速度计,以下面的图为例,假设芯片里有6个测力的秤组成一个正方体,正方体内部放一个大小正好的单位质量小球,小球压在一个面上,就会产生对应轴的数据输出。如果压在上面为正值,压在下面为负值,6个面测的力就是3个轴的加速度值。

加速度计具有静态稳定性,不具有动态稳定性。假设芯片向左倾斜放置,底面和左面都受力,求一个三角函数,就能得到向左的倾角。但是这个倾角只有在静态时生效。因为加速度分重力加速度和运动加速度,如果此时芯片运动起来,这个三角函数的倾角就会受运动加速度的影响。(向前加速运动时,芯片的底面和左面也受力,无法判断芯片的状态是向左倾斜放置还是向前加速。)

5.陀螺仪传感器:

陀螺仪:一个旋转物体的旋转轴所指的方向在不受外力影响时,是不会改变的。

如图所示,中间是一个有一定质量的旋转轮,外面是3个轴的平衡环,当中间的旋转轮高速旋转时,根据角动量守恒原理,这个旋转轮具有保持它原有角动量的趋势。这个趋势可以保持旋转轴方向不变,当外部物体转动时,内部的旋转轴方向不会转动。这会在平衡环连接处产生角度偏差,如果在连接处放一个电位器,测量电位器的电压,就能得到角度了。
但是MPU6050陀螺仪,并不能直接测量角度。芯片内部的陀螺仪测量的时角速度,分别表示了此时芯片绕X、Y、Z轴旋转的角速度。对角速度进行积分,就可以得到角度。通过角速度积分得到的角度也有局限性,当物体静止时,角速度会因为噪声无法完全归零,经过积分的累积,噪声会导致计算出来的角速度产生缓慢的偏移。但是这个角度不会受物体运动的影响
加速度计具有静态稳定性,陀螺仪具有动态稳定性,这两种传感器的特性正好互补。所以取长补短,进行互补滤波,就能获得稳定的姿态角了。

三、MPU6050参数

  1. 16位ADC采集传感器的模拟信号,量化范围:-32768~32767。
  2. 加速度计满量程范围选择:±2、±4、±8、±16(g) g表示重力加速度1g=9.8m/s²
  3. 陀螺仪满量程选择:±250、±500、±1000、±2000(°/sec) 每秒钟旋转了多少度
    (如果测量的物体运动非常剧烈,可以把满量程选择大一些,如果运动比较平缓,可以选择更小的量程,这样分辨率会更大。)
  4. 可配置的数字低通滤波器
    (在这个芯片可以配置寄存器来选择对输出的数据进行低通滤波)
  5. 可配置的时钟源和可配置的采样分频
    (为AD转换和芯片内部其他电路提供时钟,控制分频系数,可以控制AD转化的快慢。)
  6. I2C从机地址:当AD0=0时,地址为1101000,当AD0=1时,地址为1101001,AD0是板子引出来的引脚,可以调节I2C从机地址的最低位。
    (16位表示时,有两种方式,①是把1101000转成16进制0x68,但是因为还有一位读写位,一般使用(0x68<<1)|读写位。读1写0。②把0x68左移一位后的数据当作从机地址,也就是0xD0,再或上读写位。写就发送0xD0,读就发送0xD1。)两种方式本质上没有什么区别。

四、硬件电路

硬件电路包含3个部分,MPU-6050芯片,8针的排针,LDO低压差线性稳压器。

  1. SDA/SCL已经内置了两个上拉电阻,在接线的时候,直接把SCL和SDA接在GPIO口就行了。SDA/SCL、XDA/XCL通讯引脚分别为两组I2C信号线。当模块与外部主机通讯时,使用SDA/SCL,如与STM32芯片通讯; 而XDA/XCL则用于MPU6050芯片与其它I2C传感器通讯时使用,例如使用它与磁场传感器连接,MPU6050模块可以把从主机SDA/SCL接收的数据或命令通过XDA/XCL引脚转发到磁场传感器中。 但实际上这种功能比较鸡肋,控制麻烦且效率低,一般会直接把磁场传感器之类的I2C传感器直接与MPU6050挂载在同一条总线上(即都连接到SDA/SCL),使用主机直接控制。
  2. AD0引脚是从机地址的最低位,接低电平的话,7位的从机地址是1101000,接高电平的话,7位从机地址是1101001,有一个电阻默认下拉到低电平了,所以引脚悬空是接低电平,想接高电平,可以把AD0直接引到VCC,拉到高电平。
  3. INT是中断信号输出引脚:可以配置芯片内部的一些事件,来触发中断输出,比如数据准备好了,I2C主机错误等。另外芯片内部还内置了一些小功能,比如自由落体检测、零运动检测、运动检测等,这些信号都可以触发INT引脚产生电平跳变。
  4. LDO这部分是供电的逻辑,VDD供电是2.375-3.46V,不能直接接5V,为了扩大供电范围,加了3.3V的稳压器,输入端VCC-5V可以在3.3V到5V之间。

五、内部框图

  1. 时钟:在硬件电路上,我们可以看到有时钟的接口。不过我们一般使用内部时钟。
  2. 加速度计、陀螺仪、温度传感器,相当于可变电阻,通过分压后输出模拟电压,通过ADC进行模数转换,转换完成后,数据放到传感器寄存器中。每个ADC输出对应16位的数据寄存器,不存在数据覆盖的问题,配置好转换频率之后,每个数据会自动以我们设置的刷新频率刷新到数据寄存器。
  3. 自测:每个传感器有一个自测单元,当启动自测后,芯片内部会模拟一个外力施加在传感器上。可以先使能自测,读取数据,再失能自测,读取数据,两个数据一相减,得到的数据叫自测响应。芯片手册有自测响应的范围,在范围内表示芯片无问题。
  4. 充电泵:CPOUT引脚需要外接一个电容,电荷泵是一个升压电路。假设并联电路5V的电源给一个电容充电,充完后,接成串联电路,电路电压变成10V了。并联充电,串联放电,后续再加一个电源滤波,就能进行平稳升压了。由于陀螺仪内部需要高电压支持,所以设置了一个电荷泵升压。
  5. 中断状态寄存器:控制内部的哪些事件到中断引脚的输出。
  6. FIFO先入先出寄存器:可以对数据流进行缓存。
  7. 配置寄存器:可以对内部的各个电路进行配置。
  8. 传感器寄存器:也是数据寄存器,存储了传感器的数据。
  9. 工厂校准:内部的寄存器都进行了工厂校准。
  10. 数字运动处理器(DMP):芯片内部自带的姿态解算的硬件算法,配合官方的DMP库可以进行姿态解算。
  11. 通讯接口部分:上面的8、9、23、24就是从机的I2C和SPI通信接口,用于和STM32通讯,下面一部分7、6是主机的I2C通信接口,用于和MPU6050扩展设备进行通讯。接口旁路选择器,如果拨到上面,辅助的I2C通讯引脚就和正常的I2C接到一起,STM32就可以控制所有设备。如果拨到下面, 辅助的I2C引脚就由MPU6050控制,两条I2C总线独立分开。

六、寄存器操作

1.采样频率分频器


这个寄存器可以配置采样频率的分频系数,分频越小,内部的AD转换就越快。数据寄存器刷新就越快。陀螺仪输出率就是陀螺仪时钟。陀螺仪时钟/这个寄存器指定的分频系数=采样频率。

2.配置寄存器


配置寄存器主要分为两个部分:外部同步设置和低通滤波设置:
外部同步设置主要是配置外部帧同步(FSYNC)引脚采样和数字,这里不做配置。
低通滤波器可以让输出数据更加平滑,配置滤波器参数越大,输出的抖动越小。

3.陀螺仪配置寄存器

高3位是XYZ轴的自测使能位,中间2位是满量程选择位,后面3位没用到。

自测响应=自测使能时的数据-自测使能时的数据。
MPU6050的自测响应的范围如下图所示,在此范围内表示通过自测。
满量程选择:量程越大范围越广,量程越小分辨率越高。在上面的参数介绍中已经有所说明。

4.加速度计配置寄存器

加速度寄存器的配置与陀螺仪寄存器配置基本上是一个逻辑。

5.加速度计测量寄存器

只读,可以通过这些数据寄存器读取最新的加速度计测量值。
想读取哪个参数,只需要读取对应的数据寄存器即可。XYZ轴的加速度值都是16位的有符号数,以二进制补码的方式存储。读出高8位和低8位,使用int16类型,高位左移8位,或上低位数据,就可以得到数据了。

6. 温度测量寄存器

温度传感器的使用与加速度计寄存器基本相同,可以通过读取寄存器值来获取温度。

7.陀螺仪测量寄存器

陀螺仪数据寄存器和加速度计测量寄存器也是同样的用法,只需要读取相应的寄存器就可以获得相应的测量数值。数据的存储方式还是16位的有符号数,以二进制补码的方式存储。


8.电源管理寄存器1

Bit7设备复位,这一位写1,所有寄存器都恢复到默认值。
Bit6睡眠模式,这一位写1,芯片睡眠,进入低功耗。
Bit5循环模式,这一位写1,芯片进入低功耗,过一段时间,启动一次,唤醒的频率由下面电源管理寄存器的Bit7和Bit6决定。
Bit3温度传感器失能,写1之后,禁用内部的温度传感器。
Bit2-0,选择系统的时钟来源。可选择:内部晶振、X/Y/Z轴陀螺仪晶振,外部引脚的两个方波,一般选择内部晶振或者陀螺仪晶振。建议使用陀螺仪晶振,更加精确。

9.电源管理寄存器2

Bit5-Bit0,可以分别控制6个轴进入待机模式,如果只需要部分轴的数据,可以让其他轴待机,这样比较省电。
Bit7-Bit6,是上面电源管理寄存器1的循环模式的唤醒频率。

注意:可以使用此寄存器将单个加速度计和陀螺仪轴置于待机模式。如果设备使用陀螺仪轴作为时钟源,并且该轴处于待机状态,时钟源将自动更改为内部8MHz振荡器。

10.ID号寄存器

ID号不可修改,中间6位固定为110100,最高位和最低为都是0,读出寄存器,值固定为0x68。
实际上ID号就是I2C的地址,但是有区别的是,I2C地址可以通过AD0引脚进行配置,这里的AD号最低位是不随AD0引脚的变化而变化的。

注意

所有的寄存器上电默认值都是0x00,除了107号(电源管理寄存器1),上电默认0x40,117号寄存器(ID号),上电默认0x68。
电源管理寄存器1默认0x40,表示睡眠模式,所以在操作MPU6050之前,要先解除睡眠,否则操作其他寄存器是无效的。

参考

  1. 参考手册:MPU6050的产品规格和寄存器手册
    网盘链接:MPU6050的产品规格和寄存器手册 提取码:qscd
  2. 参考视频:江协科技 MPU6050简介

MPU6050 6轴姿态传感器的分析与使用(一)相关推荐

  1. stm32 MPU6050 6轴姿态传感器的介绍与DMP的应用

    最近应用到三轴姿态传感器,因为之前有MPU6050(6轴传感器,这是6轴的), 进行搭配使用,通过三轴姿态传感器进行舵机的角度调整.(内容来源学习正点原子的教程) 同步B站也已经发布过原子官方教程.让 ...

  2. 学习 STM32之九轴姿态传感器(BWT901CL)串口通信读取数据

    由于个人应用到3轴传感器,所以买了直接买了一个9轴的,用于学习STM32Core平台串口2连接维特智能串口Normal协议,然后通过串口1直接打印数据,接收传感器数据和与传感器进行通信:需要看产品文档 ...

  3. HI226 HI229 6轴姿态传感器STM32串口例程说明

    HI226 HI229 6轴姿态传感器STM32串口例程说明 STM32例程 本例程提供了C 语言例程代码,用户接收HI226/HI229及HI221数据. ​ 测试环境:Windows10_x64 ...

  4. HI226 HI229 6轴姿态传感器ROS串口例程说明

    HI226 HI229 6轴姿态传感器ROS串口例程说明 ROS串口例程 本文档介绍如何在ROS下来读取HI226/HI229的数据,并提供了c++语言例程代码,通过执行ROS命令,运行相应的节点,就 ...

  5. 维特智能六轴姿态传感器JY61P_stm32f1xx驱动代码解析

    目录 硬件准备/上位机直连 代码驱动 关于官方给出的示例 代码功能及其走位 1.怎样不依托代码验证传感器的某个功能是否有效或者能用? 2.写寄存器的方式 3.为什么不使用WIT私有协议中的关闭上电输出 ...

  6. 九轴姿态传感器的介绍和应用

    总体设计   姿态传感器是基于MEMS技术的高性能三维运动姿态测量系统.它包含三轴陀螺仪.三轴加速度计,三轴电子罗盘等运动传感器,通过内嵌的低功耗ARM处理器得到经过温度补偿的三维姿态与方位等数据.利 ...

  7. Arduino 使用 MPU6050三轴加速传感器

    相关资料链接 链接:https://pan.baidu.com/s/1eE0rkaSJsKJMU_RUorS5OA 提取码:3ujh 1.1 介绍: 本模块是一款高性能三轴加速度+三轴陀螺仪的六轴传感 ...

  8. 【合宙ESP32C3】MPU6500六轴姿态传感器

    网上好多教程都是MPU6050的,看到有些网友说其实两款传感器读写都差不多,但是对于我这种小小白,只想先用例程上手,读出数据,其他的再慢慢来. 这里提供了一种简单上手的方法: [MPU6500文档]: ...

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

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

最新文章

  1. python中attr_python中hasattr()、getattr()、setattr()函数的使用
  2. CSS3实现页面的平滑过渡
  3. Android中Touch事件分析--解决HorizontalScrollView滑动和按钮事件触发问题
  4. 计算机组成原理期末复习题
  5. iOS XIB等比例适配
  6. 视差滚动的爱情故事之优化篇
  7. 不生效_离婚协议签订后,对方反悔不生效,但证据价值巨大!
  8. tomcat原理详解和请求过程(涉及网卡、套接字等)
  9. 计算机的网络说课稿模板,小学信息技术说课稿优秀模板
  10. 俄数学天才破解庞加莱猜想拒领百万奖金
  11. 第二章 一元函数的导数与微分概念及其计算
  12. Google books deal battle heats up 谷歌数字图书馆建
  13. mac抹掉磁盘重装系统未能与服务器取得联系_如何用U盘自制Mac笔记本系统重装盘...
  14. 试用期没到辞职有工资吗?
  15. PDF免费转PPT值得您收藏使用的网站
  16. 大数据开发和java的前景_大数据开发和javaEE后端开发哪个就业前景好?
  17. ubuntu 外接显示器设置 鼠标指针闪烁 屏幕缩放 相对位置设置 分辨率设置 -xrandr
  18. cpu的核数和进程_CPU与核心及进程和线程认识
  19. Kali Linux 终端字体配色
  20. Error Correction

热门文章

  1. Android 分享功能的实现
  2. naoqi 机器人总结17
  3. 用ENVI建立掩膜消除图像背景
  4. 例说hg(四)———— 杂说hg使用场景
  5. 电子科大计算机学院郑欣,我校研究生在“华为杯”第十六届中国研究生数学建模竞赛中获佳绩...
  6. nginx alias php,Nginx设置alias实现虚拟目录 alias与root的用法区别
  7. linux上设置别名alias(快速便捷打开文件)
  8. Java中环境变量的设置
  9. 限定特定的IP访问服务器
  10. 南京邮电大学微型计算机原理与接口技术实验,南京邮电大学《微机原理与接口技术》上机实验参考答案(四次全).pdf...