基于FPGA的多路模擬量、數字量采集與處理系統

發(fā)布時(shí)間:2012-4-1 10:50    發(fā)布者:諸葛孔明
關(guān)鍵詞: FPGA , 采集 , 模擬量 , 數字量
在電氣測控系統中,常常需要采集各種模擬量信號、數字量信號,并對它們進(jìn)行相應的處理。一般情況下,測控系統中用普通MCU(如51、196等單片機或控制型DSP)是可以完成系統任務(wù)的。但當系統中要采集的信號量特別多時(shí)(特別是各種信號量、狀態(tài)量),僅僅靠用普通MCU的資源就往往難以完成任務(wù)。此時(shí),一般只能采取多MCU聯(lián)機處理模式,或者靠其它芯片擴展系統資源來(lái)完成系統的監測任務(wù)。這樣做不僅增加了大量的外部電路和系統成本,而且大大增加了系統的復雜性,因而系統的可靠性就會(huì )受一定的影響,這顯然不是設計者所愿意看到的。本文所提出的一種基于FPGA技術(shù)的模擬量、數字量采集與處理系統,利用FPGA的I/O端口多,且可以自由編程支配、定義其功能的特點(diǎn),配以VHDL編寫(xiě)的FPGA內部執行軟件,能很好地解決采集的信號路數多的問(wèn)題。因為用VHDL編寫(xiě)的執行軟件內部對各組數字量是按并行處理的,而且FPGA硬件的速度是ns級的,這是當前任何MCU都難以達到的速度,因此本系統比其它系統更能實(shí)時(shí)地、快速地監測信號量的變化。所以在狀態(tài)量特別多的監測系統中,本系統將更能發(fā)揮出自身的優(yōu)勢。

本系統中的外圍電路設計相對簡(jiǎn)單、可靠,且鑒于FPGA和VHDL語(yǔ)言自身的特點(diǎn),系統具有較好的擴展性,在監測和控制系統中也具有一定的通用性。系統主要包括:FPGA芯片區、多路選擇與A/D采樣電路、交流信號調理電路、光耦隔離驅動(dòng)電路、時(shí)鐘電源區、PROM代碼下載電路等幾部分。結構示意如圖1所示。


  
1 FPGA芯片特點(diǎn)分析及資源分配

本系統中的FPGA是采用Xilinx公司的Spantan-II系理XC2S100-5 PQ208。該系列的內核采用2.5V供電,工作頻率最高可達200 MHz;I/O端口供電電壓為3.3V,可以承受5V的輸入高電平。

Spartan-II系列具有豐富的I/O口資源,I/O口輸出緩沖器呆以接收高達24mA的拉電流和48mA的灌電流。缺省時(shí),I/O輸出口的驅動(dòng)能力的12mA,也可以設置成2、4、6、8、16或24mA。

FPGA內部資源劃分為四大部分,如圖2所示。



①FPGA邏輯運算中心。用來(lái)接收其它各部分的數據,并按照程序中設定的方案對所收到的數據進(jìn)行相應的分析和處理。包括:對從MCU接收來(lái)的數據指令進(jìn)行分析,并按其指令要求進(jìn)行相應操作;接收A/D采樣來(lái)的數據,對數據進(jìn)行各種處理,如求其有效值,進(jìn)行FFT分析等;接收來(lái)自數字量的各種信息數據,按設定的模式對其進(jìn)行判斷處理,并負責按接收的CPU指令輸出相應的數字量。

②A(yíng)/D控制單元。主要負責控制外部A/D芯片和多路開(kāi)關(guān)的選通時(shí)序,以及實(shí)現對A/D采要過(guò)程的合理控制。因為,在FPGA芯片內部,不像在MCU內部那樣有豐富的外設控制資源供用戶(hù)使用,要用FPGA來(lái)控制A/D采樣過(guò)程的動(dòng)作,必須用軟件來(lái)模擬實(shí)現各種A/D控制資源。利用這些自設定的A/D控制管理資源,配以合理的軟件控制時(shí)序,才能保證采樣過(guò)程的順利進(jìn)行。

③數字量監測控制單元。負責所有要監視和控制的數字量的狀態(tài)數據的采集和控制命令的輸出。這一部分同樣也需要用軟件來(lái)模擬實(shí)現各種對數字量的管理控制,只有配備較完備的外設控制管理單元,整個(gè)數字量的管理控制才能正確合理地進(jìn)行。

