- 相關(guān)推薦
基于FPGA的多路模擬量、數(shù)字量采集與處理系統(tǒng)
摘要:提出一種基于FPGA技術(shù)的多路模擬量、數(shù)字量采集與處理系統(tǒng)的設(shè)計方案,分析整個系統(tǒng)的結(jié)構(gòu),并討論FPGA內(nèi)部硬件資源的劃分和軟件的設(shè)計方案等。本設(shè)計方案外部電路結(jié)構(gòu)簡單可靠,特別適用于多路檢測系統(tǒng)中,而且可以根據(jù)需要容易地對系統(tǒng)進(jìn)行擴(kuò)展,對于檢測系統(tǒng)來講具有一定的通用性。關(guān)鍵詞:FPGA A/D采集 數(shù)字量采集 VHDL語言設(shè)計
在電氣測控系統(tǒng)中,常常需要采集各種模擬量信號、數(shù)字量信號,并對它們進(jìn)行相應(yīng)的處理。一般情況下,測控系統(tǒng)中用普通MCU(如51、196等單片機(jī)或控制型DSP)是可以完成系統(tǒng)任務(wù)的。但當(dāng)系統(tǒng)中要采集的信號量特別多時(特別是各種信號量、狀態(tài)量),僅僅靠用普通MCU的資源就往往難以完成任務(wù)。此時,一般只能采取多MCU聯(lián)機(jī)處理模式,或者靠其它芯片擴(kuò)展系統(tǒng)資源來完成系統(tǒng)的監(jiān)測任務(wù)。這樣做不僅增加了大量的外部電路和系統(tǒng)成本,而且大大增加了系統(tǒng)的復(fù)雜性,因而系統(tǒng)的可靠性就會受一定的影響,這顯然不是設(shè)計者所愿意看到的。本文所提出的一種基于FPGA技術(shù)的模擬量、數(shù)字量采集與處理系統(tǒng),利用FPGA的I/O端口多,且可以自由編程支配、定義其功能的特點,配以VHDL編寫的FPGA內(nèi)部執(zhí)行軟件,能很好地解決采集的信號路數(shù)多的問題。因為用VHDL編寫的執(zhí)行軟件內(nèi)部對各組數(shù)字量是按并行處理的,而且FPGA硬件的速度是ns級的,這是當(dāng)前任何MCU都難以達(dá)到的速度,因此本系統(tǒng)比其它系統(tǒng)更能實時地、快速地監(jiān)測信號量的變化。所以在狀態(tài)量特別多的監(jiān)測系統(tǒng)中,本系統(tǒng)將更能發(fā)揮出自身的優(yōu)勢。
本系統(tǒng)中的外圍電路設(shè)計相對簡單、可靠,且鑒于FPGA和VHDL語言自身的特點,系統(tǒng)具有較好的擴(kuò)展性,在監(jiān)測和控制系統(tǒng)中也具有一定的通用性。系統(tǒng)主要包括:FPGA芯片區(qū)、多路選擇與A/D采樣電路、交流信號調(diào)理電路、光耦隔離驅(qū)動電路、時鐘電源區(qū)、PROM代碼下載電路等幾部分。結(jié)構(gòu)示意如圖1所示。
圖1 基于FPGA技術(shù)的多路模擬量、數(shù)字量采集與處理系統(tǒng)框圖
1 FPGA芯片特點分析及資源分配
本系統(tǒng)中的FPGA是采用Xilinx公司的Spantan-II系理XC2S100-5 PQ208。該系列的內(nèi)核采用2.5V供電,工作頻率最高可達(dá)200 MHz;I/O端口供電電壓為3.3V,可以承受5V的輸入高電平。
Spartan-II系列具有豐富的I/O口資源,I/O口輸出緩沖器呆以接收高達(dá)24mA的拉電流和48mA的灌電流。缺省時,I/O輸出口的驅(qū)動能力的12mA,也可以設(shè)置成2、4、6、8、16或24mA。
FPGA內(nèi)部資源劃分為四大部分,如圖2所示。
①FPGA邏輯運算中心。用來接收其它各部分的數(shù)據(jù),并按照程序中設(shè)定的方案對所收到的數(shù)據(jù)進(jìn)行相應(yīng)的分析和處理。包括:對從MCU接收來的數(shù)據(jù)指令進(jìn)行分析,并按其指令要求進(jìn)行相應(yīng)操作;接收A/D采樣來的數(shù)據(jù),對數(shù)據(jù)進(jìn)行各種處理,如求其有效值,進(jìn)行FFT分析等;接收來自數(shù)字量的各種信息數(shù)據(jù),按設(shè)定的模式對其進(jìn)行判斷處理,并負(fù)責(zé)按接收的CPU指令輸出相應(yīng)的數(shù)字量。
②A/D控制單元。主要負(fù)責(zé)控制外部A/D芯片和多路開關(guān)的選通時序,以及實現(xiàn)對A/D采要過程的合理控制。因為,在FPGA芯片內(nèi)部,不像在MCU內(nèi)部那樣有豐富的外設(shè)控制資源供用戶使用,要用FPGA來控制A/D采樣過程的動作,必須用軟件來模擬實現(xiàn)各種A/D控制資源。利用這些自設(shè)定的A/D控制管理資源,配以合理的軟件控制時序,才能保證采樣過程的順利進(jìn)行。
③數(shù)字量監(jiān)測控制單元。負(fù)責(zé)所有要監(jiān)視和控制的數(shù)字量的狀態(tài)數(shù)據(jù)的采集和控制命令的輸出。這一部分同樣也需要用軟件來模擬實現(xiàn)各種對數(shù)字量的管理控制,只有配備較完備的外設(shè)控制管理單元,整個數(shù)字量的管理控制才能正確合理地進(jìn)行。
④FPGA接口邏輯控制單元。在FPGA內(nèi)部設(shè)計了FPGA模塊與外界MCU的接口單元,這雖然占去了一定的內(nèi)部資源,但是考慮到在一般的工程系統(tǒng)中不僅僅包括對各種信息的采集控制,還往往包括通信、顯示以及進(jìn)行一些復(fù)雜算術(shù)運行等等。FPGA雖然有其顯著的長處,但是在這些方面實現(xiàn)起來就往往不如普通MCU來得容易,因此考慮到本系統(tǒng)的通用性,在設(shè)計上增加了FPGA模塊與外界MCU的接口單元。
圖2 FPGA內(nèi)部資源分配示意圖
2 交流模擬量采集的控制與管理
在交流模擬量采集外圍電路中,A/D芯片采用的是BB公司的ADS774。多路交流量是通過4051的多路開關(guān)后輸入到ADS774芯片的。交流信號在進(jìn)入ADS774之前要經(jīng)過信號調(diào)量電路,調(diào)理成ADS774認(rèn)可的模擬信號。
FPGA實現(xiàn)的交流量采樣處理控制軟件由五部分組成:
第一部分為設(shè)定的3個與A/D采樣有關(guān)的16位指令寄存器組:A/D參數(shù)寄存器(ADPR)、輸出控制寄存器(ADOR)、A/D控制寄存器(ADCR)。
ADPR(XXXXXXXXX XXXXX XX)的各位定義如下:位1、位0選擇每周波采樣的點數(shù)(00表示每周波采16個點,01表示每周波采32個點,10表示每周波采64個點,11表示每周波采128個點)。位6~位2用來表示FPGA的時鐘頻率,00001表示時鐘頻率為1MHz,11111表示時鐘頻率為31MHz,00000表示時鐘頻率為32MHz。位15~位7表示所采樣信號的頻率,這9位表示的范圍為1Hz~512Hz。
ADOR是與FPGA輸出有關(guān)的寄存器。該寄存器的作用是:當(dāng)MCU要讀取某通道信號的信息時,F(xiàn)PGA應(yīng)該輸出該信號的哪次諧波電壓。如為FFFFH,表示DSP讀到的是該通道信號的有效值;如果ADOR的值為0010H,那么,DSP讀到的是該通道信號的2次諧波電壓。
ADCR寄存器控制A/D采樣的通道數(shù)的選擇以及與A/D采樣有關(guān)的寄存器的復(fù)位控制等,這也是考慮到系統(tǒng)的通用性而設(shè)計的:如000C表示采樣第11路交流模擬量電壓;0011則表示同時采樣前六路信號等等。
第二部分為設(shè)計產(chǎn)生A/D與CD4051芯片的控制信號。如在圖2中,在采樣12路交流模擬量的情況下,F(xiàn)PGA需要產(chǎn)生7路控制信號,這7路控制信號應(yīng)該滿足一定的時序要求。圖3給出了同時采樣前六路信號時FPGA的控制信號時序。
Abcs2[0,1,2]總線信號實際上是多路開關(guān)通道選擇的3個控制信號selA、selB、selC。需要說明的是,因為要進(jìn)行修正,在對6路交流信號采樣的同時,也對4051的+5V和AGND進(jìn)行了采樣,所以實際上測量的通道數(shù)為8路。
從圖3可看出,abcs2[0,1,2]總線信號每19.531 25μs加1,每156.25μs重新循環(huán)一次,滿足8路交流同步采樣的要求。
從25μs時刻的局部放大圖可以看出,當(dāng)(23.6μs時刻)4051選擇通道1時,ADS774的CS和R/C信號同時為低,延時0.5μs左右CE端出現(xiàn)上升沿(24.1μs),啟動A/D轉(zhuǎn)換,這符合ADS774的A/D轉(zhuǎn)換時序。需要指出,如果CE端直接接高電平,那么,R/C的下降沿將直接啟動A/D轉(zhuǎn)換。之所以用兩個信號來啟動A/D轉(zhuǎn)換,是為了減少A/D的誤觸發(fā)。考慮到4051的導(dǎo)通延時,所以在通道切換0,5μs后才啟動A/D轉(zhuǎn)換。圖3中沒有畫出4051的INH信號,在采樣前6路交流信號時,該信號一直為低。如果同時采樣12路信號,那么,abcs2[0,1,2]總線信號每9.765 625μs加1,每78.125μs重新循環(huán)1次;INH信號每78.125μs電平變化1次,用來選擇哪個4051導(dǎo)通。
第三部分為A/D輸入數(shù)據(jù)緩沖區(qū)和數(shù)字濾波模塊。A/D轉(zhuǎn)換完成后,ADS774的引腳STS給FPGA輸出轉(zhuǎn)換完成信號(低電平)。FPGA接收這一信號后,將產(chǎn)生讀ADS774的時序,把12位的A/D轉(zhuǎn)換數(shù)據(jù)讀入到數(shù)據(jù)緩沖區(qū)的二維數(shù)組datain(abcv)(sampn)中。Abcv為通道號,sampn表示周波信號中所采樣的第幾個點。將一個周期的12路信號采樣完后,置標(biāo)志ADFLAG為1,進(jìn)行數(shù)據(jù)的濾波處理。首先,對datain(abcv)(sampn)的值進(jìn)行修正;給定sampn,對前6路信號來說,datain(7)(sampn)存儲的是AGND的A/D轉(zhuǎn)換值,將datain(i)(sampn)減去datain(7)(sampn)的值存儲在datamid(i)(sampn)中(i=1,…,6)。與此類似,后六路的采樣值datain(i)(sampn)減去datain(15)(sampn)的值存儲在datamid(i)(sampn)(i=8,…,14)。然后,給定abcv,對datamid(abcv)(j)(j=0,…,15)這16個點的數(shù)據(jù)進(jìn)行FIR濾波,將FIR濾波后的數(shù)據(jù)存儲在datamd(abcv)(sampn)數(shù)組中。
第四部分是均方根有效值計量和FFT諧波分析模塊。輸入的數(shù)據(jù)經(jīng)過處理后,首先進(jìn)行均方根有效值的計算。給定abcv,先求出datamd(abcv)(j)(j=0,…,15)這16個點的平方和,將其存儲到datarsult(abcv)中。為了防止溢出,dataresult(abcv)定義28位的位矢量。然后把dataresult(abcv)中的數(shù)據(jù)進(jìn)行平方的運算,結(jié)果存儲在douts(i)中。開平方是利用函數(shù)sqt(a:std_logic_vector;b:integer)return std_logic_vector來實現(xiàn)的。a為要開方的全矢量數(shù)據(jù);整數(shù)b用來定義輸出位矢量的長度。該函數(shù)被封裝成一個包(package),符合自頂向下(TopDown)的HDL語言設(shè)計思想。douts(i)是信號量,由賦值語句douts(i)<=sqt(dataresult (i);16)(i=0,…,15)可以分別求出12路信號的有效值。電壓有效值和諧波分析完成以后,清ADFLAG為0。
第五部分為輸出緩沖器單元。當(dāng)DSP對FPGA產(chǎn)生讀時序(FPGACS為低電平且RD下降沿來到時),F(xiàn)PGA根據(jù)DSP的低五位地址線A0~A4的值(對應(yīng)于FPGA的chansel:std_logic_vector(4 downto 0)信號量),以及ADOR寄存器中的值,將相應(yīng)的數(shù)據(jù)送到數(shù)據(jù)總線上。比如,若chansel為(00010)2,ADOR中的值為FFFFH,那么,F(xiàn)PGA就會將通道2的有效值douts(2送到數(shù)據(jù)總線上。
圖3 FPGA的A/D控制信號時序圖
3 對數(shù)字量的控制與管理
在圖2系統(tǒng)中,假定要對16個負(fù)載進(jìn)行管理,每個負(fù)載包括1個控制輸出量和2個狀態(tài)返回量,因此共有16路的數(shù)字量輸出,32路的數(shù)字量輸入。
FPGA對數(shù)字量的管理軟件結(jié)構(gòu):
FPGA對數(shù)字量的控制管理也設(shè)置了三個16位的指令寄存器組。這三個指令寄存器的內(nèi)部地址為03H、04H和05H.03H為開關(guān)量輸出允許寄存器(KGER);04H為跳閘閉合寄存器(KGCR);05H為開關(guān)量開閉寄存器(KGIR)。
來自負(fù)載的總共32個狀態(tài)反饋信號(DIN00、DIN01……DIN31)分成16組,分別接到FPGA的16個信號量dini上(i=1,2,…,15)。dini是長度為2的位矢量std_logic_vector(1 downto 0),分別對應(yīng)于1個負(fù)載的兩個狀態(tài)反饋位。FPGA用16個進(jìn)程process(din1)、process(din1)……process(din15)來對輸入數(shù)字量敏感。當(dāng)dini的載位電平發(fā)生變化時,進(jìn)程啟動,F(xiàn)PGA結(jié)合MCU發(fā)送的控制指令,判斷負(fù)載的狀態(tài),并記錄在輸出數(shù)據(jù)緩沖區(qū)中。輸出數(shù)據(jù)緩沖區(qū)包括16個數(shù)據(jù)存儲器,這16個數(shù)據(jù)存儲器在FPGA內(nèi)部的地址從(10000)2到(11111)2。(100000)2單元存儲的是第1個負(fù)載的狀態(tài),以此類推,(10000)2單元存儲的是第16個負(fù)載的狀態(tài)。每個16位數(shù)據(jù)存儲器的8位固定為5AH,接下來的5位為(00000)2,只有最后3位才是負(fù)載的狀態(tài)位。
當(dāng)MCU讀FPGA時,process(rd)進(jìn)程啟動。這時,如果MCU地址線A4的電平(對應(yīng)于FPGA的chansel:std_logic_vector(4 downto 0)信號量的第四位)為“1”,F(xiàn)PGA就根據(jù)chanse1(3 downto 0)的值,將對應(yīng)的數(shù)據(jù)存儲器的值發(fā)送到數(shù)據(jù)總線上。MCU讀回數(shù)據(jù)存儲器的值后,如果前13位不是(0101101000000)2,說明產(chǎn)生了讀錯誤,MCU重新再讀一次。必須指出,在FPGA控制A/D采樣時,讀哪個通道信息也是通過A0~A3地址線區(qū)分的,但是,A4的電平為低。
MCU根據(jù)系統(tǒng)處于不同的狀態(tài)給負(fù)載發(fā)送接通/斷開指令,這是通過寫FPGA的寄存器KGIR實現(xiàn)的。KGIR的16位依次代表16個負(fù)載,“1”為接通,“0”為斷開,復(fù)位值是0000H.寄存器KGER是數(shù)字量輸出的總開關(guān),復(fù)位后為0000H,不允許數(shù)字量輸出;MCU對其寫入FFFFH后,允許數(shù)字量輸出。FPGA給負(fù)載發(fā)去接通/斷開指令后,負(fù)載將會有兩個狀態(tài)信號返回。FPGA結(jié)合寄存器KGIR的控制指令值,可以判定負(fù)載處于何種狀態(tài)之一。如果反饋的信息為跳閘,F(xiàn)PGA將根據(jù)寄存器KGCR的值作出相應(yīng)的處理。如果為其它信息,F(xiàn)PGA將不做處理,只是將狀態(tài)信息存儲在數(shù)據(jù)緩沖區(qū)中等待發(fā)送給權(quán)限高的MCU來決定。KGCR的復(fù)全值是0001H,表示跳閘發(fā)生后,F(xiàn)PGA將自動再發(fā)一次接通指令。程序運行的過程中,MCU根據(jù)任務(wù)的緊急和系統(tǒng)的布局,可以修改KGCR的值。如果KGCR的值為0003H,表示第一次跳閘發(fā)生后,F(xiàn)PGA可以重復(fù)發(fā)三次接通指令。
因為FPGA是基于RAM工藝的,在掉電后本身不能保存信息,因此需要一個外置存儲芯片來保存其信息,這里采用一次可編程的PROM:XC17S100APD8I(OTP)。該PROM與Spartan-II芯片的接口只需要一個I/O;復(fù)位引腳的極性可編程(高有效或低有效);供電電壓為3.3V。
XC17S100A的DONE、INIT、CCLK信號來自FPGA芯片XC2S100。系統(tǒng)剛一上電,F(xiàn)PGA首先初始化,置INIT、DONE為低。INIT為低后復(fù)位PROM,此時由于PROM的CE為低,因此PROM被選中,從而將數(shù)據(jù)流從DATA腳輸入到FPGA的DIN腳。配置完成后,F(xiàn)PGA將DONE接高,PROM處于低功耗的待機(jī)模式,并將DATA腳置為高阻態(tài)。
在硬件調(diào)試和在線修改過程中,選用FPGA的CCLK、DONE、DIN、PROG引腳用做硬件調(diào)試編程。將下載電纜接在計算機(jī)并口上,選擇恰當(dāng)?shù)南螺d方式就會將Xilinx開發(fā)軟件生成的位流文件下載到FPGA的內(nèi)部配置存儲器中。配置下載流程可以分為3個階段:初始化、清除配置內(nèi)存、下載數(shù)據(jù)。清除內(nèi)存在所有配置模式中都是一樣的,下載數(shù)據(jù)卻隨著配置方式的不同而不同。
實際應(yīng)用中,一般都需要將數(shù)據(jù)流文件燒入到Xilinx PROM中,每次上電伊始,由PROM將數(shù)據(jù)流下載到FPGA中,下載完畢,F(xiàn)PGA開始工作。
4 結(jié)論
針對監(jiān)測系統(tǒng)監(jiān)測信號一般較多的特點,本文提出了一種基于FPGA技術(shù)的多路模擬量、數(shù)字量采集與處理系統(tǒng),設(shè)計了相應(yīng)的外圍硬件電路和系統(tǒng)處理軟件。在仿真和綜合調(diào)試成功的基礎(chǔ)上,本系統(tǒng)成功用于某航空重點預(yù)研項目的電氣負(fù)載管理系統(tǒng)試驗中。試驗結(jié)果表明,本系統(tǒng)成功地完成了對多路模擬量、數(shù)字量的采集處理任務(wù),因此,在電氣測控系統(tǒng)中有較好的應(yīng)用前景。
【基于FPGA的多路模擬量、數(shù)字量采集與處理系統(tǒng)】相關(guān)文章:
基于StrongARM的視頻采集與處理系統(tǒng)08-06
基于DSP的多超聲測距數(shù)據(jù)采集處理系統(tǒng)08-06
基于MSC1210的多路高精度溫度采集系統(tǒng)模塊08-06
基于LabVIEW的USB實時數(shù)據(jù)采集處理系統(tǒng)的實現(xiàn)08-06
基于DSP和以太網(wǎng)的數(shù)據(jù)采集處理系統(tǒng)08-06
基于FPGA/CPLD和USB技術(shù)的無損圖像采集卡08-06
基于TMS320C6711的線陣CCD采集與處理系統(tǒng)08-06
基于FPGA的快速傅立葉變換08-06