• 陀螺仪测试电路


    背景介绍

      陀螺仪是无人机惯导系统最基本的组成元件之一,通过对陀螺仪输出的角速度进行积分,能够获得无人机的姿态角信息;在兴趣爱好的驱动下,近来购买了MPU-6050相关模块,通过串口把测试结果传输到电脑端,实现了位姿信号的采集,具体如下图所示:

      MPU6050是一种非常流行的空间运动传感器芯片,可以对传感器当前三个加速度分量和三个旋转角速度进行采集。其中,上图中前三个数据分别表述为传感器x,y,z方向的加速度,后三个数据分别表述为传感器绕x,y,z轴的角速度,若mpu-6050设定的加速度倍率为2g,角速度倍率为1000°/s,那么加速度和角加速度的计算公式为:
    a x = A C C _ X / 32768 × 2 g {a_x} = ACC\_X/32768 \times 2g ax=ACC_X/32768×2g g x = G R Y _ X / 32768 × 1000 {g_x} = GRY\_X/32768 \times 1000 gx=GRY_X/32768×1000

    附录:补充资料

    1、mpu-6050硬件原理图

      MPU-6050整合了三轴陀螺仪和三轴加速度计,分别用三个16位的ADC,将其测量的模拟量信号转化为可输出的数字量;其中,陀螺仪的测试范围为±250,±500,±1000, ±2000°/秒( dps),能够对快速和慢速运动的物体实现精确跟踪;加速度计的测试范围为±2, ±4,±8, ±16g(传感器的测量范围可以通过程序进行控制)。

      图a表述为mpu-6050实物图,模块的大小与指甲盖相差不大,具体为2cm*1.5cm;图b表述为mpu-6050坐标系定义的方式;图c表述为该模块的原理图,测试过程中,VCC、GND、SCL以及SDA分别与单片机相应的引脚相连接。

    2、数据采集及上传

      mpu-6050每隔一段时间采集一次传感器的状态信息,通过延时函数实现该功能,本实例中采用的程序源码如下所示(部分),其中,delay(2000)表述为延时0.4s,即陀螺仪每秒钟输出2-3个数据点:

    void main()
    { 
      delay(500);    //上电延时    
      init_uart();
      InitMPU6050();  //初始化MPU6050
      delay(150);
      while(1)
      {
        SeriPushSend('A');  
        SeriPushSend(0x20);SeriPushSend('X'); SeriPushSend(':'); 
        Display10BitData(GetData(ACCEL_XOUT_H));  //显示X轴加速度
        SeriPushSend(0x20);SeriPushSend('Y'); SeriPushSend(':');
        Display10BitData(GetData(ACCEL_YOUT_H));  //显示Y轴加速度
        SeriPushSend(0x20);SeriPushSend('Z'); SeriPushSend(':');
        Display10BitData(GetData(ACCEL_ZOUT_H));  //显示Z轴加速度
        SeriPushSend(0x20); 
        SeriPushSend('G');  
        SeriPushSend(0x20);SeriPushSend('X'); SeriPushSend(':');
        Display10BitData(GetData(GYRO_XOUT_H));    //显示X轴角速度
        SeriPushSend(0x20);SeriPushSend('Y'); SeriPushSend(':');
        Display10BitData(GetData(GYRO_YOUT_H));    //显示Y轴角速度
        SeriPushSend(0x20);SeriPushSend('Z'); SeriPushSend(':');
        Display10BitData(GetData(GYRO_ZOUT_H));    //显示Z轴角速度       
        SeriPushSend(0x0d); 
        SeriPushSend(0x0a);//换行,回车
        delay(2000);
      }
    }
    void delay(unsigned int k)  
    {            
      unsigned int i,j;        
      for(i=0;i<k;i++)
      {      
        for(j=0;j<121;j++);
      }            
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    附1:研究表明,陀螺仪具有十分精确的短时定位精度,然而长时间工作时产生的累计误差会导致定位精度出现较大的偏差,后续可以通过多源信息融合解决该问题。

    附2、前段时间完成传感器信号采集系统的搭建,具体见推文:数据采集系统实际测试效果,在此基础上能够很容易将传感器(陀螺仪等)应用到实际中,😄~

  • 相关阅读:
    接口自动化测试框架搭建全部过程
    53. 最大子序列和Maximum Subarray
    富文本编辑器(wangEdit)+(jquery.wordexport)实现web版在线编辑导出
    【Langchain Agent研究】SalesGPT项目介绍(五)
    Mac M1安装ROS1或ROS2
    资源受限MCU Flash空间占用优化
    Uniapp 跳转回上一页面并刷新页面数据
    ElasticSearch学习笔记(一)
    Redis的主从复制,哨兵和Cluster集群
    【HarmonyOS】元服务卡片展示动态数据,并定点更新卡片数据
  • 原文地址:https://blog.csdn.net/qq_41137829/article/details/127721491