公司因研發上的需求進了一台Ocean Optics公司USB4000型光譜儀,接著是一連串測試惡夢的開始

 

原本幾年前有寫好同一家公司的光譜儀擷取程式,用在其他型號的光譜儀都沒有問題,惟獨USB4000型就是無法正常擷取,出來的資料都是0

 

透過代理商找原廠分公司解決,原廠分公司建議下載OmniDriverSPAM_1.5_Win32_full_release.exe新版的驅動程式,下載安裝後還是一堆問題(驅動程式如何安裝請自己研究,本文章不討論這個問題)

 

新版的驅動程式函數呼叫使用順序和舊版的完全不同,全部程式要重新改寫

 

但LabVIEW 7.1版怎麼試就是會有問題,只好改用8.6版來寫程式,但是仍無法擷取光譜。在原廠分公司的建議下找到手冊,經過多日奮鬥才將整個手冊翻譯解讀完畢,才發現手冊參考價值有限

 

手冊是有提到LabVIEW的範例檔放在哪,但是所提的資料夾和檔案實際存放的資料夾路徑不同,那麼多範例哪個才是正確的?範例內的SubVI有何用途?面對一堆呼叫驅動程式函數的SubVI找沒有全部的詳細說明,照著手冊和範例程式頂多只能做到擷取光譜,進一步的設定完全不知道怎麼做

 

經過多日測試寫好了各型號光譜儀都可用的測試用程式,確定了用到的SubVI的詳細設定和用途及連接順序,連接的順序很類似資料庫SubVI的作法

 

 

 

以下依連接順序用口語化的方式簡單說明用到的SubVI設定和用途,用到的SubVI全放在驅動程式安裝資料夾的Wrapper.llb這個檔案內,有相同困擾的人可以參考看看

 

 

1.Wrapper_Create.vi


用來建立和光譜儀連線的基礎架構平台

20100617-06  

 

 

2.Wrapper_openAllSpectrometers.vi


打開光譜儀的通訊埠

20100617-07  

 

 

3.Wrapper_setIntegrationTime.vi


設定光譜儀的積分時間,基本上積分時間越長所擷取到的光譜訊號越強,但積分時間太長光譜訊號是會滿載破錶的,這樣擷取到的光譜當然是錯誤的,所以積分時間要依實際用途去調整設定

20100617-08  

 

Index:設定光譜儀的通道,基本上這家公司光譜儀都有8個通道可設定,但只要設定為0,用主通道即可

 

Integration Time:設定積分時間,這部分手冊沒寫清楚,一開始原本以為和舊版驅動程式相同使用毫秒(ms)為單位,在幾次擷取不到正確的光譜後才發現居然是使用微秒(μs)為單位,1毫秒(ms)等於是1000微秒(μs)等於是0.001秒(s)

 

這裡要設定多大呢?依光譜型號不同最小容許積分時間也不一樣,越高階的機種容許積分時間越短。USB4000型的手冊提到最小值是8ms,實測最小可設定到3ms

 

另外待測物和光譜間的距離也是重點,距離越遠需要的積分時間要越長,才能擷取到足夠強度的光譜資料

 

我的待測物距離光譜儀約30公分,積分時間太短擷取到的光譜很弱難以分析,所以我設定的比手冊的最小值大很多是100ms,在這裡值是100000

 

注意:積分時間小於光譜儀能容許的最小值時,擷取到的幾乎都是暗電流(電子雜訊)訊號,也就是無用的光譜資料

 

 

4.Wrapper_getWavelengths.vi


讀取光譜儀通道的使用波長,讀出來的是陣列資料,用來設定給顯示圖表的X軸資料。這個SubVI似乎是專門給USB4000型以上機種用的,用在其他低階機種讀到的不是正確波長資料

20100617-09  

 

Index:設定光譜儀的通道,同樣要設定為0,用主通道即可

 

 

5.Wrapper_setCorrectForElectricalDark.vi


抑制暗電流(電子雜訊)訊號,高階的光譜儀因為靈敏度高,相對的暗電流(電子雜訊)訊號越強,所以這一項等於是一定要打開。更高階的機種可加裝致冷晶片,暗電流的訊號可抑制到最小

