徐志江,張 俊,邵祥兵,盧為黨,4,華驚宇,貢 毅
(1.浙江機電職業(yè)技術(shù)學(xué)院電氣電子技術(shù)系,杭州 310053;2.浙江工業(yè)大學(xué)信息工程學(xué)院,杭州 310023;3.浙江工商大學(xué)信息與電子工程學(xué)院,杭州 310018;4.南方科技大學(xué)深圳市物聯(lián)網(wǎng)智能信息處理工程實驗室 廣東 深圳 518055)
隨著社會的不斷發(fā)展,人們越發(fā)關(guān)注藍光危害問題,照明燈光源安全性受到重視[1]。因為照明燈在生產(chǎn)過程中不合格或者長時間使用照明燈老化都會導(dǎo)致藍光分量過多,這會對人體產(chǎn)生一定危害,即所謂的藍光危害,因此對照明燈等可見光光源進行光譜質(zhì)量檢測分析非常有必要。
光譜儀器是應(yīng)用光學(xué)技術(shù)、電子技術(shù)、圖像技術(shù)、傳感器技術(shù)以及計算機技術(shù)對物質(zhì)成分、結(jié)構(gòu)、特性等進行測量和分析的基本設(shè)備,也是研究光譜學(xué)的重要裝置。光譜儀器在許多領(lǐng)域越來越多的發(fā)揮著重要作用。在測量應(yīng)用中可以量測發(fā)光體光譜、物質(zhì)對光譜吸收度和穿透度、色彩等,化學(xué)分析應(yīng)用中可以進行物質(zhì)分析、成分分析、定性分析[2]等。另外,光譜儀還可以應(yīng)用于航天遙測、軍事領(lǐng)域中。傳統(tǒng)上大多數(shù)光譜設(shè)備用于工業(yè)或?qū)嶒炇覒?yīng)用是昂貴的、笨重的[3],由于這些限制,許多光譜研究僅限于實驗室方面。隨著光學(xué)、微電子技術(shù)等的發(fā)展,出現(xiàn)了很多微型光譜儀[4],大大提高光譜設(shè)備的便攜性、實用性。
此外,很多光譜設(shè)備將數(shù)據(jù)采集模塊和數(shù)據(jù)分析顯示模塊集成在一起,或者通過USB接口連接[5],這會降低設(shè)備的實用性、可拓展性。也有基于WiFi無線通信的光譜設(shè)備[6],但往往只利用WiFi模塊進行數(shù)據(jù)傳輸,需要額外微控制器進行數(shù)據(jù)采集控制以及數(shù)據(jù)傳輸控制,而實際上WiFi模塊內(nèi)嵌了性能強悍的微控制器,可以不用再添加額外的微處理器。
本文提出并設(shè)計了一種手持式可見光光譜分析儀。分析儀采取了基于ESP32 WiFi模塊[7-8]的光譜數(shù)據(jù)采集設(shè)備與基于安卓智能手機上的數(shù)據(jù)分析與顯示的App應(yīng)用程序相分離的模式[9-10],兩者之間通過WiFi進行信令和數(shù)據(jù)的通信交互。光譜數(shù)據(jù)采集設(shè)備以樂鑫公司的ESP32作為控制核心,經(jīng)過合適的積分時間之后,驅(qū)動光譜傳感器C12666MA[11]模擬量數(shù)據(jù)[3];然后再配合模數(shù)轉(zhuǎn)換(ADC)芯片把模擬量轉(zhuǎn)換成數(shù)字量。整個時序驅(qū)動數(shù)據(jù)采集模塊是放置在ESP32的MicroPython固件[12]中,全部用C語言來編寫實現(xiàn),避免了Python執(zhí)行效率偏低無法保證時序的缺點。利用ESP32模塊的WiFi功能產(chǎn)生一個無線AP[13],通過TCP協(xié)議[14-15]接收App應(yīng)用程序連接,解析按照雙方既定的消息格式發(fā)送的命令;根據(jù)相應(yīng)命令執(zhí)行和回傳結(jié)果,實現(xiàn)了光譜數(shù)據(jù)的采集和數(shù)據(jù)傳輸。光譜數(shù)據(jù)分析與顯示App客戶端是基于Android平臺的App軟件,利用TCP協(xié)議發(fā)送數(shù)據(jù)請求命令,獲取光譜分布數(shù)據(jù)[14]、繪制可見光光譜圖、顯示光譜分布數(shù)據(jù)、計算并顯示光譜參數(shù)與繪制色品圖。
如果光譜傳感器的積分時間[16-18]不充分或者過飽和,從而導(dǎo)致采集到的光譜數(shù)據(jù)無效,后續(xù)參數(shù)估計不可靠的問題。基于此,提出了一種積分時間自適應(yīng)控制算法,在被測光的強度是未知的情況下,仍然能夠快速、自適應(yīng)地選擇合適的積分時間。此外,App在繪制相關(guān)色品圖時,數(shù)據(jù)計算量過大導(dǎo)致出現(xiàn)界面延遲加載卡頓現(xiàn)象[19],故而采用雙緩沖機制解決此問題。
本文的組織如下:第1節(jié)介紹了分析儀的整個系統(tǒng)設(shè)計原理;第2節(jié)詳細闡述了軟件系統(tǒng),包括基于狀態(tài)機的光譜數(shù)據(jù)采集的驅(qū)動、快速合理的自適應(yīng)積分時間控制算法、色度學(xué)參數(shù)的計算方法和雙緩沖機制原理實現(xiàn)等;第3節(jié)是測試和結(jié)果分析;最后是結(jié)論。
所設(shè)計的系統(tǒng)原理框圖如圖1所示。系統(tǒng)分為光譜數(shù)據(jù)采集設(shè)備和基于Android手機的App客戶端軟件。采集設(shè)備集成了2000 mAh鋰電池、充放電與升壓一體化模塊、WiFi傳輸和控制為一體的樂鑫ESP32模塊、光譜傳感器C12666MA以及16位模數(shù)轉(zhuǎn)換芯片ADS8326[20]。
圖1 系統(tǒng)原理框圖
光譜數(shù)據(jù)采集設(shè)備的核心器件是濱松C12666MA這顆圖像傳感模塊,它基于濱松MEMS和圖像傳感技術(shù)設(shè)計的。圖像傳感器是基于CCD(Charge Coupled Device)感應(yīng)原理工作,內(nèi)置256個感光像素,具有340 nm~780 nm的光譜響應(yīng)范圍,最大光譜分辨率為15 nm。
充放電與升壓一體模塊既可以通過外接MicroUSB口為鋰電池充電,又可以把鋰電池放電的輸出電壓升高到5 V,為光譜傳感器和模數(shù)轉(zhuǎn)換芯片供電,同時通過低壓降電源芯片LDO為ESP32模塊提供3.3 V電源。系統(tǒng)在鋰電池滿充滿、ESP32全速運行的情況下,穩(wěn)定工作時長至少4 h。
微控制芯片采用了ESP-WROOM-32(ESP32)WiFi模塊,是樂鑫最新發(fā)布的新一代WiFi和藍牙雙模雙核無線通信芯片,內(nèi)置了一顆高性能Tensilica LX6雙核處理器以及32 MB大小Flash空間,擁有額外拓展IO口,支持超低功耗待機,是移動設(shè)備、可穿戴電子產(chǎn)品和物聯(lián)網(wǎng)應(yīng)用的最佳選擇。EPS32的協(xié)議棧只占用一半的系統(tǒng)資源,對于數(shù)據(jù)采集功能,系統(tǒng)資源夠用。因此,本系統(tǒng)采用ESP32模塊來驅(qū)動光譜傳感器C12666MA和模數(shù)轉(zhuǎn)換芯片ADS8326。盡管ESP32內(nèi)部也集成了12位的ADC,但其輸入的電壓范圍和轉(zhuǎn)換精度不滿足要求,本系統(tǒng)采用了16位的ADS8326作為模數(shù)轉(zhuǎn)換芯片。
基于Android手機的光譜分析和參數(shù)顯示App客戶端軟件,主要是把采集到的光譜分布數(shù)據(jù),根據(jù)光源色度學(xué)標準計算、分析、顯示參數(shù),繪制相關(guān)色品圖,顯示內(nèi)容豐富。
系統(tǒng)軟件設(shè)計包含光譜分布數(shù)據(jù)采集與傳輸軟件和手機App軟件。其中光譜分布數(shù)據(jù)采集與傳輸包括了光譜傳感器和ADC的驅(qū)動程序,以及通過WiFi的、基于TCP協(xié)議的信令和數(shù)據(jù)交互;手機App軟件設(shè)計包括自適應(yīng)積分時間算法、光源色度學(xué)參數(shù)計算和手機App功能展示等功能;針對加載卡頓現(xiàn)象,提出了采用雙緩沖機制解決此問題。
光譜分布數(shù)據(jù)采集模塊是驅(qū)動光譜傳感器與ADC模塊,以獲取光譜分布數(shù)據(jù)。C12666MA時序圖如圖2所示,由ESP32控制IO管腳的邏輯電平,生成完全符合圖2的時序狀態(tài),實現(xiàn)了每個像素點的積分、在CLK時鐘信號的驅(qū)動下移動出模擬量Video、經(jīng)過ADC轉(zhuǎn)換為數(shù)字量的驅(qū)動功能。
圖2 C12666MA時序圖[11]
光譜分布數(shù)據(jù)采集驅(qū)動采用定時器加狀態(tài)機來協(xié)同控制光譜傳感器與ADC芯片的時序,以完成數(shù)據(jù)采集,狀態(tài)圖如圖3所示。在就緒狀態(tài),初始化所有控制光譜傳感器和ADC模塊的管腳,為積分和轉(zhuǎn)換做好準備;啟動積分,使得光譜傳感器進入積分狀態(tài),ST管腳上2次相鄰下降沿的時間差為像素的積分時間;積分時間到,每個像素的模擬信號Video在CLK時鐘的驅(qū)動下依次串行移出,然后經(jīng)過ADC轉(zhuǎn)換成數(shù)字量。根據(jù)C12666MA的時序圖,每4個CLK時鐘,串行移出一個像素點的模擬值,只有當模擬量有效時,開啟ADC轉(zhuǎn)換,并把轉(zhuǎn)換后的數(shù)字量保存到數(shù)組中。
圖3 光譜分布數(shù)據(jù)采集狀態(tài)圖
時序驅(qū)動主要利用ESP32模塊定時器中斷完成時序模擬、傳感器狀態(tài)切換,結(jié)合狀態(tài)機在定時器中斷服務(wù)函數(shù)里完成數(shù)據(jù)采集。首次進入定時器中斷服務(wù)程序ISR時,初始化光譜傳感器和ADC芯片的所有管腳,為后續(xù)的動作做好準備。每個像素點的積分時間由光譜傳感器ST管腳上的2次相鄰下降沿的時間差來控制,因此在開始積分時刻和積分結(jié)束時刻,均在ST管腳上產(chǎn)生下降沿。當進入到讀取像素狀態(tài)時,從光譜傳感器中串行移出一個像素的模擬量,需要4個CLK時鐘,也即4個高電平、4個低電平,共8次ISR中斷。在第K次中斷,如果K=3,此時某個像素的模擬量已在光譜傳感器的Video管腳有效輸出,設(shè)置ADC的片選有效,為AD轉(zhuǎn)換做準備;在K=4時,啟動ADC轉(zhuǎn)換,也即啟動SPI功能;在K=7時,AD轉(zhuǎn)換已經(jīng)結(jié)束,把轉(zhuǎn)換后的數(shù)字量保存到數(shù)組中;然后判斷256個像素是否已經(jīng)全部移出并且AD轉(zhuǎn)換完畢,如果是,則在下一個ISR中復(fù)位光譜傳感器和ADC芯片,并關(guān)閉定時器。
ESP32工作在AP(Access Point)模式下,手機App客戶端通過WiFi與此AP連接。ESP32為服務(wù)端,App為客戶端,通過TCP的socket進行通信。服務(wù)端采用了select機制來管理所有客戶端,根據(jù)雙方既定的協(xié)議來進行交互數(shù)據(jù)。ESP32采用了開源的MicroPython固件,編寫Python代碼來實現(xiàn)通信。利用uselect模塊poll()方法獲取poll對象poll_obj,利用poll_obj對象的register()方法監(jiān)聽主socket的POLLIN和POLLHUP事件。利用poll_obj對象的poll()方法獲取事件對象events,遍歷事件對象獲取其中socket,如果是主socket,則說明是新增的會話,執(zhí)行addSession()方法,把新用戶的套接字和地址保存到字典connections中,并且對poll_obj對象中添加新套接字的POLLIN和POLLHUP事件進行監(jiān)聽;如果不是主socket,則從connections字典中得到客戶端socket,利用usocket模塊recv()方法接收客戶端上發(fā)的消息msg。從消息中利用正則模塊ure的search()函數(shù)和正則表達式匹配雙方既定的消息格式,提取出命令和參數(shù)。如果是合法的,則執(zhí)行相應(yīng)的功能;如果是非法的,則向客戶端發(fā)送命令/參數(shù)錯誤信息。如果是斷開連接的命令,則調(diào)用poll_obj對象的unregister()方法和主動斷開所有客戶端的socket,否則繼續(xù)監(jiān)控事件對象events。當網(wǎng)絡(luò)出現(xiàn)異?;蛘呖蛻舳送顺鰰r調(diào)用delSession()方法,從poll_obj對象中取消事件監(jiān)聽,并從字典中刪除該用戶的socket。
線陣CCD的積分時間在光譜測量中十分重要,由于CCD的輸出與積分時間之間不是完全線性的,并且當積分時間不充分或者過飽和時,與理想線性值之間的相對誤差非常大。如果在CCD感光元件的非線性區(qū)間采用線性方法會對頻譜分布數(shù)據(jù)的測量帶來較大誤差,導(dǎo)致后續(xù)參數(shù)估算不可靠的問題。為了解決這一問題,設(shè)計了一套完整的CCD自適應(yīng)調(diào)控積分時間算法。記線陣CCD包含的光傳感器像素點個數(shù)為N,第k個像素點對應(yīng)的波長為λk,第k個像素點的零漂為Vd,k,像素點的最大飽和輸出電壓為Vsat,比例系數(shù)C1=C2=2,CCD積分時間自適應(yīng)控制方法包括以下步驟:
①令i=0,給定一個較短的積分時間ti;
(1)
Vk(ti)包含了測量誤差;
④對Vk(ti)作歸一化處理,得到相對電壓值,也即
RVk(ti)=Vk(ti)/Vsat
(2)
(3)
⑥當 RVi∈[1/4,3/4]時,如果i≥1,并且 RVi-1在非線性區(qū)間[0,1/8),更新比例系數(shù)C1,
C1=C1+μ(RVi-1/2)
(4)
如果 RVi-1在非線性區(qū)間(7/8,1],更新比例系數(shù)C2,
C2=C2+μ(RVi-1/2)
(5)
式中:μ為學(xué)習速率,這里取μ=0.1,同時,積分時間為ti時獲得的光譜分布數(shù)據(jù)在合理的范圍內(nèi),跳出循環(huán),結(jié)束;
當 RVi∈[1/8,1/4)和 RVi∈(3/4,7/8]時,雖然在線性區(qū)間內(nèi),但與最優(yōu)積分時間相比,相差比較大,因此以最優(yōu)積分時間為基準、線性增加或減少積分時間;當 RVi∈[0,1/8)時,積分時間明顯不足,以C1倍的線性比增加積分時間;當 RVi∈(7/8,1]時,積分時間明顯太長,以C2倍的線性比減少積分時間。跳到步驟②繼續(xù)下次測量。
本系統(tǒng)能夠顯示的光源色度學(xué)參數(shù)有很多,下面將給出三個重要參數(shù)計算方法。
①色品坐標
光源的色品坐標是一個重要的色度學(xué)參數(shù)。色品坐標精確的表示了照明光源的發(fā)光顏色,借助數(shù)學(xué)方法來表示顏色的基本參數(shù),它可以在色度圖中表示出來。通過測得光源的相對光譜功率分布,從而計算出色品坐標。首先在可見光波段內(nèi)計算出光源顏色的三刺激值,用下面的公式來進行計算:
(6)
(7)
(8)
(9)
(10)
在實際工作中,首先要用光譜輻射計測量得到光源的相對光譜功率分布或者用分光光度計來測得物體的光譜反射比或者是光譜透射比,然后再根據(jù)CIE推薦的標準照明體數(shù)據(jù)和標準色度觀察者光譜三刺激值數(shù)據(jù),最后可編寫計算程序,得到樣品的色品坐標值。
②色溫
光源的色溫是用來描述光源的光譜分布的物理量,它可以量度光線的顏色組成成分。但是,一般光源不會正好落在黑體軌跡線上,因此光源的色溫用相關(guān)色溫表示。相關(guān)色溫能夠簡便的描述光源的光色,相關(guān)色溫相同的光源說明它們的光色相同,但它們的光譜分布可以有較大的差異。相關(guān)色溫的經(jīng)驗計算公式如下:
T=a1A4+a2A3+a3A2+a4A+a5
(11)
③顯色性
光源對物體自然顏色所能呈現(xiàn)的程度稱為顯色性,換言之也就是光源顯現(xiàn)被照物體真實顏色的能力。物體的真實顏色是指在參照照明體(通常為完全輻射體)下所呈現(xiàn)的顏色。光源的顯色性是由顯色指數(shù)來衡量的。光源對某一種標準樣品顯色指數(shù)叫做特殊顯色指數(shù),用Ri來表示。顯色指數(shù)的計算過程如下所示:
(12)
再根據(jù)光譜功率分布和顏色樣品的光譜反射系數(shù),計算待測光源照明下15種顏色樣品的色度坐標(xk,i,yk,i),計算(uk,i,vk,i);分別將被測光源的色坐標(uk,vk)、被測光源照射下的顏色樣品色坐標(uk,i,vk,i)代入下式中,計算出ck,dk以及ck,i,dk,i
(13)
(14)
(15)
(16)
(17)
(18)
(19)
(20)
式中:r為參考光源下標,i為顏色樣品序號的下標,k為被測光源下標。
最后由式(21)和式(22)計算一般顯色指數(shù)Ra和特殊顯色指數(shù)Ri;
Ri=100-4.6ΔEi
(21)
(22)
為了方便用戶本地查閱和光譜數(shù)據(jù)的可視化顯示,分析儀借助Android手機設(shè)計了一套客戶端App來進行光譜數(shù)據(jù)的分析和結(jié)果顯示。如圖4所示,客戶端App包括光譜數(shù)據(jù)采集、參數(shù)估計、文件管理和頻譜圖繪制四個功能。
圖4 客戶端App功能分類示意圖
①光譜分布數(shù)據(jù)采集功能包括開啟并連接采集裝置、設(shè)置采集積分時間和采集頻譜命令。
②參數(shù)估算功能對采集到的數(shù)據(jù)進行分析處理,計算出頻譜參數(shù),并顯示在ListView中。
③文件管理功能將頻譜分布數(shù)據(jù)以流的形式保存至SD卡內(nèi)指定的文件夾中,保存的數(shù)據(jù)可實時被查看。
④頻譜圖繪制功能包括頻譜圖繪制,以380 nm至780 nm之間的N個離散波長為橫坐標,以對應(yīng)頻譜分布數(shù)據(jù)為縱坐標繪制頻譜曲線圖,曲線圖中用不同的RGB顏色填充,填充的顏色為該離散波長下的RGB顏色分量。通過頻譜圖直觀地了解到不同波長下頻譜的變化趨勢。
APP在繪制相關(guān)色品圖時,數(shù)據(jù)計算量過大導(dǎo)致出現(xiàn)界面延遲加載卡頓現(xiàn)象[19],故提出采用雙緩沖機制解決此問題。雙緩沖機是軟件啟動的時候就在緩存中開始進行復(fù)雜的數(shù)據(jù)計算和繪圖過程,并將繪制的圖片以Bitmap形式保存。當軟件運行實現(xiàn)色品圖展示的功能時,直接從緩存中讀取已繪制的圖片,并將其加載到屏幕上,毋須再進行數(shù)據(jù)計算和繪制的過程。在Android中通過自定義View繼承View,創(chuàng)建父類View中的構(gòu)造方法,在構(gòu)造方法中創(chuàng)建一個緩沖區(qū)圖片cacheBitmap,該緩沖區(qū)圖片大小與Android自定義View的圖片大小相同,然后將緩沖區(qū)圖片cacheBitmap設(shè)置為畫布cacheCanvas,將需要繪制的色品圖通過cacheCanvas繪制到緩沖區(qū)畫布上。然后在自定義View中重寫onDraw()方法,通過drawBitmap()方法繪制cacheBitmap,這樣就可以將緩沖區(qū)畫布上的色品圖加載到App的屏幕上。采用雙緩沖機制大大節(jié)儉了繪圖時間,加快色品圖展示時間,有效地解決了頁面卡頓現(xiàn)象。
測試是檢驗系統(tǒng)合理性的關(guān)鍵步驟,本系統(tǒng)完成光譜定標工作和在光譜定標的基礎(chǔ)上進行系統(tǒng)測試工作。
光譜定標是實際光譜數(shù)據(jù)測量中一個重要環(huán)節(jié),由于CCD感光元件的輸出值并不是真實光譜值,而是AD轉(zhuǎn)換器的AD值,如果只采用CCD的輸出值進行運算,將會給后續(xù)工作帶來較大誤差,因此需要通過光譜定標確定實際待測燈的相對光譜值。
如圖5所示,分別給出的真實的相對光譜值和CCD輸出的相對AD值。其中紅色曲線代表的是由色溫計算得到的真實相對光譜圖,而白色曲線代表的是CCD輸出的相對AD值,由該圖可以看出,如若不進行光譜定標,將會存在很大誤差。
圖5 真實的相對光譜值和CCD輸出的相對AD值對比圖
系統(tǒng)測試是在光譜定標基礎(chǔ)上進行測試,App根據(jù)獲取的光譜數(shù)據(jù)進行光譜繪制和光源色度學(xué)參數(shù)計算。以下是測試過程:①打開設(shè)備端電源開關(guān),給CCD探頭蓋上乳白色的濾光片;②打開手機網(wǎng)絡(luò)設(shè)置,搜索模塊的SSID,輸入密碼,進行通信連接;③在App主界面,點擊“開始”按鈕,開始進行光譜檢測(此時測量無需在黑暗環(huán)境下);④當檢測完成后,坐標系相應(yīng)位置繪制出相對光譜圖。此時,檢測完成。
如圖6所示,測量了60 W的白熾燈燈管的相對光譜分布圖,其中橫坐標是380 nm~780 nm的波長,縱坐標為相對光譜值,坐標系中的垂直藍線可以進行左右滑動,并顯示出當前的波長和相對光譜值。由此圖可表明與標準燈光譜基本一致,數(shù)據(jù)可靠。
圖6 白熾燈相對光譜分布圖
如圖7給出了60 W白熾燈的CIE1931色品圖。從圖中可以看出本文提供的系統(tǒng)和算法能較好完成光譜數(shù)據(jù)的測量和分析工作。
如圖8所示,通過Android下的ListView控件展示了使用60 W的白熾燈的相對光譜值計算得到的光源色度學(xué)參數(shù),包括CIE1931(x,y)色品坐標、顯色指數(shù)CRI,TM-30-18 Rf和Rg等。
圖7 白熾燈CIE1931坐標圖
圖8 60 W白熾燈的光源色度學(xué)參數(shù)
所提出的可見光光譜分析系統(tǒng),結(jié)構(gòu)簡單,使用方便,經(jīng)過測試后表明系統(tǒng)能夠正確檢測出待測光源光譜特性,分析計算得到色度學(xué)參數(shù)并繪制相應(yīng)特征圖。系統(tǒng)各部分穩(wěn)定協(xié)調(diào)工作,操作簡單,可以運用于可見光的光譜檢測和分析,提高可見光光源質(zhì)量。