APP下载

基于MPU6050的陀螺仪测控系统设计

2015-07-30叶俊明马海琴

中国高新技术企业 2015年27期

叶俊明 马海琴

摘要:文章所述系统采用ARM Cortex微处理芯片STM32F103ZET6设计陀螺仪测控系统,采用Clinux操作系统对测量的数据进行滤波后用于控制用户电压输出,采用Microwindows的上位机图形界更好地显示陀螺仪的参数波形,在传输上使用串口通信对数据进行打包发送,系统稳定,有实用意义。

关键词:数字陀螺仪;测控系统;人机交互界面;?Clinux;电压输出 文献标识码:A

中图分类号:TP242 文章编号:1009-2374(2015)27-0026-02 DOI:10.13535/j.cnki.11-4406/n.2015.27.014

1 系统设计方案

本设计选用系统Clinux和ARM Cortex主控器作为本设计的操作测控装置,采用MPU-6050传感器芯片可准确地采样物体角速度变化。由于温度及陀螺仪本身存在的偏差,采样得到的数据会有偏差,采用滤波算法来校正。本设计采用多次平均算法和卡尔曼滤波算法校正。

测控的硬件系统由两部分构成。ARM采用IIC总线对MPU6050F进行访问,也可采用MPU6050自带的IIC程序进行设计。对得到的数据进行校正后可用于对用户输出电压、频率进行控制,显示采用五寸彩色屏和电脑上位机编写的Microwindows的图形界进行显示。

2 系统硬件设计

本设计的硬件平台采用STM32F103ZET6为核心的嵌入式系统。STM32F103ZET6具有丰富的硬件资源和可靠的稳定性,其与陀螺仪芯片MPU6050通过IIC总线连接即构成通用的检测系统。电路如图1所示:

图1 MPU-6050电路

3 系统软件设计

系统软件框架包括设备驱动程序、操作系统运行环境、根据用户需要自定义的控制程序、高级应用程序算法、底层驱动的与操作系统的接口程序。

3.1 底层驱动的串行口接口程序

串行口通信模块建立在操作系统驱动程序的基础上,采用多进程技术将串口驱动接收到的数据缓冲,切割成自定义的协议封装形式后,组装成高级应用程序(帧字节),为高级应用程序提供程序接口函数。

Struct unsigned char DataFrames_Mangae

{

Char StartFlag;Char Index;Char Dealed;Char Type;

Char Data_A[DATA_CONTROL_SIZES];Char Reserved;char EndFlag;

}

程序接口函数为高级应用程序提供了串口、IIC程序初始化(也可以是MPU6050F自带的I2C总线程序)、接收发送函数。高级应用接口程序把底层结构体变量的指针传递到串行口模块,再按先后发送给下一级程序进行处理。

3.2 基于卡尔曼滤波程序的滤波算法

对于MPU-6050本身存在的误差,可采用多次测量取平均值的算法来校正,采用卡尔曼滤波算法有效地使得采样的输出平稳。

void Kalmana_Filters(float Aol,Gyrol)

{Pdota[3]=Q_gyro;Pdota[2]=Pdota[2]-PPa[1][1];

Pdota[1]=Pdota[1]-PPa[1][1];Pdota[0]=Q_angle-PPa[0][1]-PPa[1][0];

Angle1=Angle1+(Gyro-Q_bias)*dt1;Angle_err=Accel-Angle1;

PPa[1][1]=PPa[1][1]+Pdota[3]*dt1;PPa[1][0]=PPa[1][0]+Pdota[2]*dt1;

PPa[0][0]=PPa[0][0]+Pdota[0]*dt1;PPa[0][1]=PPa[0][1]+Pdota[1]*dt1;

Et=R_angle+C_0*PCt_0;PCt_0=C_0*PPa[0][0];PCt_1=C_0*PPa[1][0];

if(Et!=0){K_0=PCt_0/Et;K_1=PCt_1/Et;}

Angle1=K_0*Angle_err+Angle1;t_0=PCt_0;

t_1=C_0*PP[0][1];PPa[0][0]-=K_0*t_0;

PPa[0][1]=PPa[0][1]-K_0*t_1;PPa[1][0]=PPa[1][0]-K_1*t_0;

PPa[1][1]=PPa[1][1]-K_1*t_1;Qbias=K_1*Angle_err+Qbias;}

3.3 基于Microwindows的多线程控制图形界实现

采用Microwindows的图形设计可以方便地加入外部设备,如按键、显示器等。在图形界面高级应用程序中,消息事件循环里可以从消息队列里面提取消息PeckMessages()。串行口接收通信数据以及按键函数在应用程序中初始化后,将获得的消息传输到执行消息处理函数中。图2是陀螺仪芯片采集的数据在上位机上的显示:

图2 陀螺仪数据数据采集显示图

4 调试心得

MPU6050上电后是为睡眠状态的,上电启动设备后MPU6050会以主身份进行操作,如使用I2C等对MPU6050F读写会显示busy的状态,所以MPU6050的时序是很严格的。对陀螺仪采样的数据进行多次平均、卡尔曼滤波会大大降低干扰。

5 结语

本作品主要在于研究一种基于MPU6050的陀螺仪测控系统,该系统在以STM32F103ZET6微处理器和?Clinux操作系统上完成了对陀螺仪采样数据的多次平均测值量算法和滤波、基于Microwindows的GUI多线程控制、串行通信数据传输处理和底层AD控制等功能,具有良好的显示界面,便于监控和操作。

参考文献

[1] 李善平,陈文智,等.LINUX内核指导[M].杭州:浙江大学出版社,2002.

[2] 周立功,陈明计,陈渝,等.ARM嵌入式Linux系统构建与驱动开发范例[M].北京:北京航空航天大学出版社,2006.

[3] [美]Charlie Calvert.21天学通Windows编程[M].北京:电子工业出版社,1995.

(责任编辑:周 琼)