20100617-10  

 

Index:設定光譜儀的通道,要設定為0,用主通道


On/Off:設定為0是關閉,設定為1是打開

 

 

6.Wrapper_setBoxcarWidth.vi


Boxcar Width這個單字用哪個翻譯軟體都翻成棚車寬度???,實際上這裡指的是用"移動窗口法"來平均平滑光譜訊號,進一步消除雜訊干擾,但是設定太大訊號多少會失真,所以要依實際用途微調

20100617-11  

 

Index:設定光譜儀的通道,要設定為0,用主通道


Boxcar Width:設定要平均平滑的點數,例如設定為5時,就是以每5筆的資料計算平均後再輸出。以消除雜訊干擾的效果和擷取效率的平衡點,我是設定為9,用每9筆的資料計算平均後再輸出

 

 

7.Wrapper_getSpectrum.vi


用來讀取光譜資料,讀出來的是陣列資料,用來設定給顯示圖表的Y軸資料。光譜分析也是以這裡讀出來的資料做分析

20100617-12  

 

Index:設定光譜儀的通道,要設定為0,用主通道

 

 

8.Wrapper_closeAllSpectrometers.vi


關閉光譜儀的通訊埠

20100617-13  

 

 

9.Wrapper_Destroy.vi


用來斷開和光譜儀連線的基礎架構平台

20100617-14  

 

 

程式的書寫要使用順序結購(Flat Sequence Structure)元件


設定好就不用再變更的SubVI全寫到順序結購(Flat Sequence Structure)元件外面的左邊:


Wrapper_Create.vi


Wrapper_openAllSpectrometers.vi


Wrapper_setIntegrationTime.vi


Wrapper_getWavelengths.vi

20100617-16  

 

順序結購(Flat Sequence Structure)元件第1格內要連續擷取光譜資料,所以放上While Loop迴圈


While Loop迴圈內放上要用的SubVI


Wrapper_setCorrectForElectricalDark.vi


Wrapper_setBoxcarWidth.vi


這2個SubVI若不用在程式執行時變更設定,也可以寫到順序結購(Flat Sequence Structure)元件外面的左邊


Wrapper_getSpectrum.vi


這是讀取光譜資料的主體,一定要放在While Loop迴圈內才能夠連續擷取光譜資料

20100617-17  

 

順序結購(Flat Sequence Structure)元件第2格是關閉光譜儀的通訊埠,要放上Wrapper_closeAllSpectrometers.vi

 

順序結購(Flat Sequence Structure)元件外面的右邊放上Wrapper_Destroy.vi斷開和光譜儀連線的基礎架構平台,這個SubVI一定要用,這樣才能確保第2次執行程式時光譜儀還可正常動作

20100617-18  

 

全部完成的程式,SubVI一定要按照既定的順序連接

20100617-15  

 

 

以下看程式執行的結果,主要設定項的設定和光譜資料的關係

 


首先不抑制雜訊,不平均平滑光譜資料


可以看到暗電流訊號強度在1375 to 1525之間,跳動的很厲害

20100617-01  

 

 

再來抑制雜訊,不平均平滑光譜資料


可以看到暗電流訊號強度已降低到在-80 to 80之間,但仍跳動的很厲害

20100617-02  

 

 

接著抑制雜訊,用9點平均平滑光譜資料


可以看到暗電流訊號強度已降低到在-10 to 20之間,跳動已大幅減少

20100617-03  

 

這種設定當然不是沒有缺點,在光譜最前面和最後面的資料因為無法平均平滑計算,結果就是數值會大於中間平均平滑計算後的資料。在做光譜分析時一定要捨棄前後的資料

 

 

 

再來實測一個LED手電筒的光譜

 


首先不抑制雜訊,不平均平滑光譜資料

20100617-04  

 

 

再來抑制雜訊,用9點平均平滑光譜資料

20100617-05  

 

可以看出有經過處理的光譜資料雜訊較少

 

 

其他讀取設定致冷晶片溫度這一類的SubVI,因為只有高階機種才有那些功能,這裡跳過。等以後有機會用到高階機種在放上研究成果

arrow
arrow

    未出師的小工程師 發表在 痞客邦 留言(2) 人氣()