详解MPU6050,用STM32读取原始数据,并相互融合算出俯仰角、翻滚角、偏航角_第1页
详解MPU6050,用STM32读取原始数据,并相互融合算出俯仰角、翻滚角、偏航角_第2页
详解MPU6050,用STM32读取原始数据,并相互融合算出俯仰角、翻滚角、偏航角_第3页
详解MPU6050,用STM32读取原始数据,并相互融合算出俯仰角、翻滚角、偏航角_第4页
详解MPU6050,用STM32读取原始数据,并相互融合算出俯仰角、翻滚角、偏航角_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

详解MPU6050,用STM32读取原始数据,并相互融合算出俯仰角、翻滚角、偏航角MPU6050是什么?MPU6050是一个6轴运动处理组件,包含了3轴加速度和3轴陀螺仪。MPU-6000为全球首例整合性6轴运动处理组件,相较于多组件方案,免除了组合陀螺仪与加速器时之轴间差的问题,减少了人量的包装空间。MPU-6000整合了3轴陀螺仪、3轴加速器,并含可藉由第二个I2C端II连接其他厂牌之加速器、磁力传感器、或其他传感器的数位运动处理(DMP:DigitalMotionProcessor)硬件加速引擎,由主要I2C端II以单一数据流的形式,向应用端输出完整的9轴融合演算技术LivenSeiise的运动处理资料库,可处理运动感测的复杂数据,降低了运动处理运算对操作系统的负荷,并为应用开发提供架构化的API。MPU-6000的角速度全格感测范I判为±250、±500、±1000与±2000%“(dps),町准确追縱快速与慢速动作,并且,用户可程式控制的加速器全格感测范I制为±2g、±4g±8g与±16g。产品传输可透过最高至400kHz的I2C或最高达20MHz的SPI。MPU-6000可在不同电压卞工作,VDD供电电压介为2.5V±5%、3.0V±5%或3.3V±5%,逻辑接IIWDIO供电为1.8V±5%。MPU-6000的包装尺寸4x4x0.9mm(QFN),在业界是革命性的尺寸。其他的特征包含内建的温度感测器、包含在运作环境中仅有±1%变动的振荡器。加速度传感器是干嘛用的?总而言这,加速度传感器,其实是力传感器。用来检查上下左右前后哪几个面都受了多少力(包括重力),然后计算角度。陀螺仪是干嘛用的?简而言之,陀螺仪就是角速度检测仪。比如,一块板,以X轴为轴心,在一秒钟的时间转到了90度,那么它在X轴上的角速度就是90度/秒(DPS,角速度单DegreePerSecond的缩写o/S,体现了转动的快慢)MPU6050分辨率是多少?3轴加速度和3轴陀螺仪分别用了3个16位的ADC,也就是说,加速度有3个16位ADC,其中每个轴使用了一个。也是说,每个轴输出的数据,是2T6也就是-32768--+32768。陀螺仪也是一样。单位换算上面说的-32768-+32768,那么这个数字到底代表了什么呢?比如陀螺仪32768到底是指角速度达到多少度/秒?这个其实是根据MPU6050设置的量程来决定的,量程不一样,32768代表的值就不一样。MPU6050的量程设置,在MPU6050::uutialize()(MPU6050.cpp库)初始化函数中进行了设置:setFullScaleGvroRange(MPU6050_GYRO_FS_250);setFullScaleAccelRange(MPU6050_ACCEL_FS_2);分别设置为,250度/秒,2g按陀螺仪来说,MPU6050有•四个量程可选:±250,±500,±1000,±2000度/s比方说,设置了是±250,那么-32768—-+32768就代表了-250—-+250。此时它的LSE(拉傻B,最低有效位)是131LSB/(度/s)STM32自带I2C,但一般有两个I2C1(PB6.PB7)和I2C2(PB10.PB11),而且,I2C分为硕件、和模拟。软件12c是程序员使用程序控制SCL,SDA线输出高低电平,模拟12c协议的时序.唤件12c程序员只要调用12c的控制函数即可,不用直接的去控制SCL,SDA高低电平的输出本模块采用的是IIC通信方式,所以我们只需要连接四跟线就可以完成电路的连接,简单方便!原始数据有:AX、AY、AZGX、GY、GZ简单的算法之后可以得到Rolbpitch,yaw参考MPU-6050数据手册引脚说明:引脚编号袖PU-6000MPU&060引脚名称描述1YYCLKIN可选的外部时钟输入,如果不用则连到GND6YYAUXDAI2C主串行数据,用于外接传感器7YYAUXCLI2C主串行时钟,用于外接传感器8Y/CSSPI片选(0=SPImode)8YVLOGIC数字I/O供电电压9YADO/SDOI2CSlave地址LSB(AD0);SPI串行数据输岀(SDO)9YADOI2CSlave地址LSB(ADO)10YYREGOUT校准滤波电容连线11YYFSYNC帧同步数字输入12YYINT中断数字输出(推挽或开漏)13YYVDD电源电压及数字I/O供电电压18YYGND电源地19,21,22YYRESV预留,不接20YYCPOUT电荷泵电容连线23YSCL/SCLKI2C串行时钟(SCL);SPI串行时钟(SCLK)23YSCLI2C串行时钟(SCL)24YSDA/SDII2C串行数据(SDA);SPI串行数据输入(SDI)24YSDAI2C串行数据(SDA)2,3,4,5,14,15,16,17YYNC不接VDD供电电压为2・5V±5%、3・OV±5%、3・3V±5%;VDDIO为1.8V±5%内建振荡器在工作温度范用内仅有±1%频率变化。可选外部时钟输入32.768kHz或19.2NIHZ找出几个重要的寄存器:Register25一SampleRateDivider(SMPRT_DI\r)Type:Read/WriteRegister(Hex)Register(Decimal)Bh7BitGBh5Bit4Bit3Bit2BillBitO宀25SMPLRTDIV[70]SMPLRT.DIV8位无符号值,通过该值将陀螺仪输出分频,得到采样频率该寄存器指定陀螺仪输出率的分频,用来产生MPU-60X0的采样率。传感器寄存器的输出、FIFO输出、DMP采样和运动检测的都是基于该采样率。采样率的计算公式采样率=陀螺仪的输出率/(I+SMPLRT_DIV)当数字低通滤波器没有使能的时候,陀螺仪的输出平路等于8KH乙反之等于1KH乙Register26一Configuration(CONFIG)Type:Read/WriteRegister(Hex)Register(Decimal)Bit7Bh6Bk5Bit4Bh3Bit2Bit1BitO1A26■■EXT-SYNCSET[20]DLPFCFG[20]EXT_SYNC_SET3位无符号值,配置帧同步引脚的采样DLPF_CFG3位无符号值,配置数字低通滤波器该寄存器为陀螺仪和加速度计配置外部帧同步(FSYNC)引脚采样和数字低通滤波器(DLPF)。通过配置EXT_SYNC_SET,可以对连接到FSYNC引脚的一个外部信号进行采样。FSYNC引脚上的信号变化会被锁存,这样就能捕获到很短的频闪信号。采样结束后,锁存器将复位到当前的FSYNC信号状态。根据卞面的表格定义的值,采集到的数据会替换掉数据寄存器中上次接收到的有效数据EXT-SYNCSETFSYNCBitLocation0Inputdisabled1TEMPOUTL[0]2GYROXOUTL[0]3GYROYOUTL[0]4GYROZOUTL[0]5ACCELXOUTL[0]6ACCELYOUTL[0]7ACCELZOUTL[0]数字低通滤波器是由DLPF_CFG来配置,根据卞表中DLPF.CFG的值对加速度传感器和陀

