zoukankan      html  css  js  c++  java
  • 基于I2C总线的MPU6050学习笔记

    MPU6050学习笔记

    1. 简述

    一直想自己做个四轴飞行器,却无从下手,终于狠下决心,拿出尘封已久的MPU6050模块,开始摸索着数据手册分析,一步一步地实现了MPU6050模块的功能,从MPU6050模块中读取出加速度值和陀螺仪采样值。

    模块如下图所示:

    MPU6050模块

    2. 模块简介

    MPU-60X0将3轴陀螺仪,3轴加速度计和数字运动处理器(DMP)组合在一起。通过I2C总线可以接受外部3轴罗盘的输入,提供9轴输出。

    MPU-60X0具有三个用于数字化陀螺仪输出的16位ADC转换器和三个用于数字化加速度计输出的16位ADC转换器。
    对于快速和慢速运动的精确跟踪,这些器件具有用户可编程的满量程±250,±500,±1000和±2000°/秒(dps)的用户可编程陀螺仪和用户可编程加速度计满量程 范围为±2g,±4g,±8g和±16g。

    I2C通讯速率400KHz,SPI通讯速率1MHz(仅MPU-6000)。高速通讯SPI通讯速率20MHz(仅MPU-6000)。

    MPU-60X0电源电压范围:2.375V ~ 3.46V

    MPU-6000和MPU-6050相同,只是MPU-6050仅支持I2C接口,并具有单独的VLOGIC参考引脚。MPU-6000支持I2C和SPI接口,并具有单电源引脚VDD。

    MPU-60X0具有16位ADC和信号调理的三轴MEMS陀螺仪
    MPU-60X0由三个独立的振动MEMS速率陀螺仪组成,可检测绕X轴,Y轴和Z轴的旋转。 当陀螺仪围绕任何感应轴旋转时,科里奥利效应会引起由电容感应检测到的振动。 所得到的信号被放大,解调和滤波以产生与角速率成比例的电压。 使用单独的片内16位模数转换器(ADC)对该电压进行数字化,以对每个轴进行采样。 陀螺仪传感器的满量程范围可以数字编程为±250,±500,±1000或±2000度/秒(dps)。 ADC采样速率可以从每秒8,000个采样点编程到每秒3.9个采样点,用户可选的低通滤波器可实现宽范围的截止频率。

    MPU-60X0的坐标轴关系如下图所示:

    MPU6050的坐标轴关系

    3. I2C通信协议

    参考I2C通信协议

    4. MPU6050寄存器读写

    I2C通讯中,主处理器芯片作为主设备,MPU6050作为从设备。

    4.1 从设备地址

    MPU6050作为从设备使用时,有一个芯片自身的7位的设备地址,该地址为:0b110100X,7位地址的LSB位由引脚AD0的值决定,这样在一个板子的同一个I2C总线上可以同时使用两个MPU6050芯片,所以MPU6050的从设备地址为:0b1101000(0x68,AD0为低)或者0b1101001(0x69,AD0为高)。

    4.2 写寄存器

     主设备发送一个起始位(S),再发送I2C的从设备地址数据(由从7bit设备地址和1bit读标志位0组成),在第9个时钟SCL为高电平时,从设备发送应答信号(ACK)。接着,主设备发送从设备的寄存器地址(RA,8bit),等待从设备应答(ACK)后,主设备再发送要在寄存器中写入的数据(8bit),等待从设备应答(ACK)后,可以发送停止位(P)结束数据传输。
    
    如果要写多个寄存器,在上一步中可以先不发停止位(P),而是继续发送数据(8bit),这样就可以实现连续写入多个寄存器数据了。MPU6050芯片会自动增加寄存器地址,并将连续写入的数据字节,按顺序依次写入到相邻的寄存器中。
    

    两种写数据的格式如下图所示:

    MPU6050的I2C写寄存器顺序

    4.3 读寄存器

     主设备发送一个起始位(S),再发送I2C的从设备地址数据(由从7bit设备地址和1bit写标志位0组成),在第9个时钟SCL为高电平时,从设备发送应答信号(ACK)。然后发送要读取的寄存器地址,在接收到从设备发送的应答信号(ACK)后,主设备发送一个起始位(Sr),再发送从设备地址(由从7bit设备地址和1bit读标志位1组成 )。从设备会发送一个应答信号(ACK),再发送寄存器中的数据(8bit)。主设备发送一个非应答信号(NOACK),和一个停止位(P),停止I2C传输。
    
    如果要读取多个连续的寄存器,在上一步中不能发送非应答信号(NOACK)和停止位(P),而是要发送一个应答信号(ACK),等待下一个从设备发送的数据,直到最后一个数据接收完成后,主设备发送一个非应答信号(NOACK),和一个停止位(P),停止I2C传输。
    

    两种读寄存器数据的格式如下图所示:

    MPU6050的I2C读寄存器顺序

    4.4 MPU6050通讯中的简写符号

    I2C通讯中的简写符号

    5. 总结

    至此,I2C总线通讯协议及MPU6050寄存器的读写已经介绍完毕,下一步就是用程序实现I2C通讯,并通过I2C读写MPU6050的寄存器数据。具体内容,请参考下一节。

    6. 参考资料

    MPU-6000 and MPU-6050 Product Specification Revision 3.4(MPU-6050_DataSheet_V3 4.pdf)
    MPU-6000 and MPU-6050 Register Map and Descriptions Revision 4.2(MPU-6000-Register-Map1.pdf)

  • 相关阅读:
    2013-1-17 打开/关闭默认共享的命令
    2013-1-1遍历文件夹,改名文件
    2012-07-02 无边框最大化窗体
    2012-04-12 工具箱中添加自定义控件的方法
    2012-4-2 通过MdiParent设置窗体最前
    2012-2-7列举及终止进程
    python with as 以上这段代码执行完毕后,就算在处理过程中出问题了,文件 f 总是会关闭。
    终于好了 ipython 里执行dos命令 显示结果却显示在kernel界面里 搞定了
    Win7开启远程桌面
    哪位有方法把 dd/mm/yyyy的字符串 格式化成yyyy-mm-dd
  • 原文地址:https://www.cnblogs.com/microxiami/p/8524424.html
Copyright © 2011-2022 走看看