多慣組脈沖輸出同步計數(shù)系統(tǒng)設(shè)計
摘要:為滿足某慣導(dǎo)設(shè)備生產(chǎn)廠家對多個慣組產(chǎn)品進(jìn)行同時測試的需求,設(shè)計了一種對于多路脈沖信號同步計數(shù)的測試系統(tǒng)。(方法)測試系統(tǒng)以FPGA芯片和USB芯片CY68013為核心,對4個慣導(dǎo)組件輸出的48路脈沖信號,每路進(jìn)行無縫計數(shù),每4ms為一個計數(shù)單元。并利用USB總線將每一個計數(shù)單元的計數(shù)值上傳到測控計算機,上位機程序進(jìn)行實時的處理、保存和顯示。(方法)測試系統(tǒng)滿足了對多個慣組產(chǎn)品同時測試的要求,提高了測試效率。
關(guān)鍵字:慣導(dǎo)組件;USB;CY68013;FPGA
慣組產(chǎn)品是現(xiàn)代慣導(dǎo)系統(tǒng)最核心的信息源,由陀螺儀和加速度計組合而成。慣組產(chǎn)品工作時直接輸出脈沖信號。測試過程采用專用測試平臺,將產(chǎn)品固定在帶溫箱的三軸轉(zhuǎn)臺上,通過在不同的溫度下改變轉(zhuǎn)臺的位置和速率,由測試系統(tǒng)對其輸出的脈沖信號進(jìn)行計數(shù),再對計數(shù)值根據(jù)數(shù)學(xué)模型進(jìn)行處理,從而得到慣組產(chǎn)品的性能參數(shù)。由于溫度是影響慣導(dǎo)組件的主要因素之一,所以需要在多個溫度點下,對其進(jìn)行多次測試。而每個溫度點需要4個小時的保溫。因而完成一個產(chǎn)品的標(biāo)定,一般需要三天左右的時間才能完成。針對這種情況,本文提出了一種多慣組同時測量的方案,利用FPGA對脈沖信號進(jìn)行采集,再通過USB總線把采的數(shù)據(jù)發(fā)送到PC機上進(jìn)行數(shù)據(jù)歸算。與傳統(tǒng)的測量系統(tǒng)相比,本系統(tǒng)可以對4個慣導(dǎo)組件的48路脈沖數(shù)據(jù)進(jìn)行同步計數(shù)并輸出,進(jìn)而有效地縮短測試周期,提高測試效率。
1 測試系統(tǒng)組成
多慣組脈沖測試系統(tǒng)是由下位機和上位機兩個部分構(gòu)成。下位機由FPGA和USB接口電路組成,實現(xiàn)對脈沖信號的計數(shù)和數(shù)據(jù)的接收。上位機是MFC程序設(shè)計的界面,對接收到的數(shù)據(jù)進(jìn)行實時的處理、顯示和保存。由于本系統(tǒng)是同時接收4套慣組48路脈沖信號,所包含的計數(shù)器個數(shù)多,計數(shù)頻率高,并且分別對48路信號獨立測量,要求較高的可靠性,所以系統(tǒng)采用FPGA來實現(xiàn)控制邏輯及計數(shù)模塊的功能。系統(tǒng)選用Altera公司的Cyclone IIEP2C89208C8N型號的FPGA芯片。在數(shù)據(jù)傳輸方面,選用Cypress公司的FX2LP CY68013芯片作為USB傳輸模塊。采集系統(tǒng)框圖如圖1所示。
在圖1中,通過Verilog語言對48路同步計數(shù)模塊進(jìn)行設(shè)計,實現(xiàn)對48路脈沖信號的同步計數(shù),將接收到的數(shù)據(jù)通過USB芯片CY68013發(fā)送到PC機,由PC機對接收到的數(shù)據(jù)進(jìn)行處理,脈沖信號的計數(shù)是由無縫計數(shù)器,每隔4ms向48路計數(shù)模塊發(fā)送相應(yīng)的地址,獲得48路脈沖計數(shù)模塊的計數(shù)值,再通過USB總線把數(shù)據(jù)發(fā)送到PC機上。
FX2LP CY68013芯片有PORTS、Slave FIFOs和GPIF三種接口方式:PORTS模式以CY68013自帶的8051核來進(jìn)行端口FIFO的讀寫,其優(yōu)點是開發(fā)簡單,缺點是傳輸速度有限;Slave FIFOs模式是使用外部芯片的邏輯來直接操作端口FIFO,其優(yōu)點是端口FIFO操作靈活,缺點是傳輸速度依賴于外部控制邏輯的速度;GPIF模式是使用波形編輯工具生成的波形信號來進(jìn)行端口FIFO的讀寫,其優(yōu)點是傳輸速度最高,缺點是讀寫邏輯單一,不容易靈活控制。因為是對48路脈沖信號進(jìn)行實時采樣計數(shù),且每一路脈沖信號采用一個16位計數(shù)器,采樣周期為4毫秒,即每秒要采集250次。但在實際使用中發(fā)現(xiàn),在PORTS模式下,由于8051內(nèi)核執(zhí)行速度有限,在極短的中斷時間內(nèi)有時會不能完成其數(shù)據(jù)處理和傳輸?shù)娜蝿?wù),此種狀態(tài)下USB端就會出現(xiàn)死循環(huán)狀態(tài)。但在Slave FIFO或CPIF模式下,傳輸和接收的端口將不經(jīng)過8051內(nèi)核干涉即可同片外高速互傳數(shù)據(jù),從而提高接收發(fā)送串行信號的效率與可靠性。由于GPIF模式下的編輯波形只能進(jìn)行讀寫操作,而在Slave FIFOs的模式下狀態(tài)機可以對數(shù)據(jù)進(jìn)行簡單的處理。因此,本系統(tǒng)使用Slave FIFOs的傳輸模式。
2 系統(tǒng)的FPGA設(shè)計
2.1 48路脈沖計數(shù)模塊設(shè)計
系統(tǒng)的48路脈沖計數(shù)模塊設(shè)計是通過使用Verilog語言編寫的16位計數(shù)器,可以對慣導(dǎo)組件輸出的信號分別進(jìn)行不間斷計數(shù),計數(shù)值讀取過程不影響計數(shù)器的正常計數(shù),該模塊data_in[47…0]是48路慣導(dǎo)組件的脈沖輸入,add_in [6…0]是每個脈沖輸入通道的地址,data_out[15…0]是計數(shù)單元的計數(shù)值輸出。[!--empirenews.page--]
2.2 時鐘分頻模塊設(shè)計
本系統(tǒng)采用50 MHz有源晶振,EP2C8Q208C8N內(nèi)部擁有兩個鎖相環(huán),通過倍頻使頻率達(dá)到400MHz,然后連接一個分頻模塊為狀態(tài)機提供周期為4ms的計數(shù)值鎖存信號(clk_lock)和一個狀態(tài)機跳轉(zhuǎn)觸發(fā)信號(clk_state)。
2.3 狀態(tài)機模塊設(shè)計
狀態(tài)機模塊主要包括兩個部分:數(shù)據(jù)處理部分和FIFO控制邏輯部分。
2.3.1 狀態(tài)機的數(shù)據(jù)處理部分
狀態(tài)機在計數(shù)值鎖存信號(clk_lock)上升沿到來時會鎖存計數(shù)器此刻的計數(shù)值,并在狀態(tài)機的下一個狀態(tài)將計數(shù)值存儲到data-new的寄存器型變量中并進(jìn)行求差運算,接著將被減數(shù)與減數(shù)在下一個狀態(tài)進(jìn)行更新,最后將求出來的差值交給FIFO控制邏輯進(jìn)行發(fā)送。每個計數(shù)單元計數(shù)值求差的狀態(tài)機原理圖如圖3所示。
2.3.2 狀態(tài)機的FIFO控制邏輯部分
FPGA控制邏輯的主要作用足通過其內(nèi)部的狀態(tài)機直接操作CY68013的FIFO來進(jìn)行讀寫控制。SLOE、SLRD和SLWR作為芯片的讀寫信號與使能控制信號。INPKTEND是FPGA主動命令USB芯片向上位PC發(fā)送數(shù)據(jù)的控制端(當(dāng)FIFO上的數(shù)據(jù)小于規(guī)定大小而又要強制上傳給PC時使用)。FD為雙向的數(shù)據(jù)傳輸接口。FLAGA、FLAGB、FLAGC、FLAGD四個標(biāo)志位能夠指示FIFO的空滿程度,為數(shù)據(jù)的連續(xù)存取提供了可靠的保證。FPGA_ADR0和FPGA ADR1用于選擇內(nèi)部4個緩沖端點之一。IFCLK提供時鐘信號(僅用于同步Slave FIFOs模式)。FPGA的引腳控制這些端口,達(dá)到對USB端的存儲FIFO進(jìn)行操作的目的。由于異步Slave FIFOs模式的讀寫狀態(tài)簡單,穩(wěn)定性好。本系統(tǒng)選擇異步方式來讀取FIFO。
實現(xiàn)異步Slave FIFO的寫操作的狀態(tài)機如圖7所示。其狀態(tài)轉(zhuǎn)移進(jìn)程如下:
IDLE:此狀態(tài)為空閑狀態(tài),什么也不做;當(dāng)寫事件發(fā)牛時(即CLK_LOCK的上升沿到來時),進(jìn)狀態(tài)1;
狀態(tài)1:使FIFOADR[1:0]指向IN FIFO(即就是選擇CY68013的四個大數(shù)據(jù)量FIFO中的一個,固件程序已將此FIFO配置為寫模式),進(jìn)狀態(tài)2;
狀態(tài)2:如果FIFO滿標(biāo)志為假(即FLAGC引腳為高電平時),則進(jìn)狀態(tài)3;否則在本狀態(tài)等待;
狀態(tài)3:驅(qū)動數(shù)據(jù)到數(shù)據(jù)線上,使SLWR有效(低電平),一個CLK_STATE后再無效(高電平),以使FIFO寫指針遞增,進(jìn)狀態(tài)4;
狀態(tài)4:如需傳輸更多的數(shù),返回狀態(tài)2,否則進(jìn)狀態(tài)IDLE。
狀態(tài)跳轉(zhuǎn)示意圖如圖4所示:
使用QuartusII對FIFO的控制邏輯進(jìn)行時序仿真如圖5所示。
2.4 FPGA整體模塊設(shè)計
FPGA整體模塊邏輯電路圖如圖6所示。
[!--empirenews.page--]
3 系統(tǒng)軟件設(shè)計
3.1 CY68013的固件程序設(shè)計
擔(dān)任著一個系統(tǒng)最基礎(chǔ)工作的程序才可稱之為固件程序,比如計算機主板上的BIOS。固件程序的作用就是輔助硬件完成預(yù)期的設(shè)備功能。如下圖7所示,同件程序在CY68013上電之后,首先通過調(diào)用TD_Init()函數(shù)來完成對多個狀態(tài)寄存器的配置。接著,固件程序會不停檢查FIFO中寫入的數(shù)據(jù)大小,當(dāng)足夠一包的數(shù)據(jù)時自動發(fā)送數(shù)據(jù)包。當(dāng)發(fā)生最后一包的數(shù)據(jù)不足一包的大小時,INPKTEND引腳在接收到信號后會強制打包上傳FIFO中的數(shù)據(jù)。
3.2 應(yīng)用程序設(shè)計
應(yīng)用程序的開發(fā)采用MFC框架來設(shè)計應(yīng)用程序,實現(xiàn)從USB芯片的FIFO中讀取一定大小的數(shù)據(jù)包并進(jìn)行實時的處理,以及在用戶界面上實時地顯示數(shù)據(jù)。由于文巾的數(shù)據(jù)包為每4ms的實時數(shù)據(jù),數(shù)據(jù)包讀取頻率很高,因此.應(yīng)用程序采用多個函數(shù)連續(xù)讀取多個數(shù)據(jù)包以后再去啟動數(shù)據(jù)處理和顯示的線程,通過實驗發(fā)現(xiàn)這樣可以有效地降低數(shù)據(jù)處理線程的啟動頻率,保證MFC應(yīng)用程序的穩(wěn)定運行。首先,對所有的函數(shù)類進(jìn)行初始化,并調(diào)用Win32函數(shù)CreateFile來得到設(shè)備句柄,根據(jù)設(shè)備句柄來連接USB設(shè)備。通過接收USB總線的數(shù)據(jù)包,來獲得實時的數(shù)據(jù)。然后,再對實時的4ms的數(shù)據(jù)進(jìn)行處理,求出每秒的脈沖數(shù)并進(jìn)行實時的顯示和保存為txt文檔。應(yīng)用程序數(shù)據(jù)采集流程圖如圖8所示。
4 實驗結(jié)果
本系統(tǒng)的測試實驗是使用SP1641D信號發(fā)生器作為脈沖信號源,將此單路脈沖信號使用多路開關(guān)板擴展為48路同源的脈沖信號,當(dāng)信號源輸出信號為771Hz方波信號時,測量結(jié)果以及應(yīng)用程序界面如圖9所示。圖中T (S)為測試進(jìn)行中的實時時間,其它各列為對應(yīng)的4個慣導(dǎo)組件的48路的脈沖計數(shù)值。通過實驗驗證,本系統(tǒng)能夠滿足對4個慣導(dǎo)組件的48路脈沖信號進(jìn)行多路同步計數(shù)的要求。
5 結(jié)束語
文中改進(jìn)后的測試系統(tǒng),具有操作簡單,穩(wěn)定性及實時性好等特點,該系統(tǒng)設(shè)計可作為慣導(dǎo)組件的新型測量設(shè)備,提高慣導(dǎo)組件測試系統(tǒng)的效率,并且能自動輸出數(shù)據(jù)文檔,方便操作和管理。SlaveFIFOs模式可以有效使用USB2.0的帶寬,很好地滿足了在數(shù)據(jù)傳輸速度上的要求。VC與Matlab的混編充分利用了兩個編程語言各自的優(yōu)勢。