?

基于高速多通道采集模塊的數字化儀軟件設計

2016-10-14 06:44賈玉姣劉亞斌張秀磊
電子設計工程 2016年12期
關鍵詞:驅動程序調用中斷

賈玉姣,劉亞斌,張秀磊

(北京航空航天大學自動化科學與電氣工程學院,北京100191)

基于高速多通道采集模塊的數字化儀軟件設計

賈玉姣,劉亞斌,張秀磊

(北京航空航天大學自動化科學與電氣工程學院,北京100191)

基于高速數字化儀硬件設備,針對數字采集系統軟件設計的關鍵技術從設備驅動程序、動態鏈接庫接口函數封裝、應用軟件設計三個層次進行了詳細闡述。采用VS2008,在Win7系統下設計了WDF驅動程序并實現了DMA傳輸;設計封裝了操作設備的接口函數;用C#語言及多線程技術設計實現了多通道數據高速傳輸、實時顯示及存儲系統,實驗測試結果穩定可靠。

數字化儀;WDF;DMA;高速

數字化儀(Digitizer)是電子測量領域中一種基于PC的常用測量儀器,和示波器相似的是,它也是一種用來觀察、測量、記錄各種瞬時物理現象,以波形方式顯示其與時間關系的電子儀器,它開放式的結構和靈活的軟件等特性已經超越了一般示波器[1]?;赑C的數字化儀主要優勢在于它的靈活性,它可以工作在開放式的PC環境中,一個PC主機可以安裝任何其他數字化儀的顯示陣列、工具卡和控制軟件等。系統就可以按照用戶的需要進行配置。

本文所研究的高速多通道數據采集系統,是基于PXIExpress總線的模塊化信號采集設備,具有4個獨立通道、高采樣分辨率、大數據容量以及高速數據傳輸等關鍵技術的數字化儀軟件系統。包括完整的從底層驅動、接口動態鏈接庫到應用分析處理軟件。

1 硬件系統設計

高速數字化儀有如下硬件指標:輸入阻抗50 Ω和1 MΩ可選;4個并行AD采集通道,14位采樣精度,最高采樣速率125 MS/s;輸入信號量程±1 V和±10 V可選;每個通道最大采樣深度4M字,最大預采樣深度8K字。為實現以上技術指標,數字化儀包含如下模塊:模擬信號調理模塊,實現單端轉差分,阻抗匹配,量程選擇等功能;AD采集轉換模塊,將SMA接口接收的模擬信號轉換為14位數字量信號并傳給控制模塊;控制器,采用FPGA作為邏輯算法控制器;板載內存,存儲控制器處理過的數據,計算機讀取數據的位置;PXIe通信模塊,實現與上位機通過PXIe通信;時鐘管理模塊,為AD采集、板載內存提供時鐘;電源管理模塊,為其他模塊提供高品質電源。數字化儀硬件總體設計方案如圖1所示。

圖1 數字化儀硬件總體設計圖

2 WDF驅動程序設計

由于微軟已經停止對Windows XP系統的維護,故選擇在Win7系統下開發;而從Windows Vista系統開始,驅動程序開發需要用到微軟新一代驅動程序開發模型WDF。WDF包括一整套對驅動程序進行開發設計、發布、維護的部件,WDF支持面向對象的,基于事件驅動機制的驅動程序設計思想;WDF實現了一些驅動程序所必須的基本特性,為驅動程序提供缺省的處理,并管理與操作系統的交互,這使設計者能夠集中精力在特定硬件設備的處理上,而不是操作系統自身,從而大大簡化設計[2]。WDF定義了一個驅動模型,提供了開發內核模式驅動程序(KMDF)和用戶模式驅動程序(UMDF)的框架。一個即插即用的KMDF設備驅動程序包括:一個DriverEntry例程;一個EvtDriverDeviceAdd例程,類似于WDM的AddDevice例程;一個或多個I/O隊列;一個或多個I/O事件回調例程,類似于WDM的DispatchXxx例程;支持的即插即用和電源管理回調例程;支持的WMI回調例程,用于管理計算機系統;其他回調例程,如對象的清除例程、中斷處理例程、DMA例程等[3]。

2.1中斷處理

