AVR128驱动MPU6050

2024-05-25 12:38
文章标签 驱动 mpu6050 avr128

本文主要是介绍AVR128驱动MPU6050,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


寄存器上面有寄存器操作的地址和寄存器号,找到地址才可以操作寄存器

WHO_AM_I中的内容是MPU-60X0的6位I2C地址

上电复位的第6位到第1位值为:110100

为了让两个MPU-6050能够连接在一个I2C总线上,当AD0引脚逻辑低电平时,设备的地址是 b1101000 ,当AD0引脚逻辑高电平时,设备的地址是 b1101001


 PS:很多人在MPU6050的I2C地址上面弄不清楚,有人说地址是0x68,也有人说是0xD0,其实这两个都是可以的,取决于你的I2C驱动怎么写,这两个地址我都试过,没问题……

下面的两个是设置MPU6050的地址+读写方式

#define RD_DEVICE_ADDR  0xD1  //   这个是当AD0接低电平的时候,从件的硬件+读操作  1101000+1=0XD1
#define WD_DEVICE_ADDR  0xD0    //    这个是当AD0接低电平的时候,从件的硬件+写操作  1101000+0=0XD0
#define RD_DEVICE_ADDR  0xD3 //   这个是当AD0接高电平的时候,从件的硬件+读操作   1101001+1=0XD3
#define WD_DEVICE_ADDR  0xD2 //   这个是当AD0接高电平的时候,从件的硬件+写操作   1101001+1=0XD2




MPU-60X0 对陀螺仪和加速度计分别用了三个16 位的ADC,将其测量的模拟量转化
为可输出的数字量。为了精确跟踪快速和慢速的运动,传感器的测量范围都是用户可控的,陀螺仪可测范围为±250,±500,±1000,±2000°/秒(dps),加速度计可测范围为±2,±4,±8,±16g。

   在网上找了一会,好像MPU-6050没有中文的数据手册,由于本人也处于学习阶段,翻译的可能不太准确,只能表达一下简单的意思,以官方数据手册为准。

 引脚说明:

重力加速度陀螺仪传感器MPU-6050(一)
VDD 供电电压为2.5V±5%、3.0V±5%、3.3V±5%;VDDIO 为1.8V± 5%

内建振荡器在工作温度范围内仅有±1%频率变化。可选外部时钟输入32.768kHz 或19.2MHz

找出几个重要的寄存器:

1)Register 25 – Sample Rate Divider  (SMPRT_DIV)

重力加速度陀螺仪传感器MPU-6050(一)
1)SMPLRT_DIV 8位无符号值,通过该值将陀螺仪输出分频,得到采样频率 

 

  该寄存器指定陀螺仪输出率的分频用来产生MPU-60X0的采样率
  传感器寄存器的输出、FIFO输出、DMP采样运动检测都是基于该采样率。

  
采样率的计算公式

                    采样率 = 陀螺仪的输出率 / (1 + SMPLRT_DIV)

  当数字低通滤波器没有使能的时候,陀螺仪的输出平路等于8KHZ,反之等于1KHZ。

2)Register 26 – Configuration        (CONFIG)

重力加速度陀螺仪传感器MPU-6050(一)

 1)EXT_SYNC_SET 3位无符号值,配置帧同步引脚的采样

 2)DLPF_CFG 3位无符号值,配置数字低通滤波器

 

 该寄存器为陀螺仪和加速度计配置外部同步(FSYNC)引脚采样和数字低通滤波器(DLPF
 通过配置EXT_SYNC_SET,可以对接到FSYNC引脚的一个外部信号进行采样 

 FSYNC引脚上的信号变化会被锁存,这样就能捕获到很短的频闪信号。
 采样结束后,锁存器将复位到当前FSYNC信号状态
 根据下面的表格定义的值,采集到的数据会替换掉数据寄存器中上次接收到的有效数据

重力加速度陀螺仪传感器MPU-6050(一)
数字低通滤波器是由DLPF_CFG来配置,根据下表中DLPF_CFG的值对加速度传感器和陀螺仪滤波

重力加速度陀螺仪传感器MPU-6050(一)

 

 

3)Register 27 – Gyroscope Configuration   (GYRO_CONFIG)

重力加速度陀螺仪传感器MPU-6050(一)
1)XG_ST 设置此位,X轴陀螺仪进行自我测试
2)YG_ST 设置此位,Y轴陀螺进行自我测试
3)ZG_ST 设置此位,Z轴陀螺仪进行自我测试
4)FS_SEL 2位无符号值。选择陀螺仪的量程

   这个寄存器是用来触发陀螺仪自检和配置陀螺仪满量程范围

   陀螺仪自检允许用户测试陀螺的机械和电气部分,通过设置该寄存器的 XG_ST、YG_ST和 ZG_ST bits可以激活陀螺仪对应轴的自检。每个轴的检测可以独立进行或同时进行。

    自检的响应 = 打开自检功能时的传感器输出 - 启用自检功能时传感器的输出

    在MPU-6000/MPU-6050数据手册的电气特性表中已经给出了每个轴的限制范围。当自检的响应值在规定的范围内,就能够通过自检;反之,就不能通过自检。

    根据下表FS_SEL选择陀螺仪输出量程:

重力加速度陀螺仪传感器MPU-6050(一)

 

4)Register 28 – Accelerometer Configuration  (ACCEL_CONFIG)

重力加速度陀螺仪传感器MPU-6050(一)
1)XA_ST    设置为1时X轴加速度感应器进行自检。
2)YA_ST    设置为1时Y轴加速度感应器进行自检。
3)ZA_ST    设置为1时Z轴加速度感应器进行自检。
4)AFS_SEL  2位无符号值。选择加速度计的量程

 

  具体细节和上面陀螺仪的相似。

  根据下表,AFS_SEL选择加速度传感器输出量程。

重力加速度陀螺仪传感器MPU-6050(一)

5)Registers 59 to 64 – Accelerometer Measurements (ACCEL_XOUT_H, ACCEL_XOUT_L, ACCEL_YOUT_H, ACCEL_YOUT_L, ACCEL_ZOUT_H, and ACCEL_ZOUT_L)

重力加速度陀螺仪传感器MPU-6050(一)

1)ACCEL_XOUT  16位2’s补码值
   存储最近的X轴加速度感应器的测量值
2)ACCEL_YOUT  16位2’s补码值
   存储最近的Y轴加速度感应器的测量值
3)ACCEL_ZOUT  16位2’s补码值
   存储最近的Z轴加速度感应器的测量值

 

  这些寄存器存储加速感应器最近的测量值

   加速度传感器寄存器,连同温度传感器寄存器、陀螺仪传感器寄存器和外部感应数据寄存器,都由两部分寄存器组成(类似于STM32F10X系列中的影子寄存器):一个内部寄存器,用户不可见。另一个用户可读的寄存器。内部寄存器中数据在采样的时候及时的到更新,仅在串行通信接口不忙碌时,才将内部寄存器中的值复制到用户可读的寄存器中去,避免了直接对感应测量值的突发访问。 

   在寄存器28中定义了每个16位的加速度测量值的最大范围,对于设置的每个最大范围,都对应一个加速度的灵敏度ACCEL_xOUT,如下面的表所示:

重力加速度陀螺仪传感器MPU-6050(一)

6)Registers 65 and 66 – Temperature Measurement   (TEMP_OUT_H and TEMP_OUT_L)

重力加速度陀螺仪传感器MPU-6050(一)

1)TEMP_OUT 16位有符号值
   存储最近温度传感器的测量值

 

7)Registers 67 to 72 – Gyroscope Measurements    (GYRO_XOUT_H, GYRO_XOUT_L, GYRO_YOUT_H, GYRO_YOUT_L, GYRO_ZOUT_H, and GYRO_ZOUT_L)

 

重力加速度陀螺仪传感器MPU-6050(一)
这个和加速度感应器的寄存器相似

