郝曉明,李 杰,2*,胡陳君,石璽文,陳 偉
(1.中北大學電子測試技術國防科技重點實驗室,太原 030051;2.中北大學儀器科學與動態測試教育部重點實驗室,太原 030051;3.山西北方惠豐機電有限公司科研設計二所,山西長治 046012)
基于FPGA的彈載數據回讀系統設計*
郝曉明1,李 杰1,2*,胡陳君1,石璽文1,陳 偉3
(1.中北大學電子測試技術國防科技重點實驗室,太原 030051;2.中北大學儀器科學與動態測試教育部重點實驗室,太原 030051;3.山西北方惠豐機電有限公司科研設計二所,山西長治 046012)
慣性傳感器在各種導彈武器中的廣泛應用,使得采集存儲系統成為彈體飛行參數測量中不可或缺的存儲設備。基于采集存儲系統數據讀取的需要,設計了一種基于FPGA的彈載數據回讀系統。本系統以FPGA為控制核心,FT245BL芯片為USB控制芯片,FPGA模擬的FIFO為數據緩存,從而實現數據的傳輸。試驗驗證表明,該回讀系統能夠很好地完成數據傳輸工作,且傳輸數據迅速、準確,無錯幀與丟幀現象,具備一定的工程實用價值。
慣性導航;數據回讀;FPGA;USB;FIFO
隨著慣性傳感器的發展,MEMS慣性導航成為各種導彈導航首選系統。例如火箭彈常采用低成本的MEMS慣性器件測量其飛行姿態[1-2]。而出于隱蔽性和安全性的考慮,炮彈飛行過程中慣性傳感器所采集記錄的數據信息不可能實時地傳輸到上位機進行處理與顯示,需要先將數據存儲到FLASH存儲器中,回收后再將數據回讀到上位機進行處理再現。
傳統的數據傳輸系統由于傳輸速度低或安裝不方便等問題已不能滿足科研與生產過程的需求[3],而USB具有支持熱插拔,使用靈活,傳輸速率快,易于擴展的特點,優于其它的數據傳輸方式[4-5]。文獻[6-7]提到的 USB控制芯片CY7C68013,數據傳輸速度快,應用廣泛,但固件程序和驅動程序的編寫復雜,需要經驗豐富的專業人士才能完成設計。
炮彈從上電裝膛到飛行落地時間很短,FLASH存儲器中記錄的有效數據很少,用USB 2.0的傳輸速度就可以在短時間內讀取。本文正是針對上述情況設計了一種簡易的基于FPGA的彈載數據回讀系統。
該系統主要由三個模塊構成:電源模塊,FPGA模塊,FT245BL模塊。系統設計圖如圖1所示。

圖1 系統設計圖
FPGA為控制芯片,讀取上位機命令,控制FT245BL的轉換和傳輸。上電后FPGA處于待命狀態,上位機發送命令給FPGA,FPGA接到命令后,根據通訊協議判斷命令內容,然后根據命令內容進行相應操作。若收到讀取命令,FPGA將會從FLASH中讀取數據,經過FPGA的FIFO緩存后送入FT245BL中進行并串轉換,然后通過USB接口上傳到上位機。
整個硬件電路分為三個模塊:電源模塊,FPGA控制模塊,FT245BL轉換模塊。
2.1 電源模塊
USB供電方式有總線供電和自供電兩種方式。總線供電時突然加大電壓會產生大電流燒毀器件,所以需要用電壓轉換器,MOS管等使電流緩慢增大,但電流逐漸增大會加大磁場效應,所以還要加磁珠來減小噪聲和電磁干擾;而從USB口自供電設計簡單,如圖2所示,USB電源線電壓為5 V,提供的最大電流為500 mA,不用考慮電壓和磁場問題。當USB總線連接到主機時,USB主線電壓變高,RESET電壓變高,導致RSTOUT電壓變高,所以USB DP管腳接一個1.5K的上拉電阻連到RSTOUT引腳,鉗位到高電平,驅動能力增加,芯片迅速連接到主機。
所以設計整個系統的供電由USB口提供+5 V電壓,由于FPGA的I/O口需要+3.3 V供電,內核需要+2.5 V供電,所以選用了一片電源轉換芯片MAX8882把+5 V電壓轉換為+3.3 V和+2.5 V。

圖2 系統供電設計圖
數字電路中,如果電源線和地線上的噪聲不進行濾波,就會耦合到有用信號上,形成電磁干擾,所以每一個電源都要加4個1 μF的接地電容進行濾波。
USB接口的信號地與保護地要分割開,它們之間可以用一個大電阻并聯一個耐壓值較高的電容來連接。如圖3所示。

圖3 USB供電與接地電路
2.2 FPGA模塊
主控芯片選取XILINX公司的FPGA芯片XC2S30,FPGA為復雜邏輯控制提供了豐富的門陣列資源,具有高速,低功耗,高集成度的特點,設計的產品具有體積小,重量輕,集成度高,功耗低的特點,使產品具有更好的性價比和競爭力,設計周期縮短,設計費用和風險降低[8]。這款FPGA芯片內核供電電壓2.5 V,I/O口供電電壓3.3 V,芯片功耗低,解決了發熱量大的問題;而且芯片擁有30 000個系統門,216個可編程邏輯模塊,92個I/O口,內部集成6個雙口RAM,共24 kbit,能夠滿足本次設計要求。
FPGA可以嚴格的控制時序,使系統高速運行,所以用FPGA內部來進行初始化,復位和判斷調用各個模塊單元[9]。FPGA配置主要包括時鐘單元,程序下載單元,指示燈單元。時鐘單元采用20M有源晶振產生主時鐘,通過軟件分頻提供給其它器件進行工作;程序下載單元考慮到JTAG鏈的完整性、電源電壓的設置以及CCLK信號所以采用主串模式連接;指示燈單元用兩個指示燈來顯示上電成功和擦除成功。
2.3 FT245模塊
USB接口芯片選取的是FTDI公司的FT245BL芯片[10]。傳統的USB接口設計需要對USB的標準,固件編程,驅動程序的開發等有很深入的了解,工作量大,開發周期長,有豐富設計經驗的人員才能完成這項任務,而FT245BL芯片內部只有一個單獨的USB 2.0串行接口引擎(SIE)和FIFO收發緩沖區,在芯片上有完整的USB協議,無需外擴程序固件,而且FTDI公司提供驅動程序,我們只需進行必要的硬件設計和簡單的軟件編程便可應用。所以選用FT245BL。
FTDI公司對FT245BL的設計建議使用外擴EEPROM芯片93C46來存放FT245BL芯片的設備描述符,但考慮到EEPROM只是存放原始設備制造商提供的PID,VID和設備描述符等,而在本次設計中,只使用設備默認值就可以正常使用,為了最簡化設計,去除了EEPROM的設計。
系統軟件分為兩個模塊:FT245BL控制模塊,FLASH控制模塊。如圖4所示。

