首页 > 其他分享 >我要成为MPU6050膏手

我要成为MPU6050膏手

时间:2024-11-12 10:43:39浏览次数:1  
标签:膏手 MPU6050 我要 地址 RA 寄存器 设备 define

MPU6050理论部分

[参考视频链接(bilibili)](用人话告诉你 mpu6050 电子陀螺芯片怎么使用_哔哩哔哩_bilibili)

6050的各个地址

#define MPU6050_RA_GYRO_XOUT_H      0x43    //转速陀螺仪
#define MPU6050_RA_GYRO_XOUT_L      0x44
#define MPU6050_RA_GYRO_YOUT_H      0x45
#define MPU6050_RA_GYRO_YOUT_L      0x46
#define MPU6050_RA_GYRO_ZOUT_H      0x47

#define MPU6050_PWR                 0x6b    //电源
#define MPU6050_SMPLRT_DIV          0x19    //取样时钟
#define MPU6050_CONFIG              0x1a    //低通滤波
#define MPU6050_GYRO_CONFIG         0x1b    //陀螺仪量程(bit3,4)(0-250,1-500,2-1000,3-2000)
#define MPU6050_ACCEL_CONFIG        0x1c    //加速度计量程(bit3,4)(0-2g,1-4g,2-8g,3-16g)
 
#define MPU6050_RA_ACCEL_XOUT_H     0x3B    //加速度
#define MPU6050_RA_ACCEL_XOUT_L     0x3C
#define MPU6050_RA_ACCEL_YOUT_H     0x3D
#define MPU6050_RA_ACCEL_YOUT_L     0x3E
#define MPU6050_RA_ACCEL_ZOUT_H     0x3F
#define MPU6050_RA_ACCEL_ZOUT_L     0x40
 
#define MPU6050_RA_TEMP_OUT_H       0x41    //温度
#define MPU6050_RA_TEMP_OUT_L       0x42
 


6050可以获取的数据

6050总共可以获得七项数据,分别为

  • 俯仰角(pitch),偏航角(roll),横滚角(yaw)加速度
  • X,Y,Z轴旋转角速度
  • 温度

DMP

6050内含数字运动处理器(Digital Motion Processor),输出4个值,可以简单处理后获得加速度和角速度值运算出三个角

DMP采样率、输出率不能超过200Hz

数据输出方式

通常使用IIC,注意IIC虽然可以通过设备地址挂载很多设备,但是如果设备越多、高频信号越多,则会出现信号堵塞的现象,建议高频信号额外开一路IIC

FIFO

当数据采集过快导致设备之间信息不同步时,数据缓存在FIFO,芯片可通过读取FIFO解决数据不同步的问题

原理图

使用6050的i2c通信

6050的i2c地址为 0x68

I2C 的数据字节定义为8-bits长度,对每次传送的总字节数量没有限制。对每一次传输 必须伴有一个应答(ACK)信号,其时钟由主设备提供,而真正的应答信号由从设备发出, 在时钟为高时,通过拉低并保持SDA的值来实现。如果从设备忙,它可以使SCL保持在低电平,这会强制使主设备进入等待状态。当从 设备空闲后,并且释放时钟线,原来的数据传输才会继续。

开始标志(S)发出后,主设备会传送一个7位的Slave地址(实际上就是从机地址),并且后面跟着一个第8 位,称为Read/Write位。R/W位表示主设备是在接受从设备的数据还是在向其写数据。然 后,主设备释放SDA线,等待从设备的应答信号(ACK)。每个字节的传输都要跟随有一 个应答位。应答产生时,从设备将SDA线拉低并且在SCL为高电平时保持低。数据传输总 是以停止标志(P)结束,然后释放通信线路。然而,主设备也可以产生重复的开始信号去 操作另一台从设备,而不发出结束标志。综上可知,所有的SDA信号变化都要在SCL时钟 为低电平时进行,除了开始和结束标志

寄存器的写

image-20241102103203341

如果要写MPU-60X0寄存器,主设备除了发出开始标志(S)和地址位,还要加一个 R/W 位,0为写1为读。在第9个时钟周期(高电平时),MPU-60X0产生应答信号。然 后主设备开始传送寄存器地址(RA),接到应答后,开始传送寄存器数据,然后仍然要有应 答信号,依次类推

image-20241102103625405

单字节写入如上

image-20241102103635324

多字节写入如上

寄存器的读

如果要读取MPU-60X0寄存器的值,首先由主设备产生开始信号(S),然后发送从设备地址位和一个写数据位,然后发送寄存器地址,才能开始读寄存器。紧接着,收到应答信号后,主设备再发一个开始信号,然后发送从设备地址位和一个读数据位。然后,作为从设 备的MPU-60X0产生应答信号并开始发送寄存器数据。通信以主设备产生的拒绝应答信号 (NACK)和结束标志(P)结束。拒绝应答信号(NACK)产生定义为SDA数据在第9个 时钟周期一直为高

image-20241102104447148

实际上是否连续读写取决于主机给slave的应答为NACK还是ACK

怎么读寄存器的连续数据??

