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