摘要:提出一種基于FPGA技術(shù)的多路模擬量、數(shù)字量采集與處理系統(tǒng)的設(shè)計(jì)方案,分析整個(gè)系統(tǒng)的結(jié)構(gòu),并討論FPGA內(nèi)部硬件資源的劃分和軟件的設(shè)計(jì)方案等。本設(shè)計(jì)方案外部電路結(jié)構(gòu)簡(jiǎn)單可靠,特別適用于多路檢測(cè)系統(tǒng)中,而且可以根據(jù)需要容易地對(duì)系統(tǒng)進(jìn)行擴(kuò)展,對(duì)于檢測(cè)系統(tǒng)來(lái)講具有一定的通用性。
關(guān)鍵詞:FPGA;A/D采集;數(shù)字量采集;Verilog HDL語(yǔ)言設(shè)計(jì)
0 引言
在電氣測(cè)控系統(tǒng)中,常常需要采集各種模擬量信號(hào)、數(shù)字量信號(hào),并對(duì)它們進(jìn)行相應(yīng)的處理。一般情況下,測(cè)控系統(tǒng)中用普通MCU(如51、196等單片機(jī)或控制型DSP)就可以完成系統(tǒng)任務(wù),但當(dāng)系統(tǒng)中要采集的信號(hào)量特別多時(shí)(特別是各種信號(hào)量、狀態(tài)量),僅僅靠用普通MCU的資源就往往難以完成任務(wù)。本文所提出的一種基于FPGA技術(shù)的模擬量、數(shù)字量采集與處理系統(tǒng),利用FPGA的I/O端口多,且可以自由編程支配、定義其功能的特點(diǎn),能很好地解決采集的信號(hào)路數(shù)多的問(wèn)題。
1 系統(tǒng)組成
本系統(tǒng)中的外圍電路設(shè)計(jì)相對(duì)簡(jiǎn)單、可靠,且鑒于FPGA自身的特點(diǎn),系統(tǒng)具有較好的擴(kuò)展性,在監(jiān)測(cè)和控制系統(tǒng)中也具有一定的通用性。系統(tǒng)主要包括:FPGA芯片區(qū)、多路選擇與A/D采樣電路、時(shí)鐘電源區(qū)、PROM代碼下載電路等幾部分。結(jié)構(gòu)示意如圖1所示。
2 FPGA芯片特點(diǎn)分析及資源分配
本系統(tǒng)中的FPGA是采用Altera公司的EP1C20F400。該系列的內(nèi)核采用1.5 V供電,I/O端口供電電壓為3.3V。
FPGA內(nèi)部資源劃分為四大部分,如圖2所示。
(1)FPGA邏輯運(yùn)算中心。用來(lái)接收其他各部分的數(shù)據(jù),并按照程序中設(shè)定的方案對(duì)所收到的數(shù)據(jù)進(jìn)行相應(yīng)的分析和處理。包括:對(duì)從MCU接收來(lái)的數(shù)據(jù)指令進(jìn)行分析,并按其指令要求進(jìn)行相應(yīng)操作;接收A/D采樣來(lái)的數(shù)據(jù),對(duì)數(shù)據(jù)進(jìn)行處理,存儲(chǔ)等工作。
(2)A/D控制單元。主要負(fù)責(zé)控制外部A/D芯片和多路開(kāi)關(guān)的選通時(shí)序,以及實(shí)現(xiàn)對(duì)A/D采要過(guò)程的合理控制,利用FPGA實(shí)現(xiàn)A/D自動(dòng)采集與數(shù)據(jù)存儲(chǔ)。
(3)數(shù)字量監(jiān)測(cè)控制單元。負(fù)責(zé)所有要監(jiān)視和控制的數(shù)字量的狀態(tài)數(shù)據(jù)的采集和控制命令的輸出。這一部分主要實(shí)現(xiàn)數(shù)字量輸出的控制、數(shù)字量輸入的存儲(chǔ)、數(shù)字量輸入狀態(tài)變化識(shí)別(中斷輸入)。
(4)FPGA接口邏輯控制單元。在FPGA內(nèi)部設(shè)計(jì)了FPGA模塊與外界MCU的接口單元,該部分主要用于同CPU的接口,使數(shù)據(jù)采集系統(tǒng)可以方便的與PCI、ISA及其他總線(xiàn)連接。
3 模擬量采集的控制與管理
在模擬量采集外圍電路中,A/D芯片采用的是AD公司的AD976A。多路模擬量是通過(guò)AD438的多路開(kāi)關(guān)后輸入到AD976A芯片的。
A/D采樣部分可分為:寄存器組、時(shí)鐘發(fā)生模塊、采樣控制狀態(tài)機(jī)、數(shù)據(jù)存儲(chǔ)模塊。
3.1 寄存器組
寄存器組用于設(shè)置/讀取A/D的工作狀態(tài),包括:采樣頻率設(shè)置寄存器、工作模式選擇寄存器、工作狀態(tài)寄存器及FIFO中斷寄存器。
(1)采樣頻率設(shè)置寄存器Frereg1,F(xiàn)rereg2(R/W):兩個(gè)16位寄存器,用于設(shè)置12路A/D的采樣頻率,其位含義如下:
頻率設(shè)置如下:
為保留位。
(2)工作模式選擇寄存器modereg(R/W)。176位寄存器,用于設(shè)置A/D的工作模式和啟動(dòng)、停止FPGA,各位的定義如下:
(3)FIFO中斷寄存器(fifo_int)(R):16位寄存器,用來(lái)記錄FIFO的狀態(tài),各位定義如下:
3.2 時(shí)鐘發(fā)生模塊
(1)把時(shí)鐘分頻為1 MHz時(shí)鐘,作為狀態(tài)機(jī)的工作時(shí)鐘;
(2)生成20 Hz,50 Hz,100 Hz時(shí)鐘并結(jié)合Frereg的值給出12路A/D啟動(dòng)中斷信號(hào)。
3.3 采樣控制狀態(tài)機(jī)
每個(gè)A/D用一個(gè)采樣控制狀態(tài)機(jī),用于自動(dòng)控制A/D的數(shù)據(jù)采集。其狀態(tài)轉(zhuǎn)換圖如圖3所示。
IDLE:空閑狀態(tài)。
READ:temp=intreg,進(jìn)入下一狀態(tài)
WAIT:等待中斷,如果中斷寄存器(intreg)不為0,進(jìn)入下一狀態(tài),否則返回READ。
SHIFT:根據(jù)temp[0]的值進(jìn)行下一步操作,若temp[0]=0則temp>>1,同時(shí)通道計(jì)數(shù)器(counter)加1;若temp[0]=1,則根據(jù)counter的值給出通道選擇信號(hào),進(jìn)入下一狀態(tài)。
START:發(fā)出RC=0信號(hào),進(jìn)入下一狀態(tài)。
W_BLISY:RC=1,等待A/D轉(zhuǎn)換結(jié)束信號(hào),如果結(jié)束,temp>>1,發(fā)出寫(xiě)FIFO信號(hào),進(jìn)入下一狀態(tài)。
END:無(wú)效FIFO寫(xiě)信號(hào),若temp=0,表明已無(wú)中斷,coutnter=0,進(jìn)入WAIT;否則,counter+1,進(jìn)入SHIFT。
3.4 數(shù)據(jù)存儲(chǔ)模塊
用于存儲(chǔ)A/D轉(zhuǎn)換結(jié)果,對(duì)于每路A/D用一個(gè)FIFO。
4 數(shù)字采集模塊
數(shù)字采集模塊主要完成數(shù)字量輸入的采集與存儲(chǔ),中斷信號(hào)狀態(tài)識(shí)別功能。其原理圖如圖4所示。
5 結(jié)論
本文提出了一種基于FPGA技術(shù)的多路模擬量、數(shù)字量采集與處理系統(tǒng),設(shè)計(jì)了相應(yīng)的外圍硬件電路和系統(tǒng)處理軟件。在仿真和綜合調(diào)試成功的基礎(chǔ)上,本系統(tǒng)成功用于某重點(diǎn)預(yù)研項(xiàng)目的控制系統(tǒng)試驗(yàn)中。試驗(yàn)結(jié)果表明,本系統(tǒng)成功地完成了對(duì)多路模擬量、數(shù)字量的采集處理任務(wù)。