中斷是外設主動申請與計算機交互的唯一方式。WDF的中斷處理分為兩部分:中斷處理例程EvtInterruptIsr,延遲過程調用EvtInterruptDpc。中斷處理例程是在中斷服務例程被調用時通過讀取PEX8311的中斷狀態寄存器來判斷是否是來自目標設備的中斷;若是,則清除當前中斷標記并寫相應中斷屏蔽寄存器位,暫時不再處理新的中斷;然后調用延遲過程調用例程,在空閑時實現更多更復雜的操作。因為中斷處理例程運行在DIRQL(Device Interrupt ReQuest Level)中斷級別上,幾乎可以屏蔽所有系統內和外部設備的中斷請求,所以處理時間應該盡可能短,以提高系統的響應速度。而中斷延遲處理例程運行在DISPATCH_LEVEL級別上,可以在延遲過程調用例程中做大部分的中斷處理工作。

本例數字化儀設備主要分為兩類中斷:本地中斷和DMA傳輸完成中斷。本地中斷包括AD轉換完成中斷、FIFO中斷、數據轉移完成中斷,共4個通道,12個中斷。中斷處理流程如圖2所示。

圖2 數字化儀中斷處理流程圖

2.2DMA數據傳輸實現

利用中斷和DMA相結合的方式采集數據,可以最大限度地提高CPU的工作效率,并且能夠及時保存采集的數據,減少丟幀現象和誤碼率[4]。DMA傳輸方式無需CPU直接控制傳輸,通過硬件為RAM與I/O設備開辟一條直接傳送數據的通路,使CPU的效率大為提高。由于數字化儀需要實現高速大數據量傳輸,故采取DMA(Direct Memory Access)傳輸,在DMA傳輸過程中CPU可以進行其他工作。一個完整的DMA傳輸過程包括4個步驟:DMA請求、DMA響應、DMA傳輸、DMA結束。在數字化儀設備的WDF驅動程序中,DMA傳輸實現流程如下:

1)在驅動程序初始化過程中,即Digitizer_EvtDeviceAdd例程中,創建一個DMA適配器對象WDFDMAENABLER,一個DMA傳輸對象WDFDMATRANSACTION,和一個公用緩沖區對象WDFCOMMONBUFFER,三者結合控制DMA傳輸過程;

2)當應用程序向驅動發起讀數請求,驅動接收到I/O Request時,使用WDFCOMMONBUFFER公用緩存區作為DMA讀緩沖區,初始化DmaTransaction對象,啟動DMA傳輸;

3)驅動程序調用WdfDmaTransactionExecute啟動DMA傳輸時,系統框架會調用啟動傳輸前注冊的回調例程Digitizer_EvtProgramDma進行寄存器配置,以正確啟動DMA操作;由于數字化儀Local端總線位寬為32位,需要設置DMA傳輸位寬為32位;一次可以傳輸4個字節數據,提高數據傳輸速率;

4)當DMA傳輸完成時會通過中斷通知驅動程序,驅動程序在中斷延遲處理例程EvtInterruptDpc中完成最終DMA傳輸,同時將公用緩存區中的數據拷貝到I/O Request包中。

3 動態鏈接庫接口函數設計

在驅動程序的設計過程中,必須考慮到應用程序接口的設計,良好的驅動程序設計必須從應用程序設計出發[5]。為方便上層應用程序使用,對驅動的操作和通信部分封裝成動態庫DLL。它是驅動層和應用程序層進行通信的橋梁,同時為應用程序層提供了方便調用的應用接口函數。

3.1動態鏈接庫接口函數

數字化儀各項功能是通過應用程序調用DLL的導出函數來實現的,DLL接口函數封裝了與硬件設備交互的具體細節,只提供統一的接口給應用程序調用。動態鏈接庫中接口函數主要分三類,如表1所示:

1)設備打開關閉函數:Digitizer_OpenDevice根據指定設備號打開數字化儀硬件設備;Digitizer_CloseDevice關閉已打開的設備;

2)功能函數:Digitizer_Reset恢復數字化儀設備默認配置狀態;Digitizer_Config根據指定通道,配置工作參數;Digitizer_SetInterruptLevel根據指定通道,設置設備中斷通知級別,既設備緩存FIFO中數據量達到設定值時產生中斷,通知應用程序讀數;Digitizer_StartAD啟動AD采集;Digitizer_ StopAD停止AD采集;