④FPGA接口邏輯控制單元。在FPGA內部設計了FPGA模塊與外界MCU的接口單元,這雖然占去了一定的內部資源,但是考慮到在一般的工程系統中不僅僅包括對各種信息的采集控制,還往往包括通信、顯示以及進(jìn)行一些復雜算術(shù)運行等等。FPGA雖然有其顯著(zhù)的長(cháng)處,但是在這些方面實(shí)現起來(lái)就往往不如普通MCU來(lái)得容易,因此考慮到本系統的通用性,在設計上增加了FPGA模塊與外界MCU的接口單元。
  
2 交流模擬量采集的控制與管理

在交流模擬量采集外圍電路中,A/D芯片采用的是BB公司的ADS774。多路交流量是通過(guò)4051的多路開(kāi)關(guān)后輸入到ADS774芯片的。交流信號在進(jìn)入ADS774之前要經(jīng)過(guò)信號調量電路,調理成ADS774認可的模擬信號。

FPGA實(shí)現的交流量采樣處理控制軟件由五部分組成:

第一部分為設定的3個(gè)與A/D采樣有關(guān)的16位指令寄存器組:A/D參數寄存器(ADPR)、輸出控制寄存器(ADOR)、A/D控制寄存器(ADCR)。

ADPR(XXXXXXXXX XXXXX XX)的各位定義如下:位1、位0選擇每周波采樣的點(diǎn)數(00表示每周波采16個(gè)點(diǎn),01表示每周波采32個(gè)點(diǎn),10表示每周波采64個(gè)點(diǎn),11表示每周波采128個(gè)點(diǎn))。位6~位2用來(lái)表示FPGA的時(shí)鐘頻率,00001表示時(shí)鐘頻率為1MHz,11111表示時(shí)鐘頻率為31MHz,00000表示時(shí)鐘頻率為32MHz。位15~位7表示所采樣信號的頻率,這9位表示的范圍為1Hz~512Hz。

ADOR是與FPGA輸出有關(guān)的寄存器。該寄存器的作用是:當MCU要讀取某通道信號的信息時(shí),FPGA應該輸出該信號的哪次諧波電壓。如為FFFFH,表示DSP讀到的是該通道信號的有效值;如果ADOR的值為0010H,那么,DSP讀到的是該通道信號的2次諧波電壓。
ADCR寄存器控制A/D采樣的通道數的選擇以及與A/D采樣有關(guān)的寄存器的復位控制等,這也是考慮到系統的通用性而設計的:如000C表示采樣第11路交流模擬量電壓;0011則表示同時(shí)采樣前六路信號等等。

第二部分為設計產(chǎn)生A/D與CD4051芯片的控制信號。如在圖2中,在采樣12路交流模擬量的情況下,FPGA需要產(chǎn)生7路控制信號,這7路控制信號應該滿(mǎn)足一定的時(shí)序要求。圖3給出了同時(shí)采樣前六路信號時(shí)FPGA的控制信號時(shí)序。



Abcs2[0,1,2]總線(xiàn)信號實(shí)際上是多路開(kāi)關(guān)通道選擇的3個(gè)控制信號selA、selB、selC。需要說(shuō)明的是,因為要進(jìn)行修正,在對6路交流信號采樣的同時(shí),也對4051的+5V和AGND進(jìn)行了采樣,所以實(shí)際上測量的通道數為8路。

從圖3可看出,abcs2[0,1,2]總線(xiàn)信號每19.531 25μs加1,每156.25μs重新循環(huán)一次,滿(mǎn)足8路交流同步采樣的要求。

從25μs時(shí)刻的局部放大圖可以看出,當(23.6μs時(shí)刻)4051選擇通道1時(shí),ADS774的CS和R/C信號同時(shí)為低,延時(shí)0.5μs左右CE端出現上升沿(24.1μs),啟動(dòng)A/D轉換,這符合ADS774的A/D轉換時(shí)序。需要指出,如果CE端直接接高電平,那么,R/C的下降沿將直接啟動(dòng)A/D轉換。之所以用兩個(gè)信號來(lái)啟動(dòng)A/D轉換,是為了減少A/D的誤觸發(fā)?紤]到4051的導通延時(shí),所以在通道切換0,5μs后才啟動(dòng)A/D轉換。圖3中沒(méi)有畫(huà)出4051的INH信號,在采樣前6路交流信號時(shí),該信號一直為低。如果同時(shí)采樣12路信號,那么,abcs2[0,1,2]總線(xiàn)信號每9.765 625μs加1,每78.125μs重新循環(huán)1次;INH信號每78.125μs電平變化1次,用來(lái)選擇哪個(gè)4051導通。

第三部分為A/D輸入數據緩沖區和數字濾波模塊。A/D轉換完成后,ADS774的引腳STS給FPGA輸出轉換完成信號(低電平)。FPGA接收這一信號后,將產(chǎn)生讀ADS774的時(shí)序,把12位的A/D轉換數據讀入到數據緩沖區的二維數組datain(abcv)(sampn)中。Abcv為通道號,sampn表示周波信號中所采樣的第幾個(gè)點(diǎn)。將一個(gè)周期的12路信號采樣完后,置標志ADFLAG為1,進(jìn)行數據的濾波處理。首先,對datain(abcv)(sampn)的值進(jìn)行修正;給定sampn,對前6路信號來(lái)說(shuō),datain(7)(sampn)存儲的是AGND的A/D轉換值,將datain(i)(sampn)減去datain(7)(sampn)的值存儲在datamid(i)(sampn)中(i=1,…,6)。與此類(lèi)似,后六路的采樣值datain(i)(sampn)減去datain(15)(sampn)的值存儲在datamid(i)(sampn)(i=8,…,14)。然后,給定abcv,對datamid(abcv)(j)(j=0,…,15)這16個(gè)點(diǎn)的數據進(jìn)行FIR濾波,將FIR濾波后的數據存儲在datamd(abcv)(sampn)數組中。

第四部分是均方根有效值計量和FFT諧波分析模塊。輸入的數據經(jīng)過(guò)處理后,首先進(jìn)行均方根有效值的計算。給定abcv,先求出datamd(abcv)(j)(j=0,…,15)這16個(gè)點(diǎn)的平方和,將其存儲到datarsult(abcv)中。為了防止溢出,dataresult(abcv)定義28位的位矢量。然后把dataresult(abcv)中的數據進(jìn)行平方的運算,結果存儲在douts(i)中。開(kāi)平方是利用函數sqt(a:std_logic_vector;b:integer)return std_logic_vector來(lái)實(shí)現的。a為要開(kāi)方的全矢量數據;整數b用來(lái)定義輸出位矢量的長(cháng)度。該函數被封裝成一個(gè)包(package),符合自頂向下(TopDown)的HDL語(yǔ)言設計思想。douts(i)是信號量,由賦值語(yǔ)句douts(i)<=sqt(dataresult (i);16)(i=0,…,15)可以分別求出12路信號的有效值。電壓有效值和諧波分析完成以后,清ADFLAG為0。