MPU6050的加速度计和陀螺仪数据寄存器的地址是连续的,因为每个轴的数据通常以16位(两个字节)的格式存储。具体来说,X、Y、Z三个轴的加速度数据(AX、AY、AZ)、角速度数据(GX、GY、GZ)都在一组连续的寄存器中

对于加速度AX AY AZ

可以直接读取连续地址 0x3B 到 0x40

对于角速度 GX GY GZ

可以直接读取连续地址 0x430x48

代码部分(hal)

先前讲到mpu6050的地址为0x68。但是在发送AD + W的时候发送的内容并非为0x68

对于地址0x68,其为七位地址(110 1000,在左侧补零即为0110 1000),后跟随一位读写位组成一个数据帧,即:

写入6050的时候,主机呼叫的地址为 1101 0000 转化为16进制则为 0xD0

读入6050的时候,主机呼叫的地址为 1101 0001 转化为16进制则为 0xD1

在hal库当中只需要定义0x68并且左移一位即可,其余的读写更改操作hal库会帮忙完成

定义6050的地址

#define MPU6050_READ_ADD 0xD1
#define MPU6050_WRITE_ADD 0xD0

标签:膏手,MPU6050,我要,地址,RA,寄存器,设备,define
From: https://www.cnblogs.com/Stramazing/p/18541338

相关文章

  • 【重生之我要苦学C语言】深入理解指针4
    深入理解指针4字符指针变量指针指向字符变量charch='w';char*p=&ch;指针指向字符数组chararr[10]="abcdef";char*p=arr;printf("%s\n",arr);printf("%s\n",p);结果是一样的也可以写成:char*p="abcdef";//常量字符串//将字符串首字符a的地......
  • Jetson_MPU6050_DMP_Python读取
    编译动态链接库I2CDevLib仓库选用Linux上驱动I2C和MPU6050的代码,克隆LinuxI2CDev文件夹到本地,然后进入到文件夹中,创建一个main.cpp用来创建与Python的函数接口,可以自定义。这里的代码没有考虑零偏,只是从DMP取出四元数换算得到结果的,实际用的时候有不小的零偏,可以添加上初始化时......
  • 【如何安装linux系统】【为什么我要用vmware虚拟机呢?】【阿里云镜像】
    如何安装linux系统为什么我要用vmware虚拟机呢?阿里云镜像(下载镜像)(安装虚拟机)http://mirrors.aliyun.com/......
  • 我希望gid字段是表的自增主键,数据类型采用8个字节的无符号整形数据,并且我要指定自增的
    Sir,为了将gid字段设置为自增主键并且采用8字节无符号整型数据类型(即BIGINTUNSIGNED),您可以使用MySQL的AUTO_INCREMENT机制,并且可以通过ALTERTABLE来指定自增的初始值。具体实现步骤如下:1.字段定义字段名称:gid数据类型:BIGINTUNSIGNED(8字节无符号整数)自增......
  • 重生之我要做商城 - 萌音商城V1.0上线
    萌音系列的第N+1个项目来了呢.这其实又是一个鸽了好几年的项目了,这回总算能把坑填上了.先上项目地址:https://MoeKoe.cn我为什么一直在做项目?这个问题就很有意思了,为什么一直在做各种项目,而且还是不挣钱的东西.接触过我之前一些项目的小伙伴都知道我开发什么项目都是本......
  • 我要成长
    [优秀][优秀][优秀]我要成长,身躯一米七,踮起脚一米八,招起手两米一,还记得我被挑选,从牙克石考到北京,我对我碾压的人,说抱歉,毕业后我去钢铁厂,好悬没做了炉下之鬼,然老天护佑,几经爱的欺骗,我自成一派,香河英茂工作室.中国,为中国物联网发展,为自身成长,融入血液,终生不婚,终生......
  • stm32f103 MPU6050利用DMP进行姿态解算(硬件iic,hal库)
    ​最近在捣鼓平衡车,需要用到MPU6050进行姿态解算,参考了一些文章,也自己解决了一些问题参考:2_小学生都能搞定的MPU6050DMP库向STM32HAL库的移植_哔哩哔哩_bilibili由于在移植的时候用的DMP是官网下载,所以和视频的讲解有些许不同的地方,如果所有资料都是按照视频中来的话,理论上是......
  • 重生之我要当前端大王–鸿蒙next篇 02 常用布局组件
    重生之我要当前端大王–鸿蒙next篇02常用布局组件第三篇章鸿蒙next星河版前言阅读本章,学习Flex布局、Grid网格布局、Stack层叠布局一、Flex布局和html的flex相识,arkUi的flex组件也分为主轴和副轴,并提供声明式api进行设置排布样式,让我们来学习一下@Entry@Component......
  • 【看来我要63岁才能退休了】超简单!低耦合!一步在自己PyQt5、PySide6界面中加入文件资源
    【......
  • 基于单片机设计的水平仪(STC589C52+MPU6050)
    一、前言【1】项目背景水平仪是一种常见的测量工具,用于检测物体或设备的水平姿态。在许多应用中,如建筑、制造和航空等领域,保持设备的水平姿态是非常重要的。为了实现实时的水平检测和显示,基于单片机设计的水平仪是一个常见的解决方案。数字水平仪是一种用于测量物体相对于水平面的......