3)數據接收轉換函數:Digitizer_Receive接收指定通道的AD采集數據;Digiziter_RecvCompleted指定通道數據接收是否完畢;DoubleToUshort將double類型數據轉換成對應14位采樣值;UshortToDouble將14位ADC采樣值數據轉換成實際信號量值

說明:

1)外部觸發實現是通過全局變量控制的,在Digitizer_ StartAD對應的驅動函數中若為內部觸發,則正常寫開啟AD寄存器;若為外部觸發,則做好初始化工作(開啟中斷等)后寫外部觸發使能寄存器,等外部觸發信號為高電平時底層自動開啟AD轉換。

2)預采樣功能可以實現在電平觸發或外部觸發時對觸發點之前的信號進行讀取顯示和分析。存儲深度包括預觸發深度和觸發深度兩部分,預采樣深度表示在觸發到來前被存儲下來的數據量,觸發深度表示在觸發到來后被存儲下來的數據量[6]。預采樣FIFO中的數據在觸發之前一直在刷新,時刻保持最新的數據直到觸發開始。為此需要先讀取正式采樣的數據,再讀取預采樣數據,才能保證預采樣數據是觸發點之前的數據。

3.2高速數據傳輸的實現

由于本文數字化儀具有4個獨立通道,每個通道采樣率最高達到125Msps,所以若4個通道滿速率工作的話,每秒鐘產生的數據量為:125M*2Byte*4≈1GB的數據。而33MHz的PCI總線的最高速率只有133MBps,PCI Express x1總線的最高傳輸速率也只有476MBps。若4個通道同時全速率工作所產生的數據量遠超過系統的處理能力,因此設計時,硬件板卡自身每個通道帶有4M*32的SDRAM緩存,且不能連續工作過長時間。

系統接收端,在驅動程序中采用DMA結合應用程序使用的Windows完成端口I/O模型,實現數據盡可能的高速傳輸。下面介紹使用完成端口(IOCP)實現數據傳輸的過程。完成端口的建立步驟如下:

1)創建一個完成端口內核對象

調用系統API函數CreateIoCompletionPort(),返回一個IOCP句柄。

hIocp=CreateCreateIoCompletionPort(INVALID_HANDLE, NULL,NULL,0);

2)將設備句柄與I/O完成端口關聯

可與完成端口關聯的內核對象除了設備對象外,還可以是Win32文件對象,網絡套接字等。將已經打開的設備句柄與IOCP內核對象關聯起來,綁定時仍然使用CreateIo CompletionPort,只是參數不同:

CreateIoCompletionPort(hDevice,hIocp,CK_RECV,0);

3)創建工作者線程

前兩步相當于只是建立了消息隊列等結構,對句柄進行了關聯,具體I/O讀寫操作還是要靠工作線程來完成,這里可以建立數量是CPU核心數兩倍的工作線程。

CreateThread(NULL,0,WorkerThread,thParam,CREATE_SUSPENDED,NULL);

在工作者線程中對消息隊列進行輪詢,如果有已經完成的I/O請求,系統會將該I/O加入完成端口維護的消息隊列,然后調度一個空閑工作線程對消息報進行處理。工作線程調用GetQueuedCompletionStatus()函數來輪詢消息隊列的狀態或者進入睡眠狀態。

完成端口的初始化代碼實現如下:

工作者線程完成具體的數據傳輸任務,調用系統函數ReadFile()向驅動程序發起DMA讀數任務,在讀數I/O請求完成后將讀取的數據寫入DLL內部各通道的緩沖區當中。

4 上層軟件設計

在應用軟件設計中,采用Windows下的Visual studio 2008開發平臺,基于.Net框架下的WinForm窗體應用程序,整體用戶界面如圖3所示。界面控件選用NI MeasureStudio 8.6工具軟件包。

圖3 數字化儀軟件用戶界面

數字化儀應用軟件采用三層架構設計,即表現層,業務邏輯層,數據訪問層。在每一層中都有對應的組件,完成對應的功能模塊,同時系統還提供一些通用的組件來提供一些通用服務。

1)表現層:實現用戶與系統的交互,提供一組控制接口給用戶選擇,并接收用戶的輸入。同時,將采集的數據信號以波形的形式呈現給用戶。