螺仪滤波DLPF^CFGAccelerometer(Fs=1kHz)GyroscopeBandwidth(Hz)Delay(ms)Bandwidth(Hz)Delay(ms)Fs(kHz)026002560.98811842.01881.912943.0982.813444.9424.814218.5208.3151013.81013.416519.0518617RESERVEDRESERVED8Register27-GyroscopeConfiguration(GYRO_CONFIG)Type:Read/WriteRegister(Hex)RegisterJDecimal)Bh7Bh6BK5BK4Bh3BH2Bit1BitOIB27XGSTYGSTZG.STFSSIELg■■-XG_ST设置此位,X轴陀螺仪进行自我测试。YG_ST设置此位,Y轴陀螺仪进行自我测试。ZG_ST设置此位,Z轴陀螺仪进行自我测试。FS_SEL2位无符号值。选择陀螺仪的量程。这个寄存器是用来触发陀螺仪自检和配置陀螺仪的满量程范I制。陀螺仪自检允许用户测试陀螺仪的机械和电气部分,通过设置该寄存器的XG_ST、YG_ST和ZG_STbits可以激活陀螺仪对应轴的自检。每个轴的检测可以独立进行或同时进行。自检的响应=打开自检功能时的传感器输出-未启用自检功能时传感器的输出在NIPU-6000/MPU-6050数据手册的电气特性表中已经给出了每个轴的限制范I制。当自检的响应值在规定的范围内,就能够通过自检;反之,就不能通过自检。根据下表,FS_SEL选择陀螺仪输出的量程:FS-SELFullScaleRange0±250%1±5002±1000°/S3±2000°/sRegister28-AccelerometerConfiguiation(ACCEL_CONFIG)Type:Read/WriteRegister(Hex)Register(Decimal)Bh7Bit6Bit5BH4Bit3Bit2Bit1BitO1C28XASTYASTZASTAFSSEL[10]-XA_ST设置为1时,X轴加速度感应器进行自检。YA_ST设置为1时,Y轴加速度感应器进行自检。ZA_ST设置为1时,Z轴加速度感应器进行自检。AFS_SEL2位无符号值。选择加速度计的量程。具体细节和上面陀螺仪的相似。根据下表,AFS.SEL选择加速度传感器输出的量程。Registers59to64-AccelerometerMeasurements(ACCEL_XOUT_H,ACCEL_XOUT_L,ACCEL_YOUT_H,ACCEL_YOUT_L,ACCEL_ZOUT_H,andACCEL_ZOUT_L)Type:ReadOnlyRegister(Hex)Register(Decimal)Bit7Bit6BM5Bit4Bit3Bh2Bit1BitO3659ACCEL.XOUT[15:8]3C60ACCELXOUT[70]3061ACCEL.YOUT[15:8j3E62ACCEL^YOUT[70]3F63ACCEL.ZOUT(15:8]4064ACCEL.ZOUT"]ACCEL_XOUT16位2,s补码值。存储最近的X轴加速度感应器的测量值。ACCEL_YOUT16位2,s补码值。存储最近的Y轴加速度感应器的测量值。3)ACCEL_ZOUT16位2兮补码值。存储最近的Z轴加速度感应器的测量值。这些寄存器存储加速感应器最近的测量值。加速度传感器寄存器,连同温度传感器寄存器、陀螺仪传感器寄存器和外部感应数据寄存器,都由两部分寄存器组成(类似于STM32F10X系列中的影子寄存器):一个内部寄存器,用户不可见。另一个用户可读的寄存器。内部寄存器中数据在采样的时候及时的到更新,仅在串行通信接II不忙碌时,才将内部寄存器中的值复制到用户可读的寄存器中去,避免了直接对感应测量值的突发访问。在寄存器28中定义了每个16位的加速度测量值的最大范围,对于设置的每个最人范围,都对应一个加速度的灵敏度ACCEL_xOUT,如下面的表中所示:AFSSELFullScaleRangeLSBSensitivity0±2g16384LSB/g1±4g8192LSB/g2士8g4096LSB/g3±l6g2048LSB®Registers65and66一TemperatuieMeasuiement(TEMP_OUT_HandTEMP_OUT_L)Type:ReadOnlyRegistec(Hex)Register(Decimal)Bi(7Bit6Bit5Bit4Bit3BH2Bit1BitO4165TEMP.OUT[15:8J4266TEMP.OUT卩幼1)TEMP_OUT16位有符号值。存储的最近温度传感器的测量值。Registers67to72一GyroscopeMeasuiements(GYRO_XOUT_H,GYRO_XOUT_L,GYRO_YOUT_H.GYRO_YOUT丄GYRO_ZOUT_H・andGYRO_ZOUT_L)Type:ReadOnlyRegister(Hex)Register(Decimal)Bit7 Bh6 Bit5 Bit4Bh3 Bit2 Bit1 BitO4367GYRO.XOU11158!4468GYROXOUT[70]4569GYRO.YOUT(15:8j4670GYROYOUT(70]4771GYRO^ZOUT(15:8]4872GYRO.ZOUT[70]这个和加速度感应器的寄存器相似对应的灵敏度:FSSELFullScaleRangeLSBSensitivity0±2507S131LSB/7S1±500°/S65.5LSB/2/S2土10007S32.8LSB/°/S3±20007s164LSB/°/sType:Read/WriteRegister(Hex)Register(Decimal)Bit7Bh6Bit5Bit4Bh3Bit2Bit1BitO68107DEVICE.RESETSLEEPCYCLE-TEMPOSCLKSCLRO]该寄存器允许用户配置电源模式和时钟源。它还提供了一个复位整个器件的位,和一个关闭温度传感器的位DEVICE_RESET置1后所有的寄存器复位,随后DE\1CE_RESET自动置0.SLEEP置1后进入睡眠模式3)CYCLE当CYCLE被设置为1,且SLEEP没有设置,MPU-60X0进入循坏模式,为了从速度传感器中获得采样值,在睡眠模式和正常数据采集模式之间切换,每次获得一个采样数据。在LP_WAKE_CTRL(108)寄存器中,可以设置唤醒后的采样率和被唤醒的频率。TEMP_DIS置1后关闭温度传感器CLKSEL指定设备的时钟源时钟源的选择:9)Register117-WhoAmI (WHO_AM_I)Type:ReadOnlyRegister(Hex)Register(Decimal)BH7.Bit6B4t5Bit4Bh3Bh2Brt1BitO75117•WHO.AM川6:1]■WHO_AM_I中的内容是MPU-60X0的6位I2C地址上电复位的第6位到第1位值为:110100为了让两个MPU-6050能够连接在一个I2C总线上,当AD0引脚逻辑低电平时,设备的地址是bl101000,当ADO引脚逻辑高电平时,设备的地址是bllOlOOl(2013.01.24)淘宝买的货终于到了,学习用所以没买好的,这个模块只要18块钱。MPU-6000可以使用SPI和I2C接口,而MPU-6050只能使用I2C,其中I2C的地址由ADO引脚决定;寄存器共117个,挺多的,卞面的是精简常用的,根据具体的要求,适当的添加。#defineSNIPLRT_DI\70x19〃采样率分频,典型值:0x07(125Hz)*/#defineCONFIGOxlA 〃低通滤波频率,肌型值:0x06(5Hz)*/^defineGYRO_CONFIGOxlB//陀螺仪自检及测量范吊1,典型值:0x18(不自检,2000deg/s)*/defineACCEL_CONF

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论