一、前言
MPU6500为MPU6050的更新产品,其中MPU6050仅支持IIC通信,而MPU6500不仅支持IIC,还支持SPI通信,而SPI相较于IIC能提供更高的数据传输速率。该陀螺仪具有±250、±500、±1000和±2000度/秒的可编程满量程范围和0.01 dps/kHz时的极低速率噪声。加速度计范围为±2g、±4g、± 8 g和± 16 g。有可编程数字滤波器、-40 ° C至85°C范围内1%漂移的精密时钟、嵌入式温度传感器和可编程中断。该器件具有IC和SPI串行接口,VDD工作范围为1.71至3.6V,以及独立的数字IO电源,VDDIO范围为1.71 V至3.6V。与器件所有寄存器的通信使用400 kHz的I C或1 MHz的SPI进行。对于需要更快通信的应用,传感器和中断寄存器可以使用SPI以20 MHz通信。而本文将介绍如何使用这款芯片。
二、MPU6500的介绍
2.1 时序介绍
从时序图可以看见,SCLK空闲时为高电平,其低电平时数据改变,高电平时读取数据(下降沿移出,上升沿移入),故SPI的模式为模式三:CPOL=1、CPHA=1。
2.2 原理图介绍
其中(a)图为IIC时序,(b)图为SPI时序。
三、相关寄存器的介绍
这部分可以先略过,先看下边的代码编写再看此寄存器去理解代码。
3.1 PWR_MGMT_1(电源管理 1:0X6B)
主要是在初始化中用得到,比如初始化代码会先在最高位写入1来恢复默认设置,然后再写入0x00来唤醒MCU。
3.2 PWR_MGMT_2(电源管理 2:0X6C)
其中第[7:6]是设置唤醒频率用的(一般用不上),使用条件为:
(i) Set CYCLE bit to 1 将 CYCLE 位设置为 1
(ii) Set SLEEP bit to 0 将 SLEEP 位设置为 0
(iii) Set TEMP_DIS bit to 1 将 TEMP_DIS 位设置为 1
(iv) Set DIS_XG, DIS_YG, DIS_ZG bits to 1 将 DIS_XG、DIS_YG DIS_ZG 位设置为 1其中步骤 (i) 到(iii)中提到的位可以在PWR_MGMT_1寄存器中找到,在此模式下,设备将关闭除主 I C 接口之外的所有设备,仅以固定间隔唤醒加速度计以进行一次测量。唤醒频率可以通过 LP_WAKE_CTRL 进行配置,如下所示。
在初始化函数中我们一般将此寄存器都设置为0。
3.3 User Control(用户控制:0X6A)
用于设置一些相关参数,如设置为0X11:置于SPI模式以及重置路径。
3.4 Accelerometer Configuration 2 (加速度计配置 2:0X1D)
其原理可以不用管,主要是设置加速度计数据速率和带宽,想了解的可以自己去查阅数据手册。我们初始化中配置为0x03。
3.5 Interrupt Enable(中断使能:0X38)
此寄存器为中断使能引脚,我们一般只使能运动中断,也就是设置为0X40。
3.6 Accelerometer Interrupt Control(加速度计中断控制:0X69)
主要是启用Accel硬件智能