这些是我自己常用的代码,比官方的要简洁些,主要是自用,还有相关模块,使用代码。 

MPU-6050 简介

供电电源:3-5v(内部低压差稳压)

通信方式:标准IIC通信协议

芯片内置16bit AD转换器,16位数据输出

陀螺仪范围:±250 500 1000 2000 °/s

加速度范围:±2±4±8±16g

MPU-6000(MPU-6000数据手册)为全球首例整合性6轴运动处理组件,相较于多组件方案,免除了组合陀螺仪与加速器时之轴间差的问题,减少了大量的包装空间。MPU-6000整合了3轴陀螺仪、3轴加速器,并含可藉由第二个I2C端口连接其他厂牌之加速器、磁力传感器、或其他传感器的数位运动处理(DMP: Digital Motion Processor)硬件加速引擎,由主要I2C端口以单一数据流的形式,向应用端输出完整的9轴融合演算技术

InvenSense的运动处理资料库,可处理运动感测的复杂数据,降低了运动处理运算对操作系统的负荷,并为应用开发提供架构化的API。

MPU-6000的角速度全格感测范围为±250、±500、±1000与±2000°/sec (dps),可准确追緃快速与慢速动作,并且,用户可程式控制的加速器全格感测范围为±2g、±4g±8g与±16g。产品传输可透过最高至400kHz的I2C或最高达20MHz的SPI。

MPU-6000可在不同电压下工作,VDD供电电压介为2.5V±5%、3.0V±5%或3.3V±5%,逻辑接口VVDIO供电为1.8V± 5%。MPU-6000的包装尺寸4x4x0.9mm(QFN),在业界是革命性的尺寸。其他的特征包含内建的温度感测器、包含在运作环境中仅有±1%变动的振荡器。

特征
  • 以数字输出6轴或9轴的旋转矩阵、四元数(quaternion)、欧拉角格式(Euler Angle forma)的融合演算数据。
  • 具有131 LSBs/°/sec 敏感度与全格感测范围为±250、±500、±1000与±2000°/sec 的3轴角速度感测器(陀螺仪)。
  • 可程式控制,且程式控制范围为±2g、±4g、±8g和±16g的3轴加速器。
  • 移除加速器与陀螺仪轴间敏感度,降低设定给予的影响与感测器的飘移。
  • 数字运动处理(DMP: Digital Motion Processing)引擎可减少复杂的融合演算数据、感测器同步化、姿势感应等的负荷。
  • 运动处理数据库支持Android、Linux与Windows
  • 内建之运作时间偏差与磁力感测器校正演算技术,免除了客户须另外进行校正的需求。
  • 以数位输出的温度传感器
  • 以数位输入的同步引脚(Sync pin)支援视频电子影相稳定技术与GPS
  • 可程式控制的中断(interrupt)支援姿势识别、摇摄、画面放大缩小、滚动、快速下降中断、high-G中断、零动作感应、触击感应、摇动感应功能。
  • VDD供电电压为2.5V±5%、3.0V±5%、3.3V±5%;VDDIO为1.8V± 5%
  • 陀螺仪运作电流:5mA,陀螺仪待命电流:5A;加速器运作电流:350A,加速器省电模式电流: 20A@10Hz
  • 高达400kHz快速模式的I2C,或最高至20MHz的SPI串行主机接口(serial host interface)
  • 内建频率产生器在所有温度范围(full temperature range)仅有±1%频率变化。
  • 使用者亲自测试
  • 10,000 g 碰撞容忍度
  • 为可携式产品量身订作的最小最薄包装 (4x4x0.9mm QFN)
源码main函数
#include  "systemInit.h"
#include  <uart.h>
#include  <ctype.h>
#include  <string.h>
#include  "uartGetPut.h"
#include  <stdio.h>
#include  <timer.h>
#include  <adc.h>
#include  <stdio.h>

#define  PART_LM3S1138
#include  <pin_map.h>

unsigned char Re_buf[11],counter=0;
unsigned char ucStra[6],ucStrw[6],ucStrAngle[6];
float Value[9];

