999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

GDIPlus雙緩存技術在USB采集卡控制軟件中的應用

2011-05-21 00:41:16楊增寶
電子設計工程 2011年12期

楊增寶 , 楊 浩

(1.重慶大學 重慶 400044;2.長江師范學院 重慶 408100)

心電、腦電、胃電等生物電信號通常都集中在頻率低段,對采樣電路和波形顯示設備的要求都不太高。但為了能對象肌電一類相對較高頻率的生物電信號進行更高質量的采樣和精確分析,就要求有更高速率的數據采集設備。常規數據采集卡都采用PCI接口,安裝和攜帶都非常麻煩,給人們的研究工作帶來了極大的不便。因此,設計一款基于USB接口的高速率數據采集卡,對分析更復雜的生物電信號有著十分重要的作用,也會給研究工作帶來更大的方便。

圖1 硬件結構圖Fig.1 Block diagram of hardware

1 硬件環境介紹

控制軟件針對的是該款自行設計的,以Cypress公司生產的CY7C68013A為核心的USB數據采集卡,該卡充分利用了USB2.0的高帶寬數據傳輸優勢,在采樣精度為12 Bit的條件下,還能達到單通道最高6 Ms/s的數據采樣速率。采集卡的硬件設計如圖1所示。

圖中,隔離電路采用軌至軌、低噪聲運放LT1677連接成跟隨器實現,有較高的通頻帶;A/D轉換器采用了ADI公司的AD9220,其轉換精度為12 Bit,最高采樣速率可達10 Ms/s;USB接口電路由Cypress公司的CY7C68013A構成,它率先支持USB2.0傳輸標準,內建一個可工作在48 MHz時鐘的增強型8051內核[1],利用它可以方便地通過上位機對其工作狀態進行設定,而且它內部還自帶4 kB FIFO,每個端點都可獨立使用其中的1 k。

該設計方案的最大特點是做到了硬件結構的最簡化,因而成本最低、工作穩定度也最高。設計中最主要的創新點是去掉了通常由FPGA或CPLD來執行的外部控制邏輯,讓A/D轉換器的時鐘信號CLK直接由CY7C68013的GPIF輸出信號CTL來提供,在簡化了外圍控制邏輯的同時,又保證了較高的采樣速率(因為GPIF的驅動時鐘為12 MHz),同時還很好地解決了時鐘同步問題。

2 GDIPlus雙緩存技術在控制軟件中的實現

GDIPlus(Graphics Device Interface Plus)是 Windows系列操作系統用來執行繪畫及其他相關圖形操作的一套子系統[2],它是一組通過C++類實現的應用程序編程接口,它不僅在GDI的基礎上添加了許多新特性,而且對原有的GDI功能進行了各種優化。在它的基礎上,采用GDIPlus雙緩存技術[3]繪圖,不僅可以非常容易地編寫出與設備無關的應用程序,而且可以實現更好的繪圖效果。

由于硬件平臺數據采樣率比較高,這就要求上位機的波形顯示程序要有盡可能高的效率才能達到理想的動態波形顯示效果,因此我們將GDIPlus雙緩存技術引入到此硬件平臺的控制軟件開發當中。

由于GDIPlus提供了更豐富的繪圖方法,因而生成平滑度效果十分良好的圖形線條,同時還能跟早期GDI編程一樣對所繪圖形的屬性進行控制,該方法具有更高的實用價值。

控制軟件在繪制波形前,首先要從USB端口獲取AD采集的原始數據,這一過程需要通過訪問驅動程序來實現。

2.1 應用程序與驅動程序的接口

控制軟件首先通過bOpenDriver()方法與驅動程序建立連接,并打開USB設備,函數原型如下:

BOOL bOpenDriver (HANDLE *phDeviceHandle,PCHAR devname)

