STM32学习笔记(10_2)- I2C通信协议MPU6050简介

2024-04-01 01:20

本文主要是介绍STM32学习笔记(10_2)- I2C通信协议MPU6050简介,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

无人问津也好,技不如人也罢,都应静下心来,去做该做的事。

最近在学STM32,所以也开贴记录一下主要内容,省的过目即忘。视频教程为江科大(改名江协科技),网站jiangxiekeji.com

本期开始学习 I2C通信,会分两大块来介绍,第一块, 就是介绍协议规则,然后用软件模拟的形式来实现协议;第二块, 就是介绍STM32的 I2C外设, 然后用硬件来实现协议。

I2C:高位先行,只有在SCL高电平时才会读取SDA的电平

MPU6050的读地址是0xD1,写地址是0xD0

上一期我们介绍通过I2C实现指定地址写和指定地址读的逻辑,即使这个外挂芯片的各种寄存器不在STM32内部,仍能通过通信协议实现读写外挂芯片寄存器的功能。

本期的内容其实就是对MPU6050芯片内部的寄存器进行读写,写入到配置寄存器,就可以对外挂的这个模块进行配置;读出数据寄存器,就可以获取外挂模块的数据。最终,我们读出的数据会显示在这个OLED上。而STM32对MPU6050的读写是通过I2C来进行的。

MPU6050简介

D:\software\STM32入门教程资料\模块资料(1)\模块资料\13-MPU6050 陀螺仪加速度计

里有一个是PS-MPU-6000A,是产品说明书;另一个是RM,寄存器映像。

MPU6050加速度的三轴和加速度的三轴加起来总共就是6个轴,所以这个芯片是6轴姿态传感器。当然如果芯片里再集成一个3轴的磁场传感器,测量XYZ轴的磁场强度,那就叫作9轴姿态传感器。如果再集成一个气压传感器,测量气压大小,从而判断海拔高度,便是10轴姿态传感器。

姿态角也叫欧拉角。以下图的飞机为例,欧拉角就是飞机机身相对于初始3个轴的夹角,飞机机头下倾或者上仰,这个轴的夹角叫作俯仰,Pitch。飞机机身左翻滚或者右翻滚,这个轴的夹角叫作滚转,Roll。飞机机身保持水平,机头向左转向或者向右转向,这个轴的夹角叫作偏航,Yaw。简单来说,欧拉角就表达了飞机此时的姿态,飞机是上仰了还是下倾了,飞机向左倾斜还是向右倾斜了,通过欧拉角都能清晰地表示出来。常见的数据融合算法,一般有互补滤波、卡尔曼滤波等。

可以把MPU6050看成六个测力的秤,组成一个正方体,中心有个单位质量的小球。 小球压在哪一个面上,就会有对应的数据输出。比如你把芯片静置水平放在地球上,那就只有底面测力计受到小球的压力,所以此时数据输出就是XY轴输出为0,Z轴输出1个g的加速度值。加速度计具有静态稳定性,不具有动态稳定性,因为物体运动时这个角度会受运动加速度的影响而变得不准确。

可以把陀螺仪看成是游乐园的旋转飞椅模型,中间的轴转的越快,这个椅子飞的就越远,最终我们测量一下对向两个椅子飞起来的距离或飞起来的夹角,就能得到中间轴的角速度了。对角速度积分便能得到角度,但是角速度积分得到的角度经不起时间的考验,会有一个随时间变化的漂移,但不受物体运动的影响。总结下来就是,陀螺仪具有动态稳定性,不具有静态稳定性。

把加速度和角速度进行互补滤波,就能通过数据融合得到静态和动态都稳定的姿态角了。

 MPU6050重要参数

数据是16位的,会分为2个字节存储。

单位是g,也就是重力加速度,1个g=9.8m/s2。

单位是°/sec,就是角速度的单位,每秒旋转了多少度。

如果物体运动比较剧烈,满量程可以选大一点。运动比较平缓的话,可以选择量程小一点,这样分辨率更大。

如果输出数据抖动太厉害,可以配置寄存器来选择对输出数据进行低通滤波。

两种MPU6050从机地址表示方式:一是把110 1000这7位二进制数转换为十六进制(即0x68),I2C通信时,在发第一个字节时,要先把0x68左移1位,再按位或上读写位(读置1写置0)。二是把0x68左移1位后的数据,当做从机地址,0x68左移1位之后,是0xD0。那这样MPU6050的从机地址就是0xD0,在发送第一个字节时,如果你要写,就直接把0xD0当作第一个字节。如果你要读,就把0xD0或上0x01,即0xD1当作第一个字节。这是融入了读写位的从机地址。总结就是MPU6050的读地址是0xD1,写地址是0xD0,本期采用这种方法表示MPU6050的从机地址。

