——来自迪文开发者论坛用户
本方案使用COF屏的IO口模拟I2C信号与MPU6050通讯,实现航空姿态仪表可视化显示。MPU6050采集数据,T5L0芯片进行数据读取和滤波算法处理,计算出姿态数据,驱动COF屏进行数据实时可视化显示。可视化界面通过迪文DGUS软件设置,有效缩减工程开发时间。
方案框图
资料下载
方案完整资料包下载可前往迪文开发者论坛获取:
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屏输出命令。
1.1 COF屏与MPU6050模块连接接线图
1.2 COF屏与MPU6050模块连接实物图
数据读取主要程序代码
(1)I2C读取MPU6050数据代码
COF屏为用户提供了可使用的IO口,我们可以直接使用IO口模拟I2C信号与MPU600通讯。C51 V6例程中有一个I2C RTC硬件的驱动代码,基于这个代码来修改,可以得到MPU6050使用的通讯函数。从I2C RTC硬件的驱动代码中可移植的主要代码函数:
编写针对MPU6050的各个操作命令:
结合MPU6050寄存器定义设置,使T5L0成功读取完整正确数据。MPU主要用到的寄存器如下所示:
对应的硬件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的各个寄存器数值。调试中需注意:
(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导航仪仪表面板。面板总体布局分左侧姿态数据显示区、中右区为姿态主显示区,以及下方的操作控制区。
1.4 姿态仪表显示分区设计
1.5 姿态仪表DGUS 界面
(4) 可视化C51软件开发
C51软件开发主要有几部分:
1. 通过I2C接口完成MPU6050的读写命令操作,从传感器里获得完整正确的数据;
2. 姿态解算:通过前面的算法,编写响应的函数对原始数据进行解算,获得姿态显示所需要的显示数据;
3.数据可视化:将姿态的各个角度数据转换成UI组件的控制数据,比如负数和小数的显示问题、量程的问题等;
4.开发必要调试和跟踪工具代码,方便开发调试。
这里面通过数据显示窗口主要显示7个数据,分别为三向的姿态角度,三轴的加速度以及温度。同时根据三项的姿态角度计算可视化的控制数据写入显示组件地址里:
1.6 姿态可视化C51软件开发
COF屏的C51主代码如下,重要部分已做了注释。此项目使用T5L的C51操作I2C读取MPU6050数据的代码已附带在文件附件中。 mpu6050_i2c.zip用户开发体验
“通过此实验已经完美的获取了MPU6050六轴陀螺传感器的数据读取,姿态解算的方法,同时结合COF屏完美的展示了MPU6050姿态的可视化。在实验测试中,COF屏在完成负载的仪表界面显示时,依然完成了I2C数据读取,复杂的浮点计算,以及内存地址操作。在实际测试中读取I2C速度可达8KBps,能够在1ms内读取完整的MPU7项数据,并且在18ms内完成了原始数据的三角函数计算工作,解算出飞航的各个姿态数据,并且更新到显示屏上。”
全部0条评论
快来发表一下你的评论吧 !