对应的灵敏度:

重力加速度陀螺仪传感器MPU-6050(一)

8)Register 107 – Power Management 1   (PWR_MGMT_1)

重力加速度陀螺仪传感器MPU-6050(一)

 

该寄存器允许用户配置电源模式和时钟源它还提供了一个复位整个器件,和一个关闭温度传感器的

1)DEVICE_RESET  置1后所有的寄存器复位,随后DEVICE_RESET自动置0.

2)SLEEP         置1后进入睡眠模式  

3)CYCLE         当CYCLE被设置为1,且SLEEP没有设置,MPU-60X0进入循环模式,为了从速度传感器中获得采样值,在睡眠模式和正常数据采集模式之间切换,每次获得一个采样数据。在LP_WAKE_CTRL(108)寄存器中,可以设置唤醒后的采样率和被唤醒的频率。

4)TEMP_DIS      置1后关闭温度传感器

5)CLKSEL        指定设备的时钟源   

 

时钟源的选择:

重力加速度陀螺仪传感器MPU-6050(一)
     

9)Register 117 – Who Am I         (WHO_AM_I)

重力加速度陀螺仪传感器MPU-6050(一)

 WHO_AM_I中的内容是MPU-60X0的6位I2C地址

上电复位的第6位到第1位值为:110100

为了让两个MPU-6050能够连接在一个I2C总线上,当AD0引脚逻辑低电平时,设备的地址是 b1101000 ,当AD0引脚逻辑高电平时,设备的地址是 b1101001 

 

 


重力加速度陀螺仪传感器MPU-6050(一)

MPU-6000可以使用SPI和I2C接口,而MPU-6050只能使用I2C,其中I2C的地址由AD0引脚决定;寄存器共117个,挺多的,下面的是精简常用的,根据具体的要求,适当的添加。

 

#define SMPLRT_DIV  0x19    //采样率分频,典型值:0x07(125Hz) */
#define CONFIG   0x1A       // 低通滤波频率,典型值:0x06(5Hz) */
#define GYRO_CONFIG  0x1B   // 陀螺仪自检及测量范围,典型值:0x18(不自检,2000deg/s) */
#define ACCEL_CONFIG 0x1C  // 加速计自检、测量范围及高通滤波频率,典型值:0x01(不自检,2G,5Hz) */

 

#define ACCEL_XOUT_H 0x3B  // 存储最近的X轴、Y轴、Z轴加速度感应器的测量值 */
#define ACCEL_XOUT_L 0x3C
#define ACCEL_YOUT_H 0x3D
#define ACCEL_YOUT_L 0x3E
#define ACCEL_ZOUT_H 0x3F
#define ACCEL_ZOUT_L 0x40

 

#define TEMP_OUT_H  0x41   // 存储的最近温度传感器的测量值 */
#define TEMP_OUT_L  0x42

 

#define GYRO_XOUT_H  0x43 // 存储最近的X轴、Y轴、Z轴陀螺仪感应器的测量值 */
#define GYRO_XOUT_L  0x44 
#define GYRO_YOUT_H  0x45
#define GYRO_YOUT_L  0x46
#define GYRO_ZOUT_H  0x47
#define GYRO_ZOUT_L  0x48

 

#define PWR_MGMT_1  0x6B // 电源管理,典型值:0x00(正常启用) */
#define WHO_AM_I  0x75 //IIC地址寄存器(默认数值0x68,只读) */

 

编程时用到的关于I2C协议规范:

重力加速度陀螺仪传感器MPU-6050(一)

  


这篇关于AVR128驱动MPU6050的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

驱动(RK3588S)第七课时:单节点设备树

目录 需求一、设备树的概念1、设备树的后缀名:2、设备树的语法格式3、设备树的属性(重要)4、设备树格式举例 二、设备树所用函数1、如何在内核层种获取设备树节点:2、从设备树上获取 gpio 口的属性3、获取节点上的属性只针对于字符串属性的4、函数读取 np 结点中的 propname 属性的值,并将读取到的 u32 类型的值保存在 out_value 指向的内存中,函数的返回值表示读取到的

