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