MPU6050简介
MPU6050简介
浅谈I2C和SPI通信协议。
MPU-60X0是全球首例9轴运动处理传感器。它集成了3轴MEMS陀螺仪,3轴MEMS加速度计,以及一个可扩展的数字运动处理器DMP(DigitalMotionProcessor),可用I2C接口连接一个第三方的数字传感器,比如磁力计。扩展之后就可以通过其I2C或SPI接口输出一个9轴的信号(SPI接口仅在MPU-6000可用)。MPU-60X0也可以通过其I2C接口连接非惯性的数字传感器,比如压力传感器。
MPU-60X0对陀螺仪和加速度计分别用了三个16位的ADC(0~65535),将其测量的模拟量转化为可输出的数字量。为了精确跟踪快速和慢速的运动,传感器的测量范围都是用户可控的,陀螺仪可测范围为±250,±500,±1000,±2000°/秒(dps),加速度计可测范围为±2,±4,±8,±16g。
芯片尺寸4×4×0.9mm,采用QFN封装(无引线方形封装),可承受最大10000g的冲击,并有可编程的低通滤波器。
MPU6050的内部框图如下图所示:
其中,需要了解的引脚有:SCL和SDA是连接MCU的IIC接口,MCU通过这个IIC接口来控制MPU6050,另外还有一个IIC接口:AUX_CL和AUX_DA,这个接口可用来连外部从设备比如磁力计,这样就可以组成一个九轴传感器。VLOGIC是IO口电压,该引脚最低可以到1.8V电压,我们一般直接连VDD即可。AD0是从IIC接口(接MCU)的地址控制引脚,该引脚控制的是IIC地址的最低位。如果接GND,则MPU6050的IIC地址是:0X68,如果接VDD,则是0X69。需要注意的是:这里的地址0x68和0x69是不包含用于数据传输的最低位的,因此并不是八位数据,如0x68表示的是1101000,0x69表示的则是1101001,通常最低位用于表示IIC主机的读取数据/写数据模式。selftest为自检,自检的作用是可用来测试传感器的机械和电气结构。也就是说通过自检来测试芯片是否损坏。自检启动后,电路会使传感器工作并且产生输出信号。关于自检的具体说明,官方芯片手册里有详细描述。如下:
Whenself-testisactivated,theon-boardelectronicswillactuatetheappropriatesensor.Thisactuationwillmovethesensor’sproofmassesoveradistanceequivalenttoapre-definedCoriolisforce.Thisproofmassdisplacementresultsinachangeinthesensoroutput,whichisreflectedintheoutputsignal.Theoutputsignalisusedtoobservetheself-testresponse.
Theself-testresponseisdefinedasfollows:
Whenself-testisactivated,theon-boardelectronicswillactuatetheappropriatesensor.Thisactuationsimulatesanexternalforce.Theactuatedsensor,inturn,willproduceacorrespondingoutputsignal.Theoutputsignalisusedtoobservetheself-testresponse.
Theself-testresponseisdefinedasfollows:
Self-testresponse=Sensoroutputwithself-testenabled–Sensoroutputwithoutself-testenabledTheself-testlimitsforeachaccelerometeraxisisprovidedintheelectricalcharacteristicstablesoftheMPU-6000/MPU-6050ProductSpecificationdocument.Whenthevalueoftheself-testresponseiswithinthemin/maxlimitsoftheproductspecification,theparthaspassedselftest.Whentheself-testresponseexceedsthemin/maxvaluesspecifiedinthedocument,thepartisdeemedtohavefailedself-test.
MPU6050官方的寄存器手册上共介绍了40个寄存器的内容和功能,在此我只选取一些常用的和重要的寄存器作为了解。
说明:该寄存器指定陀螺仪输出速率的分频器,用于为MPU-60X0生成采样速率。
传感器寄存器输出,FIFO输出,DMP采样,运动检测,静止检测和自由落体检测都基于这个采样频率。
采样频率=陀螺仪输出频率/(1+SMPLRT_DIV)
当DLPF(数字低通滤波器,见寄存器Configuration)禁用时(DLPF_CFG=0or7),陀螺输出频率=8kHz;当DLPF使能,陀螺仪输出频率=1KHz。注意:加速度计输出频率为1KHz。这意味着,当采样频率大于1KHZ时,同个加速度计采样得到的数据,可能不止一次输出到FIFO、DMP、传感器寄存器。
说明:该寄存器为陀螺仪和加速度计配置外部帧同步(FSYNC)管脚的采样和数字低通滤波(DLPF)设置。
其中,数字低通滤波器DLPF由DLPF_CFG配置。根据下表所示的DLPF_CFG值对加速度计和陀螺仪进行滤波。
其中,FS为陀螺仪输出频率。SMPLRT_DIV由预设定的采样频率根据上述的公式计算得出。一般情况下,DPLF滤波频率为采样频率的一半,如设定采样频率为50Hz,由表可知当FS为1kHz,SMPLRT_DIV的值为1000/50-1=19。
说明:该寄存器是用来触发陀螺仪自检和配置陀螺仪的满量程范围。
其中,XG_ST、YG_ST、ZG_ST分别用来设置陀螺仪X轴、Y轴、Z轴自检,置0则不触发自检。FS_SEL[1:0]用于设置陀螺仪的满量程,如下表:
我们一般设置为3,即满量程为±2000°/s,由于采用16位ADC即0-65536,则灵敏度G=65536/4000=16.4LSB/(°/s),LSB表示最低有效位,即1°/s对应的数字量为16.4。最终即可将陀螺仪输出的数字量数据转化为角速度。
说明:该寄存器是用来触发加速度计自检和配置加速度计的满量程范围。同时这个寄存器也可以用于配置数字高通滤波器(DHPF)。
其中,XA_ST、YA_ST、ZA_ST分别用来设置加速度计X轴、Y轴、Z轴自检,置0则不触发自检。AFS_SEL[1:0]用于选择加速度计的满量程范围,如下表:
我们一般设置为0,即满量程为±2g,由于采用16位ADC即0-65536,则灵敏度G=65536/4=16384LSB/(g),LSB表示最低有效位,即1g对应的数字量为16384。最终即可将加速度计输出的数字量数据转化为加速度。
说明:该寄存器存储最近加速度计的测量值。加速度计根据采样频率(由采样分频寄存器寄存器设定)写入到这些寄存器。即采样频率为50Hz,写入数据的时间间隔为0.02s。加速度计测量值寄存器和温度测量值寄存器,陀螺仪测量值寄存器,外部传感器数据寄存器都是由两组寄存器构成:一个内部寄存器集和一个用于用户读取的寄存器集。
加速度计传感器的内部寄存器集合里的数据根据采样频率更新。以此同时,每当串行接口处于闲置状态,面向用户的读取寄存器集合会复制内部寄存器集合的数据值。这保证了突发读取时传感器寄存器可以读到相同的采样时刻的测量值。需要注意的是,如果没有突发读取,则用户负责通过检查数据就绪中断(DataReadyinterrupt)来确保瞬时的一组单字节读取对应于单字节的采样数据。
参数:
ACCEL_XOUT:
由2部分组成的16位数值存储最近X轴加速度计的测量值。
ACCEL_YOUT:
由2部分组成的16位数值存储最近Y轴加速度计的测量值。
ACCEL_ZOUT:由2部分组成的16位数值存储最近Z轴加速度计的测量值。
说明:该寄存器存储最近加陀螺仪的测量值。大致构成与加速度计测量值寄存器相同,此处便不做叙述。参数分别为:GYRO_XOUT、GYRO_YOUT、GYRO_ZOUT。
说明:该寄存器允许用户配置电源模式和时钟源,还提供了复位整个设备和禁用温度传感器的位。当置SLEEP位为1时,MPU-60X0可以进入低功耗睡眠模式。当SLEEP位禁用且CYCLE位置1时,MPU-60X0进入循环模式(CycleMode)。在循环模式下,设备在休眠模式和唤醒之间循环,以LP_WAKE_CTRL(由电源管理2寄存器配置)确定的速率从activesensors(此处不知如何翻译)获取单个数据样本。
该寄存器的最低三位用于设置系统的时钟源选择,默认值是0(内部8MRC振荡),不过一般设置为1,选择x轴陀螺PLL作为时钟源,以获得更高精度的时钟。同时,使能角速度传感器和加速度传感器,这两个操作通过电源管理寄存器2配置,设置对应位为0即可开启。
附英文手册原文片段:Uponpowerup,theMPU-60X0clocksourcedefaultsto
theinternaloscillator.However,itishighlyrecommendedthatthedevicebeconfiguredtouseoneofthegyroscopes(oranexternalclocksource)astheclockreferenceforimprovedstability.
其他参数:
DEVICE_RESET
该位置1,重启内部寄存器到默认值。复位完成后该位自动清0。
TEMP_DIS该位置1,禁用温度传感器。
说明:该寄存器允许用户在加速度计低功耗模式下配置唤醒频率。也允许用户让加速度计和陀螺仪的个别轴进入待机模式。
只让MPU-60X0的加速度计进入低功耗模式的步骤如下:
1.置CYCLE位为1
2.置SLEEP位为1
3.置TEMP_DIS位为1
4.置STBY_XG,STBY_YG,STBY_ZG位为1
在这种模式下,设备会关闭除了主I2C接口外其他所有设备,加速度计只在固定的间隔唤醒并测量一次。唤醒的频率可以通过配置LP_WAKE_CTRL实现如下:
参数:
LP_WAKE_CTRL:
2位无符号数值。指定加速度计在低功耗模式下的唤醒频率。
STBY_XA:
该位置1,加速度计的X轴进入待机模式。
STBY_YA:
该位置1,加速度计的Y轴进入待机模式。
STBY_ZA:
该位置1,加速度计的Z轴进入待机模式。
STBY_XG:
该位置1,陀螺仪的X轴进入待机模式。
STBY_YG:
该位置1,陀螺仪的Y轴进入待机模式。
STBY_ZG:该位置1,陀螺仪的Z轴进入待机模式。
到此,关于MPU6050官方手册里与我用到的有关的内容已经整理完了。由于很多英文看不懂,所以参考了很多的中文资料综合起来,参考的资料有:
标签: