季 偉 ,蘇淑靖 ,喬文生 ,張 斌
(1.中北大學(xué) 儀器科學(xué)與動態(tài)測試教育部重點實驗室 電子測試技術(shù)國家重點實驗室,太原 030051;2.中國航天科工集團(tuán)第六研究所601所,呼和浩特 010076;3.中北大學(xué) 經(jīng)濟(jì)與管理學(xué)院,太原 030051)
隨著信息技術(shù)的發(fā)展,采編存儲器的采樣速度、通道數(shù)、精度也隨之提高[1-2],但是對其通用性也提出了要求。本設(shè)計采用FPGA(現(xiàn)場可編程門陣列)作為控制芯片,設(shè)計了16通道可以設(shè)置為不同采樣率的同步采編存儲器,該存儲器還具有掉電監(jiān)測功能和FLASH斷點保護(hù)功能。本設(shè)計利用VHDL的并行特性,充分發(fā)揮了FPGA改動靈活方便和并行控制的特點[3],克服了多通道同步采集、不同采樣率ADC數(shù)據(jù)混合編幀和斷點保護(hù)等設(shè)計難點,提高了所設(shè)計的采編存儲器的通用性。
本文設(shè)計的數(shù)據(jù)采編存儲器可以同步采樣16路0 V~5 V的模擬電壓信號,可選擇1 kS/s,5 kS/s,10 kS/s,25 kS/s和50 kS/s 5種采樣率,具有0.1%FS的精度。
采編存儲器內(nèi)的16路輸入采集卡功能框圖如圖1所示。采集卡由阻抗匹配、減法電路、四階抗混疊濾波器、放大電路、8路同步采樣ADC、基準(zhǔn)電壓源、掉電檢測電路、控制單元和背板總線組成。FPGA選用了XILINX公司的低成本Spartan-3E系列中的XC3S500E,可提供50萬個系統(tǒng)門數(shù)、4656個Slice、73 kb分布式RAM和360 kb塊RAM容量。其可靈活配置、低功耗的特性足以滿足設(shè)計要求。
圖1 采編存儲器總體設(shè)計圖Fig.1 Acquisition overall diagram
系統(tǒng)工作原理為16路模擬信號從輸入接口接入,經(jīng)過16路模擬信號調(diào)理,由FPGA控制ADC實現(xiàn)模數(shù)轉(zhuǎn)換、編幀、存儲,數(shù)據(jù)通過背板總線上傳。為了滿足通道數(shù)和采樣精度的設(shè)計要求,實現(xiàn)同步采集,提高電路集成度,ADC采用ADI公司的AD7606,它可以8通道同步模擬采樣,處理±5 V真雙極性輸入信號,有高達(dá)1 MΩ的固定輸入阻抗,采樣率最大達(dá)200 kS/s。上位機(jī)可以實時分析采樣數(shù)據(jù)。采編存儲器受上位機(jī)命令控制。
采編存儲器工作時,需要寫入或讀取FLASH。如果此時基準(zhǔn)電壓源故障導(dǎo)致意外掉電,可以引起系統(tǒng)程序跑飛而無法繼續(xù)工作,甚至造成大量數(shù)據(jù)的丟失,帶來不可彌補(bǔ)的損失,影響數(shù)據(jù)的完整性、正確性。而且下次上電時,難以恢復(fù)上次的存取狀態(tài),導(dǎo)致數(shù)據(jù)因為掉電而損壞。為了避免出現(xiàn)這種情況,設(shè)計了掉電監(jiān)測電路,采用MAX709監(jiān)測電源電壓,同時產(chǎn)生系統(tǒng)的復(fù)位信號。
MAX709能夠在加電、掉電以及降壓情況下,使其RESET引腳變?yōu)榈碗娖?,提供?fù)位信號。MAX709不受短持續(xù)期的Vcc瞬變的影響,能夠提供可靠的復(fù)位信號[4]。因此MAX709的RESET低電平信號可以用作掉電的監(jiān)測信號。由于電容性器件的存在,當(dāng)系統(tǒng)掉電時,工作電壓下降到系統(tǒng)無法工作的危險電壓之前有一定的時間延遲,這段時間可以執(zhí)行數(shù)據(jù)保護(hù)操作。經(jīng)過示波器測試,本采編存儲器從監(jiān)測到掉電信號到工作電壓下降到危險電壓的時間約為 4 ms。MAX709的RESET連接到FPGA,作為復(fù)位和掉電信號。
總體邏輯包括時鐘產(chǎn)生模塊、命令模塊、全局復(fù)位模塊、全局時鐘模塊、A/D控制模塊、FIFO、編幀模塊。由全局時鐘模塊產(chǎn)生全局同步時鐘信號,同步所有模塊的操作。A/D控制模塊與編幀模塊之間采用乒乓操作設(shè)計。2個ADC的數(shù)據(jù)交替地寫入2個FIFO里,編幀模塊對數(shù)據(jù)進(jìn)行混合編幀,之后數(shù)據(jù)同時存儲到上位機(jī)和FLASH中。模塊框圖如圖2所示,總邏輯流程如圖3所示。
圖2 程序模塊框圖Fig.2 Program module diagram
圖3 總邏輯流程圖Fig.3 Flow chart of general logic
為了滿足通道數(shù)要求,采用2片AD7606在FPGA的控制下進(jìn)行同步采集。AD7606設(shè)置為并行字節(jié)模式,8通道同步采樣,每個通道的數(shù)據(jù)以字節(jié)為單位,在并口DB[7:0]先輸出高字節(jié)后再輸出低字節(jié)。如果對2片ADC順序控制,非但體現(xiàn)不出FPGA的并行控制的優(yōu)勢,而且無法實現(xiàn)16通道同步采集。設(shè)計中對2個ADC采用了雙進(jìn)程分別進(jìn)行控制。在VHDL中同一個結(jié)構(gòu)體內(nèi)的2個進(jìn)程是并行執(zhí)行的[5],這就使2個ADC可以同時采樣,而且2個ADC可以以不同的采樣率同時采樣。AD7606的采樣周期受輸入CONVST管腳的邏輯電平控制。為了使采樣率變化,必須控制CONVST管腳的電平周期。AD7606的工作時鐘為20 MHz,為了實現(xiàn)5種可選的采樣率,在AD控制程序中需要對狀態(tài)計數(shù)。在采樣率為X時,每次采樣對應(yīng)的狀態(tài)數(shù)N可計算為
式中,T為CONVST電平變化的周期。在ADC采樣轉(zhuǎn)換后讀取數(shù)據(jù)會占用采樣時間使采樣率降低,所以設(shè)計為在采樣轉(zhuǎn)換期間讀取上一次采樣數(shù)據(jù),保證采樣率按設(shè)計要求實現(xiàn)。并行字節(jié)模式在轉(zhuǎn)換期間讀取數(shù)據(jù)的時序如圖4所示。
圖4 并行字節(jié)模式讀取數(shù)據(jù)時序圖Fig.4 Parallel byte mode data read time sequence
采樣率的可選設(shè)計給數(shù)據(jù)編幀帶來了困難,因為幀結(jié)構(gòu)是隨著采樣率的不同而變化的。本設(shè)計中不同的ADC可以不同采樣率同時工作,編幀模塊必須根據(jù)每個ADC的采樣率設(shè)置其幀結(jié)構(gòu)。設(shè)計如圖2所示,每個ADC分配了獨立的緩存FIFO,使不同幀結(jié)構(gòu)的數(shù)據(jù)不會混淆以至無法區(qū)分。而幀結(jié)構(gòu)設(shè)計為如表1所示的16通道混合可變結(jié)構(gòu),每幀數(shù)據(jù)為16個通道1 ms采到的數(shù)據(jù)。其中n為ADC1即前八通道的每毫秒采樣次數(shù),m為ADC2即后八通道的每毫秒采樣次數(shù)。n和m的值可以由采樣率得出。編幀模塊根據(jù)采樣率參數(shù)設(shè)置n和m值,分別從2個FIFO中讀出16 n個字節(jié)和16 m個字節(jié),再加上幀頭、卡地址和采樣率參數(shù)組成一幀。編好幀的數(shù)據(jù)就可以傳給上位機(jī)或者存儲到FLASH中。
表1 幀結(jié)構(gòu)表Tab.1 Frame structure
A/D控制模塊控制著2片ADC,2片ADC可以設(shè)置為不同采樣率進(jìn)行采樣。而這2片ADC的采樣數(shù)據(jù)要按設(shè)計的幀結(jié)構(gòu)存儲在一起。編幀模塊與FLASH模塊的工作頻率與數(shù)據(jù)傳輸速度不同,而且FLASH頁編程的200 μs期間不能寫入數(shù)據(jù),上位機(jī)讀數(shù)周期則為1 ms。這2段時間內(nèi)數(shù)據(jù)不能存儲和上傳,需要數(shù)據(jù)緩存。按可設(shè)置的最快采樣率50 kS/s計算緩存數(shù)據(jù),參照表1,那么每幀的數(shù)據(jù)量D可用下式計算:
D=2+1+1+50×16+50×16=1604 B
因此,對FLASH而言,需要緩存的數(shù)據(jù)量為
200 μs×1604 B/ms=320.8 B
而上位機(jī)需要緩存的數(shù)據(jù)量為
1 ms×1604 B/ms=1604 B
選用容量為2048 B的FIFO作為緩存,足以滿足緩存需要。
FLASH存儲芯片采用了三星公司的NAND芯片K9WBG08U1M。其塊擦除時間為1.5ms,頁編程時間為 200 μs,容量為 4 GB。
FLASH中不可避免地存在無效塊,無效塊不能被用來存儲數(shù)據(jù),因此在寫入、讀取操作前都要識別無效塊。常規(guī)做法是對無效塊建立地址表,通過對地址表的查詢識別無效塊。這種方法需要占用FPGA中寶貴的存儲資源,而且每次操作之初都必需更新無效塊地址表,否則如果出現(xiàn)新的無效塊,存儲數(shù)據(jù)就會出錯。為此,本設(shè)計采用了在每次寫入、讀取、擦除之前對每一塊進(jìn)行無效塊檢測的方法。無效塊檢測采用讀取每塊前2頁的第2048字節(jié)的內(nèi)容來實現(xiàn),如果讀到非FFh的數(shù)據(jù)則認(rèn)為該塊為無效塊。因為擦除操作失敗會產(chǎn)生無效塊,在每次擦除操作后必須對操作成功與否進(jìn)行檢測,即擦除操作完成后,查看I/O 0位的值,如果非0則擦除失敗。在擦除失敗的塊前2頁的第2048字節(jié)處寫入00h,將其標(biāo)記為無效塊。
FPGA的FLASH模塊檢測到MAX709的RESET信號時,會進(jìn)入斷點保護(hù)程序。斷點保護(hù)是在存儲數(shù)據(jù)的過程中,為避免因系統(tǒng)電源電壓欠壓甚至切斷而造成數(shù)據(jù)存儲紊亂而采取保護(hù)的一種措施[6]。斷點保護(hù)程序需要保存FLASH斷點地址,即當(dāng)前的寫入地址和讀取地址。本設(shè)計將斷點地址保存在FLASH的第一塊中,所以保存新地址之前需要擦除舊地址。這些擦除、寫入操作需要在系統(tǒng)開始掉電的4 ms之內(nèi)完成,而FLASH的頁編程典型時間為200 μs,塊擦除典型時間為1.5 ms,斷點程序共需要約1.7 ms來完成斷點保護(hù),時間在4 ms之內(nèi),斷點保護(hù)程序可以實現(xiàn)。
如圖5所示為采集卡采樣到的數(shù)據(jù)的幀結(jié)構(gòu),每幀共100 B,其中,EB 90為幀頭,A4為卡地址,21表示前八通道采樣率為5 kS/s,后八通道采樣率為1 kS/s,由表1計算可知與設(shè)計相符。
圖5 幀結(jié)構(gòu)圖Fig.5 Frame structure
用GPS-4303C型穩(wěn)壓電源為采編存儲器輸入4.8008 V(使用6位半精度的高精度萬用表測得)的直流電壓,計算通道10的精度為(4.8008-4.7995)/5=0.026%,小于滿量程的0.1%。
圖6為給采編存儲器輸入0~5 V正弦波后,上位機(jī)通道1和通道9的輸出波形。
圖6 上位機(jī)輸出波形Fig.6 Software output wave
本設(shè)計使用FPGA做采編存儲器的控制芯片,實現(xiàn)了16路數(shù)據(jù)同步采樣、不同采樣率ADC的混合編幀和FLASH存儲器的斷點保護(hù)。設(shè)計的采編存儲器能夠在采樣率可選的情況下同步采樣多路數(shù)據(jù),達(dá)到了較高精度,提高了設(shè)計通用性,滿足設(shè)計要求。
[1]李念強(qiáng),魏長智,潘建軍,等.數(shù)據(jù)采集技術(shù)與系統(tǒng)設(shè)計[M].北京:機(jī)械工業(yè)出版社,2009:1.
[2]胡曉軍.數(shù)據(jù)采集與分析技術(shù)[M].2版.西安:西安電子科技大學(xué)出版社,2010:1-5.
[3]郭亮,衛(wèi)一然,甄國涌.基于FPGA的高速數(shù)據(jù)采集系統(tǒng)設(shè)計實現(xiàn)[J].計算機(jī)測量與控制,2013,21(2):537-539.
[4]吳東,張岡,張志鵬,等.一種實用的掉電檢測和保護(hù)電路[J].電子技術(shù)應(yīng)用,1999,25(6):69-70.
[5]侯伯亨,顧新.VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計[M].西安:西安電子科技大學(xué)出版社,2000:10-60.
[6]冉自博.基于U盤高速串行數(shù)據(jù)記錄器設(shè)計[D].山西:中北大學(xué),2014.