圖4 系統軟件設計圖
3.1 FT245BL控制模塊
FT245BL控制模塊主要分為兩單元:通信協議判斷,FIFO緩存。
3.1.1 通信協議
FPGA在與上位機通信之前,需要先與上位機規定好通信協議,根據通信協議,上位機作為主設備,FPGA作為從設備,FPGA根據通信協議響應上位機發出的命令,從而實現上位機通過USB讀取FPGA內FIFO數據[11]。系統和上位機約定的命令字[12]為:
讀數命令:&25&5E&77&A6
擦除命令:&25&5E&44&A3
停止讀數命令:&25&5E&66&A5
命令字是以16進制數編寫,當FPGA接收到命令字后將16進制轉換為2進制識別。開始上電后FPGA處于等待狀態,當接收到上位機傳遞來的命令字后,中斷當前操作,然后根據命令字執行相應的操作。
3.1.2 FIFO緩存單元
這款FPGA中內置了1 kbit×8 bit的RAM可用于FIFO緩存。由于FLASH中數據需要一頁一頁讀取,當翻頁時需要重新寫入控制字和地址,所以為了不發生丟失數據的情況,需要將數據在FIFO中緩存,再送入FT245中。
在進行數據緩存時,系統采用分層處理,分為兩層緩沖區,分別是數據接收緩沖區和數據發送緩沖區[13]。數據接收緩存區接收從FLASH中傳來的數據,接收一幀后將數據送入數據發送緩沖區。
FIFO,即先進先出,目的是對數據進行緩存,不使數據發生丟失。主要流程是:FIFO中寫入一幀數據,寫地址計數加一,FIFO往外送出(被讀取)一幀數據,讀地址計數加一;比較兩個地址之間的差值,
若寫地址大于讀地址,則
Offset<=(wrcont-rdcont);
若讀地址大于寫地址,則
Offset<=("1111111110"-(rdcont-wrcont));
若寫地址等于讀地址,則
Offset<="0000000000";
其中,wrcont為寫地址計數,rdcont為讀地址計數,Offset為FIFO中數據容量。計算FIFO中數據的容量,設計一個標志位f_half,若數據容量占FIFO總容量一半以上,則標志位置1,停止向FIFO中寫入數據;若數據容量不到FIFO總容量一半,則標志位置0,繼續寫入數據;若Offset為0,則表示當前FIFO為空,可以向FIFO中寫入數據;因為若FIFO存滿1K再向FT245BL中發送數據,就有可能造成系統自動掉電后,部分寫入FPGA中的數據沒有及時發送給FT245BL,從而造成數據丟失,所以設計只要FIFO不為空,就持續向FT245BL中發送數據[14]。
在vhdl語言中,經常要用到變量和信號兩種數據對象。變量的賦值是立即發生的,很容易進行仿真,信號是進程被掛起時賦值,具有延遲特性,更符合實際的硬件特性,所以實際應用時多使用信號在電路內部進行傳遞,只有在描述一些用信號很難描述的算法時才會使用變量[15]。
由于wrcont,rdcont,offset,f_half都是信號,更接近硬件的實際情況,需要一定的延遲,數據因延遲傳輸可能在FIFO中滿溢,從而造成的數據丟失。所以用"1111111110"代替"1111111111"作為FIFO總容量計算FIFO中數據的容量,而且半滿就停止向FIFO中寫入數據。
3.2 FLASH控制模塊
FLASH控制模塊主要分為三單元:讀取,擦除,停止讀數。
FPGA對命令字進行識別判斷后,執行下相應的操作:讀取,擦除,停止讀數。狀態轉換圖如圖5所示,eselec為選擇操作信號。
3.2.1 FLASH讀取單元
當FPGA得到讀取命令后,就將數據從FLASH中取出,放入其內部的FIFO中,將數據從FLASH中讀取到其內部FIFO中;FPGA內部FIFO中存有數據時,會向FT245BL發送數據,使FT245BL的發送緩存器接收數據,然后通過串行接口引擎(SIE)將8位并行數據轉換為串行數據,通過USB口的差分形式傳輸到上位機。

圖5 FPGA中狀態轉換圖
FT245BL中有128 byte的接收緩存FIFO和384 byte的發送緩存FIFO與FPGA的FIFO相連接。
當FT245BL接收到來自上位機的命令后,寫入接收FIFO,接收FIFO不為空時,接收信號RXF置低,表示接收區FIFO有數據,可以進行讀取,在RD信號由高變低后,命令數據被掛在端口上,當數據被FPGA讀取后,RD信號由低變高,表示一個字節讀取完成,接收信號RXF有短暫的升高表示FT245BL在處理讀操作,然后變為低電平表示可以讀取下一字節。之后循環操作直到數據全部讀取完畢,接收信號RXF置高。讀時序如圖6所示。

圖6 FT245BL讀時序圖
當FT245BL接收到來自FPGA FIFO中的數據后,此時發送信號為低,表示可以向發送FIFO中寫入數據,當寫信號置高時,數據放置在FT245BL的端口,當寫信號由高變低時,數據寫入發送FIFO。當FIFO中數據寫滿或正在寫時,TXE信號置高,停止寫入數據。FT245BL寫時序如圖7所示。

圖7 FT245BL寫時序圖
3.2.2 FLASH擦除單元
當FPGA得到擦除命令,FPGA就擦除FLASH中的所有數據,擦除完成后將信息反饋給上位機,并點亮擦除完成指示燈(電路圖如圖8,D1為上電指示燈,D2為擦除完成指示燈)。

圖8 上電與擦除完成指示燈
3.2.3 FLASH停止讀數單元
當FPGA得到停止讀數命令,就停止一切操作并回到復位狀態。
本系統進行了實物焊接與調試。實物圖如圖9所示。

圖9 實物圖
采用VB程序編寫的上位機軟件進行測試,測試結果如圖10所示。由結果可以看出,本系統在讀取143.603 Mbyte的數據時用時為157 s,讀數速度為0.915 Mbyte/s左右,而FT245BL芯片規定的傳輸速度為1 Mbyte/s,傳輸速率為規定速度的91.5%。經過檢驗,讀取的數據沒有出現丟失,錯誤等現象,說明本系統具有很好的數據讀取穩定性,可靠性,完全可以應用于彈載等需要回讀的試驗中。