{

char completeDeviceName[64]="";

char pcMsg[64]="";

strcat(completeDeviceName,"\\.\");

strcat(completeDeviceName,devname);

*phDeviceHandle=CreateFile(completeDeviceName,

GENERIC_WRITE,

FILE_SHARE_WRITE,

NULL,

OPEN_EXISTING,

0,

NULL);

if(*phDeviceHandle==INVALID_HANDLE_VALUE)

{

return (FALSE);

}

else

{

return (TRUE);

}

}

然后應用程序通過DeviceIoControl()方法[4]從CY7C68013A的EP6端點獲取AD轉換器采集到的數據結果,得到的數據在指針inBuffer中,其函數原型如下:

inBulkControl.pipeNum=1;//選擇EP6為輸入端口DeviceIoControl(usbInHandle, //指定 USB 設備句柄

IOCTL_EZUSB_BULK_READ,//指定傳輸類型為Bulk IN

(PVOID)&inBulkControl, //傳輸控制緩沖區指針

sizeof (BULK_TRANSFER_CONTROL), //傳輸控制緩沖區大小

inBuffer,//數據輸入緩沖區指針

TransferSize,//數據傳輸量大小

&nBytes,//實際返回的字節數

NULL);

如果采集到的數據還需進行數字濾波[5]或其它算法的加工,可直接對inBuffer中的數據進行相應處理。處理完后的結果便可用于波形顯示。

由于AD采集的每一個數據都對應波形上的一個點,所以波形顯示的主要目的就是把這些離散的點連成線條。因此,控制軟件會非常頻繁地調用DrawLine()函數。如果DrawLine()函數直接把圖形繪制到繪圖窗口,其繪圖效率會嚴重下降。最為嚴重的問題還在于每一幀圖形繪制完畢后的擦除操作會導致整個繪圖窗口的閃爍。為有效解決這兩個問題,設計引入了雙緩存的繪圖方法。

2.2 GDIPlus雙緩存技術的實現過程

實現雙緩存技術的基本思想是:創建一個跟顯示窗口等大的內存空間作為虛擬畫布,用來保存臨時繪制的圖像,當一幀完整的圖形全部繪制完畢之后,再一次性將此虛擬畫布的內容復制到顯示窗口中,完成最終顯示任務。由于內存的訪問速度遠高于實際窗口繪圖,所以繪圖效率成倍地提高。再加上整個繪圖過程和擦除動作都是在虛擬畫布中以后臺的方式完成的,所以前一幀與后一幀之間的擦圖操作被隱藏,閃爍問題得到了有效解決。

虛擬畫布的創建在GDIPlus中需要用Bitmap bmp()方法來實現,其調用參數 rect.Width()和 rect.Height()保障了它與實際窗口面積等大。應用程序原則上可以調用任何GDIPlus提供的繪圖函數來在虛擬畫布所對應的緩存區中繪制圖形映像,但本控制軟件的主要任務是繪制波形圖,所以只調用了DrawLine()函數。需要特別指出的是,在GDIPlus庫中,畫點和畫線都只能用DrawLine()函數來完成[6],兩者實現了統一。

程序最后調用Graphics.DrawImage()方法,將虛擬畫布中的圖形映像直接拷貝到顯示窗口內存,快速完成將虛擬畫布中圖像顯示到實際窗口的任務。整個過程的關鍵代碼如下:

void CGdiDrawDlg::OnWave()

{

CWnd*pWnd=GetDlgItem(IDC_WAVE);

CClientDC dc(pWnd);

Graphics g(dc.m_hDC);

CRect clientrect;

GetClientRect(&clientrect);

CRectrect (clientrect.left,clientrect.top,clientrect.Width(),clientrect.Height());

Bitmap bmp(rect.Width(),rect.Height());//——創建虛擬畫布

Graphics gTmp(&bmp);//——獲取虛擬畫布的

Graphics引用

SolidBrush br(Color(255,0,0,0)); //定義背景畫刷

gTmp.FillRectangle (&br,0,0,rect.Width (),rect.Height()); //定義填充背景

Pen pen(Color(255,255,50,50),1);//定義畫筆及其屬性pen.SetWidth(1); //設置畫筆線寬

gTmp.SetSmoothingMode (SmoothingModeHighQuality);//反鋸齒平滑顯示

for(i=0;i< sizeof(inBuffer);i++)

{

gTmp.DrawLine(&pen,i,inBuffer[i],i+1,inBuffer[i+1]);

//根據inBuffer里面的數據在虛擬畫布上繪圖

}

g.DrawImage (&bmp,0,0); //將虛擬畫布中的圖形映像繪制到實際窗口

}

3 結束語