MPU6050硬件电路

这里MPU6050模块内部的SCL、SDA已经内置了上拉电阻,所以接线时,直接把SCL和SDA接在GPIO口就行了。

这个融合了六轴的姿态角会有个缺陷,这缺陷就是绕Z轴的角度,也就是偏航角。这就好像让你坐在车里,不让看窗户,判断车子行驶的方向,短时间还行,时间一长,没有稳定的参考就会迷失方向。这时就要带个指南针,提供长时间的稳定偏航角进行参考,对陀螺仪感知的方向进行修正,这就是9轴姿态传感器多出的磁力计的作用。另外,如果是无人机,需要定高飞行,这时候就还需要增加气压计,扩展为10轴,提供一个高度信息的稳定参考。XCL和XDA,通常就是用于外接磁力计或者气压计。本期不用。

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

MPU6050框图

我们读取数据寄存器就能得到传感器测量的值了 。这个芯片内部的转换,都是全自动进行的,每个ADC输出,对应16位的数据寄存器,不存在数据覆盖的问题。我们配置好转换频率之后,每个数据就自动以我们设置的频率刷新到数据寄存器,我们需要数据的时悮,直接来读就行了。

框图左边,每个传感器都有个自测单元,这部分是用来验证芯片好坏的。当启动自测后,芯片内部会模拟一个外力施加在传感器上,这个外力导致传感器数据会比平时大些。如何自测?先使能自测,读取数据;再使能自测,读取数据。两个数据一相减,得到的数据叫自测响应。这个自测响应,芯片手册里给出了一个范围,在范围内,就说明芯片没问题。

右边的数字运动处理器,简称DMP。是芯片内部自带的一个姿态解算的硬件算法,配合宫方的DMP库,可以进行姿态解算。本期不涉及。

两个程序现象

一是软件 I2C读写MPU6050 

对MPU6050芯片内部的寄存器进行读写,写入到配置寄存器,就可以对外挂的这个模块进行配置;读出数据寄存器,就可以获取外挂模块的数据。最终,我们读出的数据会显示在这个OLED上。最上面的是ID号,图中这个MPU6050的ID号固定为0x68,可以读取这个ID号用来测试 I2C读取数据的功能是不是正常,不同批次的MPU6050,ID号会有所不同。然后下面,左边3个,是加速度传感器的输出数据,分别是X轴、Y轴和Z轴的加速度,右边3个,是陀螺仪传感器的输出数据,分别是X轴、Y轴和Z轴的角速度。

二是硬件 I2C读写MPU6050

这篇关于STM32学习笔记(10_2)- I2C通信协议MPU6050简介的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/865881

相关文章

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

Java Stream 并行流简介、使用与注意事项小结

《JavaStream并行流简介、使用与注意事项小结》Java8并行流基于StreamAPI,利用多核CPU提升计算密集型任务效率,但需注意线程安全、顺序不确定及线程池管理,可通过自定义线程池与C... 目录1. 并行流简介​特点:​2. 并行流的简单使用​示例:并行流的基本使用​3. 配合自定义线程池​示

PostgreSQL简介及实战应用

《PostgreSQL简介及实战应用》PostgreSQL是一种功能强大的开源关系型数据库管理系统,以其稳定性、高性能、扩展性和复杂查询能力在众多项目中得到广泛应用,本文将从基础概念讲起,逐步深入到高... 目录前言1. PostgreSQL基础1.1 PostgreSQL简介1.2 基础语法1.3 数据库

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Python库 Django 的简介、安装、用法入门教程

《Python库Django的简介、安装、用法入门教程》Django是Python最流行的Web框架之一,它帮助开发者快速、高效地构建功能强大的Web应用程序,接下来我们将从简介、安装到用法详解,... 目录一、Django 简介 二、Django 的安装教程 1. 创建虚拟环境2. 安装Django三、创

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

MySQL 索引简介及常见的索引类型有哪些

《MySQL索引简介及常见的索引类型有哪些》MySQL索引是加速数据检索的特殊结构,用于存储列值与位置信息,常见的索引类型包括:主键索引、唯一索引、普通索引、复合索引、全文索引和空间索引等,本文介绍... 目录什么是 mysql 的索引?常见的索引类型有哪些?总结性回答详细解释1. MySQL 索引的概念2

Qt QCustomPlot库简介(最新推荐)

《QtQCustomPlot库简介(最新推荐)》QCustomPlot是一款基于Qt的高性能C++绘图库,专为二维数据可视化设计,它具有轻量级、实时处理百万级数据和多图层支持等特点,适用于科学计算、... 目录核心特性概览核心组件解析1.绘图核心 (QCustomPlot类)2.数据容器 (QCPDataC

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio