張志文,劉 斌
(西安工業大學電子信息工程學院,陜西 西安 710032)
慣導組件一般是由陀螺儀和加速度計組合而成[1]。有的慣導組件直接輸出脈沖信號,有的則是通過串行總線接口輸出數字信號。對于慣導組件的標定,一般是將其固定在三軸轉臺上,通過在不同的溫度下改變轉臺的位置和速率,由檢測系統對其輸出的脈沖信號或串口數字信號進行測量,再對測量值進行相應的數學處理,從而得到慣導組件的性能參數。由于慣導組件的參數對溫度非常敏感,所以需要在多個溫度點下對其進行標定。而每個溫度點需要保溫4h后才能進行測量,因而完成一個產品的標定一般需要3d左右。國外采集方法一般是通過PCI卡來實現數據的采集,該方法對計算機要求較高,需要計算機有較多的PCI卡槽,且不適合野外作業[1]。國內一般是通過PFGA和CY7C68013-128AC的USB來實現12路的脈沖信號采集[1],由于該USB內置的是8位的51內核,大大降低了USB的傳輸速度。對于串口的數據采集,一般的MCU都很少能擁有4個串口,所以一般需要通過兩個MCU來完成[2],這樣不但增加了電路的復雜性,還降低了系統的可靠性。針對這種情況,本文提出了一種基于SOPC的設計方案[3-4],通過使用FPGA的32位的高速NIOS軟核,對脈沖信號或串口數據進行采集,再通過USB總線把采集的數據發送到PC機上。
本系統使用SOPC的設計方案,通過Verilog語言對24路脈沖計數模塊進行設計,實現對24路脈沖信號的計數,再調用SOPC Builder里的4個UART核實現同時對4路串口數據的接收。并通過在SOPC中添加NIOS軟核,實現對脈沖計數模塊和串口數據接收模塊的控制,將接收到的數據通過高速USB ISP1581發送到PC機,由PC機對接收到的數據進行處理,采集系統框圖如圖1所示。

圖1 數據采集系統框圖
在圖1中,脈沖信號的計數是NIOS軟核每隔5ms向24路計數模塊發送相應的地址,獲得24路脈沖計數模塊的計數值,再通過USB總線把數據發送到PC機上。而串口數據則是通過NIOS,對UART核進行設置,確定其中斷優先級和波特率,然后通過中斷方式接收串口數據,再通過USB總線發送到PC機。
該測試系統是由下位機和上位機兩個部分構成。下位機由FPGA和USB接口電路組成,實現對脈沖信號的計數和串口數據的接收。而上位機是裝有Windows XP系統的PC機,通過VC++6.0的程序設計,對接收到的數據進行實時地處理、顯示和保存。
本設計使用的FPGA芯片是ATMEL公司的EP2C8Q208C8N,它擁有非常豐富的邏輯單元,可以滿足設計內核的需要。而且這款芯片內部還擁有兩個鎖相環,最高頻率可達250MHz,使得數據處理速度更快。
開發平臺使用了Quartus II 9.0,相比MAXPLUS II的開發平臺,Quartus II 9.0的開發界面更加人性化,支持的芯片也更加豐富,最重要的是它增添SOPC builder,使得軟核的開發得到了應用。該系統的24路脈沖計數模塊設計是通過使用Verilog語言實現的,可以對慣導組件輸出的信號分別計數,如圖2所示。該模塊data_in[23..0]是24路慣導組件的脈沖輸入,add_in[4..0]是每個脈沖輸入通道的地址,data_out[15..0]是計數單元的計數值輸出。
串口數據接收電路的設計,是通過在SOPC Builder里添加UART軟核實現的。在SOPC Builder里有很多的軟核可以調用,由于該設計需要4個串口同時對4個慣導組件輸出的4路串口數據進行接收,而一般的處理器很少擁有4個串口。雖然有很多串口擴展芯片可以對串口進行擴展,但需要在外部對電路進行擴展,不利于系統的可靠和穩定工作,而且提高了系統的成本。SOPC Builder可以很好地解決這個問題,它是在FPGA內部完成串口的設計,只需要調用軟核就可以完成4個串口的拓展。電平轉電路使用MAX490,其作用是把422電平轉換為UART的TTL電平。為解決4路串口數據同時接收的問題,本系統對4個串口的中斷優先級進行了設置,串口1的中斷優先級最高,并依次降低。UART通過中斷方式對字節進行接收。當接收到完整的一幀數據,再由NIOS對不同串口的數據添加不同的幀頭,并寫入到USB緩沖區中。待數據緩沖區存滿后,通過USB總線發送到PC機上。由于每路數據添加有不同的幀頭,所以PC機能夠識別不同串口的數據,并進行處理。
使用飛利浦公司的ISP1581USB作為USB接口電路。它是一款價格低,功能強大的通用串行總線(USB)接口器件,符合USB2.0規范,并且兼容USB1.1規范,具有高速的USB通信能力。其內部集成了串行接口引擎(SIE)、PIE、8 kB的多結構FIFO存儲器和數據接發器。擁有7個IN端點,7個OUT端點和1個固定的控制IN/OUT端點。端點的雙緩沖配置增加了數據吞吐量,實現了實時數據的高速傳輸[5~6]。