第五部分為輸出緩沖器單元。當DSP對FPGA產(chǎn)生讀時(shí)序(FPGACS為低電平且RD下降沿來(lái)到時(shí)),FPGA根據DSP的低五位地址線(xiàn)A0~A4的值(對應于FPGA的chansel:std_logic_vector(4 downto 0)信號量),以及ADOR寄存器中的值,將相應的數據送到數據總線(xiàn)上。比如,若chansel為(00010)2,ADOR中的值為FFFFH,那么,FPGA就會(huì )將通道2的有效值douts(2送到數據總線(xiàn)上。
  
3 對數字量的控制與管理

在圖2系統中,假定要對16個(gè)負載進(jìn)行管理,每個(gè)負載包括1個(gè)控制輸出量和2個(gè)狀態(tài)返回量,因此共有16路的數字量輸出,32路的數字量輸入。

FPGA對數字量的管理軟件結構:

FPGA對數字量的控制管理也設置了三個(gè)16位的指令寄存器組。這三個(gè)指令寄存器的內部地址為03H、04H和05H.03H為開(kāi)關(guān)量輸出允許寄存器(KGER);04H為跳閘閉合寄存器(KGCR);05H為開(kāi)關(guān)量開(kāi)閉寄存器(KGIR)。

來(lái)自負載的總共32個(gè)狀態(tài)反饋信號(DIN00、DIN01……DIN31)分成16組,分別接到FPGA的16個(gè)信號量dini上(i=1,2,…,15)。dini是長(cháng)度為2的位矢量std_logic_vector(1 downto 0),分別對應于1個(gè)負載的兩個(gè)狀態(tài)反饋位。FPGA用16個(gè)進(jìn)程process(din1)、process(din1)……process(din15)來(lái)對輸入數字量敏感。當dini的載位電平發(fā)生變化時(shí),進(jìn)程啟動(dòng),FPGA結合MCU發(fā)送的控制指令,判斷負載的狀態(tài),并記錄在輸出數據緩沖區中。輸出數據緩沖區包括16個(gè)數據存儲器,這16個(gè)數據存儲器在FPGA內部的地址從(10000)2到(11111)2。(100000)2單元存儲的是第1個(gè)負載的狀態(tài),以此類(lèi)推,(10000)2單元存儲的是第16個(gè)負載的狀態(tài)。每個(gè)16位數據存儲器的8位固定為5AH,接下來(lái)的5位為(00000)2,只有最后3位才是負載的狀態(tài)位。

當MCU讀FPGA時(shí),process(rd)進(jìn)程啟動(dòng)。這時(shí),如果MCU地址線(xiàn)A4的電平(對應于FPGA的chansel:std_logic_vector(4 downto 0)信號量的第四位)為“1”,FPGA就根據chanse1(3 downto 0)的值,將對應的數據存儲器的值發(fā)送到數據總線(xiàn)上。MCU讀回數據存儲器的值后,如果前13位不是(0101101000000)2,說(shuō)明產(chǎn)生了讀錯誤,MCU重新再讀一次。必須指出,在FPGA控制A/D采樣時(shí),讀哪個(gè)通道信息也是通過(guò)A0~A3地址線(xiàn)區分的,但是,A4的電平為低。

MCU根據系統處于不同的狀態(tài)給負載發(fā)送接通/斷開(kāi)指令,這是通過(guò)寫(xiě)FPGA的寄存器KGIR實(shí)現的。KGIR的16位依次代表16個(gè)負載,“1”為接通,“0”為斷開(kāi),復位值是0000H.寄存器KGER是數字量輸出的總開(kāi)關(guān),復位后為0000H,不允許數字量輸出;MCU對其寫(xiě)入FFFFH后,允許數字量輸出。FPGA給負載發(fā)去接通/斷開(kāi)指令后,負載將會(huì )有兩個(gè)狀態(tài)信號返回。FPGA結合寄存器KGIR的控制指令值,可以判定負載處于何種狀態(tài)之一。如果反饋的信息為跳閘,FPGA將根據寄存器KGCR的值作出相應的處理。如果為其它信息,FPGA將不做處理,只是將狀態(tài)信息存儲在數據緩沖區中等待發(fā)送給權限高的MCU來(lái)決定。KGCR的復全值是0001H,表示跳閘發(fā)生后,FPGA將自動(dòng)再發(fā)一次接通指令。程序運行的過(guò)程中,MCU根據任務(wù)的緊急和系統的布局,可以修改KGCR的值。如果KGCR的值為0003H,表示第一次跳閘發(fā)生后,FPGA可以重復發(fā)三次接通指令。

因為FPGA是基于RAM工藝的,在掉電后本身不能保存信息,因此需要一個(gè)外置存儲芯片來(lái)保存其信息,這里采用一次可編程的PROM:XC17S100APD8I(OTP)。該PROM與Spartan-II芯片的接口只需要一個(gè)I/O;復位引腳的極性可編程(高有效或低有效);供電電壓為3.3V。

XC17S100A的DONE、INIT、CCLK信號來(lái)自FPGA芯片XC2S100。系統剛一上電,FPGA首先初始化,置INIT、DONE為低。INIT為低后復位PROM,此時(shí)由于PROM的CE為低,因此PROM被選中,從而將數據流從DATA腳輸入到FPGA的DIN腳。配置完成后,FPGA將DONE接高,PROM處于低功耗的待機模式,并將DATA腳置為高阻態(tài)。

在硬件調試和在線(xiàn)修改過(guò)程中,選用FPGA的CCLK、DONE、DIN、PROG引腳用做硬件調試編程。將下載電纜接在計算機并口上,選擇恰當的下載方式就會(huì )將Xilinx開(kāi)發(fā)軟件生成的位流文件下載到FPGA的內部配置存儲器中。配置下載流程可以分為3個(gè)階段:初始化、清除配置內存、下載數據。清除內存在所有配置模式中都是一樣的,下載數據卻隨著(zhù)配置方式的不同而不同。

實(shí)際應用中,一般都需要將數據流文件燒入到Xilinx PROM中,每次上電伊始,由PROM將數據流下載到FPGA中,下載完畢,FPGA開(kāi)始工作。

4 結論

針對監測系統監測信號一般較多的特點(diǎn),本文提出了一種基于FPGA技術(shù)的多路模擬量、數字量采集與處理系統,設計了相應的外圍硬件電路和系統處理軟件。在仿真和綜合調試成功的基礎上,本系統成功用于某航空重點(diǎn)預研項目的電氣負載管理系統試驗中。試驗結果表明,本系統成功地完成了對多路模擬量、數字量的采集處理任務(wù),因此,在電氣測控系統中有較好的應用前景。
本文地址:http://selenalain.com/thread-88604-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页