??? 摘 要: 討論了串行總線(USB)技術(shù)應(yīng)用于便攜式多道γ能譜儀的可行性,并詳細(xì)介紹了系統(tǒng)的硬件、固件" title="固件">固件、設(shè)備驅(qū)動程序" title="設(shè)備驅(qū)動程序">設(shè)備驅(qū)動程序以及應(yīng)用程序" title="應(yīng)用程序">應(yīng)用程序的設(shè)計方法,最后給出了其性能測試結(jié)果。
??? 關(guān)鍵詞: USB? γ能譜? 數(shù)據(jù)采集" title="數(shù)據(jù)采集">數(shù)據(jù)采集? WDM
?
??? 野外地面γ能譜測量技術(shù)主要研究地殼巖石土壤中產(chǎn)生的能量范圍約為30keV~3000keV的γ射線,這里面包含著鈾、釷、鉀等天然放射性核元素信息、核工程活動產(chǎn)生的大量人工放射性核元素信息以及γ射線與地殼相互作用產(chǎn)生的相關(guān)信息。而用于獲取和處理γ能譜數(shù)據(jù)的多道γ能譜儀是重要的研究課題[1],其功能是把從γ射線探測器得到的脈沖信號轉(zhuǎn)換為X-Y軸的能譜形式并顯示出來(X軸代表能量,Y軸代表脈沖計數(shù))。
??? 傳統(tǒng)的多道γ能譜儀一般采用NIM(Nuclear Instrument Module)插件的標(biāo)準(zhǔn)模式。但其存在體積龐大、抗干擾能力差等缺點,不適合于野外現(xiàn)場測量。為適應(yīng)多道γ能譜儀智能化、微機(jī)化、便攜化的實際需要,本設(shè)計采用筆記本電腦作為γ能譜儀的上位機(jī)。常用接口方式主要有RS-232C串口、紅外線端口、EPP并口、USB、1394、Ethernet等。這幾種接口方式的特點比較如表1所示。
?
??? 經(jīng)過比較論證發(fā)現(xiàn),USB作為近年出現(xiàn)的一種代表微機(jī)接口發(fā)展方向的新型總線規(guī)范,其便捷易用、速度快、可靠性高等特點,使之非常適合作為便攜式多道γ能譜儀的接口方式。目前大多數(shù)筆記本電腦一般都有兩個以上的USB端口,USB規(guī)范規(guī)定每個端口提供5V、500mA的電量,而筆記本電腦在實際應(yīng)用時,通常是通過自帶鋰電池供電的,無法提供足夠的電量給外設(shè),這時就會造成外設(shè)工作不正常,甚至使系統(tǒng)崩潰。考慮到本系統(tǒng)下位機(jī)部分功耗較大,因此供電方式使用外置電源。
??? 筆者在吸收借鑒γ能譜測量技術(shù)最新研究成果的基礎(chǔ)上,進(jìn)行了USB便攜式多道γ能譜儀的設(shè)計。本設(shè)計主要完成硬件、固件、設(shè)備驅(qū)動程序以及應(yīng)用程序等的設(shè)計工作。
1 硬件設(shè)計
1.1 系統(tǒng)總體結(jié)構(gòu)
??? 圖1所示為USB便攜式多道γ能譜儀的總體結(jié)構(gòu)框圖[2]。下位機(jī)硬件部分主要由γ射線探測系統(tǒng)(探頭)、脈沖信號調(diào)理電路、數(shù)字電位器、多道脈沖幅度分析器、USB接口電路以及電源電路等構(gòu)成,其中探頭部分包括閃爍探測器、前置電路和高壓電路等,多道脈沖幅度分析器主要包括峰值甄別電路、控制電路、A/D轉(zhuǎn)換電路以及微控制器" title="微控制器">微控制器系統(tǒng)等。上位機(jī)由筆記本電腦系統(tǒng)構(gòu)成。
?
??? 軟件部分由固件、設(shè)備驅(qū)動和應(yīng)用程序組成。
1.2 USB接口電路
?? ?由于USB本身的控制協(xié)議較為復(fù)雜,需要使用相應(yīng)的USB接口芯片。本設(shè)計采用了Philips公司的USB接口芯片PDIUSBD12(簡稱D12),其優(yōu)點是可以選擇合適的微控制器及其開發(fā)系統(tǒng)進(jìn)行外設(shè)開發(fā)。
??? D12內(nèi)部集成了串行輸入引擎(SIE)、320字節(jié)的多結(jié)構(gòu)FIFO 存儲器、收發(fā)器以及電壓調(diào)整器,支持DMA方式,采用雙緩沖區(qū)技術(shù),遵從USB1.1標(biāo)準(zhǔn)。芯片中串行輸入引擎(SIE)模塊起著至關(guān)重要的作用,完成所有USB協(xié)議層功能,如同步模式識別、并/串轉(zhuǎn)換、位填充/解填充、CRC檢驗/產(chǎn)生、包PID產(chǎn)生/確認(rèn)、地址識別、握手信號包響應(yīng)/產(chǎn)生等。另外,D12還集成了SoftConnect、GoodLink、可編程時鐘輸出、低頻晶振和終端電阻等特性,提高了系統(tǒng)的性價比。
??? 微控制器采用HYUNDAI公司的GMS90L32,它是一種兼容Intel8032微控制器的產(chǎn)品,其主要特點是工作電壓范圍寬(2.7V~5.5V)、功耗低、性價比高。D12與GMS90L32的連接如圖2所示。本設(shè)計使用了多路地址/數(shù)據(jù)總線復(fù)用方式。
?
??? 此外,本系統(tǒng)選用了美國ST公司的PSD913F2,它是用于8位微控制器的具有大容量FLASH存儲器、在系統(tǒng)編程(ISP)能力和可編程邏輯的器件。它將地址鎖存器、FLASH、SRAM、PLD等集成在一個芯片內(nèi),成功地實現(xiàn)了微控制器系統(tǒng)的“MCU+PSD”兩芯片解決方案。這種方案既可簡化電路設(shè)計,節(jié)省PCB印制板空間,縮短產(chǎn)品開發(fā)周期,又可增加系統(tǒng)可靠性,降低產(chǎn)品功耗。
2 系統(tǒng)軟件設(shè)計
2.1 微控制器固件程序
?? ?所謂固件程序就是固化在程序存儲器中的程序代碼。本系統(tǒng)的固件存儲在PSD913F2的Flash存儲器中,固件開發(fā)使用的是Keil C51語言,開發(fā)平臺為μVision2集成開發(fā)環(huán)境。
??? 固件的開發(fā)是移植與開發(fā)相結(jié)合。本設(shè)計參考了Philips公司提供的D12固件程序范例,對于USB協(xié)議操作的相關(guān)代碼可以直接移植使用,而數(shù)據(jù)采集、傳輸、存儲等部分則是全新的開發(fā)工作。
??? 固件程序結(jié)構(gòu)如圖3所示。硬件抽象層對D12的數(shù)據(jù)讀、寫以及各種指令的寫入進(jìn)行函數(shù)封裝;D12命令接口層對D12的所有控制指令的函數(shù)進(jìn)行封裝;USB向量請求模塊完成USB上電配置、向量請求等各類事件的響應(yīng)處理;USB協(xié)議層包括對USB協(xié)議操作的封裝以及對USB標(biāo)準(zhǔn)請求的響應(yīng);中斷服務(wù)進(jìn)程包括USB中斷、ADC中斷以及定時器0中斷(記錄測量時間)等。
?
??? 主程序及ADC中斷服務(wù)程序流程圖如圖4所示。主程序首先完成各種初始化,然后進(jìn)入主循環(huán),等待中斷的發(fā)生,并根據(jù)標(biāo)志變量執(zhí)行相應(yīng)的函數(shù)。當(dāng)打開控制電路時,脈沖峰值甄別電路自動啟動A/D轉(zhuǎn)換,轉(zhuǎn)換結(jié)束信號會觸發(fā)微控制器外部中斷1,進(jìn)入ADC中斷服務(wù)程序,讀取A/D轉(zhuǎn)換結(jié)果并存入緩存中,然后中斷返回。
?
??? 當(dāng)D12有事件需要處理時,將觸發(fā)微控制器外部中斷0,微控制器讀取D12的中斷狀態(tài)寄存器,判斷中斷的來源并作出相應(yīng)的處理。若由數(shù)據(jù)端點觸發(fā),則相應(yīng)地讀取或?qū)懭霐?shù)據(jù);若由控制端點0觸發(fā),則判斷請求的類型。標(biāo)準(zhǔn)請求由USB協(xié)議處理模塊處理,用戶自定義向量請求由USB向量請求模塊處理。
2.2? USB設(shè)備驅(qū)動程序的設(shè)計
??? 在Windows環(huán)境下,USB設(shè)備驅(qū)動程序遵循WDM(Win32 Driver Mode)方式。為了簡化設(shè)計,并兼顧驅(qū)動程序的運行效率,筆者選用了DriverStudio2.7工具軟件中的DriverWorks組件進(jìn)行USB設(shè)備驅(qū)動程序的開發(fā)。DriverWorks為WDM設(shè)備驅(qū)動程序的開發(fā)提供了完善的支持。其中包含一個非常完善的源代碼生成工具DriverWizard以及相應(yīng)的類庫和驅(qū)動程序范例,它還支持在C++下進(jìn)行設(shè)備驅(qū)動程序的開發(fā)。通過DriverWizard生成的代碼只需要進(jìn)行少量的修改便可以使用,這使得驅(qū)動程序開發(fā)者可以將精力集中在驅(qū)動功能的實現(xiàn)上,而不必理會太多的WDM開發(fā)細(xì)節(jié)[3]。
??? 本設(shè)計在DriverWizard的最后自定義了三個IOCTL接口對USB設(shè)備進(jìn)行控制,如表2所示。然后在自動生成的驅(qū)動程序代碼中向相應(yīng)的IOCTL函數(shù)添加代碼,用函數(shù)BuildVendorRequest構(gòu)建USB協(xié)議的自定義向量請求(Vendor Request)。由編譯修改后的源代碼即可得到驅(qū)動程序文件McaD12.SYS。
2.3 USB應(yīng)用程序的設(shè)計
??? 應(yīng)用程序的設(shè)計在Visual C++ 6.0開發(fā)環(huán)境下進(jìn)行。根據(jù)實際要求,本設(shè)計需要在軟件中對采集的數(shù)據(jù)進(jìn)行整理、分析并顯示。其功能模塊主要有數(shù)據(jù)采集、譜數(shù)據(jù)顯示、ROI操作、系統(tǒng)刻度、譜分析等,其結(jié)構(gòu)框圖如圖5所示。
?
??? 在Win32系統(tǒng)中, USB設(shè)備被抽象為一個文件,應(yīng)用程序只需通過幾個API函數(shù)就可以實現(xiàn)與驅(qū)動程序中USB設(shè)備的通信。API函數(shù)如表3所示。
??? 本程序設(shè)計使用MFC多線程技術(shù)。單擊開始按鈕,程序就創(chuàng)建一個用戶接口線程,并且通過IOCTL啟動USB設(shè)備,然后在此線程每隔一定時間(10~20ms)從USB總線上讀取一次數(shù)據(jù);而程序自身的主線程則不斷地依據(jù)讀取的數(shù)據(jù)刷新屏幕,顯示多道能譜。當(dāng)單擊停止按鈕或是設(shè)定采集時間到時,程序則通過IOCTL停止USB設(shè)備的數(shù)據(jù)采集,終止用戶接口線程,并且停止屏幕譜線的更新。
??? 當(dāng)創(chuàng)建用戶接口線程時,首先從CWinThread類派生一個CIoThread類,然后調(diào)用AfxBeginThread()函數(shù)創(chuàng)建CIoThread類的對象進(jìn)行初始化,啟動線程運行。根據(jù)需要可將初始化和結(jié)束代碼分別放在類的InitInstance()和ExitInstance()函數(shù)中[4]。其中,InitInstance()函數(shù)是從USB采集數(shù)據(jù)的線程的主要函數(shù),從中實現(xiàn)對IOCTL的調(diào)用、對USB設(shè)備數(shù)據(jù)的讀取等功能。其流程如圖6所示。
?
3? 測試與結(jié)論
??? 實測137Cs放射源γ能譜如圖7所示。根據(jù)能量為0.661MeV的譜峰,系統(tǒng)可以自動計算能量分辨率,實測能量分辨率小于10%。
?
??? 經(jīng)過嚴(yán)格測試,該系統(tǒng)其它主要技術(shù)指標(biāo)為:γ射線能量分析范圍為20keV~3.0MeV;γ能譜分析道數(shù)為1024道;放射源能量非線性系數(shù)小于5%;使用NaI(Tl)探測器時,整機(jī)功耗小于960mW;實測USB最大數(shù)據(jù)傳輸速率約為1Mbps;連續(xù)測量數(shù)據(jù)符合放射性統(tǒng)計漲落規(guī)律;設(shè)備驅(qū)動及應(yīng)用程序兼容Win98/2000/XP。
??? 上述結(jié)果表明,本系統(tǒng)的技術(shù)路線和軟硬件設(shè)計先進(jìn),方案合理,并具有一定的創(chuàng)新性和實用價值。對本系統(tǒng)設(shè)計稍加修改便可應(yīng)用于其它基于微機(jī)的數(shù)據(jù)采集、自動化測控系統(tǒng)中。
參考文獻(xiàn)
1 方 方. 野外地面γ射線全譜測量研究:[博士學(xué)位論文].?成都:理工大學(xué),2001.5
2 胡賓鑫.基于USB技術(shù)的γ譜數(shù)據(jù)采集系統(tǒng)研究.[碩士學(xué)位論文].成都:理工大學(xué),2003.12
3 武安河. Windows2000/XP WDM設(shè)備驅(qū)動程序開發(fā).北京:電子工業(yè)出版社,2003.4
4 王險峰等.Windows環(huán)境下的多線程編程原理與應(yīng)用.北京:清華大學(xué)出版社,2002.7