張志文,彭 彥
(西安工業(yè)大學(xué)電子信息工程學(xué)院,西安710032)
基于FPGA和NIOS的慣導(dǎo)組件測試系統(tǒng)研究
張志文,彭 彥
(西安工業(yè)大學(xué)電子信息工程學(xué)院,西安710032)
針對慣導(dǎo)組件產(chǎn)品測試中多種信號(hào)輸出的測量需求,設(shè)計(jì)了一種基于FPGA和NIOS II軟核的雙模式慣導(dǎo)組件數(shù)據(jù)采集系統(tǒng)。該系統(tǒng)以FPGA和USB CY7C68013芯片為核心,實(shí)現(xiàn)對4個(gè)慣導(dǎo)組件輸出的48路脈沖進(jìn)行頻率計(jì)數(shù)和對8個(gè)慣導(dǎo)組件輸出8路串口數(shù)據(jù)的接收,最后通過USB芯片將采集得到的數(shù)據(jù)上傳至測控計(jì)算機(jī),并由計(jì)算機(jī)進(jìn)行保存、處理和顯示。該設(shè)計(jì)降低了采集電路復(fù)雜度,提高了產(chǎn)品測試效率和采集系統(tǒng)的可靠性、穩(wěn)定性。
慣導(dǎo)組件;現(xiàn)場可編程門陣列;NIOS II軟核;USB芯片;數(shù)據(jù)采集
慣性導(dǎo)航系統(tǒng)的核心是慣導(dǎo)組件,通常由陀螺儀和加速度計(jì)組成。慣導(dǎo)組件在投入使用前要經(jīng)過嚴(yán)格測試,測試平臺(tái)一般為一個(gè)帶溫箱的三軸轉(zhuǎn)臺(tái),將慣導(dǎo)組件固定在轉(zhuǎn)臺(tái)上,通過改變轉(zhuǎn)臺(tái)的位置和速率,并在不同溫度下進(jìn)行測試,從而得到慣導(dǎo)組件的各種狀態(tài)信息。這些信息以脈沖或串口數(shù)據(jù)的形式輸出,由采集系統(tǒng)進(jìn)行測量或接收,然后由計(jì)算機(jī)進(jìn)行處理得到慣導(dǎo)組件的特性參數(shù)。慣導(dǎo)組件的測試需在不同溫度下進(jìn)行多次測試,不同溫度點(diǎn)還需要保溫和冷卻,通常需要數(shù)天時(shí)間,因此需要一個(gè)可靠、穩(wěn)定的慣導(dǎo)組件數(shù)據(jù)采集系統(tǒng)。通常國內(nèi)慣導(dǎo)組件測試系統(tǒng)都是使用PCI卡來采集數(shù)據(jù),并需要脈沖和串口兩種采集卡,這種采集卡通常價(jià)格較貴,采集路數(shù)有限,還需計(jì)算機(jī)支持相應(yīng)的PCI插槽[1],采集電路也較復(fù)雜,數(shù)據(jù)傳輸出錯(cuò)時(shí)也不易排查原因。
針對這種情況,提出了一種基于FPGA和NIOS軟核的設(shè)計(jì)方案,集成脈沖測量和串口數(shù)據(jù)接收于同一系統(tǒng)?;贔PGA設(shè)計(jì)了脈沖計(jì)數(shù)采集電路,并在FPGA中建立一個(gè)帶有多個(gè)串口模塊的NIOS II軟核處理器,控制脈沖和串口數(shù)據(jù)的采集,最后利用USB芯片將數(shù)據(jù)上傳到計(jì)算機(jī)中處理。
根據(jù)慣導(dǎo)組件數(shù)據(jù)采集系統(tǒng)的要求,既能對4個(gè)慣導(dǎo)組件輸出的48路脈沖信號(hào)(每個(gè)慣導(dǎo)組件輸出6路陀螺儀信號(hào)和6路加速度計(jì)信號(hào))進(jìn)行頻率計(jì)數(shù),又能接收經(jīng)過導(dǎo)航計(jì)算機(jī)板處理過的8個(gè)慣導(dǎo)組件輸出的串口數(shù)據(jù)。因此是一個(gè)多模式的數(shù)據(jù)采集系統(tǒng),采集系統(tǒng)結(jié)構(gòu)框圖如圖1所示。
圖1 采集系統(tǒng)結(jié)構(gòu)框圖
在上圖中,F(xiàn)PGA芯片采用了ALTERA公司的CycloneⅢEP3C16Q240C8型號(hào)芯片。該芯片內(nèi)部擁有15408個(gè)邏輯單元、支持20個(gè)全局時(shí)鐘網(wǎng)絡(luò)和4個(gè)鎖相環(huán),并支持多種外設(shè)接口[2],完全滿足系統(tǒng)邏輯設(shè)計(jì)需求。48路脈沖計(jì)數(shù)模塊通過Verilog語言編寫完成,8路串口數(shù)據(jù)接收模塊通過在NIOS II軟核處理器中構(gòu)建8個(gè)UART外設(shè)核來實(shí)現(xiàn)。NIOS II軟核通過定時(shí)器每5ms讀取一次脈沖計(jì)數(shù)器的計(jì)數(shù)值,然后通過CY7C68013 USB芯片發(fā)送到上位機(jī)。串口數(shù)據(jù)通過設(shè)定好波特率的UART核來接收,NIOS II軟核通過中斷方式接收串口數(shù)據(jù)并存儲(chǔ),同樣通過USB芯片發(fā)送到上位機(jī)。上位機(jī)用VC++6.0設(shè)計(jì)MFC應(yīng)用程序,接收USB芯片發(fā)送上來的數(shù)據(jù),然后對其進(jìn)行保存、處理和顯示。
3.1 48路脈沖計(jì)數(shù)器設(shè)計(jì)
設(shè)計(jì)使用Quartus II 9.0開發(fā)軟件完成,通過Verilog語言編寫48路帶有鎖存器的16位計(jì)數(shù)器,對脈沖上升沿進(jìn)行計(jì)數(shù),NIOS II軟核處理器每5ms提供一個(gè)鎖存信號(hào)鎖存48路計(jì)數(shù)器的計(jì)數(shù)結(jié)果,并依次選通48路地址讀取計(jì)數(shù)值保存,然后發(fā)送到USB芯片的FIFO再上傳給上位機(jī)。48路計(jì)數(shù)器模塊如圖2所示,data_in為48路脈沖信號(hào)輸入,add為選通地址,en為鎖存信號(hào)。data_maichong為上傳的脈沖計(jì)數(shù)值。
圖2 48路脈沖計(jì)數(shù)器模塊圖
3.2 NIOS II軟核及8路串口模塊設(shè)計(jì)
使用集成于Quartus II軟件中SOPC Builder工具可以很方便構(gòu)建Nios II軟核。本系統(tǒng)中FPGA外設(shè)使用了HY57V641620FTP-6的SDRAM芯片作為數(shù)據(jù)存儲(chǔ)器和EPCS4芯片作為程序存儲(chǔ)器,由此軟核需要構(gòu)建的模塊有:CPU處理器、EPCS控制器、SDRAM控制器、定時(shí)器控制器,8個(gè)UART控制器以及其他各種IO接口[3]。
系統(tǒng)中要求同時(shí)接收8個(gè)慣導(dǎo)組件輸出的8路串口數(shù)據(jù),所以要在軟核中構(gòu)建8個(gè)UART模塊,設(shè)置好串口波特率和中斷優(yōu)先級。外部電平轉(zhuǎn)換電路采用MAX488串口芯片,將422電平轉(zhuǎn)化成UART接口的TTL電平,這樣串口模塊就能完成數(shù)據(jù)的收發(fā)。通常MCU很少帶有4個(gè)以上的串口,涉及多串口通訊時(shí)不可避免要進(jìn)行串口擴(kuò)展,而在Nios II軟核系統(tǒng)中,串口數(shù)量和波特率都可以自由調(diào)整,同時(shí)串口模塊集成于FPGA內(nèi)部,免去了使用多串口卡或串口擴(kuò)展芯片帶來的復(fù)雜電路,使整個(gè)系統(tǒng)的可靠性和穩(wěn)定性得到了保證。
USB模塊采用Cypress公司的CY7C68013A-128AXC型號(hào)的USB芯片作為該模塊的核心。該芯片集成USB2.0收發(fā)器,串行接口引擎(SIE)和增強(qiáng)型8051內(nèi)核,并具有4KB FIFO存儲(chǔ)器,支持8位或16位數(shù)據(jù)接口,內(nèi)部SIE可以工作在全速(12Mb/s)和高速(480Mb/s)傳輸速率下[4]。
CY7C68013與外部的接口主要有三種方式:端口模式、GPIF控制器模式和SLAVE FIFO模式。其中SLAVE FIFO模式是一種從屬模式,外部邏輯或外部處理器可以直接連接并控制FIFO端點(diǎn),不需要內(nèi)部8051的參與就能完成數(shù)據(jù)的高速傳輸[5]。系統(tǒng)選用了SLAVE FIFO接口模式與FPGA連接。由于FPGA中已經(jīng)建立了NIOS軟核處理器,其工作頻率可達(dá)200MHz以上,遠(yuǎn)超過8051內(nèi)核的最高工作頻率48MHz,數(shù)據(jù)處理和傳輸完全由NIOS軟核處理器控制完成,避免了在串口波特率較高時(shí),8051工作頻率有限情況下可能導(dǎo)致的數(shù)據(jù)出錯(cuò)和丟失情況。
CY7C68013中包含了3個(gè)64字節(jié)的端點(diǎn)緩沖區(qū)(EP0、EP1IN和EP1OUT)和4KB FIFO緩沖區(qū)。FIFO中的EP2、4、6、8用于高帶寬數(shù)據(jù)傳輸,端點(diǎn)最大緩沖1024字節(jié)。由此采用了EP2、6兩個(gè)端點(diǎn)用來分別傳輸脈沖和串口數(shù)據(jù),使用EP0端點(diǎn)用于上位機(jī)和FPGA之間控制命令的發(fā)送。
SLAVE FIFO模式下FPGA與USB的接口如圖3所示。
圖3 FPGA與USB接口連接圖
其中PA3用于提供中斷信號(hào)進(jìn)入模式選擇,F(xiàn)IFO0和FIFO1用于選通FIFO端點(diǎn),PKEND、FLAGD、FLAGB用于設(shè)定引腳的工作方式,PC[7:0](ADR[7:0])用于向FPGA發(fā)送模式選擇命令,DATA[15:0]用于發(fā)送數(shù)據(jù)。
系統(tǒng)軟件設(shè)計(jì)主要包括三部分:NIOS中下位機(jī)程序、USB固件程序和上位機(jī)應(yīng)用程序。
5.1 NIOS下位機(jī)程序設(shè)計(jì)
NIOS II軟核中的下位機(jī)程序是整個(gè)系統(tǒng)運(yùn)行的核心,使用NIOS II IDE集成開發(fā)環(huán)境進(jìn)行開發(fā),主要包括三部分:模式選擇程序,脈沖數(shù)據(jù)接收程序和串口數(shù)據(jù)接收程序。
(1)模式選擇程序
選擇脈沖和串口兩種模式,另外還有采集脈沖周期和串口波特率的選擇。通過設(shè)定USB PA3腳引入一個(gè)外部PIO中斷(最高優(yōu)先級)進(jìn)入到中斷程序中,然后讀取PC[7:0]上的8位二進(jìn)制數(shù)值,使用該值的最高位作為模式選擇判斷位(1為串口,0為脈沖),低4位代表波特率選擇,中間3位代表采集周期選擇。
(2)脈沖接收程序
依靠在軟核中建立的定時(shí)器控制器設(shè)定定時(shí)器每5ms中斷一次,進(jìn)入定時(shí)器中斷服務(wù)程序后,首先用API函數(shù)向計(jì)數(shù)器寫入鎖存信號(hào)en,然后依次向計(jì)數(shù)器的選通地址端寫入48路脈沖的地址,根據(jù)該地址讀取48路脈沖計(jì)數(shù)值并分別存儲(chǔ)起來,最后主程序?qū)⒂?jì)數(shù)值發(fā)送到USB FIFO中。
(3)串口接收程序
串口模塊要求接收8路RS-422數(shù)據(jù),每路數(shù)據(jù)是一個(gè)49字節(jié)的數(shù)據(jù)幀,實(shí)驗(yàn)中使用單片機(jī)數(shù)據(jù)源每5ms發(fā)送一次。設(shè)定頭兩個(gè)字節(jié)為幀頭,中間46個(gè)字節(jié)為慣導(dǎo)組件的狀態(tài)信息數(shù)據(jù),最后一個(gè)字節(jié)為中間46字節(jié)的校驗(yàn)和。8路串口數(shù)據(jù)通過中斷方式按字節(jié)進(jìn)行接收,按中斷優(yōu)先級的高低分別響應(yīng)。接收數(shù)據(jù)時(shí)首先判斷幀頭,然后接收數(shù)據(jù)存放在緩沖區(qū)并與校驗(yàn)和對比,確認(rèn)無誤后主程序?qū)?shù)據(jù)發(fā)送到USB的FIFO中。
下位機(jī)程序流程圖如圖4所示。
5.2 USB固件程序設(shè)計(jì)
USB固件程序是用來控制芯片完成所設(shè)定的功能,系統(tǒng)中使用了CY7C68013的SLAVE FIFO接口模式。首先CY7C68013上電之后會(huì)調(diào)用TD_Init()函數(shù)來完成初始化狀態(tài)寄存器的配置[5],包括選擇接口模式、外部主控制器使能、以及端點(diǎn)的方向、緩沖倍數(shù)、發(fā)送方式的配置等。
下一步對各端點(diǎn)的FIFO進(jìn)行設(shè)置,啟用EP2端點(diǎn)接收脈沖的數(shù)據(jù),16位計(jì)數(shù)器48路脈沖5ms的數(shù)據(jù)量為48個(gè)字節(jié),所以設(shè)定包的大小為960字節(jié)(最大1024字節(jié))。啟用EP6端點(diǎn)接收串口的數(shù)據(jù),下位機(jī)處理過程中對每路串口的每幀數(shù)據(jù)作了1個(gè)字節(jié)的標(biāo)記,每一路變成50個(gè)字節(jié),8路串口每5ms數(shù)據(jù)量為400字節(jié),設(shè)定包的大小為800字節(jié)(最大1024字節(jié))。設(shè)定程序如下所示:
EP2AUTOINLENH=0x03;
SYNCDELAY;
EP2AUTOINLENL=0xC0;//設(shè)置包大小為960字節(jié),接收脈沖數(shù)據(jù)
SYNCDELAY;
EP6AUTOINLENH=0x03;
SYNCDELAY;
EP6AUTOINLENL=0x20;//設(shè)置包大小為800字節(jié),接收串口數(shù)據(jù)
SYNCDELAY;
圖4 下位機(jī)程序流程圖
上位機(jī)對下位機(jī)發(fā)送命令(模式選擇等)通過Cypress標(biāo)準(zhǔn)固件框架使用控制傳輸來實(shí)現(xiàn),只需在DR_VendorCmnd函數(shù)中加入處理過程即可。這部分程序可以利用自定義上位機(jī)發(fā)送的SETUPDAT令牌包來傳送8位二進(jìn)制數(shù)值命令。
CY7C68013屬于EZ-USB FX2芯片系列,其配套的設(shè)備驅(qū)動(dòng)程序EzUsb.inf為EZ-USB通用驅(qū)動(dòng)程序(GPD),該文件包含了硬件設(shè)備驅(qū)動(dòng)程序的安裝信息[6],安裝完成后計(jì)算機(jī)將獲取的USB外設(shè)信息與EzUsb.inf文件中信息進(jìn)行匹配,找到相應(yīng)的USB設(shè)備驅(qū)動(dòng)程序。
5.3 上位機(jī)應(yīng)用程序設(shè)計(jì)
上位機(jī)程序開發(fā)采用VC++6.0中的MFC進(jìn)行編程開發(fā),VC編程的應(yīng)用程序利用USB總線接收數(shù)據(jù),再由MFC實(shí)現(xiàn)對數(shù)據(jù)的接收、解算處理、顯示和保存。
上位機(jī)程序訪問USB設(shè)備時(shí),首先調(diào)用Win 32函數(shù)CreateFile()來得到USB設(shè)備句柄,通過DeviceIoControl()函數(shù)訪問設(shè)備驅(qū)動(dòng)程序[7],該函數(shù)發(fā)送命令到設(shè)備驅(qū)動(dòng)程序,連接USB設(shè)備,然后通過USB總線接收上傳的數(shù)據(jù)。
上位機(jī)程序的流程圖如圖5所示。
圖5 上位機(jī)程序流程圖
采集系統(tǒng)的測試在實(shí)驗(yàn)室中進(jìn)行,使用SP1641D信號(hào)發(fā)生器作為脈沖信號(hào)源,用多路開關(guān)板擴(kuò)展為48路同源信號(hào)。信號(hào)源輸出信號(hào)為575Hz時(shí),測量結(jié)果如圖6所示。在實(shí)驗(yàn)室多次測量后發(fā)現(xiàn),在低頻時(shí)脈沖計(jì)數(shù)值準(zhǔn)確,高頻時(shí)脈沖計(jì)數(shù)值有1-2個(gè)誤差,總體誤差率在允許范圍內(nèi),符合慣導(dǎo)組件的測試要求。
串口測試使用了ST89C52單片機(jī)構(gòu)成的多串口信號(hào)發(fā)生器,可以輸出RS-422和RS-232串口信號(hào),測試結(jié)果如圖7所示,接收的數(shù)據(jù)準(zhǔn)確無誤,8路串口同步率良好。
這種針對慣導(dǎo)組件測試所采用的設(shè)計(jì),集成脈沖測量和串口數(shù)據(jù)接收于同一系統(tǒng),可對多個(gè)產(chǎn)品的不同信號(hào)輸出同時(shí)測試,節(jié)約了資源,降低了成本。與傳統(tǒng)的測試系統(tǒng)相比,SOPC設(shè)計(jì)高度集成,降低了電路復(fù)雜度,提高了測試效率和系統(tǒng)的可靠性、穩(wěn)定性。同時(shí)本系統(tǒng)安裝簡便,操作界面人性化,后期便于維護(hù)升級,可以作為慣導(dǎo)組件測試的新設(shè)備。
圖6 48路脈沖測量結(jié)果
圖7 8路串口數(shù)據(jù)接收結(jié)果
[1]張志文,趙浩.慣導(dǎo)組件的脈沖輸出測控系統(tǒng)[J].西安:西安工業(yè)大學(xué)學(xué)報(bào),2009,29(5):461.
[2]Altera Corporation.CycloneⅢDevice Handbook[DB/OL].2007.07.http://www.altera.com.
[3]李蘭英.Nios II嵌入式軟核SOPC設(shè)計(jì)原理及應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2006:26-184.
[4]錢峰.EZ-USB FX2單片機(jī)原理、編程及應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2006.
[5]CypessSemiconductor Corporation.Impementing an 8-bit Asynchronous Peripheral Interface Utilizing the EZ-USB FX GPIF/Slave FIFOs[M/OL].2002.
[6]駱毅.撓性陀螺組合脈沖測試及系統(tǒng)標(biāo)定[D].西安:西安工業(yè)大學(xué),2012:32-43.
[7]孫鑫,余安平.VC++深入詳解[M].北京:電子工業(yè)出版社,2007:453-568.
[8]夏宇聞.Verilog數(shù)字系統(tǒng)設(shè)計(jì)教程(第2版)[M].北京:北京航空航天大學(xué)出版社,2008.
[9]袁志軍.基于FPGA的高速率多串口擴(kuò)展的設(shè)計(jì)與實(shí)現(xiàn)[D].哈爾濱:哈爾濱工業(yè)大學(xué),2008.
Research on Testing System for Inertial Navigation Com ponents Based on FPGA and NIOS
ZHANG Zhi-wen,PENG Yan
(School of Electronics Information Engineering,Xi’an Technological University,Xi’an 710032,China)
For the requirement of measuring the output of multiple signals in the test of inertial navigation components,a dual-mode data acquisition system of inertial component is designed on the basis of FPGA and NIOS IIsoft-core.The system takes FPGA and USB CY7C68013 as its core to count the 48 ports pluses outputted by 4 inertial navigation components and receive serial port data of 8 ports outputted by 8 inertial navigation components.In the end,the collected data will be uploaded to a controlling computer through a USB chip,and saved,processed,displayed by the computer.This design reduces complexity of the acquisition circuit,raisesmeasurement efficiency and promotes the reliability and stability of the acquisition system.
Inertial navigation component;FPGA;NIOS IIsoft-core;USB chip;Data collection
10.3969/j.issn.1002-2279.2014.01.023
TP274
:A
:1002-2279(2014)01-0085-05
張志文(1957-),男,陜西西安市人,教授,碩士生導(dǎo)師,主研方向:計(jì)算機(jī)測控技術(shù)、智能化儀表。
2013-09-18