圖10 測試結果
本文介紹了一種基于FPGA的彈載數據回讀系統,該系統采用FPGA作為核心控制器,充分發揮了FPGA可編程能力強的特點;采用FPGA內部的FIFO作為緩存,保證了數據的完整性;確定了與上位機的通信協議,保證了傳輸的高效性;使用FTDI公司的FT245BL芯片,不使用EEPROM,設計簡單。測試表明該套系統實用性強,可以滿足一般的工程型應用。
[1] 董進龍,莫波.典型彈道下的火箭彈MEMS-INS/GNSS組合導航姿態誤差可觀性分析[J].兵工學報,2014,3(56):850-856.
[2] 盧曉東,周軍,賀元軍.直接側向力控制火箭彈的微機電系統速率陀螺濾波方法[J].兵工學報,2011,32(12):1456-1461.
[3] 呂超,張玉霞,王立欣.USB接口高速數據傳輸的實現[J].計算機測量與控制,2009,17(5):1003-1005.
[4] 胡亞琦,李煒,楊棟.基于USB2.0的振動監測系統的研究與設計[J].計算機測量與控制,2012,20(7):1809-1811.
[5] 代月松.USB3.0在存儲測試系統中的研究[D].太原:中北大學,2013.
[6] 劉吉,楊德偉,文懷濤,等.基于USB通信的FPGA高速數據采集系統[J].現代電子技術,2011,34(10):186-192.
[7] 高貝.基于USB2.0的數據傳輸系統設計[D].西安:西安電子科技大學,2011.
[8] 王紅亮,黃洋文.基于FPGA的可程控多路信號源設計[J].火力與指揮控制,2010,35(6):97-99.
[9] 劉雙紅,張海龍,靳搖鴻,等.基于FPGA和WSN的TNT爆炸時刻采集及存儲系統[J].傳感技術學報,2013,26(7):1009-1013.
[10]FT245BL.Datasheet [EB/OL].http://wenku.baidu.com/view/ e8b0563610661ed9ad51f39a.html.
[11]黃土琛,宮輝,邵貝貝.基于USB和FPGA的多功能數據采集系統[J].原子能科學技術,2013,47(11):2172-2176.
[12]柯艷,李杰,孔祥雷,等.基于USB 2.0的多路數據采集系統上位機軟件設計[J].測試技術學報,2010,24(4):351-356.
[13]楊海波,徐元欣,徐搖文,等.水下移動平臺數據采集和傳輸系統設計[J].傳感技術學報,2014,27(3):361-367.
[14]李杰,馬幸,劉俊,等.小型慣導系統數據實時采集處理與存儲設計[J].中國慣性技術學報,2008,16(3):274-277.
[15]楊丹,張樹林.VHDL中信號與變量的教學體會[J].電子電氣教學學報,2006,28(3):30-35.

郝曉明(1988-),男,河北邢臺人,現中北大學在讀碩士研究生,主要從事微系統集成、慣性測量方向的研究;

李 杰(1976-),男,教授,博士生導師。現在中北大學電子測試技術國家重點實驗室工作,目前的主要研究方向為微系統集成理論與技術、慣性感知與控制技術、組合導航理論、計算幾何及智能信息處理等,Lijie@nuc.edu cn。
DesigningofReadoutSystemforMissile-LoadedDataBasedonFPGA*
HAO Xiaoming1,LI Jie1,2*,HU Chenjun1,ShI Xiwen1,CHEN Wei3
(1.North University of China Science and Technology on Electronic Test&Measurement Laboratory,Taiyuan 030051,China;2.Key Laboratory of Instrumentation Science&Dynamic Measurement(North University of China),Ministry of Education,Taiyuan 030051,China;3.Shanxi North Huifeng Mechanical&Electronic Co.Ltd No.2 Academic Institution,Changzhi Shanxi 046012,China)
Wide use of inertial sensors in various kinds of missile weapons makes it indispensible for data acquisition and storage system in flight parameter measurement of projectile.Based on the need for data reading of acquisition and storage system,designed a kind of FPGA-based data reading system.By adopting FPGA as the core control,FT245BL as USB control chip,FIFO simulated by FPGA as data cache,this system completes the function of data transmission.The experiment shows that this data reading system is able to complete the function of data transmission quickly and accurately without frame error or frame losing,having engineering practical value.
inertial navigation;data transmission;FPGA;USB;FIFO EEACC:1265A
TN108.7
A
1004-1699(2015)07-1023-05
10.3969/j.issn.1004-1699.2015.07.014
項目來源:武器裝備探索研究項目(7131017)
2014-12-08 修改日期:2015-03-27