張志文,劉 斌
(西安工業(yè)大學(xué)電子信息工程學(xué)院,陜西 西安 710032)
慣導(dǎo)組件一般是由陀螺儀和加速度計(jì)組合而成[1]。有的慣導(dǎo)組件直接輸出脈沖信號(hào),有的則是通過串行總線接口輸出數(shù)字信號(hào)。對(duì)于慣導(dǎo)組件的標(biāo)定,一般是將其固定在三軸轉(zhuǎn)臺(tái)上,通過在不同的溫度下改變轉(zhuǎn)臺(tái)的位置和速率,由檢測(cè)系統(tǒng)對(duì)其輸出的脈沖信號(hào)或串口數(shù)字信號(hào)進(jìn)行測(cè)量,再對(duì)測(cè)量值進(jìn)行相應(yīng)的數(shù)學(xué)處理,從而得到慣導(dǎo)組件的性能參數(shù)。由于慣導(dǎo)組件的參數(shù)對(duì)溫度非常敏感,所以需要在多個(gè)溫度點(diǎn)下對(duì)其進(jìn)行標(biāo)定。而每個(gè)溫度點(diǎn)需要保溫4h后才能進(jìn)行測(cè)量,因而完成一個(gè)產(chǎn)品的標(biāo)定一般需要3d左右。國(guó)外采集方法一般是通過PCI卡來實(shí)現(xiàn)數(shù)據(jù)的采集,該方法對(duì)計(jì)算機(jī)要求較高,需要計(jì)算機(jī)有較多的PCI卡槽,且不適合野外作業(yè)[1]。國(guó)內(nèi)一般是通過PFGA和CY7C68013-128AC的USB來實(shí)現(xiàn)12路的脈沖信號(hào)采集[1],由于該USB內(nèi)置的是8位的51內(nèi)核,大大降低了USB的傳輸速度。對(duì)于串口的數(shù)據(jù)采集,一般的MCU都很少能擁有4個(gè)串口,所以一般需要通過兩個(gè)MCU來完成[2],這樣不但增加了電路的復(fù)雜性,還降低了系統(tǒng)的可靠性。針對(duì)這種情況,本文提出了一種基于SOPC的設(shè)計(jì)方案[3-4],通過使用FPGA的32位的高速NIOS軟核,對(duì)脈沖信號(hào)或串口數(shù)據(jù)進(jìn)行采集,再通過USB總線把采集的數(shù)據(jù)發(fā)送到PC機(jī)上。
本系統(tǒng)使用SOPC的設(shè)計(jì)方案,通過Verilog語言對(duì)24路脈沖計(jì)數(shù)模塊進(jìn)行設(shè)計(jì),實(shí)現(xiàn)對(duì)24路脈沖信號(hào)的計(jì)數(shù),再調(diào)用SOPC Builder里的4個(gè)UART核實(shí)現(xiàn)同時(shí)對(duì)4路串口數(shù)據(jù)的接收。并通過在SOPC中添加NIOS軟核,實(shí)現(xiàn)對(duì)脈沖計(jì)數(shù)模塊和串口數(shù)據(jù)接收模塊的控制,將接收到的數(shù)據(jù)通過高速USB ISP1581發(fā)送到PC機(jī),由PC機(jī)對(duì)接收到的數(shù)據(jù)進(jìn)行處理,采集系統(tǒng)框圖如圖1所示。
圖1 數(shù)據(jù)采集系統(tǒng)框圖
在圖1中,脈沖信號(hào)的計(jì)數(shù)是NIOS軟核每隔5ms向24路計(jì)數(shù)模塊發(fā)送相應(yīng)的地址,獲得24路脈沖計(jì)數(shù)模塊的計(jì)數(shù)值,再通過USB總線把數(shù)據(jù)發(fā)送到PC機(jī)上。而串口數(shù)據(jù)則是通過NIOS,對(duì)UART核進(jìn)行設(shè)置,確定其中斷優(yōu)先級(jí)和波特率,然后通過中斷方式接收串口數(shù)據(jù),再通過USB總線發(fā)送到PC機(jī)。
該測(cè)試系統(tǒng)是由下位機(jī)和上位機(jī)兩個(gè)部分構(gòu)成。下位機(jī)由FPGA和USB接口電路組成,實(shí)現(xiàn)對(duì)脈沖信號(hào)的計(jì)數(shù)和串口數(shù)據(jù)的接收。而上位機(jī)是裝有Windows XP系統(tǒng)的PC機(jī),通過VC++6.0的程序設(shè)計(jì),對(duì)接收到的數(shù)據(jù)進(jìn)行實(shí)時(shí)地處理、顯示和保存。
本設(shè)計(jì)使用的FPGA芯片是ATMEL公司的EP2C8Q208C8N,它擁有非常豐富的邏輯單元,可以滿足設(shè)計(jì)內(nèi)核的需要。而且這款芯片內(nèi)部還擁有兩個(gè)鎖相環(huán),最高頻率可達(dá)250MHz,使得數(shù)據(jù)處理速度更快。
開發(fā)平臺(tái)使用了Quartus II 9.0,相比MAXPLUS II的開發(fā)平臺(tái),Quartus II 9.0的開發(fā)界面更加人性化,支持的芯片也更加豐富,最重要的是它增添SOPC builder,使得軟核的開發(fā)得到了應(yīng)用。該系統(tǒng)的24路脈沖計(jì)數(shù)模塊設(shè)計(jì)是通過使用Verilog語言實(shí)現(xiàn)的,可以對(duì)慣導(dǎo)組件輸出的信號(hào)分別計(jì)數(shù),如圖2所示。該模塊data_in[23..0]是24路慣導(dǎo)組件的脈沖輸入,add_in[4..0]是每個(gè)脈沖輸入通道的地址,data_out[15..0]是計(jì)數(shù)單元的計(jì)數(shù)值輸出。
串口數(shù)據(jù)接收電路的設(shè)計(jì),是通過在SOPC Builder里添加UART軟核實(shí)現(xiàn)的。在SOPC Builder里有很多的軟核可以調(diào)用,由于該設(shè)計(jì)需要4個(gè)串口同時(shí)對(duì)4個(gè)慣導(dǎo)組件輸出的4路串口數(shù)據(jù)進(jìn)行接收,而一般的處理器很少擁有4個(gè)串口。雖然有很多串口擴(kuò)展芯片可以對(duì)串口進(jìn)行擴(kuò)展,但需要在外部對(duì)電路進(jìn)行擴(kuò)展,不利于系統(tǒng)的可靠和穩(wěn)定工作,而且提高了系統(tǒng)的成本。SOPC Builder可以很好地解決這個(gè)問題,它是在FPGA內(nèi)部完成串口的設(shè)計(jì),只需要調(diào)用軟核就可以完成4個(gè)串口的拓展。電平轉(zhuǎn)電路使用MAX490,其作用是把422電平轉(zhuǎn)換為UART的TTL電平。為解決4路串口數(shù)據(jù)同時(shí)接收的問題,本系統(tǒng)對(duì)4個(gè)串口的中斷優(yōu)先級(jí)進(jìn)行了設(shè)置,串口1的中斷優(yōu)先級(jí)最高,并依次降低。UART通過中斷方式對(duì)字節(jié)進(jìn)行接收。當(dāng)接收到完整的一幀數(shù)據(jù),再由NIOS對(duì)不同串口的數(shù)據(jù)添加不同的幀頭,并寫入到USB緩沖區(qū)中。待數(shù)據(jù)緩沖區(qū)存滿后,通過USB總線發(fā)送到PC機(jī)上。由于每路數(shù)據(jù)添加有不同的幀頭,所以PC機(jī)能夠識(shí)別不同串口的數(shù)據(jù),并進(jìn)行處理。
使用飛利浦公司的ISP1581USB作為USB接口電路。它是一款價(jià)格低,功能強(qiáng)大的通用串行總線(USB)接口器件,符合USB2.0規(guī)范,并且兼容USB1.1規(guī)范,具有高速的USB通信能力。其內(nèi)部集成了串行接口引擎(SIE)、PIE、8 kB的多結(jié)構(gòu)FIFO存儲(chǔ)器和數(shù)據(jù)接發(fā)器。擁有7個(gè)IN端點(diǎn),7個(gè)OUT端點(diǎn)和1個(gè)固定的控制IN/OUT端點(diǎn)。端點(diǎn)的雙緩沖配置增加了數(shù)據(jù)吞吐量,實(shí)現(xiàn)了實(shí)時(shí)數(shù)據(jù)的高速傳輸[5~6]。
圖2 24路脈沖計(jì)數(shù)邏輯電路圖
圖3是USB數(shù)據(jù)傳輸電路設(shè)計(jì)原理圖,由NIOS對(duì)USB芯片進(jìn)行讀寫操作,完成USB的枚舉和控制。由于該設(shè)計(jì)使用的USB芯片沒有其公司提供的通用驅(qū)動(dòng),還需要對(duì)驅(qū)動(dòng)程序進(jìn)行開發(fā)。本設(shè)計(jì)使用VC++6.0、DDK和Driver Studio對(duì)驅(qū)動(dòng)程序進(jìn)行開發(fā),與傳統(tǒng)使用VC++6.0和DDK對(duì)驅(qū)動(dòng)進(jìn)行開發(fā)相比,開發(fā)難度大大降低,減少了開發(fā)時(shí)間,提高了開發(fā)效率。
圖3 USB數(shù)據(jù)傳輸設(shè)計(jì)電路原理圖
NIOS軟核是本設(shè)計(jì)的核心,下位機(jī)所有的功能都是由NIOS軟核來控制的。NIOS軟核是一個(gè)32位的嵌入式微處理器,其性能超過了200DMI/s。而且支持多CPU的SOPC設(shè)計(jì),使得設(shè)計(jì)的方法更加靈活。
本系統(tǒng)使用NIOS控制的模塊有24路脈沖計(jì)數(shù)模塊和4路串口數(shù)據(jù)接收模塊,以及USB數(shù)據(jù)傳輸模塊。工作時(shí)需要對(duì)各個(gè)模塊進(jìn)行初始化,然后通過接收PC機(jī)發(fā)送的模式選擇命令,來接收脈沖數(shù)據(jù)或者串口數(shù)據(jù),把接收到的數(shù)據(jù)保存到相應(yīng)的緩存區(qū)里。再通過對(duì)USB進(jìn)行控制,設(shè)置USB包的大小和批次,把數(shù)據(jù)發(fā)送到PC機(jī),進(jìn)行處理、保存和顯示。
系統(tǒng)軟件設(shè)計(jì)主要由SOPC下位機(jī)程序設(shè)計(jì)和WindowsXP環(huán)境下的上位機(jī)應(yīng)用程序設(shè)計(jì)兩個(gè)部分組成。FPGA的SOPC主要作用是:系統(tǒng)上電后,FPGA通過SOPC里的各個(gè)軟核相互協(xié)作,把24路脈沖數(shù)據(jù)或者4路串口數(shù)據(jù)通過USB總線傳輸?shù)缴衔粰C(jī)。上位機(jī)應(yīng)用程序的設(shè)計(jì)是應(yīng)用VC++6.0提供的WIN32 API函數(shù),把下位機(jī)通過USB發(fā)送數(shù)據(jù)包傳遞到上位機(jī)。在WinsowsXP環(huán)境下利用MFC來設(shè)計(jì)程序界面,實(shí)現(xiàn)上位機(jī)實(shí)時(shí)對(duì)下位機(jī)傳輸?shù)臄?shù)據(jù)進(jìn)行處理、保存和顯示。
圖4是SOPC的程序設(shè)計(jì)流程圖。首先,對(duì)所有的模塊進(jìn)行初始化,包括對(duì)NIOS的I/O方向寄存器進(jìn)行初始化。其次,對(duì)USB進(jìn)行枚舉,如果枚舉成功,等待接收上位機(jī)的模式選擇命令,如果是串口數(shù)據(jù)模式,則對(duì)串口的波特率和中斷優(yōu)先級(jí)進(jìn)行初始化,然后對(duì)USB的數(shù)據(jù)包的大小進(jìn)行設(shè)置。如果是脈沖數(shù)據(jù)模式,則對(duì)定時(shí)器進(jìn)行設(shè)置,每5ms對(duì)計(jì)數(shù)模塊進(jìn)行數(shù)據(jù)的讀取,設(shè)置USB的包大小。設(shè)置完成后,下位機(jī)就開始等待數(shù)據(jù)。如果有數(shù)據(jù),就開始接收數(shù)據(jù),把接收的數(shù)據(jù)進(jìn)行相應(yīng)的處理,并通過USB總線發(fā)送到PC機(jī)。
圖4 SOPC的程序設(shè)計(jì)流程圖
圖5 應(yīng)用程序開發(fā)流程圖
圖6 24路脈沖數(shù)據(jù)測(cè)量結(jié)果
圖7 4路串口數(shù)據(jù)測(cè)量結(jié)果
本設(shè)計(jì)采用VC++6.0的MFC來設(shè)計(jì)應(yīng)用程序,通過MFC的編程設(shè)計(jì)用戶界面,再通過WIN32 API函數(shù)來讀取USB驅(qū)動(dòng)程序里的數(shù)據(jù)[7~8],并對(duì)所接收的數(shù)據(jù)進(jìn)行實(shí)時(shí)處理,應(yīng)用程序的開發(fā)流程如圖5所示。首先,對(duì)所有的函數(shù)類進(jìn)行初始化,并對(duì)USB的設(shè)備進(jìn)行查找,通過查找USB的GUID,來獲得需要的設(shè)備。然后,再選擇接收對(duì)應(yīng)模式下的數(shù)據(jù),等待數(shù)據(jù)的到來。當(dāng)數(shù)據(jù)到來,開始讀取存儲(chǔ)在USB驅(qū)動(dòng)里的數(shù)據(jù)包,把讀取到的數(shù)據(jù)進(jìn)行處理和保存,最后,把處理好的數(shù)據(jù)進(jìn)行實(shí)時(shí)的顯示。
對(duì)系統(tǒng)脈沖計(jì)數(shù)模式測(cè)量時(shí),使用SP1641D信號(hào)發(fā)生器作為脈沖信號(hào)源,當(dāng)信號(hào)源輸出信號(hào)為422 Hz方波信號(hào)時(shí),測(cè)量結(jié)果如圖6所示。通過實(shí)驗(yàn)驗(yàn)證,本系統(tǒng)能夠滿足對(duì)兩個(gè)慣導(dǎo)組件的24路脈沖信號(hào)的無縫計(jì)數(shù)要求。由于實(shí)驗(yàn)室條件所限,SP1641D信號(hào)發(fā)生器帶負(fù)載能力有限,導(dǎo)致系統(tǒng)有1個(gè)脈沖計(jì)數(shù)的偏差。對(duì)單路測(cè)試時(shí),實(shí)驗(yàn)結(jié)果沒有出現(xiàn)誤差。通過實(shí)驗(yàn)證明,該系統(tǒng)的誤差率在1.0×10-7內(nèi)。對(duì)系統(tǒng)串口數(shù)據(jù)模式測(cè)量時(shí),使用專用的422串口數(shù)字信號(hào)發(fā)生源,測(cè)量的結(jié)果如圖7所示。由于使用了專用的信號(hào)源,沒有出現(xiàn)誤差,能夠準(zhǔn)確地接收數(shù)據(jù),通過實(shí)驗(yàn)驗(yàn)證,本系統(tǒng)也能夠滿足對(duì)4個(gè)慣導(dǎo)組件的4路串口數(shù)據(jù)接收的設(shè)計(jì)要求。
基于SOPC的慣導(dǎo)組件多模式測(cè)量系統(tǒng),既解決了24路脈沖信號(hào)的計(jì)數(shù),又解決了4路串口的數(shù)據(jù)接收,實(shí)現(xiàn)了多模式的測(cè)量需求。由于大部分的設(shè)計(jì)都是在FPGA芯片內(nèi)部完成的,提高了系統(tǒng)的穩(wěn)定性和抗干擾能力,且同時(shí)降低了系統(tǒng)的成本。該設(shè)計(jì)完全滿足慣導(dǎo)系統(tǒng)的標(biāo)定,通過大量的實(shí)驗(yàn)證明,其可以作為慣導(dǎo)組件的新型測(cè)量設(shè)備。
[1]張志文,趙浩.慣導(dǎo)組件的脈沖輸出測(cè)控系統(tǒng)[J].西安:西安工業(yè)大學(xué)學(xué)報(bào),2009,29(5):461.
[2]張志文,劉美飛,李劍.基于USB的多串口測(cè)試系統(tǒng)軟件設(shè)計(jì)[J].西安:西安工業(yè)大學(xué)學(xué)報(bào),2012,5(32):400-405.
[3]夏宇聞.Verilog數(shù)字系統(tǒng)設(shè)計(jì)教程[M].2版.北京:北京航空航天大學(xué)出版社,2008:5-7.
[4]李蘭英.Nios II嵌入式軟核SOPC設(shè)計(jì)原理及應(yīng)用[J].北京:北京航空航天大學(xué)出版社,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應(yīng)用開發(fā)技術(shù)大全[M].北京:人民郵電出版社,2011(1):161-181.
[7]Microsoft Corp.Microsoft visual C++6.0 MFC library refer-ence[M].Microsoft Press,2007.
[8]孫鑫,余安萍.VC++深入詳解[M].北京:電子工業(yè)出版社,2006.