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