圖2是該卡在6 Ms/s采樣率下對22 kHz正弦波的采樣結果,對于如此高速率的數據流,任何軟件都無法完成對所有采樣點的同步實時顯示,所以本軟件目前也只能完成對該信號數據的分段抽樣顯示,抽樣率為20幀/秒,所以對于軟件的繪圖效率部分還有待進一步研究和提高。綜上所述,GDIPlus雙緩存技術是Windows平臺支持的高效圖形顯示方案,通過該技術在本設計中的應用表明,它實現了高效、平滑的波形顯示效果,使得動態波形快速顯示的閃爍問題得以有效解決,能滿足工程設計要求。

圖2 控制軟件運行圖Fig.2 Running diagram of control software

[1]錢峰.EZ-USB FX2單片機原理編程及應用[M].北京:北京航空航天大學出版社,2006.

[2]Chand M.GDI+圖形程序設計[M].韓江,等譯.北京:電子工業出版社,2005.

[3]Kruglinski D J, Wingo S.Visual C++6.0技術內幕[M].北京:北京希望電子出版社,1999.

[4]CypressSemiconductor.CypressCyAPIprogrammer’s reference[EB/OL].(2003)[2010-03-20].http://www.mikrocontroller.net/attachment/34631/CyAPI.pdf.

[5]陳輝,李遠.基于USB2.0的數據采集卡[J].自動化技術與應用,2008,27(6):91-93 CHEN Hui,LI Yuan.A data acquisition card based on USB2.0[J].Techniques of Automation and Applications,2008,27(6):91-93

[6]張國輝,胡聞達,李慧智.基于GDI+的緩沖區建立及邊界描述方法[J].測繪科學技術學報,2010,27(3):229-232 ZHANG Guo-hui, HU Wen-da, LI Hui-zhi.A way to establish buffer area and describe boundary based on GDI+[J].Journal of Geomatics Science and Technology,2010,27(3):229-232.

主站蜘蛛池模板: 手机精品视频在线观看免费| 国产成人亚洲毛片| 九九热这里只有国产精品| 免费一级全黄少妇性色生活片| 国产v精品成人免费视频71pao| 国产精品黑色丝袜的老师| 国产青青操| 欧美成人免费一区在线播放| 亚洲精品无码av中文字幕| 亚洲综合精品第一页| 国产精品国产三级国产专业不 | 在线中文字幕网| 999福利激情视频| 婷婷成人综合| 人妻丰满熟妇αv无码| Aⅴ无码专区在线观看| 囯产av无码片毛片一级| 亚洲Va中文字幕久久一区| 国产精品永久不卡免费视频| 制服丝袜亚洲| 久无码久无码av无码| 色哟哟精品无码网站在线播放视频| 国产精品视频白浆免费视频| 亚洲男人天堂2020| 另类欧美日韩| 又爽又大又黄a级毛片在线视频| 欧美日韩亚洲综合在线观看| 欧美人人干| 精品欧美一区二区三区在线| 欧美影院久久| 婷婷综合缴情亚洲五月伊| 99精品伊人久久久大香线蕉| 成人一区在线| 九九热精品在线视频| 91久久青青草原精品国产| 久久久久国产精品嫩草影院| 国产香蕉在线视频| 欧美日韩va| 噜噜噜久久| 久操线在视频在线观看| 黄色不卡视频| 亚洲国产精品人久久电影| 精品国产电影久久九九| 四虎在线观看视频高清无码 | 亚洲第一区欧美国产综合| 午夜a视频| 久久亚洲欧美综合| 一区二区三区精品视频在线观看| 欧美日韩国产在线观看一区二区三区| 欧美午夜视频| 中文成人无码国产亚洲| 日本精品视频一区二区| 在线色综合| 99九九成人免费视频精品| 日本一区二区三区精品AⅤ| 毛片一级在线| 日本a∨在线观看| 午夜毛片免费观看视频 | 黄色网在线| 久久窝窝国产精品午夜看片| 伊人成人在线| 日韩色图区| 亚洲精品麻豆| 国产欧美综合在线观看第七页| 国产成人久久777777| 免费视频在线2021入口| 國產尤物AV尤物在線觀看| 国产欧美中文字幕| 小说区 亚洲 自拍 另类| 亚洲三级色| 国产乱肥老妇精品视频| 亚洲精品福利视频| 亚洲爱婷婷色69堂| 福利在线不卡| 九色视频线上播放| 亚洲成人动漫在线观看| 国产精品视频导航| 久久久久国产一级毛片高清板| 国内视频精品| 欧美精品伊人久久| 欧美不卡视频一区发布| 欧美精品二区|