??? 摘 要: 介紹一種飛行數(shù)據(jù)采集" title="數(shù)據(jù)采集">數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)。該系統(tǒng)基于LPC2138 ARM7和USOS II嵌入式實(shí)時(shí)操作系統(tǒng),具有實(shí)時(shí)、高頻率的飛行數(shù)據(jù)采集功能;提供的USB HST接口,可使用普通U盤讀取數(shù)據(jù),同時(shí)系統(tǒng)提供了仿DOS的人機(jī)接口" title="人機(jī)接口">人機(jī)接口命令,方便用戶對(duì)系統(tǒng)內(nèi)數(shù)據(jù)的管理。該系統(tǒng)為小型無(wú)人機(jī)建模提供了技術(shù)支持。
??? 關(guān)鍵詞: LPC2138? USOS II? 無(wú)人機(jī)
?
??? 近年來(lái),無(wú)人機(jī)的發(fā)展已經(jīng)突破了軍用限制,開(kāi)始向民用化發(fā)展。小型、結(jié)構(gòu)簡(jiǎn)單、成本低的無(wú)人機(jī)市場(chǎng)極為廣大。
無(wú)人機(jī)氣動(dòng)布局的參數(shù)通常采用風(fēng)洞試驗(yàn)獲得。為降低成本,在小型無(wú)人機(jī)的設(shè)計(jì)中,采用實(shí)際遙控飛行并記錄飛行參數(shù)進(jìn)而推算獲得飛機(jī)氣動(dòng)布局。為此,設(shè)計(jì)了基于PhilipARM7以及RTOS的數(shù)據(jù)采集系統(tǒng)" title="數(shù)據(jù)采集系統(tǒng)">數(shù)據(jù)采集系統(tǒng)。
1 系統(tǒng)總體設(shè)計(jì)
??? 根據(jù)實(shí)際設(shè)計(jì)情況,提出數(shù)據(jù)采集系統(tǒng)的主要需求為:
??? (1)采集模擬格式的高度表、航向數(shù)據(jù)、姿態(tài)數(shù)據(jù)、飛行速度等信號(hào);
??? (2)采集脈沖模式的油門控制信號(hào);
??? (3)采集串行數(shù)據(jù)的GPS定位信號(hào);
??? (4)具有存儲(chǔ)30分鐘飛行數(shù)據(jù)的能力;
??? (5)可快速通過(guò)U盤將飛行數(shù)據(jù)導(dǎo)出,并立刻進(jìn)行第二次記錄飛行數(shù)據(jù)的能力;
??? (6)用戶可使用PC查看數(shù)據(jù)采集系統(tǒng)內(nèi)部數(shù)據(jù)存儲(chǔ)" title="數(shù)據(jù)存儲(chǔ)">數(shù)據(jù)存儲(chǔ)情況;
??? (7)體積小、重量輕、便于安裝、可靠性強(qiáng)、抗震及抗抖動(dòng)性能強(qiáng)、抗干擾能力較強(qiáng)、接口可靠。
??? 綜合考慮以上所列的設(shè)計(jì)需求,設(shè)計(jì)了如圖1所示的系統(tǒng)總體結(jié)構(gòu)。系統(tǒng)以PhilipARM7系列的LPC2138[1]為核心,完成了所要求的數(shù)種格式的飛行信號(hào)數(shù)據(jù)??紤]到數(shù)據(jù)傳輸?shù)乃俣葐?wèn)題,外擴(kuò)了USB-HST控制器芯片,具備了通過(guò)插入U(xiǎn)盤并配合按鍵快速將飛行數(shù)據(jù)讀出的功能。
???????????????????????
2 硬件設(shè)計(jì)
2.1 LPC2138簡(jiǎn)介
??? LPC2138是基于一個(gè)支持實(shí)時(shí)仿真和嵌入式跟蹤的32/16位ARM7TDMI-STM CPU微控制器,并帶有512KB的嵌入高速Flash存儲(chǔ)器。128位寬度的存儲(chǔ)器接口和獨(dú)特的加速結(jié)構(gòu),使32位代碼能夠在最大時(shí)鐘速率下運(yùn)行。其具有如下特性:
??? (1)小型LQFP64封裝的16/32位ARM7TDMI-S微控制器,32KB片內(nèi)靜態(tài)RAM。
??? (2)2個(gè)8路10位A/D轉(zhuǎn)換器,共包含16個(gè)模擬輸入,每個(gè)通道的轉(zhuǎn)換時(shí)間低至2.44μs。
??? (3)2個(gè)32位定時(shí)器/計(jì)數(shù)器(帶4路捕獲和4路比較通道)、PWM單元(6路輸出)和看門狗。
??? (4)實(shí)時(shí)時(shí)鐘具有獨(dú)立的電源和時(shí)鐘源,在節(jié)電模式下極大地降低了功耗。
??? (5)多個(gè)串行接口,包括2個(gè)16C550工業(yè)標(biāo)準(zhǔn)UART、2個(gè)高速I2C接口(400 kbps)、SPITM和SSP(具有緩沖功能,數(shù)據(jù)長(zhǎng)度可變)。
??? (6)多達(dá)47個(gè)5V的通用I/O口(LQFP64封裝)。
??? (7)9個(gè)邊沿或電平觸發(fā)的外部中斷引腳。
??? (8)通過(guò)片內(nèi)PLL可實(shí)現(xiàn)最大為60MHz的 CPU操作頻率,PLL的穩(wěn)定時(shí)間為100μs。
2.2 數(shù)據(jù)存儲(chǔ)擴(kuò)展
??? 大容量數(shù)據(jù)存儲(chǔ)是單片機(jī)應(yīng)用系統(tǒng)的瓶頸,受到容量、功耗、尋址方式的約束。突破容量限制,可以在很大程度上擴(kuò)展和提高應(yīng)用系統(tǒng)的總體功能。Sumsung公司的NAND結(jié)構(gòu)Flash存儲(chǔ)器件是一款性價(jià)比很高的超大容量數(shù)據(jù)存儲(chǔ)器件,在MP3、U盤、數(shù)碼相機(jī)和PDA中有廣泛應(yīng)用,且市場(chǎng)占有份額逐年加大。將該器件作為各種單片機(jī)尤其是嵌入式系統(tǒng)的數(shù)據(jù)存儲(chǔ)器,可以完美地解決容量限制,實(shí)現(xiàn)靈活操作,勢(shì)必成為數(shù)據(jù)存儲(chǔ)的主流方向。
??? 按照50Hz的采樣速率,每秒有800×8bit的數(shù)據(jù)量,系統(tǒng)要求至少存儲(chǔ)30分鐘的飛行數(shù)據(jù)。使用K9F2808擴(kuò)展16M×8bit的外部存儲(chǔ)空間,用來(lái)存儲(chǔ)從發(fā)動(dòng)機(jī)控制器中傳來(lái)的發(fā)動(dòng)機(jī)數(shù)據(jù),經(jīng)過(guò)計(jì)算其至少可以存儲(chǔ)500分鐘的數(shù)據(jù),能夠滿足無(wú)人機(jī)飛行數(shù)據(jù)的要求。
??? K9F2808電源電壓1.7~3.6V,體積小,功耗低,容量最大可達(dá)1GB,按頁(yè)進(jìn)行讀寫,按塊擦除,通過(guò)I/O口分時(shí)復(fù)用作為命令/地址/數(shù)據(jù)。為防止啟動(dòng)或復(fù)位時(shí)電壓不穩(wěn)的誤擦除操作,K9F2808的WP接了10kΩ的上拉電阻,同時(shí)與地之間連接濾波電容。其余控制引腳直接與ARM的普通I/O口相連。
2.3 擴(kuò)展USB Host
??? USB技術(shù)規(guī)范將使用USB進(jìn)行數(shù)據(jù)傳輸?shù)碾p方劃分為Host和Slave,并且規(guī)定,數(shù)據(jù)傳輸只能發(fā)生在Host和Slave之間。目前,絕大多數(shù)Host功能角色被集成在各種類型的PC機(jī)上,如筆記本電腦、臺(tái)式機(jī)、Mac機(jī)及服務(wù)器等;而各種各樣的基本USB移動(dòng)設(shè)備都集成了USB Slave功能角色,例如U盤、帶USB接口的數(shù)碼相機(jī)等。這樣,就導(dǎo)致這些作為USB Slave的USB接口的數(shù)字設(shè)備中的數(shù)據(jù)離開(kāi)PC機(jī)將無(wú)法讀寫。解決這一問(wèn)題的根本辦法就是在需要使用USB設(shè)備的系統(tǒng)中集成USB Host功能模塊,使之具有與USB Slave設(shè)備進(jìn)行數(shù)據(jù)傳輸?shù)哪芰Α?BR>??? 本設(shè)計(jì)利用SL811HS和8位單片機(jī)實(shí)現(xiàn)的系統(tǒng)完成了USB Host功能,并且提供了USB總線的接口方式。將其作為一個(gè)數(shù)據(jù)接口模塊集成到嵌入式系統(tǒng)中,使得用戶系統(tǒng)能夠讀/寫作為Slave的USB移動(dòng)存儲(chǔ)器,從而完成數(shù)據(jù)存儲(chǔ)和交換功能,其硬件原理如圖2所示。
??????????????????
??? SL811HST的主從選擇M/S接低電平,用來(lái)選擇USB的主模式;其中斷輸出INT_U經(jīng)下拉接ARM的外部中斷。SL811HST外接12MHz的有源晶振,同時(shí)將CM接高電平激活內(nèi)部的時(shí)鐘4倍頻,既可以使芯片內(nèi)部時(shí)鐘頻率達(dá)到48MΩ,又可以降低外部線路頻率,提高電路的抗干擾能力。
2.4 復(fù)位電路
??? ARM系統(tǒng)需要兩個(gè)復(fù)位源,其中一個(gè)RST是系統(tǒng)復(fù)位源,TRST是JTAG接口的調(diào)試復(fù)位源。如果兩個(gè)復(fù)位源都使用MAX811的輸出,則可能驅(qū)動(dòng)能力不夠。因此使用一片高速CMOS三態(tài)緩沖器74HC125,以增強(qiáng)輸出能力,其原理如圖3所示。
??????????????????????
3 軟件設(shè)計(jì)
??? 為確保程序的可靠及編程的簡(jiǎn)便,本方案中采用了嵌入式操作系統(tǒng)USOS II[2]。USOS II是針對(duì)中低檔單片機(jī)而設(shè)計(jì)的嵌入式實(shí)時(shí)操作系統(tǒng)內(nèi)核,同時(shí)支持按時(shí)間片輪轉(zhuǎn)、按優(yōu)先級(jí)搶占、二者結(jié)合共三種調(diào)度策略。其具有完善的任務(wù)管理功能,提供定時(shí)、延時(shí)服務(wù),支持消息、信號(hào)(signal)通訊機(jī)制,支持臨界代碼段保護(hù),提供二進(jìn)制、計(jì)數(shù)型信號(hào)量(semaphore)同步對(duì)象等,支持Bottom-half中斷管理機(jī)制[3]。
??? 本設(shè)計(jì)創(chuàng)建了人機(jī)接口、數(shù)據(jù)采集二個(gè)任務(wù)。人機(jī)接口主要完成通過(guò)串口" title="串口">串口與計(jì)算機(jī)相連接時(shí)對(duì)存儲(chǔ)在Nand Flash中的數(shù)據(jù)的整理、備份、刪除等功能,數(shù)據(jù)存儲(chǔ)任務(wù)負(fù)責(zé)將各次采樣獲得的數(shù)據(jù)打包后存儲(chǔ)進(jìn)入Nand Flash。AD采樣中斷完成對(duì)高度、速度、航向、姿態(tài)、舵機(jī)位置的數(shù)據(jù)采集;比較器中斷完成對(duì)油門控制信號(hào)的數(shù)據(jù)采集;Uart中斷完成對(duì)GPS定位信號(hào)的數(shù)據(jù)采集。其軟件結(jié)構(gòu)如圖4所示。
????????????????????????
3.1 主程序設(shè)計(jì)
??? 主程序主要完成硬件的初始化、操作系統(tǒng)的初始化以及文件系統(tǒng)的初始化。由于USOS II已經(jīng)提供了比較完善的文件系統(tǒng)管理,因此可采用類似于PC機(jī)DOS系統(tǒng)對(duì)文件的管理模式。本設(shè)計(jì)中,將Nand Flash存儲(chǔ)設(shè)定為C盤,而將臨時(shí)插入用來(lái)讀取當(dāng)次飛行數(shù)據(jù)的U盤設(shè)定為D盤。在Flash初始化成功后,將以Flash為存儲(chǔ)媒介的C盤添加到文件系統(tǒng),并創(chuàng)建數(shù)據(jù)存儲(chǔ)和人機(jī)接口任務(wù)。如果Flash未初始化成功,則系統(tǒng)報(bào)錯(cuò),并只創(chuàng)建人機(jī)接口任務(wù),使用者可以通過(guò)PC機(jī)對(duì)系統(tǒng)進(jìn)行狀態(tài)查詢。主程序的軟件流程如圖5(a)所示。
???????????????????????????
3.2 數(shù)據(jù)采集任務(wù)設(shè)計(jì)
??? 數(shù)據(jù)采集任務(wù)主要用來(lái)將AD中斷、Uart中斷、比較器中斷采集到的各種飛行數(shù)據(jù)計(jì)算、打包。為提高寫Nand Flash的效率,在內(nèi)存中開(kāi)辟了兩個(gè)與Flash頁(yè)面大小相同、長(zhǎng)度為512bit的緩沖區(qū),打包完畢的數(shù)據(jù)先存入其中一個(gè)緩沖區(qū)內(nèi)。當(dāng)緩沖區(qū)存滿后,將緩沖區(qū)滿標(biāo)志置位,并向人機(jī)接口任務(wù)發(fā)送消息;人機(jī)接口任務(wù)接收到緩沖區(qū)滿的消息后,會(huì)將對(duì)應(yīng)的緩沖區(qū)中的數(shù)據(jù)寫入Flash,并將緩沖區(qū)滿的標(biāo)志清空。
??? 人機(jī)接口任務(wù)在向Flash中寫數(shù)據(jù)的同時(shí),數(shù)據(jù)采集任務(wù)仍實(shí)時(shí)采集飛行數(shù)據(jù),并將采集到的數(shù)據(jù)存入另外一個(gè)緩沖區(qū),由于采用了操作系統(tǒng)的雙任務(wù)設(shè)計(jì),保證了采集到的數(shù)據(jù)不會(huì)丟失,并提高了采樣頻率。數(shù)據(jù)采集任務(wù)流程如圖5(b)所示。
3.3 人機(jī)接口任務(wù)設(shè)計(jì)
??? 人機(jī)接口任務(wù)主要用來(lái)管理U盤的插拔以及響應(yīng)用戶輸入的類DOS命令。如判斷出U盤插入,并枚舉成功,則在文件系統(tǒng)中添加D盤;如判斷出U盤被拔出,則在文件系統(tǒng)中刪除D盤。人機(jī)接口任務(wù)流程如圖5(c)所示。
3.4 Nand Flash驅(qū)動(dòng)程序設(shè)計(jì)
??? 系統(tǒng)的數(shù)據(jù)存儲(chǔ)期間選用K9F2808,其存儲(chǔ)結(jié)構(gòu)示意圖如圖6所示。該器件由1K個(gè)塊(block)組成,每個(gè)塊有32頁(yè),每頁(yè)有528B,這528B分成A、B、C三個(gè)區(qū)。對(duì)每一頁(yè)的尋址需要通過(guò)I/O口送出三個(gè)地址,第二、三行地址(A9~A23)指明尋址到某一頁(yè),第一列地址指明尋址到頁(yè)的指定區(qū)中某一字節(jié)。對(duì)頁(yè)的分區(qū)命令如表1所列。
??????????????????????????
??? 由表1可以看出,00H、01H、50H只是選區(qū)指針。選定區(qū)的內(nèi)部尋址是由第一個(gè)列地址完成的,A0~A7可以最大尋址256B。
????????????????????????????
??? Flash的驅(qū)動(dòng)程序按照結(jié)構(gòu)化層次設(shè)計(jì)方法設(shè)計(jì)。將Flash的總線數(shù)據(jù)讀寫、對(duì)控制總線的操作及延時(shí)操作封裝成底層函數(shù),中層函數(shù)由對(duì)Flash讀、寫、擦除、查空等函數(shù)組成,頂層函數(shù)由USOS II中的文件系統(tǒng)組成,其示意圖如圖7所示。
?????????????????????????????
3.5 USB HOST驅(qū)動(dòng)程序設(shè)計(jì)
??? 本設(shè)計(jì)主要使用USOS II操作系統(tǒng)中可選配的USB HST驅(qū)動(dòng)軟件包,只要將控制SL811HS的I/O口在軟件包的底層進(jìn)行相應(yīng)定義[4],則對(duì)U盤的操作即可實(shí)現(xiàn)對(duì)用戶透明。用戶只需調(diào)用軟件包中的頂層fWrite( )和fRead( )等函數(shù),即可實(shí)現(xiàn)USB主口對(duì)存儲(chǔ)介質(zhì)的數(shù)據(jù)讀寫操作。
??? 與Nand Flash相似,SL811HST的驅(qū)動(dòng)程序設(shè)計(jì)也遵循了結(jié)構(gòu)化層次設(shè)計(jì),底層是對(duì)SL811HST數(shù)據(jù)及控制線的操作,中層是對(duì)SL811HST的讀、寫以及緩沖區(qū)讀、寫等函數(shù),頂層為文件系統(tǒng)。
3.6 串口驅(qū)動(dòng)程序設(shè)計(jì)
??? 設(shè)計(jì)中采用LPC2138中的兩個(gè)標(biāo)準(zhǔn)Uart口,其中一個(gè)串口用來(lái)接收發(fā)動(dòng)機(jī)控制器傳送的發(fā)動(dòng)機(jī)參數(shù),另外一個(gè)串口用來(lái)與通用PC連接,進(jìn)行人機(jī)交互。
??? 串口接收、發(fā)送數(shù)據(jù)都采用中斷方式。為了方便程序使用,為每個(gè)串口都劃分了專門的接收、發(fā)送緩沖區(qū)。當(dāng)需要發(fā)送數(shù)據(jù)時(shí),將待發(fā)送數(shù)據(jù)存儲(chǔ)在對(duì)應(yīng)串口的發(fā)送緩沖區(qū)中,并置位串口發(fā)送中斷標(biāo)志位,啟動(dòng)發(fā)送過(guò)程。接收數(shù)據(jù)時(shí),中斷程序自動(dòng)將接收來(lái)的數(shù)據(jù)存放在對(duì)應(yīng)的串口接收緩沖區(qū)內(nèi),用戶可以通過(guò)查詢接收緩沖區(qū)的頭尾指針來(lái)判斷該串口是否接收到數(shù)據(jù)。
??? 為方便程序調(diào)用,仿照C語(yǔ)言中屏幕顯示函數(shù),構(gòu)造了Putch()、Puts()、Getch()、Gets()等函數(shù),通過(guò)串口接收、發(fā)送數(shù)據(jù)。
4 系統(tǒng)聯(lián)調(diào)?
??? 實(shí)際使用中,每次飛行結(jié)束后,直接使用普通U盤插入數(shù)據(jù)采集系統(tǒng),按下組合鍵后,可自動(dòng)將上次記錄的飛行數(shù)據(jù)傳送到U盤中。待數(shù)次飛行以后,可將數(shù)據(jù)采集系統(tǒng)通過(guò)串口與PC機(jī)相連接,使用串口調(diào)試助手與采集系統(tǒng)中的仿DOS的指令軟件Shell進(jìn)行通訊。對(duì)數(shù)據(jù)采集系統(tǒng)進(jìn)行人機(jī)交互的界面如圖8所示[5]。
??????????????????????
??? 上面的操作步驟為:查閱C盤(片上Flash)內(nèi)容→刪除C上一個(gè)文件→插入U(xiǎn)盤→顯示U盤目錄→將C盤上數(shù)據(jù)記錄文件拷貝到D盤→顯示D盤文件,文件已經(jīng)拷貝成功。
??? 通過(guò)測(cè)試可以看出,數(shù)據(jù)采集系統(tǒng)具有良好的用戶界面,可以通過(guò)防DOS命令進(jìn)行數(shù)據(jù)讀取。
??? 目前該飛行系統(tǒng)已經(jīng)安裝到試驗(yàn)的小型無(wú)人機(jī)上進(jìn)行多次試飛。經(jīng)過(guò)檢測(cè),該系統(tǒng)運(yùn)行穩(wěn)定、可靠,采集數(shù)據(jù)沒(méi)有錯(cuò)誤現(xiàn)象,使用U盤讀取數(shù)據(jù),以及使用PC機(jī)進(jìn)行交互時(shí)方便快捷。系統(tǒng)為小型無(wú)人機(jī)的建模提供了極大的技術(shù)支持。
參考文獻(xiàn)
[1] Philips Semiconductors Preliminary User Manual.LPC2131/2132/2138 User Manual[EB/OL],Rev.1.4,2004,4.
[2] 嵌入式軟件網(wǎng).USOS II嵌入式操作系統(tǒng)使用手冊(cè)[EB/OL].http://www.mcu-soft.com,2006,6.
[3] 鄭玉全.微型搶占式實(shí)時(shí)操作系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn).單片機(jī)與嵌入式系統(tǒng),2004,(1).
[4] Silicon Laboratories.Usb firmware programmer′s Guide[EB/OL],Rev1.3,2003,12.
[5] 鄭玉全,陳杰,沈?yàn)槿?,?基于RTOS的渦噴發(fā)動(dòng)機(jī)數(shù)字控制系統(tǒng)[J].電子技術(shù)應(yīng)用,2005,31(06):34-37.