• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      GDIPlus雙緩存技術(shù)在USB采集卡控制軟件中的應(yīng)用

      2011-05-21 00:41:16楊增寶
      電子設(shè)計(jì)工程 2011年12期
      關(guān)鍵詞:采集卡畫布繪圖

      楊增寶 , 楊 浩

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

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

      圖1 硬件結(jié)構(gòu)圖Fig.1 Block diagram of hardware

      1 硬件環(huán)境介紹

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

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

      該設(shè)計(jì)方案的最大特點(diǎn)是做到了硬件結(jié)構(gòu)的最簡化,因而成本最低、工作穩(wěn)定度也最高。設(shè)計(jì)中最主要的創(chuàng)新點(diǎn)是去掉了通常由FPGA或CPLD來執(zhí)行的外部控制邏輯,讓A/D轉(zhuǎn)換器的時(shí)鐘信號(hào)CLK直接由CY7C68013的GPIF輸出信號(hào)CTL來提供,在簡化了外圍控制邏輯的同時(shí),又保證了較高的采樣速率(因?yàn)镚PIF的驅(qū)動(dòng)時(shí)鐘為12 MHz),同時(shí)還很好地解決了時(shí)鐘同步問題。

      2 GDIPlus雙緩存技術(shù)在控制軟件中的實(shí)現(xiàn)

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

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

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

      控制軟件在繪制波形前,首先要從USB端口獲取AD采集的原始數(shù)據(jù),這一過程需要通過訪問驅(qū)動(dòng)程序來實(shí)現(xiàn)。

      2.1 應(yīng)用程序與驅(qū)動(dòng)程序的接口

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

      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);

      }

      }

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

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

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

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

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

      inBuffer,//數(shù)據(jù)輸入緩沖區(qū)指針

      TransferSize,//數(shù)據(jù)傳輸量大小

      &nBytes,//實(shí)際返回的字節(jié)數(shù)

      NULL);

      如果采集到的數(shù)據(jù)還需進(jìn)行數(shù)字濾波[5]或其它算法的加工,可直接對(duì)inBuffer中的數(shù)據(jù)進(jìn)行相應(yīng)處理。處理完后的結(jié)果便可用于波形顯示。

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

      2.2 GDIPlus雙緩存技術(shù)的實(shí)現(xiàn)過程

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

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

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

      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());//——?jiǎng)?chuàng)建虛擬畫布

      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); //設(shè)置畫筆線寬

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

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

      {

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

      //根據(jù)inBuffer里面的數(shù)據(jù)在虛擬畫布上繪圖

      }

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

      }

      3 結(jié)束語

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

      圖2 控制軟件運(yùn)行圖Fig.2 Running diagram of control software

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

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

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

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

      [5]陳輝,李遠(yuǎn).基于USB2.0的數(shù)據(jù)采集卡[J].自動(dòng)化技術(shù)與應(yīng)用,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]張國輝,胡聞達(dá),李慧智.基于GDI+的緩沖區(qū)建立及邊界描述方法[J].測繪科學(xué)技術(shù)學(xué)報(bào),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.

      猜你喜歡
      采集卡畫布繪圖
      來自河流的你
      中國三峽(2022年7期)2022-12-02 05:28:02
      “禾下乘涼圖”繪圖人
      高精度AD采集卡性能測試及評(píng)價(jià)方法研究
      中國測試(2022年2期)2022-03-19 09:57:30
      商業(yè)模式畫布
      為什么要在畫布上割一刀?
      讓鮮花在畫布上盛開
      基于HTML5 Canvas繪圖技術(shù)應(yīng)用
      電子測試(2018年4期)2018-05-09 07:28:32
      面向數(shù)控機(jī)床的多通道傳感數(shù)據(jù)采集卡設(shè)計(jì)
      并行高速采樣在地震物理模擬采集中的應(yīng)用
      PCI-e高速數(shù)據(jù)采集卡的驅(qū)動(dòng)與上位機(jī)軟件設(shè)計(jì)
      電子器件(2015年5期)2015-12-29 08:43:12
      逊克县| 安仁县| 军事| 陇川县| 图们市| 金昌市| 淮安市| 兴城市| 庐江县| 基隆市| 揭东县| 仁寿县| 葫芦岛市| 泰安市| 旺苍县| 康乐县| 郑州市| 浮山县| 罗山县| 海盐县| 渑池县| 南陵县| 石泉县| 盖州市| 日照市| 新田县| 汤阴县| 泊头市| 冷水江市| 略阳县| 望江县| 阳春市| 嘉鱼县| 苍南县| 冷水江市| 宜黄县| 任丘市| 平阳县| 克东县| 门头沟区| 维西|