基于Nios平臺的光信號采集片上系統設計
一項很有發(fā)展前景的新技術-纖維光學及光纖光柵(fbg,fiber bragg grating)技術,已經被應用于溫度及形變在線測量中。fbg傳感器的特征就是具有良好的穩(wěn)定性、可靠性。除此之外,它還具有基于光纖傳感器的一些共有優(yōu)點,如對電磁的不敏感性、尺寸小、傳感器和數據獲取裝置之間距離可以很遠;因而能克服傳統的溫度和形變傳感器(如熱電偶和形變測量器)的很多缺點,如重量、硬度方面的缺陷以及對環(huán)境變化干擾的抵抗能力差等。
本文引用地址:http://m.butianyuan.cn/article/21324.htm本文主要介紹對fbg傳感器信號的快速獲取方法,重點介紹基于fpga的altera公司的excalibur開發(fā)板,設計一個片上嵌入式測量系統,用它來獲取光信號。與目前具有同樣功能的其它測量系統相比,它具有靈活、穩(wěn)定、易維護、高效率等優(yōu)點。本測量系統的硬件開發(fā)包括,使用altera excalibur開發(fā)板配置生成一個嵌有nios處理器的“片上”測量系統,以及使用ccd和高速adc設計光電信號的轉換和采集電路;軟件開發(fā)包括,在apex ep20k fpga中時序信號的verilog實現,使用c語言對光電信號的獲取。
1 系統結構
測量系統由以下幾部分組成:光學系統、放置被測物體內的光纖光柵(fbg)和信號采集處理部分。其中的光學系統包括光源和分光儀,使用高亮度的激光發(fā)生器作為光源,用于產生入射被測物體內的光纖的光波。它的功率大于1mw,光頻譜位于808~858nm,入射后其中某一波長的光波被光柵反射回來,并進入分光儀。分光儀是由若干面反射鏡和全息光柵組成,主要作用是對光波進行光學處理后,使光波能夠準確投射在ccd上,將光信號轉換成電信號,便于信號的采集和處理。系統中信號采集處理部分是由ccd線列傳感器adc轉換器以及altera excalibur開發(fā)板組成。它的作用是將投射在ccd上的光信號先變?yōu)槟M電信號,而后通過adc將信號再轉換成數字量信號,然后通過alteras excalibur開發(fā)板上的片上nios嵌入式系統,對這些數字量信號進行采集和處理,得到相應的溫度值和應變值,以便完成整個測量過程。系統框架示意圖如圖1所示。
2 光纖光柵(fbg)傳感器工作原理
光纖光柵(fbg)傳感器是光纖傳感器的一種。它不僅可以用于靜態(tài)信號,還可以用于動態(tài)信號的采集,例如溫度、形變和壓力等。
以下結合圖2介紹光纖光柵(fbg)的工作原理。
光纖光柵(fbg)傳感器的工作原理就是用某一波長的光信號來表示我們希望采集的物理量。光纖中的光柵可以被看作是一個“濾波器”。根據光柵本身的物理特性,進入光纖的光波的某一波長部分被光柵反射回來,這一波長的光波就被從入身的光波中“濾除”了。這樣,我們希望采集的物理量就被“調制”成了這一波長的光信號。
假設光柵的反射系數為neff,光柵之間的幾何距離為db,通過以下公式得出被反射回的光波的波長λb=2×neff×db。機械應力將改變光柵之間的幾何距離,而溫度的變化將改變光柵的反射系數??梢栽囅耄谝阎獪囟萾0和已知壓力ε0條件下,反射波長為λb0,那么,可以通過檢測未知溫度t1和未知應力ε1所對應反射波長λ1與λb0之間的波長偏移,來計算得到此刻的溫度t1和應力ε1,計算公式如下:
其中光柵的相關常系數c1、c2,由光柵的校準過程所決定。
應力ε1=(λ1-λb0)/[(1-peff)]×λb0
其中光柵常系數的peff是光柵光塑常系數。
3 ccd圖像傳感器的選擇
為了方便系統對fbg輸出的光信號進行處理,必須將其轉換成電信號,我們采用光電信號轉換器未完成這方面的工作。在本系統中,因為發(fā)光源的波譜范圍是808~858nm,所以我們選用了波譜范圍為200~1100nm的2048個像素的灰度線列ccd圖像傳感器ilx511b。
ccd將光信號轉換成模擬電信號,每個像素產生一個模擬電信號,這樣ccd每次進行光電轉換就產生2048個模擬電信號;同時,它將這2048個像素位置串行地“封裝”成一個有效數據字段,可以在外加時鐘同步信號(clk)和芯片使讀端(rog)作用下,從ccd中讀出數據。外加的同步時鐘信號由2087個時鐘脈沖組成,在每個時鐘脈沖作用下,一個數據位被讀出。這2087個數據位由以下幾部分組成:首部偽數據字段(33個數據位)、有效數據字段(2048個數據位)、尾部偽數據字段(6個數據位)。需要注意的是,為了提高電磁兼容性,ccd的工作方式應該選擇為采樣一保持方式;同時,ccd在上電后處于內部電路初始化階段,為了避免得到錯誤的數據,最初22 500個時鐘脈沖用于初始化ccd,不要在此階段讀出數據。
4 adc接口設計與altera nios平臺
4.1 adc接口設計
經過ccd傳感器轉換輸出的模擬量,必須通過adc轉換器轉換成數字信號,這樣系統才可以處理這些信號。因為ccd的動態(tài)范圍是48.5db,根據公式
adc精度≥動態(tài)范圍(db)/20×log2
可以計算得到adc精度≥8.06,所以選擇adc的精度必須是9位或9位以上的;同時,根據以下公式計算adc的速度:
fs=1×2mhz(ccd的最大時鐘頻率)=2mhz(采樣和保持方式)。
通過上述計算和分析,得到所需adc的兩個主要特性指標,即精度至少要9位,采樣的速率必須至少2msps。
現在,有很多adc轉換器可以應用于ccd圖像處理。在綜合考慮了諸多因素后,我們選擇linear的串行adcltc1402。
在設計adc接口電路時,要注意以下一些問題。首先,由于ltc1402內部輸入信號的“保持-采樣”電路的速率達到80mhz,所以,外部的噪聲和干擾都可以通過ltc1402的輸入端對a/d轉換產生影響。根據ltc1402數據手冊的要求,我們解決的方法是,在ltc1402的輸入端加上一階的濾波電路,將輸入信號的頻率限制在一定的范圍內。其次,ccd的輸出對于外界的阻抗變化比較敏感,如果將adc的輸入端與ccd的輸出直接相連,則ccd的負載可能隨adc輸入端內部阻抗的變化而變化。基于以上兩點考慮,我們在ccd和adc之間設計了緩沖電路,用于阻抗匹配和濾波。緩沖接口電路如圖3所示。
由圖3可計算adc的輸入最高頻率:
fg=1/[(2×π×r5×c3)]=10.3mhz。
4.2 altera nios平臺
在細致分析系統的特點后,我們決定選擇專門針對sopc應用的altera excalibur開發(fā)套件。開發(fā)套件包括以下部分:
*nios處理器以及外圍接口;
*quartus ii開發(fā)軟件;
*gnduro編譯器;
*基于apex ep20k200e fpga的開發(fā)板;
*相關的開發(fā)例程。
我們使用集成在quartusii中的sopc builder工具來配置生成片上系統。sopc builder是一個功能強大的基于圖形界面的片上系統的定義和定制工具,可以在短時間內完成用戶定制的sopc設計。根據應用的需要,從sopc builder庫中選擇ip模塊、存儲器、外圍接口和處理器,并且配置生成一個高集成度的sopc系統,因而選取以下一些模塊組成片上系統: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自動產生一些必需的仲裁邏輯來協調系統中以上各個部件的工作,我們將系統的工作頻率設為33mhz。定制完片上系統的硬件后,sopc builder還為編寫操作這些片上硬件的軟件代碼提供了一個軟件開發(fā)環(huán)境,這個軟件環(huán)境包括語言頭文件、外圍接口的驅動以及實時操作系統的內核,極大地方便了軟件的開發(fā)。
5 系統實現
以下分兩部分來分析和介紹:①在apexep20k fpga中,使用verilog編寫時鐘和控制信號發(fā)生器用于驅動ccd和adc,并且協調兩者的工作;②使用c語言編寫程序,通過sopc builder配置的spi接口讀取adc輸出的數據。
5.1 時鐘和控制信號發(fā)生器
使用verilog編寫時鐘和控制信號發(fā)生器,用于產生驅動ccd和adc的時鐘和控制信號。時鐘發(fā)生器的工作原理是:使用頻率為33mhz的系統時鐘,作為時鐘發(fā)生器的輸入和同步售,用于產生所需的ccd和adc驅動的時鐘和控制信號。根據系統的要求和ccd以及adc芯片特性,將產生的ccd時鐘頻率設為1mhz;同時把adc的時鐘頻率設為33mhz。在時鐘發(fā)生器中,還需對產生ccd和adc兩個高速設備的時鐘和控制信號進行匹配,使得兩者能夠正常地工作。
現在詳細地分析這兩個高速設備如何完成時序的匹配。由于系統中的ccd和adc都是依靠外加時鐘同步的高速設備,因此,這兩個設備之間的時序的匹配對于能否獲取正確有效的數據來說至關重要。為了使兩個設備協同工作,首先要分析每個設備所需的外加時鐘和控制兩個外加信號,分別是ccd_rog和ccd_clk。ccd_rog信號使得ccd的輸出數據有效,也就是每次從ccd讀取數據時,都要先給ccd_rog一個低電平,將ccd置光電轉換后的數據一位位地輸出。adc進行模數轉換也需要兩個外加信號,分別是adc_conv和adc_clk。adc_conv信號使adc芯片開始進行模數轉換,每次進行轉換前都要給adc_conv一個高電平;同時,轉換過程和轉換后的結果輸出在adc_clk信號的同步完成。
由于需要先從ccd光電轉換器讀出模擬數據,所以,要通過ccd_rog給ccd一個長度為t1(t1=4000ns)的低電平。在ccd_rog重新變?yōu)楦唠娖胶?,ccd就在ccd_clk信號的同步下輸出數據了,在每個ccd_clk作用下輸出一個模擬量數據。ccd每次輸出的2087個模擬量分別由33個首部偽數據字段、2048個有效數據和6個尾部偽數據字段組成。其中的2048個有效數據和首部偽數據字段的后20個數據就是我們希望得到的,所以從第14個數據到第2081個數據中的每個模擬量,都通過adc_conv(adc_conv的高電平寬度為4ns),給出一個高電平啟動adc;同時,在adc_clk的作用下,完成模數轉換過程和數字量輸出。圖4、圖5是時鐘和控制信號發(fā)生器的程序流程和仿真時序圖。
5.2 spi接口的編程
adc將模擬信號轉換成數字信號后,nios通過spi接口讀入這些信號并進行相應的處理。我們通過quartus ii中的sopc builder為nios核配置spi接口。在我們的系統中,將spi配置為從設備。軟件通過訪問存儲器中映射的5個16位的寄存器來控制和讀寫spi接口。讀入的數據通過mosi引腳逐位進入移位寄存器。通過移位寄存器的移位和緩沖后,一幀數據進入寄存器rxdata,同時將狀態(tài)寄存器的rrdy位置1,通過訪問rxdata就得到一幀數據。數據被讀取后,rrdy位自動置回0。如果前一幀數據還未從rxdata讀取,后一幀數據就會將原數據覆蓋,造成錯誤,同時將狀態(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同步作用下讀入數據。系統中的spi接口是從設備,所以只使用mosi、sclk和ss_n三根引腳。圖6是nios中spi與adc的接口示意圖。
從ads的芯片特性可知,當adc_conv在一個高電平的作用下,adc開始進行模數轉換。adc_conv回復到電平后,因為ss_n和adc_conv連在一起,所以nios中的spi就處于可以讀入數據的狀態(tài)了;同時,在adc_sck的作用下adc輸出數據,而spi也在相同的時鐘sclk的作用下,通過mosi讀入數據。為了能夠準確得到數據,還要將spi寄存器rxdata的位數設為13位。軟件中,我們將通過等待spi寄存器的rrdy位的置位,來讀取rxdata中的數據,與此同時寄存器中roe的狀態(tài)決定此幀數據的讀取過程中是否存在數據溢出現象。以下是相關的讀取數據的軟件代碼。
do{
//讀一行ccd數據
for(i=0;i<2069;i++){
//等待,直到準備好
while(spi->np_spistatus&np_spistatus_rrdy_mask)==0)
;
//從spi數據寄存器讀數據
c[i]=spi->np_spirxdata;
}
//讀覆蓋狀態(tài)
b=spi->np_spistatus&np_spistatus_roe_mask;
}while(b==8);
結論
本系統經過仿真測試,其功能達到了設計要求,并用hp邏輯分析儀驗證了系統功能。
評論