葉俊明 馬海琴
摘要:文章所述系統采用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.
(責任編輯:周 瓊)