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