基于Matlab和VC混合編程的DSP數(shù)據(jù)采集系統(tǒng)
前言
本文引用地址:http://m.butianyuan.cn/article/257457.htm在開發(fā)DSP數(shù)據(jù)采集和處理系統(tǒng)的過程中.通常需要采用DSP匯編語言開發(fā)一些復(fù)雜的算法(如FFT分析、相關(guān)分析等),但是,實現(xiàn)這些算法的程序一般都很復(fù)雜,尤其需要圖形顯示時,程序的編寫就更復(fù)雜了。此外,這些程序還將占用DSP的內(nèi)存資源。Matlab提供了矩陣處理、數(shù)值計算、圖形顯示等強大功能,同時還帶有功能豐富的軟件工具箱.若能把Matlab的高效、便捷算法和圖形顯示工具應(yīng)用于DSP數(shù)據(jù)采集和處理系統(tǒng).即把采集到的數(shù)據(jù)上傳到Matlab平臺進行相應(yīng)的處理和圖形顯示.這樣.不僅減少了DSP的負(fù)荷和開銷.而且還可以加快系統(tǒng)的研發(fā)進度。
1 系統(tǒng)設(shè)計
基于Matlab平臺的DSP數(shù)據(jù)采集和處理系統(tǒng)的主要功能是:在Matlab平臺上控制底層DSP目標(biāo)板進行數(shù)據(jù)的采集和處理,并把采集到的數(shù)據(jù)上傳到Matlab平臺上進行相應(yīng)的數(shù)值處理和圖形顯示然后再把處理后的數(shù)據(jù)回傳給底層DSP目標(biāo)板,完成后續(xù)任務(wù)。
1.1硬件結(jié)構(gòu)
DSP數(shù)據(jù)采集系統(tǒng)主要由PC計算機、TMS320C6202 DSP目標(biāo)板、AD16模塊、MOT模塊、數(shù)字I/O口和Timer模塊組成,如圖1所示。
①DSP目標(biāo)板選用ll(Innovative Integration)公司M6x系列的TMS320C6202開發(fā)板。DSP目標(biāo)板通過計算機主板上的PCI插槽裝在計算機內(nèi)部,DSP程序通過JTAG進行在線調(diào)試:DSP目標(biāo)板提供了許多動態(tài)連接庫函數(shù).可直接完成對目標(biāo)板的底層操作,如Target_Open()--打開目標(biāo)板驅(qū)動、iicoffld()--下載程序列DSP中、Target_Close()--關(guān)閉目標(biāo)板驅(qū)動等;
②AD16是Ⅱ公司的16通道16位的數(shù)據(jù)采集模塊.雙端差動輸入,輸入范圍是-10V至+10V,可同時采集16路外部模擬信號,采樣頻率為5~195KHz;
圖1系統(tǒng)硬件結(jié)構(gòu)
③MOT是一個集成有4個16位DA轉(zhuǎn)換器的信號產(chǎn)生模塊,DA輸出電壓范圍是-10V到+10V.可輸出4路測試需要的模擬信號.DA轉(zhuǎn)換頻率最高可達200KHz:
④數(shù)字I/O模塊是一個32位數(shù)字I/O連接端口。系統(tǒng)可以通過這個數(shù)字I/O接口與外界進行數(shù)字通信:
⑤Timer模塊提供了三個外部定時器,其定時參考時鐘可以是DSP目標(biāo)板上的時鐘,也可以是外部提供的時鐘。其定時輸出信號可滿足系統(tǒng)測試的定時要求。
1.2軟件設(shè)計
圖2是DSP數(shù)據(jù)采集和處理系統(tǒng)的軟件設(shè)計模塊圖。其中:Matlab平臺主要完成對目標(biāo)板的操作和控制,處理DSP目標(biāo)板上傳的數(shù)據(jù).再回傳給DSP目標(biāo)板,并進行圖形顯示。
圖2系統(tǒng)的軟件模塊圖
visual C++平臺作為Matlab與底層DSP目標(biāo)板的連接中介,主要完成對DSP目標(biāo)板的具體操作。由于DSP目標(biāo)板自帶了對板卡進行操作的動態(tài)連接庫函數(shù),因此在Vishal C++平臺中就可利用這些函數(shù),完成對目標(biāo)板的一些控制和操作。例如:用戶界面(圖4)上的Open按鈕就是在Visual C++中利用Target_Open()函數(shù)完成目標(biāo)板驅(qū)動的打開。
DSP數(shù)據(jù)采集和處理程序主要控制AD16采集外界模擬信號,并經(jīng)過相應(yīng)處理之后.上傳到Matlab平臺,然后再從Matlab平臺接收處理后的數(shù)據(jù).控制MOT模塊輸出系統(tǒng)所需的模擬信號。完成一個完整的數(shù)據(jù)采集—數(shù)據(jù)處理一系統(tǒng)控制的全過程。
2 系統(tǒng)實現(xiàn)的關(guān)鍵技術(shù)
Matlab作為高級應(yīng)用程序語言.并不能直接控制和操作所有的底層板卡。Matlab仿真模塊里面帶有一些可以直接控制和操作的DSP板卡.但是這些板卡都是一些固定型號的DSP板卡,而對用戶自行設(shè)計和其它一些型號的DSP板卡并沒提供這種功能.因此要實現(xiàn)在Matlab平臺上控制一般的DSP板卡進行數(shù)據(jù)的采集和處理還必須借助中介軟件.這個中介軟件就是Visual C++。這樣便可實現(xiàn)Matlab與DSP底層板卡的無縫連接。具體技術(shù)包括:DSP目標(biāo)板和主機的數(shù)據(jù)交換,Matlab與Visual C++的接口。
2.1 DSP目標(biāo)板和豐機的數(shù)據(jù)交換
TI公司提供DSP與PC主機之間的實時數(shù)據(jù)傳輸技術(shù)RTDX(Real Time Data Exchange)協(xié)議.并在主機中提供了工業(yè)標(biāo)準(zhǔn)的目標(biāo)連接與嵌入應(yīng)用程序接口OLE API(Application Program Interface).因而能方便地與符合OLE API標(biāo)準(zhǔn)的第三方軟件接口。實現(xiàn)與DSP的數(shù)據(jù)交換。完整的RTDX協(xié)議包含4個部分:主機應(yīng)用程序、主機軟件庫、目標(biāo)機軟件庫和目標(biāo)機程序。圖3是實現(xiàn)計算機和DSP之間數(shù)據(jù)傳輸?shù)年P(guān)系圖。
圖3 RTDX數(shù)據(jù)傳輸關(guān)系
微軟公司(Microsoft)提供的Visual C++軟件開發(fā)環(huán)境封裝了,TI公司的RTDX協(xié)議,配合DSP程序可方便、實時地與Pc主機進行數(shù)據(jù)通信。因此通過visual c++軟件就有可能實現(xiàn)在MATLAB平臺上完成對DSP數(shù)據(jù)采集和處理的控制。實現(xiàn)PC主機與DSP目標(biāo)板的數(shù)據(jù)交換。
PC主機和DSP目標(biāo)板通過RTDX協(xié)議實現(xiàn)數(shù)據(jù)交換需要在PC主機程序和DSP程序中定義同名的一條RTDX通道,數(shù)據(jù)通過該通道在PC主機和DSP目標(biāo)板之間傳輸。PC主機程序和目標(biāo)板上的DSP程序需要嚴(yán)格的配合,PC主機的讀操作和DSP目標(biāo)板的寫操作通過定義一個“寫RTDX”通道實現(xiàn):而PC主機的寫操作與DSP目標(biāo)板的讀操作通過定義一個“讀RTDX”通道實現(xiàn).必須一一對應(yīng),這樣才能實現(xiàn)主機與DSP目標(biāo)板的數(shù)據(jù)交換。
2.2 Matlab與Visual C++的接口
Matlab作為一種工具軟件.通常是不能直接控制DSP目標(biāo)板。但是Matlab軟件為了擴充自身軟件的功能,提供了一種與其它開發(fā)工具或開發(fā)語言進行交互的應(yīng)用程序接口 (API)。其中.MEX文件就是MATLAB軟件提供的一種與Visual c++溝通的接口文件。
在MEX文件中使用c語言編寫以mexFunction (int nlhs,mxArray *nlhs[ ],int nrhs,const mxArray * plhs[ ])函數(shù)為主函數(shù)的動態(tài)連接庫程序(*.dll).然后只需在Matlab命令提示符下鍵入此MEX文件名(*.dll)即可完成調(diào)用.這與Matlab的內(nèi)建函數(shù)的調(diào)用方式完全相同。mexFunction函數(shù)中的參數(shù)說明如下:
①int nlhs是左邊輸出參數(shù)的個數(shù),即visual c++向Matlab傳遞的參數(shù)個數(shù);
②mxArray *nlhs [ ]是左邊參數(shù)的數(shù)組。它是一個mxArray結(jié)構(gòu)體類型的指針數(shù)組.這個數(shù)組的元素按順序(nlhs[0].nlhs[1]?)指向所有的輸出參數(shù):
③int nrhs是右邊輸入?yún)?shù)的個數(shù),即Matlab向VisualC++傳遞的參數(shù)個數(shù);
④const mxArray *plhs [ ]是右邊參數(shù)的數(shù)組,它是一個mxArray結(jié)構(gòu)體類型的指針數(shù)組,這個數(shù)組的元素按順序(plhs[0],plhs[1]??)指向所有的輸入?yún)?shù)。
在MEX文件中.利用DSP目標(biāo)板提供的動態(tài)連接庫函數(shù),編寫對目標(biāo)板進行操作的動態(tài)連接庫程序.然后在Matlab平臺上調(diào)用這些動態(tài)連接庫函數(shù)既町實現(xiàn)Matlab和底層DSP目標(biāo)板的無縫連接。
圖4系統(tǒng)測試結(jié)果
具體過程是:在Matlab平臺上.以傳遞參數(shù)的形式調(diào)用動態(tài)連接庫程序。把需要傳送給DSP目標(biāo)板處理的數(shù)據(jù),通過mexFunction函數(shù)的右邊參數(shù)數(shù)組先傳送給動態(tài)連接庫程序。然后通過Visual C++程序和DSP程序共同定義的“寫RTDX通道”把數(shù)據(jù)傳送給DSP目標(biāo)板:需要上傳到Matlab平臺的數(shù)據(jù),首先被DSP應(yīng)用程序?qū)懭氲?ldquo;讀RTDX通道”中.然后在Visual C++中的動態(tài)連接庫程序讀取該R31DX通道中的數(shù)據(jù),再經(jīng)過MexFunction函數(shù)的左邊參數(shù)數(shù)組把數(shù)據(jù)上傳到Matlab平臺。這樣.就實現(xiàn)了在Matlab平臺上控制和操作DSP目標(biāo)板,并與之進行數(shù)據(jù)交換。
圖4是按照上述方法編寫的軟件界面和對系統(tǒng)進行測試所得到的結(jié)果。
3 結(jié)束語
基于Matlab平臺的DSP數(shù)據(jù)采集和處理系統(tǒng),在Matlab強大的數(shù)據(jù)分析和繪圖功能的基礎(chǔ)上,結(jié)合了Visual c++易于實現(xiàn)操作和控制的性能。改善了Matlab在控制底層板卡方面的不足。該系統(tǒng)的研究不僅是把Matlab應(yīng)用于DSP數(shù)據(jù)采集和處理系統(tǒng)的一次嘗試.也為一些半實物仿真系統(tǒng)提供了新的思路。Matlab/Simulink本身就是一種功能強大的系統(tǒng)仿真工具,因此,如果能在該系統(tǒng)的基礎(chǔ)上把Matlat/Simulink的仿真功能添加上來。則可實現(xiàn)硬件在環(huán)的半實物仿真。相信Matlab豐富的函數(shù)庫和眾多的專業(yè)工具箱.必會為今后系統(tǒng)的完善以及擴展提供充分的條件。
本文作者創(chuàng)新點:通過在Matlab平臺上直接控制DSP數(shù)據(jù)采集系統(tǒng).把Matlab的優(yōu)良算法應(yīng)用于系統(tǒng)中。簡化了系統(tǒng)的數(shù)據(jù)處理過程。提高了,系統(tǒng)數(shù)據(jù)處理速度,縮短了系統(tǒng)設(shè)計周期,具有廣泛的應(yīng)用前景。
c++相關(guān)文章:c++教程
評論