吳向臣,吳茂林
(海軍工程大學(xué)兵器工程系,湖北武漢430033)
ARM+FPGA設(shè)備的人機(jī)界面數(shù)據(jù)交互設(shè)計(jì)與實(shí)現(xiàn)
吳向臣,吳茂林
(海軍工程大學(xué)兵器工程系,湖北武漢430033)
目前對裝備檢測設(shè)備的實(shí)時性、可視化的要求越來越高。嵌入式技術(shù)的應(yīng)用,使檢測裝置變得可靠、實(shí)用和便攜。本文在OMAPL138嵌入式結(jié)構(gòu)和Linux系統(tǒng)下,應(yīng)用QTouch組態(tài)軟件進(jìn)行檢測設(shè)備人機(jī)交互界面的開發(fā)。重點(diǎn)設(shè)計(jì)和分析Linux系統(tǒng)下與FPGA模塊的數(shù)據(jù)交互機(jī)制,從而滿足實(shí)時信息通信和檢測的人機(jī)交互需求。
QTouch;人機(jī)交互;嵌入式Linux;ARM+FPGA;數(shù)據(jù)交換
由于目前裝備日趨信息化、智能化,裝備運(yùn)行或使用過程中涉及到的信號也越來越多,對于這些信號的采集和分析,有助于裝備使用者了解裝備的狀態(tài),及時維修維護(hù),防患于未然。為了能更好更準(zhǔn)確地檢測出裝備的一些關(guān)鍵信號,對檢測設(shè)備提出了更高要求,既需要有超高的精度也需要有便捷友好的操作界面。以便于操作人員迅速上手,簡化操作訓(xùn)練。本文根據(jù)實(shí)際設(shè)備人機(jī)交互的設(shè)計(jì)需求,結(jié)合硬件設(shè)備和QTouch組態(tài)軟件設(shè)計(jì)了與FPGA硬件設(shè)備的數(shù)據(jù)交換機(jī)制,實(shí)現(xiàn)的人機(jī)交互界面直觀、信息量大、便于操作。
QTouch軟件主要分為兩個重要的組成部分,一是PC端的軟件設(shè)計(jì)部分,二是嵌入式平臺的運(yùn)行部分。兩者通過協(xié)議進(jìn)行平臺間通信,在PC端設(shè)計(jì)完成的應(yīng)用程序通過ModbusTCP協(xié)議上傳到嵌入式平臺部分,上傳完成后脫離PC端,在嵌入式平臺上獨(dú)立運(yùn)行。其整體框架結(jié)構(gòu)如圖1所示。
圖1 軟件整體框架
軟件結(jié)構(gòu)分為三層,分別是人機(jī)交互界面、數(shù)據(jù)庫和底層設(shè)備驅(qū)動數(shù)據(jù)。在對底層硬件進(jìn)行數(shù)據(jù)寫入時,人機(jī)交互界面數(shù)據(jù)由操作人員通過手動輸入的方式給定,并通過應(yīng)用程序傳入程序的實(shí)時數(shù)據(jù)庫,實(shí)時數(shù)據(jù)庫接收到數(shù)據(jù)后,驅(qū)動程序就可以調(diào)用實(shí)時數(shù)據(jù)庫中的數(shù)據(jù),對底層硬件進(jìn)行數(shù)據(jù)寫入。接收反饋數(shù)據(jù)時,由底層硬件檢測到數(shù)據(jù),再由驅(qū)動程序?qū)⑵浯嫒雽?shí)時數(shù)據(jù)庫,應(yīng)用程序通過實(shí)時關(guān)聯(lián)某個數(shù)據(jù)存儲單元的數(shù)據(jù),就可以實(shí)時地接收到硬件反饋的數(shù)據(jù)信息并顯示在屏幕上。數(shù)據(jù)交互原理如圖2所示。
圖2 數(shù)據(jù)結(jié)構(gòu)原理圖
2.1 數(shù)據(jù)類型
研究數(shù)據(jù)交互的機(jī)制,首先需要確定數(shù)據(jù)的類型。當(dāng)FPGA接收到設(shè)定時間參數(shù)后,并不能直接進(jìn)行時間設(shè)定,因?yàn)閿?shù)據(jù)接收端接收的數(shù)據(jù)類型并不是十進(jìn)制的,所以不能將設(shè)定的時間信號直接傳遞到數(shù)據(jù)接收端,需要進(jìn)行一定的數(shù)據(jù)編碼。這里使用的是Hamming碼[1]進(jìn)行的數(shù)據(jù)編碼信號。
Hamming編碼矩陣如下:
FPGA設(shè)備在接收到時間參數(shù)后,根據(jù)Hamming編碼矩陣將原始的十進(jìn)制數(shù)編碼成二進(jìn)制數(shù)碼。重新編碼后的時間參數(shù)通過FPGA端口以電信號的形式發(fā)送到數(shù)據(jù)接收端口。數(shù)據(jù)接收端口接收到時間參數(shù)后再進(jìn)行解碼。
2.2 數(shù)據(jù)交互機(jī)制
2.2.1 硬件設(shè)備、操作系統(tǒng)和人機(jī)界面的關(guān)系[2-4]
嵌入式設(shè)備的設(shè)計(jì)都分為硬件設(shè)計(jì)部分和軟件設(shè)計(jì)部分。硬件設(shè)計(jì)部分使用的是目前主流的FPGA+ARM結(jié)合的硬件結(jié)構(gòu),軟件設(shè)計(jì)部分使用Linux操作系統(tǒng),以及使用QTouch編寫的人機(jī)交互界面,人機(jī)交互程序需要借助操作系統(tǒng)才能運(yùn)行。Linux操作系統(tǒng)是連接硬件和人機(jī)界面的橋梁。三者關(guān)系如圖3所示。
2.2.2 設(shè)備驅(qū)動[2]
圖3 硬件設(shè)備、操作系統(tǒng)、人機(jī)界面關(guān)系
設(shè)備驅(qū)動是關(guān)聯(lián)操作系統(tǒng)和人機(jī)交互程序的橋梁。操作系統(tǒng)將輸入的數(shù)據(jù)以文件的形式寫入系統(tǒng)的特定文件中,人機(jī)交互程序通過調(diào)用驅(qū)動程序來讀取這些設(shè)備文件即可得到想要的數(shù)據(jù)。人機(jī)交互程序使用統(tǒng)一的接口函數(shù)調(diào)用相應(yīng)的硬件驅(qū)動程序,這些函數(shù)都是在設(shè)備驅(qū)動中定義好的。這組接口被稱為系統(tǒng)調(diào)用。對于每一個系統(tǒng)調(diào)用,驅(qū)動程序中都有一個與之對應(yīng)的函數(shù),這些函數(shù)集合在一個file_operations類型的數(shù)據(jù)結(jié)構(gòu)體中,file_operations結(jié)構(gòu)體在Linux內(nèi)核的include/linux/fs. h中定義。
使用file_operations結(jié)構(gòu)定義數(shù)據(jù)結(jié)構(gòu)的程序代碼如下:
Staticstructfile_operationsarm_fpga_fops={
.owner=THIS_MODULE,
.open=arm_fpga_open,
.write=arm_fpga_write,
.read=arm_fpga_read,
.ioctl=arm_fpga_ioctl,};
將FPGA字符設(shè)備和arm_fpga_fops結(jié)構(gòu)體進(jìn)行關(guān)聯(lián)。關(guān)聯(lián)程序的代碼設(shè)計(jì)如下:
ret=register_chrdev(FPGA_MAJOR,DEVICE_NAME,&arm_ fpga_fops);
if(ret<0)
{
prink(DEVICE_NAME”can′t register major number ”);
return ret;}
程序頭文件中定義FPGA_MAJOR為FPGA設(shè)備的主設(shè)備號,程序主函數(shù)中設(shè)置FPGA_MAJOR=0,由系統(tǒng)自動分配主設(shè)備號。DEVICE_NAME定義為設(shè)備名稱。經(jīng)過注冊,主設(shè)備號就和具體的file_operations結(jié)構(gòu)聯(lián)系起來了,因此操作主設(shè)備號為FPGA_MAJOR的設(shè)備文件時,就會調(diào)用arm_fpga_fops中的相關(guān)函數(shù)。
驅(qū)動程序通過操作設(shè)備文件來向硬件設(shè)備下發(fā)數(shù)據(jù),為了解決設(shè)備文件的讀取和寫入問題,在軟件設(shè)計(jì)中借助Linux操作系統(tǒng)中提供的兩個重要函數(shù):copy_to_user和copy_form_user。這是兩個很重要也是經(jīng)常被字符設(shè)備使用到的函數(shù)。它們定義在Linux系統(tǒng)內(nèi)核的~/arch/arm/lib/usercopy.c文件中。定義形式如下:
unsigned long copy_to_user(void_user*to,const void*from,unsigned long n)
{
might_sleep();
BUG_ON((long)n<0);
If(access_ok(VERIFY_WRITE,to,n))
n=_copy_to_user(to,from,n);
return n;}
unsigned long copy_from_user(void_user*to,const void*from,unsigned long n)
{
If(access_ok(VERIFY_WRITE,from,n))
n=_copy_from_user(to,from,n);
else
memzero(to,n);
return n;}
copy_from_user()函數(shù)用于將用戶給定的參數(shù)從用戶空間到內(nèi)核空間的復(fù)制。copy_to_user()函數(shù)完成數(shù)據(jù)從內(nèi)核空間到用戶空間的復(fù)制。在設(shè)備驅(qū)動中使用這兩個函數(shù),F(xiàn)PGA設(shè)備文件的數(shù)據(jù)和人機(jī)交互程序的數(shù)據(jù)之間就能進(jìn)行相互復(fù)制,也就實(shí)現(xiàn)了兩者的數(shù)據(jù)交換。
這樣,使用QTouch組態(tài)軟件設(shè)計(jì)人機(jī)交互界面過程中,不需要編寫復(fù)雜的實(shí)現(xiàn)代碼,只需要將功能控件用類似于搭積木的方式構(gòu)建在一起,由軟件庫文件調(diào)用相關(guān)函數(shù)。在程序設(shè)計(jì)過程中,不需要直接使用file_operations結(jié)構(gòu)體中的操作函數(shù)編寫代碼。部分控件如圖4所示。
圖4 部分控件圖
將人機(jī)交互程序?qū)懭胗布O(shè)備中,使用設(shè)計(jì)的實(shí)際設(shè)備對數(shù)據(jù)交互進(jìn)行系統(tǒng)調(diào)試,驗(yàn)證程序的正確性。圖5為系統(tǒng)調(diào)試圖。
圖5 系統(tǒng)調(diào)試圖
由于時間參數(shù)的接收采用Hamming譯碼,數(shù)據(jù)進(jìn)入FPGA以后會對時間裝定參數(shù)進(jìn)行信號編碼。所以以下波形圖測得數(shù)據(jù)是以Hamming碼的形式顯示的。
假設(shè)設(shè)定數(shù)據(jù)為33.3 s,即十位、個位、十分位都為3(二進(jìn)制0011)。時間設(shè)定界面如圖6所示。
圖6 時間設(shè)定界面圖
實(shí)驗(yàn)設(shè)定的時間數(shù)據(jù)通過人機(jī)交互程序下發(fā)到FPGA外設(shè)中,再由FPGA進(jìn)行編碼轉(zhuǎn)換?,F(xiàn)在以十位數(shù)為例,對得到的波形圖進(jìn)行分析,如圖7所示。由實(shí)驗(yàn)波形圖得到十位上的Hamming碼為0011101。通過查詢Hamming碼編碼矩陣,得到Hamming碼0011101對應(yīng)數(shù)字3,可見實(shí)驗(yàn)測得的數(shù)據(jù)與編碼矩陣數(shù)據(jù)完全吻合。用同樣的方法對個位和十分位進(jìn)行分析,Hamming碼解碼得到的時間參數(shù)與人機(jī)交互程序設(shè)定的時間參數(shù)完全一致(都是33.3 s),因此可以判斷參數(shù)交互準(zhǔn)確,程序設(shè)計(jì)達(dá)到預(yù)期目標(biāo)。
圖7 十位上的波形圖
高電平載波信號實(shí)驗(yàn)誤差分析如圖8所示。顯示的都是高電平調(diào)制的載波信號,該信號理論波形為正弦波,但是在本次實(shí)驗(yàn)中由于設(shè)備精度的限制,在測量顯示時將載波信號的方波顯示為正弦波形,但是這樣的誤差在實(shí)驗(yàn)的可允許范圍之內(nèi),因此不會對實(shí)驗(yàn)的最終結(jié)論產(chǎn)生影響。
圖8 高電平調(diào)制載波信號
本文基于QTouch的組態(tài)軟件設(shè)計(jì)的應(yīng)用程序,實(shí)現(xiàn)了與ARM+FPGA嵌入式系統(tǒng)底層硬件平臺的數(shù)據(jù)交換,設(shè)計(jì)了友好的交互界面,并通過數(shù)據(jù)交換實(shí)驗(yàn),檢測驗(yàn)證了數(shù)據(jù)交換機(jī)制的有效性,滿足設(shè)備的功能要求。本設(shè)計(jì)為設(shè)計(jì)功能更強(qiáng)更復(fù)雜的嵌入式設(shè)備打下了良好的理論和實(shí)驗(yàn)基礎(chǔ)。
[1]雷斌,王寧,仇平.FPGA的漢明碼數(shù)據(jù)傳輸系統(tǒng)的設(shè)計(jì)[J].西安工業(yè)大學(xué)學(xué)報(bào),2009,29(6):559-564.
[2]宋寶華.Linux設(shè)備驅(qū)動開發(fā)詳解(第2版)[M].北京:人民郵電出版社,2010.
[3]倪繼利.Qt及Linux操作系統(tǒng)窗口設(shè)計(jì)[M].北京:電子工業(yè)出版社,2006.
[4]韋東山.嵌入式Linux應(yīng)用開發(fā)完全手冊[M].北京:人民郵電出版社,2008.
Design and imp lementation of the data communication to ARM+FPGA
Wu Xiangchen,Wu Maolin
(Department of Weaponry Engineering,Naval University of Engineering,Wuhan 430033,China)
The requirement of the real-time and visualization for equipment testing device is higher and higher.The application of embedded technology makes the measuring equipment reliable,practical and portable.This paper is on the basis of OMAPL138 embedded structure and the Linux operating system,uses Qtouch to develop the human-computer interaction interface of testing device.Design and analysis data interaction mechanism under the Linux system with FPGA module,and meet the needs of real-time information communication and detection.
qtouch;the human-computer interaction;embedded Linux;ARM+FPGA;data interchange
TP301
A
1674-7720(2015)09-0089-03
2015-01-04)
吳向臣(1990-),男,在讀碩士研究生,主要研究方向:武器對抗技術(shù)。