<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 模擬技術 > 設計應用 > USB技術在現(xiàn)場校驗儀中的應用

          USB技術在現(xiàn)場校驗儀中的應用

          作者: 時間:2012-04-18 來源:網(wǎng)絡 收藏

          討論通用串行總線()技術應用于便攜式電能表的可行性,并介紹了系統(tǒng)的硬件、固件、設備驅(qū)動程序以及應用程序的設計方法,最后給出了其性能測試結果。

          本文引用地址:http://www.ex-cimer.com/article/186569.htm

          現(xiàn)在市場上的同類產(chǎn)品多采用RS-232方式通訊,但這種產(chǎn)品已漸露弊端。首先,RS-232在當前微機規(guī)范中逐漸隱退。第二,現(xiàn)場校驗產(chǎn)品已經(jīng)朝著多功能的方向發(fā)展。已不單一的檢查表誤差,許多CT/PT負荷、二次壓降、諧波分析、波形圖、負荷曲線等功能都已經(jīng)整合到現(xiàn)場校驗產(chǎn)品當中。功能的增加意味著存儲數(shù)據(jù)的急劇膨脹,而RS-232低的傳輸速率和難以保證通訊可靠性的特點決定了它不再是一個合適的解決方案。第三,采用RS-232方式的現(xiàn)校儀在和PC通訊的時候必須外加電源。

          經(jīng)過比較論證發(fā)現(xiàn),作為近年出現(xiàn)的一種代表微機接口發(fā)展方向的新型總線規(guī)范,其便捷易用、速度快、可靠性高等特點,使之非常適合作為現(xiàn)校儀的接口。目前大多數(shù)臺式計算機都具有四個以上的端口,筆記本電腦也都有兩個以下的USB端口,USB規(guī)范規(guī)定每個端口提供5V、500mA的電量也恰好可以提供給現(xiàn)校儀而無須增加外接電源.

          USB本身的控制協(xié)議較為復雜,需要使用相應的USB接口芯片。本設計采用了Philips公司的PDIUSBD12(簡稱D12),其優(yōu)點是可以選擇合適的微控制器及其開發(fā)系統(tǒng)進行外設開發(fā)。

          D12內(nèi)部集成了串行輸入引擎(SIE)、320字節(jié)的多結構FIFO存儲器、收發(fā)器以及電壓調(diào)整器,支持DMA方式,采用雙緩沖區(qū)技術,遵從USB1.1標準。芯片中串行輸入引擎(SIE)模塊起著至關重要的作用,完成所有USB協(xié)議層功能,如同步模式識別、并/串轉換、位填充/解填充、CRC檢驗/產(chǎn)生、包PID產(chǎn)生/確認、地址識別、握手信號包響應產(chǎn)生等。另外,D12還集成了SoftConnect、GoodLink、可編程時鐘輸出、低頻晶振和終端電阻等特性,提高了系統(tǒng)的性價比。

          1.1引腳功能

          PDIUSBD12的引腳排列如圖1所示,功能如下:

          VCC:接+5V電源;GND:接地;如要使器件工作在3.3V,則VCC、Vout3.3都為3.3V。DATA〈0〉~DATA〈7〉:雙向數(shù)據(jù)總線。ALE:地址鎖存使能。在多路地址數(shù)據(jù)總線中,下降沿關閉地址鎖存;在單地址/數(shù)據(jù)總線配置中接地。CSN:片選端,低電平有效。SUSPEND:器件處于掛起狀態(tài),高電平有效。CLKOUT:可編程時鐘輸出。INTN:中斷輸出,低電平有效。RDN、WRN:讀/寫使能。DMREQ:DMA請求。DMACKN:DMA應答,低電平有效。EOTN:DMA傳輸結束,低電平有效;EOTN僅當DMACKN和WRN或RDN一起激活時才有效。RESETN:復位端,低電平有效;使用片內(nèi)復位電路時接高電平。GLN:Goodlink LED指示器,低電平有效。XTAL1、XTAL2:晶振連接端,可采用外部時鐘信號代替晶振。D+、D-:USB數(shù)據(jù)線。A0:A0=1選擇命令指令,A0=0選擇數(shù)據(jù);該位在多路地址/數(shù)據(jù)總線配置時可接高電平。

          1.2命令匯總

          PDIUSBD12芯片中集成了串行輸入引擎(SIE)模塊,它完成所有USB協(xié)議層的功能、大大簡化了USB的固件開發(fā),開發(fā)人員只需使用D12提供的命令即可。D12命令如1表所示。

          思達公司生產(chǎn)的電能表中使用P89C51RD2作為主控制器。P89C51RD2是Philips公司生產(chǎn)的51增強型的CPU,它除具備標準51的功能外,在片內(nèi)集成了64KB FLASH和1KB RAM,可以在20MHz外頻下以每機器周期為6個時鐘周期的速度運行。P89C51RD2與PDIUSBD12的接口方法見圖1。

          由圖可知P89C51RD2通過IO口同D12的片選、地址位信號相連,外部中斷響應來自D12的中斷請求,D12的操作地址可以任意指定。

          所謂固件程序就是固化在程序存儲器中的程序代碼。本系統(tǒng)存儲在P89C51RD2的Flash存儲器中,固件開發(fā)使用Keil C51語言,開發(fā)平臺為μVision2集成開發(fā)環(huán)境。

          本設計參考了Philips公司提供的D12固件程序范例,對USB協(xié)議操作的相關代碼直接移植使用,而數(shù)據(jù)采集、傳輸、存儲等部分則自主開發(fā)。

          固件程序結構如圖2所示。硬件抽象層對D12的數(shù)據(jù)讀、寫以及各種指令的寫入進行函數(shù)封裝;D12命令接口層對D12的所有控制指令的函數(shù)進行封裝;USB向量請求模塊完成USB上電配置、向量請求等各類事件的響應處理;USB協(xié)議層包括對USB協(xié)議操作的封裝以及對USB標準請求的響應;中斷服務進程包括USB中斷、ADC中斷等。

          當D12有事件需要處理時,將觸發(fā)微控制器外部中斷0,微控制器讀取D12的中斷狀態(tài)寄存器,判斷中斷的來源并作出相應的處理。若由數(shù)據(jù)端點觸發(fā),則相應地讀取或?qū)懭霐?shù)據(jù);若由控制端點0觸發(fā),則判斷請求的類型。標準請求由USB協(xié)議處理模塊處理,用戶自定義向量請求由USB向量請求模塊處理。

          在Windows環(huán)境下,USB設備驅(qū)動程序遵循WDM(Win32 Driver Mode)方式。為了簡化設計,并兼顧驅(qū)動程序的運行效率,筆者選用了DriverStudio2.7工具軟件中的DriverWorks組件進行USB設備驅(qū)動程序的開發(fā)。DriverWorks為WDM設備驅(qū)動程序的開發(fā)提供了完善的支持。其中包含一個非常完善的源代碼生成工具DriverWizard以及相應的類庫和驅(qū)動程序范例,它還支持在C++下進行設備驅(qū)動程序的開發(fā)。通過DriverWizard生成的代碼只需要進行少量的修改就可以使用,這使得驅(qū)動程序開發(fā)者可以將精力集中在驅(qū)動功能的實現(xiàn)上,而不必理會太多的WDM開發(fā)細節(jié)。

          本設計在DriverWizard的最后自定義了四個IOCTL接口對USB設備進行控制,如表2所示。然后在自動生成的驅(qū)動程序代碼中向相應的IOCTL函數(shù)添加代碼,用函數(shù)BuildVerdorRequest構建USB協(xié)議的自定義向量請求(Vendor Request)。由編譯修改后的源代碼即可得到驅(qū)動程序文件McaD12.SYS。

          我們已成功地將USB技術應用在一款現(xiàn)場校驗產(chǎn)品上。測試儀器通過USB向PC傳輸?shù)乃俾蔬_到12~14kbyte/s。經(jīng)過長期測試知,該通訊方式傳輸率高、容錯性強,方便使用,整個開發(fā)過程獲得了成功,并具有一定的創(chuàng)新性。對本系統(tǒng)編譯稍加修改便可應用于其他基于微機的數(shù)據(jù)采集、自動化測控系統(tǒng)中。

          電能表相關文章:電能表原理


          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();