圖2 24路脈沖計數邏輯電路圖
圖3是USB數據傳輸電路設計原理圖,由NIOS對USB芯片進行讀寫操作,完成USB的枚舉和控制。由于該設計使用的USB芯片沒有其公司提供的通用驅動,還需要對驅動程序進行開發。本設計使用VC++6.0、DDK和Driver Studio對驅動程序進行開發,與傳統使用VC++6.0和DDK對驅動進行開發相比,開發難度大大降低,減少了開發時間,提高了開發效率。

圖3 USB數據傳輸設計電路原理圖
NIOS軟核是本設計的核心,下位機所有的功能都是由NIOS軟核來控制的。NIOS軟核是一個32位的嵌入式微處理器,其性能超過了200DMI/s。而且支持多CPU的SOPC設計,使得設計的方法更加靈活。
本系統使用NIOS控制的模塊有24路脈沖計數模塊和4路串口數據接收模塊,以及USB數據傳輸模塊。工作時需要對各個模塊進行初始化,然后通過接收PC機發送的模式選擇命令,來接收脈沖數據或者串口數據,把接收到的數據保存到相應的緩存區里。再通過對USB進行控制,設置USB包的大小和批次,把數據發送到PC機,進行處理、保存和顯示。
系統軟件設計主要由SOPC下位機程序設計和WindowsXP環境下的上位機應用程序設計兩個部分組成。FPGA的SOPC主要作用是:系統上電后,FPGA通過SOPC里的各個軟核相互協作,把24路脈沖數據或者4路串口數據通過USB總線傳輸到上位機。上位機應用程序的設計是應用VC++6.0提供的WIN32 API函數,把下位機通過USB發送數據包傳遞到上位機。在WinsowsXP環境下利用MFC來設計程序界面,實現上位機實時對下位機傳輸的數據進行處理、保存和顯示。
圖4是SOPC的程序設計流程圖。首先,對所有的模塊進行初始化,包括對NIOS的I/O方向寄存器進行初始化。其次,對USB進行枚舉,如果枚舉成功,等待接收上位機的模式選擇命令,如果是串口數據模式,則對串口的波特率和中斷優先級進行初始化,然后對USB的數據包的大小進行設置。如果是脈沖數據模式,則對定時器進行設置,每5ms對計數模塊進行數據的讀取,設置USB的包大小。設置完成后,下位機就開始等待數據。如果有數據,就開始接收數據,把接收的數據進行相應的處理,并通過USB總線發送到PC機。

圖4 SOPC的程序設計流程圖

圖5 應用程序開發流程圖

圖6 24路脈沖數據測量結果

圖7 4路串口數據測量結果
本設計采用VC++6.0的MFC來設計應用程序,通過MFC的編程設計用戶界面,再通過WIN32 API函數來讀取USB驅動程序里的數據[7~8],并對所接收的數據進行實時處理,應用程序的開發流程如圖5所示。首先,對所有的函數類進行初始化,并對USB的設備進行查找,通過查找USB的GUID,來獲得需要的設備。然后,再選擇接收對應模式下的數據,等待數據的到來。當數據到來,開始讀取存儲在USB驅動里的數據包,把讀取到的數據進行處理和保存,最后,把處理好的數據進行實時的顯示。
對系統脈沖計數模式測量時,使用SP1641D信號發生器作為脈沖信號源,當信號源輸出信號為422 Hz方波信號時,測量結果如圖6所示。通過實驗驗證,本系統能夠滿足對兩個慣導組件的24路脈沖信號的無縫計數要求。由于實驗室條件所限,SP1641D信號發生器帶負載能力有限,導致系統有1個脈沖計數的偏差。對單路測試時,實驗結果沒有出現誤差。通過實驗證明,該系統的誤差率在1.0×10-7內。對系統串口數據模式測量時,使用專用的422串口數字信號發生源,測量的結果如圖7所示。由于使用了專用的信號源,沒有出現誤差,能夠準確地接收數據,通過實驗驗證,本系統也能夠滿足對4個慣導組件的4路串口數據接收的設計要求。
基于SOPC的慣導組件多模式測量系統,既解決了24路脈沖信號的計數,又解決了4路串口的數據接收,實現了多模式的測量需求。由于大部分的設計都是在FPGA芯片內部完成的,提高了系統的穩定性和抗干擾能力,且同時降低了系統的成本。該設計完全滿足慣導系統的標定,通過大量的實驗證明,其可以作為慣導組件的新型測量設備。
[1]張志文,趙浩.慣導組件的脈沖輸出測控系統[J].西安:西安工業大學學報,2009,29(5):461.
[2]張志文,劉美飛,李劍.基于USB的多串口測試系統軟件設計[J].西安:西安工業大學學報,2012,5(32):400-405.
[3]夏宇聞.Verilog數字系統設計教程[M].2版.北京:北京航空航天大學出版社,2008:5-7.
[4]李蘭英.Nios II嵌入式軟核SOPC設計原理及應用[J].北京:北京航空航天大學出版社,2006(11):1-20.
[5]Axelson J.USB mass storage designing and programming devices and embedded hosts[M].Lakeview Research,2006(6):200-240.
[6]薛圓圓.USB應用開發技術大全[M].北京:人民郵電出版社,2011(1):161-181.
[7]Microsoft Corp.Microsoft visual C++6.0 MFC library refer-ence[M].Microsoft Press,2007.
[8]孫鑫,余安萍.VC++深入詳解[M].北京:電子工業出版社,2006.