驱动安装注册表指令

HKCR: HKEY_CLASSES_ROOT HKCU: HKEY_CURRENT_USER HKLM: HKEY_LOCAL_MACHINE HKU: HEKY_USER HER: 相对根键

UMDF驱动安装

VS2013 + WDF8.1,UMDF驱动选择User Mode Driver,不要选User Mode Driver 2.0,否则Win7安装有问题,如图 另外,在驱动安装时不要忘记WUDFUpdate_<主版本号><次版本号>.dll文件,具体文件名在INF中查找。此文件可在WDF的安装目录中找到。注意:在WDF的安装目录中会有3个WUDFUpdate_xxx.dll文件,x86,x6

电脑驱动分类

电脑驱动程序(驱动程序)是操作系统与硬件设备之间的桥梁,用于使操作系统能够识别并与硬件设备进行通信。以下是常见的驱动分类: 1. 设备驱动程序 显示驱动程序:控制显卡和显示器的显示功能,负责图形渲染和屏幕显示。 示例:NVIDIA、AMD 显示驱动程序。打印机驱动程序:允许操作系统与打印机通信,控制打印任务。 示例:HP、Canon 打印机驱动程序。声卡驱动程序:管理音频输入和输出,与声卡硬件

麒麟系统安装GPU驱动

1.nvidia 1.1显卡驱动 本机显卡型号:nvidia rtx 3090 1.1.1下载驱动 打开 https://www.nvidia.cn/geforce/drivers/ 也可以直接使用下面这个地址下载 https://www.nvidia.com/download/driverResults.aspx/205464/en-us/ 1.1.3安装驱动 右击,

windows10 卸载网络驱动以及重新安装

右键桌面此电脑的图标,点击管理,设备管理器—网络适配器,找到下图中的驱动(不同的系统或者显卡会导致网卡驱动名称与下图不一样,多为Realtek开头),右键选择卸载设备,然后重启电脑,系统会自动重新安装驱动 新电脑首次安装驱动: 根据主板厂家,比如华硕,进入华硕官网,点击服务支持,点击下载中心,选择型号,点击右侧驱动程序和工具软件,选择windows版本,下载相应的驱动,下载完之后在对应文件中找

笔记整理—内核!启动!—kernel部分(1)驱动与内核的关系

首先,恭喜完成了uboot部分的内容整理,其次补充一点,uboot第一部分和第二部分的工作不是一定的,在不同的版本中,可能这个初始化早一点,那个的又放在了第二部分,版本不同,造成的工作顺序不同,但终归是要完成基本内容初始化并传参给kernel的。         那么至于驱动与内核的关系,用一张图来说明最适合不过:         驱动位于OS层的中下层与硬件相接。驱动是内

读源码笔记--文件过滤驱动FileSpy第1篇 -- DriverEntry

今天只读FileSpy的DriverEntry,位于源文件:filespy.c。 // // 全局变量. // ULONG gFileSpyDebugLevel = DEFAULT_FILESPY_DEBUG_LEVEL; #if WINVER >= 0x0501 ULONG gFileSpyAttachMode = FILESPY_ATTACH_ALL_VOLUMES; #else ULON

Circuit Design 三极管驱动蜂鸣器电路 及 蜂鸣器两端电压正确但是不响的解决方案

利用三极管进行电流放大的蜂鸣器驱动电路图: (百度图片找的) 我用有源蜂鸣器实现的这个电路,但是蜂鸣器不响。 details: 1. VCC =5V 蜂鸣器两端的直接电压约为4.5V, 但是蜂鸣器不响。 2. 将蜂鸣器直接接在4.5V的电源两端,蜂鸣器响。(说明蜂鸣器是好的) 3. 测了三极管各个管脚的电压, 和理论上的是一致的。 情况很奇怪,换了好几个三极管结果都是一样的,