void delay(int a){
  int x,y;
  for(x=0;x<a;x++)
    for(y=0;y<255;y++);
}


void DataTreating()
{
  //float Value[8];
  //    char a[40];
  //    char b[40];
  char c[40];
  
  Value[0] = ((short)(ucStra[1]<<8| ucStra[0]))/32768.0*16;
  Value[1] = ((short)(ucStra[3]<<8| ucStra[2]))/32768.0*16;
  Value[2] = ((short)(ucStra[5]<<8| ucStra[4]))/32768.0*16;
  Value[3] = ((short)(ucStrw[1]<<8| ucStrw[0]))/32768.0*2000;
  Value[4] = ((short)(ucStrw[3]<<8| ucStrw[2]))/32768.0*2000;
  Value[5] = ((short)(ucStrw[5]<<8| ucStrw[4]))/32768.0*2000;
  
  Value[6] = ((short)(ucStrAngle[1]<<8| ucStrAngle[0]))/32768.0*180;
  Value[7] = ((short)(ucStrAngle[3]<<8| ucStrAngle[2]))/32768.0*180;
  Value[8] = ((short)(ucStrAngle[5]<<8| ucStrAngle[4]))/32768.0*180;
  //sprintf(a,"加速度是x:%.2f y:%.2f z:%.2f \r\n",Value[0],Value[1],Value[2]);
  //  sprintf(b,"角速度是x:%.2f y:%.2f z:%.2f \r\n",Value[3],Value[4],Value[5]);
  sprintf(c,"角度是x:%.2f y:%.2f z:%.2f \r\n",Value[6],Value[7],Value[8]);
  //uartPuts(a);
  // uartPuts(b);
  uartPuts(c);
  delay(10);
  
}

//  主函数(程序入口)
int main(void)
{
  //float Value[8];
  jtagWait();                                             //  防止JTAG失效,重要!
  clockInit();                                            //  时钟初始化:晶振,6MHz
  uartInit();                                             //  UART初始化
  for (;;)
  {
    DataTreating();
  }
}


//  UART2中断服务函数
void UART0_ISR(void)
{
  
  unsigned long ulStatus;
  
  ulStatus = UARTIntStatus(UART0_BASE, true);             //  读取当前中断状态
  UARTIntClear(UART0_BASE, ulStatus);                     //  清除中断状态
  
  if ((ulStatus & UART_INT_RX) || (ulStatus & UART_INT_RT))   //  若是接收中断或者
  {  for(;;)
  {Re_buf[counter]= uartGetc0();
  if(counter==0&&Re_buf[0]!=0x55) return;      //第0号数据不是帧头
  
  counter++; 
  if(counter==11)             //接收到11个数据
  {    
    counter=0;               //重新赋值,准备下一帧数据的接收        
    switch(Re_buf [1])
    {
    case 0x51:
      ucStra[0]=Re_buf[2];
      ucStra[1]=Re_buf[3];
      ucStra[2]=Re_buf[4];
      ucStra[3]=Re_buf[5];
      ucStra[4]=Re_buf[6];
      ucStra[5]=Re_buf[7];
      break;
    case 0x52:	 
      ucStrw[0]=Re_buf[2];
      ucStrw[1]=Re_buf[3];
      ucStrw[2]=Re_buf[4];
      ucStrw[3]=Re_buf[5];
      ucStrw[4]=Re_buf[6];
      ucStrw[5]=Re_buf[7];
      break;
    case 0x53: 
      ucStrAngle[0]=Re_buf[2];
      ucStrAngle[1]=Re_buf[3];
      ucStrAngle[2]=Re_buf[4];
      ucStrAngle[3]=Re_buf[5];
      ucStrAngle[4]=Re_buf[6];
      ucStrAngle[5]=Re_buf[7];	
      break;
    }
    //DataTreating();
    
  }
  break;
  
  }
  }
}
startup_ewarm.c(修改优先级)

unity陀螺仪attitude值 最新陀螺仪代码_陀螺仪


unity陀螺仪attitude值 最新陀螺仪代码_unity陀螺仪attitude值_02


这里用的是UART0 传输文件。

具体的就不讲解了,地址后期会附上