葉俊明 馬海琴
摘要:文章所述系統(tǒng)采用ARM Cortex微處理芯片STM32F103ZET6設(shè)計(jì)陀螺儀測(cè)控系統(tǒng),采用Clinux操作系統(tǒng)對(duì)測(cè)量的數(shù)據(jù)進(jìn)行濾波后用于控制用戶電壓輸出,采用Microwindows的上位機(jī)圖形界更好地顯示陀螺儀的參數(shù)波形,在傳輸上使用串口通信對(duì)數(shù)據(jù)進(jìn)行打包發(fā)送,系統(tǒng)穩(wěn)定,有實(shí)用意義。
關(guān)鍵詞:數(shù)字陀螺儀;測(cè)控系統(tǒng);人機(jī)交互界面;?Clinux;電壓輸出 文獻(xiàn)標(biāo)識(shí)碼:A
中圖分類號(hào):TP242 文章編號(hào):1009-2374(2015)27-0026-02 DOI:10.13535/j.cnki.11-4406/n.2015.27.014
1 系統(tǒng)設(shè)計(jì)方案
本設(shè)計(jì)選用系統(tǒng)Clinux和ARM Cortex主控器作為本設(shè)計(jì)的操作測(cè)控裝置,采用MPU-6050傳感器芯片可準(zhǔn)確地采樣物體角速度變化。由于溫度及陀螺儀本身存在的偏差,采樣得到的數(shù)據(jù)會(huì)有偏差,采用濾波算法來(lái)校正。本設(shè)計(jì)采用多次平均算法和卡爾曼濾波算法校正。
測(cè)控的硬件系統(tǒng)由兩部分構(gòu)成。ARM采用IIC總線對(duì)MPU6050F進(jìn)行訪問(wèn),也可采用MPU6050自帶的IIC程序進(jìn)行設(shè)計(jì)。對(duì)得到的數(shù)據(jù)進(jìn)行校正后可用于對(duì)用戶輸出電壓、頻率進(jìn)行控制,顯示采用五寸彩色屏和電腦上位機(jī)編寫(xiě)的Microwindows的圖形界進(jìn)行顯示。
2 系統(tǒng)硬件設(shè)計(jì)
本設(shè)計(jì)的硬件平臺(tái)采用STM32F103ZET6為核心的嵌入式系統(tǒng)。STM32F103ZET6具有豐富的硬件資源和可靠的穩(wěn)定性,其與陀螺儀芯片MPU6050通過(guò)IIC總線連接即構(gòu)成通用的檢測(cè)系統(tǒng)。電路如圖1所示:
圖1 MPU-6050電路
3 系統(tǒng)軟件設(shè)計(jì)
系統(tǒng)軟件框架包括設(shè)備驅(qū)動(dòng)程序、操作系統(tǒng)運(yùn)行環(huán)境、根據(jù)用戶需要自定義的控制程序、高級(jí)應(yīng)用程序算法、底層驅(qū)動(dòng)的與操作系統(tǒng)的接口程序。
3.1 底層驅(qū)動(dòng)的串行口接口程序
串行口通信模塊建立在操作系統(tǒng)驅(qū)動(dòng)程序的基礎(chǔ)上,采用多進(jìn)程技術(shù)將串口驅(qū)動(dòng)接收到的數(shù)據(jù)緩沖,切割成自定義的協(xié)議封裝形式后,組裝成高級(jí)應(yīng)用程序(幀字節(jié)),為高級(jí)應(yīng)用程序提供程序接口函數(shù)。
Struct unsigned char DataFrames_Mangae
{
Char StartFlag;Char Index;Char Dealed;Char Type;
Char Data_A[DATA_CONTROL_SIZES];Char Reserved;char EndFlag;
}
程序接口函數(shù)為高級(jí)應(yīng)用程序提供了串口、IIC程序初始化(也可以是MPU6050F自帶的I2C總線程序)、接收發(fā)送函數(shù)。高級(jí)應(yīng)用接口程序把底層結(jié)構(gòu)體變量的指針傳遞到串行口模塊,再按先后發(fā)送給下一級(jí)程序進(jìn)行處理。
3.2 基于卡爾曼濾波程序的濾波算法
對(duì)于MPU-6050本身存在的誤差,可采用多次測(cè)量取平均值的算法來(lái)校正,采用卡爾曼濾波算法有效地使得采樣的輸出平穩(wěn)。
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的多線程控制圖形界實(shí)現(xiàn)
采用Microwindows的圖形設(shè)計(jì)可以方便地加入外部設(shè)備,如按鍵、顯示器等。在圖形界面高級(jí)應(yīng)用程序中,消息事件循環(huán)里可以從消息隊(duì)列里面提取消息PeckMessages()。串行口接收通信數(shù)據(jù)以及按鍵函數(shù)在應(yīng)用程序中初始化后,將獲得的消息傳輸?shù)綀?zhí)行消息處理函數(shù)中。圖2是陀螺儀芯片采集的數(shù)據(jù)在上位機(jī)上的顯示:
圖2 陀螺儀數(shù)據(jù)數(shù)據(jù)采集顯示圖
4 調(diào)試心得
MPU6050上電后是為睡眠狀態(tài)的,上電啟動(dòng)設(shè)備后MPU6050會(huì)以主身份進(jìn)行操作,如使用I2C等對(duì)MPU6050F讀寫(xiě)會(huì)顯示busy的狀態(tài),所以MPU6050的時(shí)序是很嚴(yán)格的。對(duì)陀螺儀采樣的數(shù)據(jù)進(jìn)行多次平均、卡爾曼濾波會(huì)大大降低干擾。
5 結(jié)語(yǔ)
本作品主要在于研究一種基于MPU6050的陀螺儀測(cè)控系統(tǒng),該系統(tǒng)在以STM32F103ZET6微處理器和?Clinux操作系統(tǒng)上完成了對(duì)陀螺儀采樣數(shù)據(jù)的多次平均測(cè)值量算法和濾波、基于Microwindows的GUI多線程控制、串行通信數(shù)據(jù)傳輸處理和底層AD控制等功能,具有良好的顯示界面,便于監(jiān)控和操作。
參考文獻(xiàn)
[1] 李善平,陳文智,等.LINUX內(nèi)核指導(dǎo)[M].杭州:浙江大學(xué)出版社,2002.
[2] 周立功,陳明計(jì),陳渝,等.ARM嵌入式Linux系統(tǒng)構(gòu)建與驅(qū)動(dòng)開(kāi)發(fā)范例[M].北京:北京航空航天大學(xué)出版社,2006.
[3] [美]Charlie Calvert.21天學(xué)通Windows編程[M].北京:電子工業(yè)出版社,1995.
(責(zé)任編輯:周 瓊)