2)業務邏輯層:處理所有業務邏輯,對用戶的輸入進行處理。主要工作包括:定義、初始化全局變量;設定數字化儀的工作模式;對采集的數據信息進行分析提取有用信息等。調用數據訪問層接口,并為表現層提供服務。

3)數據訪問層:該層是對業務邏輯層的擴展,實現對數據的操作。從數字化儀獲取數據反饋給業務邏輯層處理;將需要保存的數據按照指定格式持久化到本地磁盤文件中。

5 測試結果及結論

數字化儀模塊實現了4路獨立的AD采集通道,復雜的前端調理電路及高頻噪聲,造成每個通道都有采集誤差,降低了采樣精度。為了保證通道的采樣精度,模塊增加了誤差補償功能,消除了一些固定誤差的影響。誤差主要分為偏置誤差和增益誤差兩種,模塊誤差補償功能就是針對這兩種誤差進行數據處理。通道誤差補償前需要獲取每個通道的誤差信息,而每個通道在不同量程、不同輸入阻抗情況下,誤差不同,需要分別進行誤差測量。即先在0V輸入下測試零位電壓,電壓值取反即為偏置補償值,然后輸入滿量程電壓,此時的采集電壓即為增益誤差補償值。經測試誤差補償完成后測量精度可達0.1%。同時數字化儀系統可以精確實現電平觸發、外部觸發及預采樣功能,并能精確計算正弦及方波等信號的頻率。

6 結束語

本文在VS2008環境中編寫了數字化儀的測試系統,通過調用驅動程序,實現了對高速數字化儀的控制。經實驗驗證,數字化儀在14位分辨率,單通道最大采樣速度為125Msps條件下,達到預定的設計指標,可以滿足大多數采樣需要。該數字化采用了DMA數據傳輸模式,極大地提高了數據傳輸速度,可廣泛應用于各種軍事和工業領域,具有十分廣闊的前景。

[1]柏向春.寬帶高精度數字化儀應用軟件設計[D].成都:電子科技大學,2008.

[2]王蘭英,居錦武.Windows平臺驅動程序新架構分析[J].計算機系統應用,2008(1):109-112.

[3]武安河.Windows設備驅動程序WDF開發[M].北京:電子工業出版社,2009.

[4]王波,郭建.基于PCI設備的DMA傳輸建模與分析[J].計算機測量與控制,2011(19):972-974.

[5]易偉,徐欣,孫兆林.基于WDF的PXIe接口驅動程序開發[J].微處理機,2011(8):86-92.

[6]付寧,趙浩然,梁宇,等.PXI數字化儀的觸發設計[J].電子測量技術,2012(8):116-119.

Digitizersoftware design based on high-speed multi-channel acquisition module

JIA Yu-jiao,LIU Ya-bin,ZHANG Xiu-lei
(School of Automation Science and Electrical Engineering,Beihang University,Beijing 100191,China)

Combined with the hardware equipment of digitizer,the key problems and resolutions in the development of software of high speed data acquisition and analysis system are discussed.It is discussed from three aspects-device driver,driver interface encapsulation and application software.Firstly,the basic frame and operational mechanism of WDF are analyzed thoroughly.Using VS2008,under Win7 system design WDF driver and implements the DMA transfer;design encapsulates the interface functions to operate the equipment;using C#language and multi-threaded design and implementation of the multi-channel high-speed data transmission,real-time display and storage system.Experiments show that the system is stability.

digitizer;WDF;DMA;high-speed

TN98

A

1674-6236(2016)12-0077-04

2015-07-02稿件編號:201507017

賈玉姣(1990—),女,山東濰坊人,碩士研究生。研究方向:檢測技術及自動化裝置。

猜你喜歡
驅動程序調用中斷
核電項目物項調用管理的應用研究
阻止Windows Update更新驅動程序
基于FPGA的中斷控制器設計*
Linux中斷線程化分析及中斷延時測試
計算機硬件設備驅動程序分析
跟蹤導練(二)(5)
千里移防,衛勤保障不中斷
基于系統調用的惡意軟件檢測技術研究
利用RFC技術實現SAP系統接口通信
妙用鼠標驅動
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合