0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于MPU6050与COF屏的航空姿态仪表

迪文智能屏 2022-05-31 11:30 次阅读

——来自迪文开发者论坛用户

本方案使用COF屏的IO口模拟I2C信号与MPU6050通讯,实现航空姿态仪表可视化显示。MPU6050采集数据,T5L0芯片进行数据读取和滤波算法处理,计算出姿态数据,驱动COF屏进行数据实时可视化显示。可视化界面通过迪文DGUS软件设置,有效缩减工程开发时间。


方案框图

7de87d04-dde2-11ec-b80f-dac502259ad0.png

资料下载

方案完整资料包下载可前往迪文开发者论坛获取:

http://inforum.dwin.com.cn:20080/forum.php?mod=viewthread&tid=5767&extra=page%3D2

方案简介

硬件连接

COF屏转接板HDL662S的P32脚连接MPU6050模块的SDL脚,P33脚连接MPU6050的SDA脚,VCC和GND分别接电源和地。同时,转接板的UART2连接上位机,其中P21~P26六个IO接入上位机6个LED灯上,方便输出调试信息,通过LED显示运行状态向COF屏输出命令。

7e3532b6-dde2-11ec-b80f-dac502259ad0.png

1.1 COF屏与MPU6050模块连接接线图

7e69fc8a-dde2-11ec-b80f-dac502259ad0.png

1.2 COF屏与MPU6050模块连接实物图

数据读取主要程序代码

(1)I2C读取MPU6050数据代码

COF屏为用户提供了可使用的IO口,我们可以直接使用IO口模拟I2C信号与MPU600通讯。C51 V6例程中有一个I2C RTC硬件的驱动代码,基于这个代码来修改,可以得到MPU6050使用的通讯函数。从I2C RTC硬件的驱动代码中可移植的主要代码函数:

7ec6d9be-dde2-11ec-b80f-dac502259ad0.png

编写针对MPU6050的各个操作命令:

7ef071fc-dde2-11ec-b80f-dac502259ad0.png

结合MPU6050寄存器定义设置,使T5L0成功读取完整正确数据。MPU主要用到的寄存器如下所示:

7f0d6988-dde2-11ec-b80f-dac502259ad0.png

对应的硬件IO口连接定义端口代码:

sbit IIC_SCL=P3^2;

sbit IIC_SDA=P3^3;

#define SDA_IN() P3MDOUT=P3MDOUT&0xF7;

#define SDA_OUT() P3MDOUT=P3MDOUT|0x08;

现在,将上述各个部分的代码整合编译调试上载到COF屏,就能成功读取MPU6050的各个寄存器数值。调试中需注意:

  • MPU6050的I2C主频与原RTC设备的主频有差别,需适当调整I2C函数操作中的时序,使其适配;
  • T5L处理器速度快,在两次读取间要做一定的等待,否则会出现读取数据为零的情况。经反复测试,设置20ms间隔来读取传感器数据,此间隔对本实验完全适用;
  • I2C、SDA线接触一定要良好,否则会造成通讯中断,需要重新初始化才能得到正确数据。

(2)姿态解算编写响应的函数对MPU6050原始数据进行解算,得到可供几何显示和姿态判断使用的数据。姿态解算通过三轴的重力加速度分量得到以地球切面为参照系的三轴夹角转换为以设备自身坐标下的飞行夹角。定义如下:横滚角Roll(Ф)表示绕X轴的旋转,仰俯角Pitch(θ)表示绕Y轴的旋转,航向角Yaw (ψ)表示绕Z轴的旋转,如图所示。


计算代码算法如下:

roll = atan2(2* Gy*Gz + 2*G*Gx, -2*Gx*Gx -2*Gy*Gy+ 1)

pitch = asin(-2*Gx*Gz + 2*G* Gy)

yaw = atan2(2*( Gx*Gy +G*Gz),G*G+Gx*Gx-Gy*Gy-Gz*Gz)

(3) DGUS界面设计

设计参考了航空飞机中常见的G530导航仪仪表面板。面板总体布局分左侧姿态数据显示区、中右区为姿态主显示区,以及下方的操作控制区。

7f6af1c0-dde2-11ec-b80f-dac502259ad0.png

1.4 姿态仪表显示分区设计

7fa30af6-dde2-11ec-b80f-dac502259ad0.png

1.5 姿态仪表DGUS 界面

(4) 可视化C51软件开发

C51软件开发主要有几部分:

1. 通过I2C接口完成MPU6050的读写命令操作,从传感器里获得完整正确的数据;

2. 姿态解算:通过前面的算法,编写响应的函数对原始数据进行解算,获得姿态显示所需要的显示数据;

3.数据可视化:将姿态的各个角度数据转换成UI组件的控制数据,比如负数和小数的显示问题、量程的问题等;

4.开发必要调试和跟踪工具代码,方便开发调试。

这里面通过数据显示窗口主要显示7个数据,分别为三向的姿态角度,三轴的加速度以及温度。同时根据三项的姿态角度计算可视化的控制数据写入显示组件地址里:

7fc9911c-dde2-11ec-b80f-dac502259ad0.png

1.6 姿态可视化C51软件开发

