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

    文章

    48

    浏览量

    23275
  • MPU6050
    +关注

    关注

    39

    文章

    307

    浏览量

    71158
收藏 人收藏

    评论

    相关推荐

    CW32模块使用 MPU6050六轴传感器

    MPU6050 是 InvenSense 公司推出的整合性 6 轴运动处理组件,其内部整合了 3 轴陀螺仪和 3 轴加速度传感器,并且含有一个IIC 接口, 可用于连接外部磁力传感器,并利用自带
    的头像 发表于 11-14 17:54 155次阅读
    CW32模块使用 <b class='flag-5'>MPU6050</b>六轴传感器

    机智云开源自动化控制篇-姿态翻转报警器

    使用STM32F103C8T6单片机、ESP-01S模块、MPU6050传感器、蜂鸣器以及0.96寸IIC接口OLED显示,基于机智云平台共同开发姿态翻转报警器,为智能化场景增添强大功能。适用
    的头像 发表于 08-07 08:11 292次阅读
    机智云开源自动化控制篇-<b class='flag-5'>姿态</b>翻转报警器

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

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

    硬件i2c读写MPU6050

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

    如何利用中断从Mpu6050读取数据?

    我正在使用延迟从 psoc 5LP CY8C5888LTI-LP097 中的 mpu-6050 imu 读取数据。 我不想用延时器,我想用带中断的定时器代替它。 下面附上我的项目文件。 请帮我创建中断函数。
    发表于 07-03 06:18

    求助求助,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

    什么是姿态传感器MPU6050

     MPU6050是6轴运动处理传感器,它集成了3轴MEMS陀螺仪,3轴MEMS加速度计,以及一个可扩展的数字运动处理器DMP。使用它就是为了得到待测物体(如四轴飞行器、平衡小车)x、y、z轴的倾角(俯仰角Pitch、翻滚角Roll、偏航角Yaw)。
    发表于 02-15 10:53 3121次阅读
    什么是<b class='flag-5'>姿态</b>传感器<b class='flag-5'>MPU6050</b>

    ADXL345和MPU6050的区别

    ADXL345和MPU6050是两种常见的加速度计和陀螺仪传感器,用于测量物体的加速度和旋转速度。它们在设计、性能和应用方面有一些区别。在本文中,我们将对ADXL345和MPU6050的区别进行详细
    的头像 发表于 01-04 11:30 7041次阅读

    mpu6050mpu6500哪个性能好

    MPU6050MPU6500都是InvenSense公司生产的高性能六轴陀螺仪和加速度计传感器。它们被广泛应用于各种领域,如移动设备、虚拟现实、机器人、汽车等。虽然它们之间有一些区别,但是无法简单
    的头像 发表于 12-21 16:54 8215次阅读

    MPU-6000和MPU-6050产品说明书

    mpu6050模块介绍 
    发表于 11-30 09:17 0次下载