基于Nios平臺的光信號采集片上系統(tǒng)設計
關鍵詞:片上系統(tǒng) 光纖光柵 光信號采集 Nios
引言
一項很有發(fā)展前景的新技術-纖維光學及光纖光柵(FBG,F(xiàn)iber Bragg Grating)技術,已經(jīng)被應用于溫度及形變在線測量中。FBG傳感器的特征就是具有良好的穩(wěn)定性、可靠性。除此之外,它還具有基于光纖傳感器的一些共有優(yōu)點,如對電磁的不敏感性、尺寸小、傳感器和數(shù)據(jù)獲取裝置之間距離可以很遠;因而能克服傳統(tǒng)的溫度和形變傳感器(如熱電偶和形變測量器)的很多缺點,如重量、硬度方面的缺陷以及對環(huán)境變化干擾的抵抗能力差等。
本文主要介紹對FBG傳感器信號的快速獲取方法,重點介紹基于FPGA的Altera公司的Excalibur開發(fā)板,設計一個片上嵌入式測量系統(tǒng),用它來獲取光信號。與目前具有同樣功能的其它測量系統(tǒng)相比,它具有靈活、穩(wěn)定、易維護、高效率等優(yōu)點。本測量系統(tǒng)的硬件開發(fā)包括,使用Altera Excalibur開發(fā)板配置生成一個嵌有Nios處理器的“片上”測量系統(tǒng),以及使用CCD和高速ADC設計光電信號的轉(zhuǎn)換和采集電路;軟件開發(fā)包括,在Apex EP20K FPGA中時序信號的Verilog實現(xiàn),使用C語言對光電信號的獲取。
1 系統(tǒng)結(jié)構(gòu)
測量系統(tǒng)由以下幾部分組成:光學系統(tǒng)、放置被測物體內(nèi)的光纖光柵(FBG)和信號采集處理部分。其中的光學系統(tǒng)包括光源和分光儀,使用高亮度的激光發(fā)生器作為光源,用于產(chǎn)生入射被測物體內(nèi)的光纖的光波。它的功率大于1mW,光頻譜位于808~858nm,入射后其中某一波長的光波被光柵反射回來,并進入分光儀。分光儀是由若干面反射鏡和全息光柵組成,主要作用是對光波進行光學處理后,使光波能夠準確投射在CCD上,將光信號轉(zhuǎn)換成電信號,便于信號的采集和處理。系統(tǒng)中信號采集處理部分是由CCD線列傳感器ADC轉(zhuǎn)換器以及Altera ExCalibur開發(fā)板組成。它的作用是將投射在CCD上的光信號先變?yōu)槟M電信號,而后通過ADC將信號再轉(zhuǎn)換成數(shù)字量信號,然后通過Altera's Excalibur開發(fā)板上的片上Nios嵌入式系統(tǒng),對這些數(shù)字量信號進行采集和處理,得到相應的溫度值和應變值,以便完成整個測量過程。系統(tǒng)框架示意圖如圖1所示。
2 光纖光柵(FBG)傳感器工作原理
光纖光柵(FBG)傳感器是光纖傳感器的一種。它不僅可以用于靜態(tài)信號,還可以用于動態(tài)信號的采集,例如溫度、形變和壓力等。
以下結(jié)合圖2介紹光纖光柵(FBG)的工作原理。
光纖光柵(FBG)傳感器的工作原理就是用某一波長的光信號來表示我們希望采集的物理量。光纖中的光柵可以被看作是一個“濾波器”。根據(jù)光柵本身的物理特性,進入光纖的光波的某一波長部分被光柵反射回來,這一波長的光波就被從入身的光波中“濾除”了。這樣,我們希望采集的物理量就被“調(diào)制”成了這一波長的光信號。
圖3 緩沖接口電路
假設光柵的反射系數(shù)為neff,光柵之間的幾何距離為dB,通過以下公式得出被反射回的光波的波長λB=2×neff×dB。機械應力將改變光柵之間的幾何距離,而溫度的變化將改變光柵的反射系數(shù)??梢栽囅耄谝阎獪囟萒0和已知壓力ε0條件下,反射波長為λB0,那么,可以通過檢測未知溫度T1和未知應力ε1所對應反射波長λ1與λB0之間的波長偏移,來計算得到此刻的溫度T1和應力ε1,計算公式如下:
其中光柵的相關常系數(shù)c1、c2,由光柵的校準過程所決定。
應力ε1=(λ1-λB0)/[(1-Peff)]×λB0
其中光柵常系數(shù)的Peff是光柵光塑常系數(shù)。
3 CCD圖像傳感器的選擇
為了方便系統(tǒng)對FBG輸出的光信號進行處理,必須將其轉(zhuǎn)換成電信號,我們采用光電信號轉(zhuǎn)換器未完成這方面的工作。在本系統(tǒng)中,因為發(fā)光源的波譜范圍是808~858nm,所以我們選用了波譜范圍為200~1100nm的2048個像素的灰度線列CCD圖像傳感器ILX511B。
CCD將光信號轉(zhuǎn)換成模擬電信號,每個像素產(chǎn)生一個模擬電信號,這樣CCD每次進行光電轉(zhuǎn)換就產(chǎn)生2048個模擬電信號;同時,它將這2048個像素位置串行地“封裝”成一個有效數(shù)據(jù)字段,可以在外加時鐘同步信號(CLK)和芯片使讀端(ROG)作用下,從CCD中讀出數(shù)據(jù)。外加的同步時鐘信號由2087個時鐘脈沖組成,在每個時鐘脈沖作用下,一個數(shù)據(jù)位被讀出。這2087個數(shù)據(jù)位由以下幾部分組成:首部偽數(shù)據(jù)字段(33個數(shù)據(jù)位)、有效數(shù)據(jù)字段(2048個數(shù)據(jù)位)、尾部偽數(shù)據(jù)字段(6個數(shù)據(jù)位)。需要注意的是,為了提高電磁兼容性,CCD的工作方式應該選擇為采樣一保持方式;同時,CCD在上電后處于內(nèi)部電路初始化階段,為了避免得到錯誤的數(shù)據(jù),最初22 500個時鐘脈沖用于初始化CCD,不要在此階段讀出數(shù)據(jù)。
4 ADC接口設計與Altera Nios平臺
4.1 ADC接口設計
經(jīng)過CCD傳感器轉(zhuǎn)換輸出的模擬量,必須通過ADC轉(zhuǎn)換器轉(zhuǎn)換成數(shù)字信號,這樣系統(tǒng)才可以處理這些信號。因為CCD的動態(tài)范圍是48.5dB,根據(jù)公式
ADC精度≥動態(tài)范圍(dB)/20×log2
可以計算得到ADC精度≥8.06,所以選擇ADC的精度必須是9位或9位以上的;同時,根據(jù)以下公式計算ADC的速度:
fs=1×2MHz(CCD的最大時鐘頻率)=2MHz(采樣和保持方式)。
通過上述計算和分析,得到所需ADC的兩個主要特性指標,即精度至少要9位,采樣的速率必須至少2Msps。
現(xiàn)在,有很多ADC轉(zhuǎn)換器可以應用于CCD圖像處理。在綜合考慮了諸多因素后,我們選擇Linear的串行ADCLTC1402。
在設計ADC接口電路時,要注意以下一些問題。首先,由于LTC1402內(nèi)部輸入信號的“保持-采樣”電路的速率達到80MHz,所以,外部的噪聲和干擾都可以通過LTC1402的輸入端對A/D轉(zhuǎn)換產(chǎn)生影響。根據(jù)LTC1402數(shù)據(jù)手冊的要求,我們解決的方法是,在LTC1402的輸入端加上一階的濾波電路,將輸入信號的頻率限制在一定的范圍內(nèi)。其次,CCD的輸出對于外界的阻抗變化比較敏感,如果將ADC的輸入端與CCD的輸出直接相連,則CCD的負載可能隨ADC輸入端內(nèi)部阻抗的變化而變化?;谝陨蟽牲c考慮,我們在CCD和ADC之間設計了緩沖電路,用于阻抗匹配和濾波。緩沖接口電路如圖3所示。
由圖3可計算ADC的輸入最高頻率:
fg=1/[(2×π×R5×C3)]=10.3MHz。
4.2 Altera Nios平臺
在細致分析系統(tǒng)的特點后,我們決定選擇專門針對SOPC應用的Altera Excalibur開發(fā)套件。開發(fā)套件包括以下部分:
*Nios處理器以及外圍接口;
*Quartus II開發(fā)軟件;
*GNDUro編譯器;
*基于APEX EP20K200E FPGA的開發(fā)板;
*相關的開發(fā)例程。
圖5 時鐘和控制信號發(fā)生器的仿真時序
我們使用集成在QuartusII中的SOPC Builder工具來配置生成片上系統(tǒng)。SOPC Builder是一個功能強大的基于圖形界面的片上系統(tǒng)的定義和定制工具,可以在短時間內(nèi)完成用戶定制的SOPC設計。根據(jù)應用的需要,從SOPC Builder庫中選擇IP模塊、存儲器、外圍接口和處理器,并且配置生成一個高集成度的SOPC系統(tǒng),因而選取以下一些模塊組成片上系統(tǒng):Nios 32bit CPU、Boot Monitor ROM、Communication UART、debugging UART、Timer、Button PIO、User PIO、LCD PIO、LED PIO、DMA、SPI、Seven Segment PIO、External RAM Bus(Avalon TriState Bridge)、External RAM Interface、External Flash Interface。
同時,SOPC Builder自動產(chǎn)生一些必需的仲裁邏輯來協(xié)調(diào)系統(tǒng)中以上各個部件的工作,我們將系統(tǒng)的工作頻率設為33MHz。定制完片上系統(tǒng)的硬件后,SOPC Builder還為編寫操作這些片上硬件的軟件代碼提供了一個軟件開發(fā)環(huán)境,這個軟件環(huán)境包括語言頭文件、外圍接口的驅(qū)動以及實時操作系統(tǒng)的內(nèi)核,極大地方便了軟件的開發(fā)。
5 系統(tǒng)實現(xiàn)
以下分兩部分來分析和介紹:①在ApexEP20K FPGA中,使用Verilog編寫時鐘和控制信號發(fā)生器用于驅(qū)動CCD和ADC,并且協(xié)調(diào)兩者的工作;②使用C語言編寫程序,通過SOPC Builder配置的SPI接口讀取ADC輸出的數(shù)據(jù)。
5.1 時鐘和控制信號發(fā)生器
使用Verilog編寫時鐘和控制信號發(fā)生器,用于產(chǎn)生驅(qū)動CCD和ADC的時鐘和控制信號。時鐘發(fā)生器的工作原理是:使用頻率為33MHz的系統(tǒng)時鐘,作為時鐘發(fā)生器的輸入和同步售,用于產(chǎn)生所需的CCD和ADC驅(qū)動的時鐘和控制信號。根據(jù)系統(tǒng)的要求和CCD以及ADC芯片特性,將產(chǎn)生的CCD時鐘頻率設為1MHz;同時把ADC的時鐘頻率設為33MHz。在時鐘發(fā)生器中,還需對產(chǎn)生CCD和ADC兩個高速設備的時鐘和控制信號進行匹配,使得兩者能夠正常地工作。
現(xiàn)在詳細地分析這兩個高速設備如何完成時序的匹配。由于系統(tǒng)中的CCD和ADC都是依靠外加時鐘同步的高速設備,因此,這兩個設備之間的時序的匹配對于能否獲取正確有效的數(shù)據(jù)來說至關重要。為了使兩個設備協(xié)同工作,首先要分析每個設備所需的外加時鐘和控制兩個外加信號,分別是CCD_ROG和CCD_CLK。CCD_ROG信號使得CCD的輸出數(shù)據(jù)有效,也就是每次從CCD讀取數(shù)據(jù)時,都要先給CCD_ROG一個低電平,將CCD置光電轉(zhuǎn)換后的數(shù)據(jù)一位位地輸出。ADC進行模數(shù)轉(zhuǎn)換也需要兩個外加信號,分別是ADC_CONV和ADC_CLK。ADC_CONV信號使ADC芯片開始進行模數(shù)轉(zhuǎn)換,每次進行轉(zhuǎn)換前都要給ADC_CONV一個高電平;同時,轉(zhuǎn)換過程和轉(zhuǎn)換后的結(jié)果輸出在ADC_CLK信號的同步完成。
由于需要先從CCD光電轉(zhuǎn)換器讀出模擬數(shù)據(jù),所以,要通過CCD_ROG給CCD一個長度為t1(t1=4000ns)的低電平。在CCD_ROG重新變?yōu)楦唠娖胶螅珻CD就在CCD_CLK信號的同步下輸出數(shù)據(jù)了,在每個CCD_CLK作用下輸出一個模擬量數(shù)據(jù)。CCD每次輸出的2087個模擬量分別由33個首部偽數(shù)據(jù)字段、2048個有效數(shù)據(jù)和6個尾部偽數(shù)據(jù)字段組成。其中的2048個有效數(shù)據(jù)和首部偽數(shù)據(jù)字段的后20個數(shù)據(jù)就是我們希望得到的,所以從第14個數(shù)據(jù)到第2081個數(shù)據(jù)中的每個模擬量,都通過ADC_CONV(ADC_CONV的高電平寬度為4ns),給出一個高電平啟動ADC;同時,在ADC_CLK的作用下,完成模數(shù)轉(zhuǎn)換過程和數(shù)字量輸出。圖4、圖5是時鐘和控制信號發(fā)生器的程序流程和仿真時序圖。
5.2 SPI接口的編程
ADC將模擬信號轉(zhuǎn)換成數(shù)字信號后,Nios通過SPI接口讀入這些信號并進行相應的處理。我們通過Quartus II中的SOPC Builder為Nios核配置SPI接口。在我們的系統(tǒng)中,將SPI配置為從設備。軟件通過訪問存儲器中映射的5個16位的寄存器來控制和讀寫SPI接口。讀入的數(shù)據(jù)通過MOSI引腳逐位進入移位寄存器。通過移位寄存器的移位和緩沖后,一幀數(shù)據(jù)進入寄存器rxdata,同時將狀態(tài)寄存器的rrdy位置1,通過訪問rxdata就得到一幀數(shù)據(jù)。數(shù)據(jù)被讀取后,rrdy位自動置回0。如果前一幀數(shù)據(jù)還未從rxdata讀取,后一幀數(shù)據(jù)就會將原數(shù)據(jù)覆蓋,造成錯誤,同時將狀態(tài)寄存器的ROE(Read Overwrite Error)位置成1。SPI接口共有4個引腳,分別是MISO(Master Input Slave Output)、MOSI(Master Output Slave Input)、SCLK(同步時鐘)和SS_n。當SS_n為低電平時,從設備可以在SCLK同步作用下讀入數(shù)據(jù)。系統(tǒng)中的SPI接口是從設備,所以只使用MOSI、SCLK和SS_n三根引腳。圖6是Nios中SPI與ADC的接口示意圖。
從ADS的芯片特性可知,當ADC_CONV在一個高電平的作用下,ADC開始進行模數(shù)轉(zhuǎn)換。ADC_CONV回復到電平后,因為SS_n和ADC_CONV連在一起,所以Nios中的SPI就處于可以讀入數(shù)據(jù)的狀態(tài)了;同時,在ADC_SCK的作用下ADC輸出數(shù)據(jù),而SPI也在相同的時鐘SCLK的作用下,通過MOSI讀入數(shù)據(jù)。為了能夠準確得到數(shù)據(jù),還要將SPI寄存器rxdata的位數(shù)設為13位。軟件中,我們將通過等待SPI寄存器的rrdy位的置位,來讀取rxdata中的數(shù)據(jù),與此同時寄存器中roe的狀態(tài)決定此幀數(shù)據(jù)的讀取過程中是否存在數(shù)據(jù)溢出現(xiàn)象。以下是相關的讀取數(shù)據(jù)的軟件代碼。
do{
//讀一行CCD數(shù)據(jù)
for(i=0;i<2069;i++){
//等待,直到準備好
while(spi->np_spistatus&np_spistatus_rrdy_mask)==0)
;
//從SPI數(shù)據(jù)寄存器讀數(shù)據(jù)
c[i]=spi->np_spirxdata;
}
//讀覆蓋狀態(tài)
b=spi->np_spistatus&np_spistatus_roe_mask;
}while(b==8);
結(jié)論
本系統(tǒng)經(jīng)過仿真測試,其功能達到了設計要求,并用HP邏輯分析儀驗證了系統(tǒng)功能。