COF屏的C51主代码如下,重要部分已做了注释。此项目使用T5L的C51操作I2C读取MPU6050数据的代码已附带在文件附件中。 mpu6050_i2c.zip用户开发体验
“通过此实验已经完美的获取了MPU6050六轴陀螺传感器的数据读取,姿态解算的方法,同时结合COF屏完美的展示了MPU6050姿态的可视化。在实验测试中,COF屏在完成负载的仪表界面显示时,依然完成了I2C数据读取,复杂的浮点计算,以及内存地址操作。在实际测试中读取I2C速度可达8KBps,能够在1ms内读取完整的MPU7项数据,并且在18ms内完成了原始数据的三角函数计算工作,解算出飞航的各个姿态数据,并且更新到显示屏上。”

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cof
    cof
    +关注

    关注

    5

    文章

    50

    浏览量

    23495
  • MPU6050
    +关注

    关注

    39

    文章

    309

    浏览量

    72114
收藏 人收藏

    评论

    相关推荐

    关于mpu6050问题

    我很早之前买了一个,我现在使用这个mpu6050,我在调mpu6050数据时候,数据抖动特别大,我没动这个mpu6050,它自己都有抖动,然后本来放在水平,他的机械中值是2.5,但是我水平抖动后,机械中值突然变成了-258,这是
    发表于 03-09 17:17

    mpu6050航向角漂移很严重的原因及解决方法

    mpu6050航向角漂移很严重的原因及解决方案
    的头像 发表于 03-01 11:47 526次阅读

    零知开源——ESP8266+MPU6050 实现运动姿态检测

    零知ESP8266的I2C通信        在运动姿态检测、机器人平衡控制、VR头戴设备等应用中,MPU6050(三轴加速度计+三轴陀螺仪)是一个常见的姿态传感器。而ESP8266作为一款低功耗
    的头像 发表于 02-20 17:54 1354次阅读
    零知开源——ESP8266+<b class='flag-5'>MPU6050</b> 实现运动<b class='flag-5'>姿态</b>检测

    零知开源——ESP8266+MPU6050 实现运动姿态检测

    ​零知ESP8266学习教程 在运动姿态检测、机器人平衡控制、VR头戴设备等应用中,MPU6050(三轴加速度计+三轴陀螺仪)是一个常见的姿态传感器。而ESP8266作为一款低功耗Wi-Fi模块
    发表于 02-20 17:44

    零知开源——MPU6050六轴传感器模块实践教程,轻松实现运动检测!

    运动。       通过本教程,您将学习如何读取并处理这些数据,为您的项目添加运动检测和姿态控制功能。 一、硬件连接        在开始编程之前,首先需要正确连接MPU6050模块到零知增强板。 1.所需材料: 零知增强板 MPU60
    的头像 发表于 02-20 16:17 481次阅读
    零知开源——<b class='flag-5'>MPU6050</b>六轴传感器模块实践教程,轻松实现运动检测!

    零知开源——MPU6050六轴传感器模块实践教程,轻松实现运动检测!

    MPU6050是一款含有三轴加速度计和三轴陀螺仪的传感器,能够测量设备的倾斜情况和旋转运动。 通过本教程,您将学习如何读取并处理这些数据,为您的项目添加运动检测和姿态控制功能。 一、硬件连接 在开始编程
    发表于 02-20 15:53

    MPU6050读取数据有问题

    在调试MPU6050时读取原始数据只有X轴在变化,Y轴和Z轴的数据一直没有变化,已经调试两天了,这个是读取的数据
    发表于 12-09 10:40

    如何通过I2C将加速度计MPU6050型连接到ESP8266?

    有没有人通过 I2C 将加速度计MPU6050型连接到ESP8266? 我想读取寄存器who_am_i,但我无法从从机获取 ACK 信号
    发表于 07-22 06:18

    硬件i2c读写MPU6050

    本资料为MPU6050
    发表于 07-15 11:45 4次下载

    求助求助,MPU6050模块用DMP时的自检问题

    我在mpu6050的DMP自检始终不通过,我通过debug发现里面的两个值st_shift_cust,st_shift_var不对,读出来数值很大。st_shift_var读出来5.几
    发表于 05-18 17:27

    请问MPU6050可以做振动探测器使用吗?

    MPU6050可以做振动探测器使用吗?
    发表于 05-08 07:54

    mpu6050芯片的INT中断信号引脚和单片机之间需要接电阻吗?

    mpu6050芯片的INT中断信号引脚和单片机之间需要接电阻吗? 我见有的电路图里面没有接,有的却说需要接,到底是怎样的?
    发表于 05-07 07:21

    MPU6050休眠后如何配置重力加速度唤醒MPU6050

    MPU6050休眠后如何配置重力加速度唤醒MPU6050自己?
    发表于 05-07 06:19

    MPU6050 dmp库定时查询读取偶尔获取失败的原因?

    在玩mpu6050 dmp库的时候遇到了一些问题,dmp设置fifo频率20Hz,每50ms程序中读取一次,但是偶尔会有都不到数据的情况,mpu_read_fifo_stream读取失败。主程序
    发表于 04-30 06:37

    MPU6050匀速转动一段时间后,偏航角不变怎么解决?

    使用MPU6050 检测机器人的偏航角度。当机器人原地连续旋转时(朝一个方向),DMP 输出的偏航角开始正常,之后会出现输出的偏航角不变,此时机器人速度只要发生一下变化,DMP输出的偏航角就会开始
    发表于 04-09 08:24