摘? 要: 應(yīng)用越來(lái)越廣泛的USB為實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)采集" title="數(shù)據(jù)采集">數(shù)據(jù)采集提供了很大的便利,功能強(qiáng)大的MATLAB工具軟件對(duì)數(shù)據(jù)分析和處理十分方便,。介紹一種利用MEX文件將二者結(jié)合起來(lái),實(shí)現(xiàn)在MATLAB平臺(tái)下對(duì)數(shù)據(jù)實(shí)時(shí)采集,然后利用其庫(kù)函數(shù)對(duì)采集到的數(shù)據(jù)進(jìn)行處理和分析的方法,。
關(guān)鍵詞: USB? MATLAB? MEX文件? 數(shù)據(jù)采集 實(shí)時(shí)
?
1 MATLAB的特點(diǎn)
MATLAB(Matrix Laboratory)機(jī)矩陣實(shí)驗(yàn)室是由美國(guó)MathWorks公司推出的一款集數(shù)值分析,、矩陣計(jì)算、信號(hào)處理和圖形顯示于一體的工具軟件,。它的命令語(yǔ)句功能非常強(qiáng)大,包含了大量高度集成的可直接調(diào)用的函數(shù),高效簡(jiǎn)潔;另一方面,它又是一個(gè)開(kāi)放系統(tǒng),針對(duì)不同的學(xué)科,推出了不同的工具箱,。自1984年推向市場(chǎng)以來(lái),經(jīng)過(guò)十幾年的發(fā)展和競(jìng)爭(zhēng),現(xiàn)已成為國(guó)際認(rèn)可(IEEE)的最優(yōu)化的科技應(yīng)用軟件之一,。
正是由于MATLAB具有良好的擴(kuò)展性以及強(qiáng)大的數(shù)據(jù)分析和處理能力,現(xiàn)已廣泛應(yīng)用于矩陣代數(shù),、數(shù)值計(jì)算,、數(shù)字信號(hào)處理、振動(dòng)理論,、神經(jīng)網(wǎng)絡(luò)控制,、動(dòng)態(tài)仿真等領(lǐng)域。雖然MATLAB是一個(gè)完整的,、功能齊全的編程環(huán)境,但在某些情況下,與外部環(huán)境的數(shù)據(jù)和程序的交互是非常必須而且有益的,。例如,MATLAB不能實(shí)現(xiàn)對(duì)數(shù)據(jù)的實(shí)時(shí)采集,它所處理的數(shù)據(jù)必須是現(xiàn)成的,因此它不能很好地應(yīng)用于需要在現(xiàn)場(chǎng)對(duì)數(shù)據(jù)進(jìn)行分析和處理馬上得出結(jié)論的環(huán)境。如果將MATLAB與外部的數(shù)據(jù)和程序進(jìn)行交互,問(wèn)題就可迎刃而解了,。
MATLAB是用M語(yǔ)言編程,盡管不能在M文件中直接調(diào)用C語(yǔ)言程序,但可以通過(guò)MATLAB提供的應(yīng)用編程接口(API)來(lái)與外部接口,在MATLAB環(huán)境中調(diào)用C語(yǔ)言或Fortran程序,、輸入或輸出數(shù)據(jù)" title="輸出數(shù)據(jù)">輸出數(shù)據(jù)以及與其他軟件程序建立客戶/服務(wù)器關(guān)系。在MATLAB中調(diào)用C語(yǔ)言程序,必須通過(guò)MEX文件來(lái)實(shí)現(xiàn),。
2 MEX文件
MEX文件是MATLAB命令解釋器能夠自動(dòng)加載和執(zhí)行的動(dòng)態(tài)鏈接子函數(shù),。C語(yǔ)言的MEX文件是一種動(dòng)態(tài)鏈接子程序,可以象調(diào)用M文件一樣調(diào)用它。MEX文件主要有以下幾方面的應(yīng)用:
(1)在MATLAB中,M文件的計(jì)算速度特別是循環(huán)迭代速度遠(yuǎn)比C語(yǔ)言慢,因此可以把大量循環(huán)迭代用C語(yǔ)言編寫(xiě)為MEX文件,提高計(jì)算速度,解決MATLAB中循環(huán)的瓶頸問(wèn)題;
(2)已經(jīng)開(kāi)發(fā)的C語(yǔ)言程序,不必將其轉(zhuǎn)化為M文件而重復(fù)勞動(dòng),通過(guò)添加入口程序mexFunction,可以由MATLAB調(diào)用;
(3)直接控制硬件,如A/D采集卡,、D/A輸出卡等,以用于數(shù)據(jù)采集或控制應(yīng)用。
MEX文件與動(dòng)態(tài)鏈接庫(kù)從某種意義上來(lái)說(shuō)有很多相似之處,不同之處在于MEX文件是專門針對(duì)MATLAB的動(dòng)態(tài)鏈接庫(kù),可以像MATLAB自身的庫(kù)函數(shù)一樣被調(diào)用,。
C語(yǔ)言的MEX文件的源程序由兩個(gè)部分組成:
(1)計(jì)算程序,即在MEX文件中完成計(jì)算功能的程序代碼,。計(jì)算程序可以是普通的C語(yǔ)言程序,按照C語(yǔ)言規(guī)則編寫(xiě)即可;
(2)入口程序,即將計(jì)算程序與MATLAB連接的入口函數(shù)mexFunction。入口函數(shù)mexFunction相對(duì)復(fù)雜一些,函數(shù)中有四個(gè)參數(shù)nlhs,、plhs,、nrhs和prhs。這里nlhs是輸出數(shù)據(jù)的個(gè)數(shù),plhs是指向mxArray(MATLAB中所有數(shù)據(jù)都由mxArray定義)的輸出數(shù)據(jù)的指針,nrhs是輸入數(shù)據(jù)的個(gè)數(shù),prhs是指向mxArray的輸入數(shù)據(jù)的指針,。
3 USB的特點(diǎn)
USB(Universal Serial Bus)就是通用串行總線,它是一種PC機(jī)的外掛總線,是多家主要電腦,、電子科技廠商為了解決PC機(jī)外圍設(shè)備的擁擠,提高設(shè)備的傳輸速度而聯(lián)合提出的一種新型總線,。當(dāng)適合它的Windows98操作系統(tǒng)一出現(xiàn),USB便得到了迅猛的發(fā)展。USB之所以具有如此魅力,還在于它具有許多其它總線無(wú)法比擬的優(yōu)點(diǎn),。USB規(guī)范能針對(duì)不同的性能價(jià)格比要求提供不同的選擇,以滿足不同的系統(tǒng)和部件及相應(yīng)不同的功能,其主要優(yōu)點(diǎn)可歸結(jié)為以下幾點(diǎn):
(1)速度快,。USB有高速和低速兩種方式,主模式為高速模式,速率為12Mbps;另外為適應(yīng)一些不需要很大吞吐量和很高實(shí)時(shí)性的設(shè)備,如鼠標(biāo)等。USB還提供低速方式,速率為1.5Mbps,。
(2)易擴(kuò)展,。用USB連接的外圍設(shè)備可以分為5層,外設(shè)數(shù)目最多可達(dá)127個(gè)。
(3)能夠采用總線供電,。USB總線提供最大5V,500mA電流,對(duì)于功耗較小的設(shè)備來(lái)說(shuō)非常有效,。
(4)設(shè)備安裝和配置容易。USB設(shè)備支持即插即用和熱插拔,系統(tǒng)對(duì)其進(jìn)行自動(dòng)配置,不再占用中斷資源或者DMA資源,徹底拋棄了過(guò)去的跳線和撥碼開(kāi)關(guān)設(shè)置,。USB為電纜和連接頭提供了單一模型,解決了因外設(shè)越來(lái)越多造成的插槽緊張問(wèn)題,。
(5)使用靈活。USB共有4種傳輸模式:控制傳輸(control),、同步傳輸(Synchronization),、中斷傳輸(interrupt)、批量傳輸(bulk),以適應(yīng)不同設(shè)備的需要,。
(6)實(shí)現(xiàn)USB功能的模塊價(jià)格低廉,。
實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)的采集,并利用MATLAB強(qiáng)大的數(shù)據(jù)處理和分析功能,最理想的情況當(dāng)然就是在MATLAB中直接對(duì)USB總線進(jìn)行控制。但是MATLAB自身并不能實(shí)現(xiàn)對(duì)USB的控制功能,。眾所周知,在C語(yǔ)言環(huán)境中,可以非常方便地實(shí)現(xiàn)對(duì)USB的驅(qū)動(dòng)開(kāi)發(fā)和控制,。如果使用C語(yǔ)言對(duì)USB的數(shù)據(jù)采集部分進(jìn)行驅(qū)動(dòng)和控制,編譯成MEX文件,然后在MATLAB中調(diào)用即可。
4 USB數(shù)據(jù)采集系統(tǒng)
4.1 USB驅(qū)動(dòng)(USBD)
USBD為客戶提供兩組工具:命令工具和通道工具,。命令工具允許客戶在配置和控制USBD操作的同時(shí)配置并控制USB設(shè)備,它提供了對(duì)設(shè)備標(biāo)準(zhǔn)通道的所有訪問(wèn);通道工具允許USBD客戶管理特定設(shè)備的數(shù)據(jù),控制數(shù)據(jù)的傳輸,它不允許客戶直接訪問(wèn)設(shè)備的標(biāo)準(zhǔn)通道,。USBD客戶可以直接命令設(shè)備或從通道直接輸入和輸出數(shù)據(jù)流。
USBD提供了供操作系統(tǒng)組件特別是設(shè)備驅(qū)動(dòng)程序" title="設(shè)備驅(qū)動(dòng)程序">設(shè)備驅(qū)動(dòng)程序訪問(wèn)設(shè)備的一組接口,。這些操作系統(tǒng)組件只能通過(guò)USBD來(lái)訪問(wèn)USB,。一個(gè)USBD可以訪問(wèn)一個(gè)或多個(gè)HCD,而一個(gè)HCD可能與一個(gè)或多個(gè)主機(jī)控制器相連。某些操作系統(tǒng)可能允許對(duì)USBD進(jìn)行初始化設(shè)置,。從客戶來(lái)看,與其進(jìn)行通信的USBD管理著所有連接著的USB設(shè)備,。
其通信過(guò)程如圖1所示。
?
?
從硬件連接的角度來(lái)看,系統(tǒng)由兩部分構(gòu)成:開(kāi)發(fā)板和PC機(jī),。從軟件角度來(lái)看,可以分為三個(gè)層次:板載程序,、設(shè)備驅(qū)動(dòng)程序和客戶應(yīng)用程序。
·板載程序由8051執(zhí)行,,完成控制開(kāi)發(fā)板的工作,。
·設(shè)備驅(qū)動(dòng)程序是Windows核心的一部分,它與系統(tǒng)中的USB總線驅(qū)動(dòng)程序一起完成對(duì)設(shè)備的管理。
·客戶應(yīng)用程序主要完成上層控制功能,將數(shù)據(jù)寫(xiě)入設(shè)備或者將設(shè)備中的數(shù)據(jù)讀出顯示,。
4.2 采集系統(tǒng)硬件連接
一個(gè)實(shí)用的USB數(shù)據(jù)采集系統(tǒng)包括A/D,、微控制器及USB通信接口,。為了擴(kuò)展還可以加上多路" title="多路">多路模擬開(kāi)關(guān)和數(shù)字I/O端口。系統(tǒng)硬件結(jié)構(gòu)框圖如圖2所示,。
?
?
一種方案就是采用普通單片機(jī)加上專用USB通信芯片,。這種方案設(shè)計(jì)和調(diào)試比較麻煩,成本相對(duì)較高。
隨著單片機(jī)制造技術(shù)的發(fā)展以及USB應(yīng)用的日益廣泛,還可以使用具有USB通信接口的單片機(jī),。這些單片機(jī)處理能力強(qiáng),有的本身就具備多路A/D,。系統(tǒng)電路簡(jiǎn)單、調(diào)試方便,、電磁兼容性好,。
本系統(tǒng)從性能角度以及今后的發(fā)展方向出發(fā),選用Cypress公司生產(chǎn)的具有USB通信功能的CY7C64613。EZ-USB FX(CY7C64613)屬于Cypress半導(dǎo)體第二代全速USB系列,它較第一代具有更好的性能和更高的集成度,。CY7C64613不但具備了EZ-USB的所有特征,還包括了一個(gè)智能的USB核心,一個(gè)增強(qiáng)8051,8KB的RAM和維持上層代碼兼容性的高性能I/O,。該單片機(jī)可以與USB1.1協(xié)議和2.0協(xié)議兼容。
系統(tǒng)A/D采用Analog Devices公司的AD7891,。它是一個(gè)8通道的12位數(shù)據(jù)采集系統(tǒng),可以任意選擇并行或串行接口" title="串行接口">串行接口,。這部分包括一個(gè)多路輸入復(fù)用器,一個(gè)片上監(jiān)控放大器,一個(gè)高速12位ADC,+2.5V參考電壓和一個(gè)高速接口。AD7891選擇并行還是串行接口由MODE腳決定,。無(wú)論是并行還是串行接口,它都具有標(biāo)準(zhǔn)的控制輸入和快速的數(shù)據(jù)采集,從而保證了與現(xiàn)代微處理器,、微控制器以及數(shù)字信號(hào)處理器的簡(jiǎn)單接口連接。AD7891的每一個(gè)通道都有過(guò)壓保護(hù),這意味著未選通道的過(guò)壓現(xiàn)象不會(huì)影響已選通道的數(shù)據(jù)傳輸,。
系統(tǒng)框圖如圖3所示,。
?
?
4.3 MEX文件的編寫(xiě)?????
為了使程序具有良好的可移植性,實(shí)現(xiàn)功能的模塊化,MEX文件的兩個(gè)部分分別放在兩個(gè)不同的文件里??刂坪蛯?shí)現(xiàn)部分主要完成對(duì)USB的讀寫(xiě)以及管理功能,入口程序調(diào)用它們,從而實(shí)現(xiàn)對(duì)USB發(fā)送控制命令,、從USB讀取數(shù)據(jù)以及存儲(chǔ)數(shù)據(jù)的功能。
MEX文件執(zhí)行流程如圖4所示,。
?
?
???在傳統(tǒng)的工程檢測(cè)中,需要將采集到的數(shù)據(jù)存儲(chǔ)起來(lái),經(jīng)過(guò)一系列的處理和轉(zhuǎn)換,才能利用MATLAB進(jìn)行分析和處理,。實(shí)時(shí)性較差,造成人力物力的浪費(fèi)。而該系統(tǒng)可以在MATLAB平臺(tái)上直接調(diào)用,簡(jiǎn)潔明了,克服了傳統(tǒng)方法的缺點(diǎn),。
?
參考文獻(xiàn)
1 (美)Jan Axelson著,, 陳逸譯.USB應(yīng)用大全.北京:中國(guó)電力出版社, 2001
2 劉志儉.MATLAB應(yīng)用程序接口用戶指南.北京:科學(xué)出版社,2000
3 程衛(wèi)國(guó).MATLAB5.3應(yīng)用指南.北京:人民郵電出版社,,1999
4 SanJose編著.CY7C64601/603/613 EZ-USB FX USB?Microcontroller Data Sheet.Cypress Semiconductor Corporation,,2001
5 LC2MOS 8-Channel,12-Bit High Speed Data Acquisition?System Data Sheet (Rev.C,,),2002