黃 磊,顧雯雯,陳 亮,涂 旭,尹欣慧
(西南大學(xué)工程技術(shù)學(xué)院,重慶 400715)
近紅外光譜分析技術(shù)因其非接觸、無損、無需樣品前處理、快速、高通量,能定性定量檢測固體、液體和氣體物質(zhì)組分與含量[1-2],被廣泛應(yīng)用于工業(yè)、農(nóng)業(yè)以及醫(yī)藥等檢測領(lǐng)域。傳統(tǒng)的近紅外光譜儀體積較大不利于便攜測量,嚴(yán)重制約了近紅外光譜分析技術(shù)的進(jìn)一步發(fā)展[3-5]。因此,近紅外光譜儀的微型化得到了國內(nèi)外科研人員的廣泛關(guān)注和研究[6-7]。光譜信號采集系統(tǒng)作為微型近紅外光譜儀的重要組成部分,對儀器的精確性、穩(wěn)定性以及實時性至關(guān)重要[8]。傳統(tǒng)的光譜信號采集方案多以外置FIFO、RAM、SRAM作為光譜信號采集系統(tǒng)的數(shù)據(jù)存儲芯片,普遍存在價格昂貴、數(shù)據(jù)存儲空間小、硬件體積大以及外圍電路設(shè)計復(fù)雜等缺點(diǎn),不利于近紅外光譜儀的微型化。因此,開展微型近紅外光譜儀光譜信號采集系統(tǒng)的研究對推動微型近紅外光譜儀的發(fā)展具有十分重要的意義。
相比于DSP、ARM、單片機(jī)等主控芯片,FPGA以其獨(dú)特的并行處理架構(gòu)被廣泛應(yīng)用于高速信號采集和實時傳輸控制等應(yīng)用場景。同時FPGA作為一種高集成度的半定制電路具有很好的靈活性,相對于邏輯接口與接口芯片相匹配的設(shè)計方式,FPGA可以直接通過硬件語言編程控制芯片內(nèi)部的連線來實現(xiàn)邏輯接口的設(shè)計,極大降低了外圍電路的設(shè)計難度。FPGA的可定義與優(yōu)秀的移植特性使得微型近紅外光譜儀嵌入式系統(tǒng)的研發(fā)在應(yīng)用功能的豐富上具有極大的可拓展性。SDRAM相對于外置FIFO、RAM、SRAM等存儲芯片,將復(fù)雜的外圍電路全部集成到SDRAM芯片內(nèi)部,降低了光譜信號采集系統(tǒng)外圍電路的復(fù)雜程度。本文以FPGA為主控,SDRAM為光譜數(shù)據(jù)存儲芯片,配合FPGA芯片內(nèi)部的FIFO對光譜數(shù)據(jù)進(jìn)行讀寫緩存,最后以RS232接口總線的方式將光譜數(shù)據(jù)傳輸至上位機(jī)。相對于傳統(tǒng)的光譜信號采集方案來說,提高了系統(tǒng)的數(shù)據(jù)存儲容量、減小了系統(tǒng)的硬件體積。雖然,該方案增大了光譜信號采集系統(tǒng)時序控制邏輯的設(shè)計難度,但是硬件體積的減小更加有利于近紅外光譜儀的微型化。
光譜信號經(jīng)過光電探測器轉(zhuǎn)換以后是一個微安級別的電流信號,需要經(jīng)過信號調(diào)理電路進(jìn)行一定程度上的降噪和放大處理,以提高整個系統(tǒng)的信噪比同時將信號放大至AD轉(zhuǎn)換電路的電平要求。AD轉(zhuǎn)換電路將模擬信號轉(zhuǎn)換為數(shù)字信號,以LVDS電平的形式發(fā)送給光譜信號采集系統(tǒng)。以FPGA為核心的光譜信號采集系統(tǒng)在50 MHz的工作頻率下,將采集到的數(shù)據(jù)通過“W_FIFO”寫入SDRMA中進(jìn)行存儲,當(dāng)需要對數(shù)據(jù)進(jìn)行讀取時,上位機(jī)發(fā)送相應(yīng)的指令,通過SDRAM控制器將存儲的數(shù)據(jù)從SDRAM中讀取到“R_FIFO”,最后經(jīng)UART_TX模塊以RS232接口總線的方式傳輸至上位機(jī)進(jìn)行后續(xù)的運(yùn)算處理。整個光譜信號采集系統(tǒng)的設(shè)計框圖如圖1所示。
圖1 光譜信號采集系統(tǒng)框圖Fig.1 Block diagram of spectrum signal acquisition system
系統(tǒng)采用ATLREA公司的EP4CE10F17C8N作為主控芯片,該芯片具有10320個邏輯單元、414 k嵌入式存儲器、23個18×18嵌入式乘法器、兩個通用的鎖相環(huán)(Phase Locked Loop,PLL)以及179個IO口,豐富的邏輯資源足夠完成對光譜信號的采集、存儲以及傳輸?shù)裙δ艿目刂?。以TI公司的12 bit,8通道的ADC128S102作為ADC采樣芯片,完成模擬信號到數(shù)字信號的轉(zhuǎn)換,最高傳輸速率可達(dá)1 Msps。
電源電路的設(shè)計如圖2所示。整個系統(tǒng)的供電需求分別為1.2 V、2.5 V、3.3 V、5 V、-5 V??紤]到功耗以及電源紋波對信號質(zhì)量的影響,選擇線性度較好的LDO電源芯片LM1117對1.2 V、2.5 V、3.3 V進(jìn)行設(shè)計,以減少電源對信號的干擾;5 V電源由USB接口提供;-5 V電源由電源芯片TPS6040進(jìn)行反向得到。在進(jìn)行PCB板設(shè)計時,整個PCB板采用信號層、地層、電源層、信號層的疊層結(jié)構(gòu)進(jìn)行設(shè)計。為了提高整個系統(tǒng)的電磁兼容性,將電源芯片布置在PCB的背板,同時不在電源層和地層走信號線來保證電源層和地平面的完整性,以降低電源對信號帶來的影響從而提高信號的質(zhì)量。
圖2 電路原理圖Fig.2 Schematic diagram of power supply circuit
利用微型近紅外光譜儀對物質(zhì)進(jìn)行檢測時,產(chǎn)生的原始光譜數(shù)據(jù)需要被盡可能多的采集以保證檢測結(jié)果的精確性。為了滿足光譜采集系統(tǒng)實時大容量采集的需求,需要設(shè)計相應(yīng)的大容量存儲方案。傳統(tǒng)的光譜信號存儲方案主要有外置FIFO、RAM、SRAM等三種。本文以SDRAM作為微型近紅外光譜儀光譜信號采集系統(tǒng)的數(shù)據(jù)緩存芯片與傳統(tǒng)的設(shè)計方案相比,具有如下的優(yōu)缺點(diǎn),如表1所示。
表1 存儲方案對比Tab.1 Comparison of storage solutions
相較于外置高速大容量的FIFO與雙端口RAM緩存方案,SDRAM采集方案不僅能夠?qū)崿F(xiàn)數(shù)據(jù)的隨機(jī)存取,使緩存讀寫更為靈活,而且價格更為低廉;相較于SRAM的采集方案,SDRAM的集成度高,體積更小,外圍電路簡單,一定程度上縮小整個采集系統(tǒng)的體積。同時,SDRAM中的數(shù)據(jù)以電荷的形式進(jìn)行存取,相比其他存儲芯片來說同樣大小的存儲容量,SDRAM的體積更小,因此更有利于減小光譜采集系統(tǒng)的硬件體積。不足之處在于SDRAM的控制邏輯十分復(fù)雜,需要設(shè)計專用的SDRAM控制器,設(shè)計周期較長。綜上所述在各種隨機(jī)存儲器中,SDRAM的價格低、體積小、速度快、容量大是搭建嵌入式光譜采集系統(tǒng)的理想器件[13]。因此,本文選用WINBOND公司的W9812G6KH-75型SADRAM作為緩存芯片,具有128 M的存儲容量,能夠滿足該系統(tǒng)大容量存儲的應(yīng)用要求。
通用異步收發(fā)器(Universal Asynchronous Receiver/Trimister,UART)能夠?qū)崿F(xiàn)數(shù)據(jù)的串/并轉(zhuǎn)換。UART協(xié)議作為基礎(chǔ)的通信協(xié)議,電路結(jié)構(gòu)簡單、成本較低,在注重性價比的情況下,UART協(xié)議使用極其廣泛[18]。為了縮小整個PCB的體積,提高系統(tǒng)的集成度,采用USB接口來取代RS232接口,并通過CH340G芯片來完成USB轉(zhuǎn)串口。根據(jù)上位機(jī)發(fā)送的指令將緩存在SDRAM中的數(shù)據(jù)通過“R_FIFO”讀取出來,并通過串口發(fā)送模塊將數(shù)據(jù)傳輸至上位機(jī)。
根據(jù)功能的不同可以將系統(tǒng)的控制邏輯分為六個部分:分別是adc_driver、sdram_cmd、w_fifo、sdram_control、r_fifo以及uart_tx。系統(tǒng)的內(nèi)部的邏輯框圖如圖3所示。當(dāng)外部按下按鍵就產(chǎn)生一個使能信號en,此時adc_driver模塊開始驅(qū)動光譜信號采集系統(tǒng)對光譜信號進(jìn)行采集,每采集到一個光譜數(shù)據(jù)就產(chǎn)生一個done信號作為sdram_cmd控制邏輯的觸發(fā)信號,用來調(diào)用w_fifo控制邏輯進(jìn)行數(shù)據(jù)的寫操作。當(dāng)“W_FIFO”中的數(shù)據(jù)被寫滿的時候,sdram_cmd模塊就會產(chǎn)生一個wr_ting寫觸發(fā)信號給sdram_control模塊,sdram_control通過控制SDRAM將“W_FIFO”中的光譜數(shù)據(jù)讀取到SDRAM中進(jìn)行存儲。當(dāng)需要對SDRAM中的數(shù)據(jù)進(jìn)行讀取時,上位機(jī)給系統(tǒng)發(fā)送一個讀取指令,并產(chǎn)生一個rd_ting配合“R_FIFO”將SDRAM中的數(shù)據(jù)讀取出來,最后通過串口發(fā)送出去。
圖3 系統(tǒng)邏輯框圖Fig.3 System logic block diagrams
sdram_control控制邏輯設(shè)計的核心部分是對sdram_control狀態(tài)機(jī)的設(shè)計,狀態(tài)機(jī)通過對SDRAM的讀操作、寫操作、自動刷新操作和預(yù)充電操作的調(diào)度來實現(xiàn)對光譜數(shù)據(jù)的存儲和讀取。sdram_control的狀態(tài)機(jī)主要由仲裁狀態(tài)機(jī)、寫狀態(tài)機(jī)和讀狀態(tài)機(jī)等三部分構(gòu)成,其中讀操作狀態(tài)轉(zhuǎn)移與寫操作狀態(tài)轉(zhuǎn)移的過程類似。如圖4所示,仲裁狀態(tài)機(jī)主要是對SDRAM的操作順序進(jìn)行仲裁,通過判斷模塊間的信號來調(diào)度相應(yīng)的功能模塊從而實現(xiàn)想要的功能。1)處于IDLE(空閑)狀態(tài)下的時候,需要對SDRAM進(jìn)行初始化操作,否則會產(chǎn)生無法預(yù)料的結(jié)果,初始化完成后即可跳轉(zhuǎn)到ABRIT(仲裁)狀態(tài);2)ABRIT主要功能是對各個信號進(jìn)行判斷,根據(jù)信號來調(diào)度各個功能模塊;3)REF(刷新)狀態(tài),當(dāng)達(dá)到了指定的刷新時間,REF狀態(tài)會產(chǎn)生刷新請求進(jìn)行刷新操作,來保證SDRAM上的數(shù)據(jù)不丟失;4)WRITE(寫)狀態(tài),向ABRIT發(fā)送寫請求wr_req,ABRIT進(jìn)行仲裁,在合理的情況下,發(fā)送一個wr_en寫信號給WRITE狀態(tài)進(jìn)行寫數(shù)據(jù)操作;5)讀模塊的狀態(tài)轉(zhuǎn)移條件與寫模塊狀態(tài)轉(zhuǎn)移類似。默認(rèn)的優(yōu)先級從高到低依次是REF狀態(tài)、READ狀態(tài)、WRITE狀態(tài)。
圖4 仲裁狀態(tài)轉(zhuǎn)移圖Fig.4 Arbitration state transition diagram
如圖5所示,寫狀態(tài)機(jī)作為WRITE狀態(tài)內(nèi)部的一個狀態(tài)機(jī),用來完成SDRAM的寫數(shù)據(jù)操作。1)在IDLE狀態(tài)下,系統(tǒng)會產(chǎn)生一個“空命令”不進(jìn)行任何操作,等到wr_ting寫觸發(fā)信號到來時跳轉(zhuǎn)到REQ(請求)狀態(tài)下;2)REQ狀態(tài)下產(chǎn)生一個寫請求信號wr_req給仲裁狀態(tài)機(jī)進(jìn)行仲裁,當(dāng)仲裁狀態(tài)機(jī)給寫模塊發(fā)送一個wr_en寫使能信號時從REQ狀態(tài)跳轉(zhuǎn)到ACT(激活)狀態(tài);3)ACT狀態(tài)下對SDRAM進(jìn)行激活并給定一個行初始地址,等到激活時間結(jié)束跳轉(zhuǎn)到WR(寫)數(shù)據(jù)狀態(tài);4)WR狀態(tài)開始對數(shù)據(jù)進(jìn)行寫入,WR狀態(tài)跳轉(zhuǎn)到PRE(預(yù)充電)狀態(tài)主要有三種情況ref_end(刷新時間到了)、row_end(一行數(shù)據(jù)寫滿了進(jìn)行換行操作)以及wr_data_end(所有數(shù)據(jù)寫入完畢);5)PRE(預(yù)充電)狀態(tài)下完成對SDRAM的預(yù)充電操作,SDRAM是電荷存儲機(jī)制,需要在相應(yīng)的時間內(nèi)進(jìn)行預(yù)充電操作防止數(shù)據(jù)丟失。最后,在PRE狀態(tài)下等待信號的產(chǎn)生,完成相應(yīng)狀態(tài)的跳轉(zhuǎn),讀狀態(tài)轉(zhuǎn)移與寫狀態(tài)轉(zhuǎn)移類似。
圖5 寫狀態(tài)轉(zhuǎn)移圖Fig.5 Write state transition diagram
命令解析模塊sdram_cmd作為連接w_fifo控制模塊和sdram_control控制模塊的一個橋梁,會根據(jù)接收到的操作信號產(chǎn)生相應(yīng)的觸發(fā)信號來驅(qū)動SDRAM對“W_FIFO”中的數(shù)據(jù)進(jìn)行讀取。同時,也控制著“R_FIFO”與串口發(fā)送模塊的數(shù)據(jù)讀寫是整個控制邏輯的關(guān)鍵部分。sdram_cmd模塊的接口設(shè)計如圖6所示。
圖6 命令解析模塊接口設(shè)計Fig.6 Interface design of command parsing module
sdram_cmd的控制邏輯如圖7所示,給adc_data發(fā)送一個16’h55命令,并配置給cmd_reg命令寄存器提示系統(tǒng)開始進(jìn)行光譜數(shù)據(jù)的采集。每采集完一個數(shù)據(jù)就產(chǎn)生一個adc_done信號,同時產(chǎn)生一個wifio_wr_en信號控制“W_FIFO”寫入ADC采樣得到的數(shù)據(jù)。adc_data每接收到一個數(shù)據(jù),data_cnt就進(jìn)行加1操作,當(dāng)“W_FIFO”存儲空間被寫滿時data_cnt清零并產(chǎn)生一個wr_ting寫觸發(fā)信號提醒SDRAM開始寫入“W_FIFO”中的數(shù)據(jù)。當(dāng)需要將SDRAM中的數(shù)據(jù)傳輸?shù)缴衔粰C(jī)時,發(fā)送一個16’haa命令配置給cmd_reg命令寄存器,并產(chǎn)生一個rd_ting信號用于控制“R_FIFO”對SDRAM存儲數(shù)據(jù)的讀取。
圖7 時序圖Fig.7 Sequence diagram
通過編寫相應(yīng)的仿真測試文件對光譜信號采集系統(tǒng)的邏輯功能進(jìn)行了仿真驗證。為了便于對整個系統(tǒng)的邏輯功能進(jìn)行測試,將adc_driver控制模塊修改為了uart_rx串口接收模塊,用于接收PC端發(fā)送的光譜數(shù)據(jù)。通過uart_tx接收到光譜數(shù)據(jù)來模擬adc_driver模塊采樣得到的光譜數(shù)據(jù)對系統(tǒng)的邏輯功能進(jìn)行測試。仿真用到的測試軟件是Quartus II 15.0和ModelSim 10.3d,SDRAM模型是在鎂光網(wǎng)上下載的W9812G6KH-75 SDRAM官方模型。仿真用到的127個測試數(shù)據(jù)是基于MOEMS掃描光柵微鏡諧振頻率為656.38 Hz時采集到的電壓數(shù)據(jù)[19],為了便于uart_tx模塊進(jìn)行仿真測試需要將原始的電壓數(shù)據(jù)進(jìn)行取整。處理好的電壓測試數(shù)據(jù)如表2所示,仿真結(jié)果中SDRAM寫入和讀取的部分?jǐn)?shù)據(jù)如圖8所示,串口發(fā)送數(shù)據(jù)波形如圖9所示。
表2 諧振頻率為656.38 Hz時的部分電壓數(shù)據(jù)Tab.2 Part of the voltage data when the resonance frequency is 656.38 H
圖8(a)和表2對比可以看出由串口發(fā)送的電壓數(shù)據(jù)經(jīng)“W_FIFO”被正確的寫入進(jìn)了SDRAM存儲了起來。通過sdram_control控制邏輯對SDRAM進(jìn)行刷新和預(yù)充電操作,確保SDRAM中的數(shù)據(jù)不會丟失。圖8(b)和表2的對比可以看出,在PC端提取數(shù)據(jù)的過程中SDRAM中的數(shù)據(jù)被“R_FIFO”正確的讀取,經(jīng)串口發(fā)送如圖9所示的數(shù)據(jù)波形。
圖8 SDRAM功能仿真結(jié)果Fig.8 SDRAM function simulation results
為了驗證串口發(fā)送數(shù)據(jù)的正確性,將圖9中的data_tx_rx信號的波形以十進(jìn)制數(shù)顯示得到如圖10所示的結(jié)果。對比表2可以看出數(shù)據(jù)被正確的發(fā)送。
圖9 發(fā)送至上位機(jī)的數(shù)據(jù)波形Fig.9 Data waveform sent to the host computer
圖10 串口發(fā)送的數(shù)據(jù)Fig.10 Data sent by the serial port
針對傳統(tǒng)的光譜信號嵌入式采集系統(tǒng)數(shù)據(jù)存儲容量小、硬件體積較大、外圍電路復(fù)雜以及硬件價格昂貴等問題,本文提出了以FPGA,SDRAM、FIFO和串口為核心的光譜信號實時采集和傳輸系統(tǒng)。主要具備以下幾個優(yōu)點(diǎn):1)FPGA和SDRAM是高度集成的芯片,大部分電路都被集成到芯片內(nèi)部,只需要設(shè)計專用的控制邏輯完成芯片內(nèi)部的連線就可以實現(xiàn)想要的功能。因此降低了外圍電路的復(fù)雜程度,一定程度上減小的PCB的體積,有利于近紅外光譜儀的微型化;2)SDRAM是以電荷的形式進(jìn)行數(shù)據(jù)存儲,相對于以CMOS晶體管形式存儲數(shù)據(jù)的SRAM來說,同樣存儲容量的SDRAM體積更小、功耗更低。只需要通過設(shè)計相應(yīng)的SDRAM控制邏輯完成正確的預(yù)充電和刷新操作,就可以確保數(shù)據(jù)不會丟失。3)鑒于,CMOS晶體管的數(shù)據(jù)存儲機(jī)制,決定了SRAM容量不可能被做到很大。而目前SDRAM最多可做到512M的存儲容量,采用該方案能夠滿足光譜信號大容量的采集要求。4)該方案相對于其他方案來說成本較低,但是需要設(shè)計復(fù)雜的控制邏輯,設(shè)計的周期較長。本文通過編寫相應(yīng)的功能測試文件對系統(tǒng)的控制邏輯進(jìn)行了驗證,結(jié)果表明光譜信號采集系統(tǒng)的時序控制邏輯可行,能夠正確控制光譜信號采集、大容量存儲和實時傳輸?shù)炔僮??;贔PGA的可升級特性,后期可以采用USB來完成對數(shù)據(jù)的傳輸,進(jìn)一步提高光譜數(shù)據(jù)傳輸?shù)乃俾省?/p>