DIY编程器网

标题: 基于Matlab和VC混合编程的DSP数据采集系统 [打印本页]

作者: admin    时间: 2014-10-10 08:10
标题: 基于Matlab和VC混合编程的DSP数据采集系统
前言
     在开发DSP数据采集和处理系统的过程中.通常需要采用DSP汇编语言开发一些复杂的算法(如FFT分析、相关分析等),但是,实现这些算法的程序一般都很复杂,尤其需要图形显示时,程序的编写就更复杂了。此外,这些程序还将占用DSP的内存资源。Matlab提供了矩阵处理、数值计算、图形显示等强大功能,同时还带有功能丰富的软件工具箱.若能把Matlab的高效、便捷算法和图形显示工具应用于DSP数据采集和处理系统.即把采集到的数据上传到Matlab平台进行相应的处理和图形显示.这样.不仅减少了DSP的负荷和开销.而且还可以加快系统的研发进度。
1 系统设计
      基于Matlab平台的DSP数据采集和处理系统的主要功能是:在Matlab平台上控制底层DSP目标板进行数据的采集和处理,并把采集到的数据上传到Matlab平台上进行相应的数值处理和图形显示然后再把处理后的数据回传给底层DSP目标板,完成后续任务。
1.1硬件结构
      DSP数据采集系统主要由PC计算机、TMS320C6202 DSP目标板、AD16模块、MOT模块、数字I/O口和Timer模块组成,如图1所示。
①DSP目标板选用ll(Innovative Integration)公司M6x系列的TMS320C6202开发板。DSP目标板通过计算机主板上的PCI插槽装在计算机内部,DSP程序通过JTAG进行在线调试:DSP目标板提供了许多动态连接库函数.可直接完成对目标板的底层操作,如Target_Open()--打开目标板驱动、iicoffld()--下载程序列DSP中、Target_Close()--关闭目标板驱动等;
②AD16是Ⅱ公司的16通道16位的数据采集模块.双端差动输入,输入范围是-10V至+10V,可同时采集16路外部模拟信号,采样频率为5~195KHz;
  

                              图1系统硬件结构
③MOT是一个集成有4个16位DA转换器的信号产生模块,DA输出电压范围是-10V到+10V.可输出4路测试需要的模拟信号.DA转换频率最高可达200KHz:
④数字I/O模块是一个32位数字I/O连接端口。系统可以通过这个数字I/O接口与外界进行数字通信:
⑤Timer模块提供了三个外部定时器,其定时参考时钟可以是DSP目标板上的时钟,也可以是外部提供的时钟。其定时输出信号可满足系统测试的定时要求。
1.2软件设计
       图2是DSP数据采集和处理系统的软件设计模块图。其中:Matlab平台主要完成对目标板的操作和控制,处理DSP目标板上传的数据.再回传给DSP目标板,并进行图形显示。
  

                                                图2系统的软件模块图
         visual C++平台作为Matlab与底层DSP目标板的连接中介,主要完成对DSP目标板的具体操作。由于DSP目标板自带了对板卡进行操作的动态连接库函数,因此在Vishal C++平台中就可利用这些函数,完成对目标板的一些控制和操作。例如:用户界面(图4)上的Open按钮就是在Visual C++中利用Target_Open()函数完成目标板驱动的打开。
         DSP数据采集和处理程序主要控制AD16采集外界模拟信号,并经过相应处理之后.上传到Matlab平台,然后再从Matlab平台接收处理后的数据.控制MOT模块输出系统所需的模拟信号。完成一个完整的数据采集—数据处理一系统控制的全过程。
2 系统实现的关键技术
          Matlab作为高级应用程序语言.并不能直接控制和操作所有的底层板卡。Matlab仿真模块里面带有一些可以直接控制和操作的DSP板卡.但是这些板卡都是一些固定型号的DSP板卡,而对用户自行设计和其它一些型号的DSP板卡并没提供这种功能.因此要实现在Matlab平台上控制一般的DSP板卡进行数据的采集和处理还必须借助中介软件.这个中介软件就是Visual C++。这样便可实现Matlab与DSP底层板卡的无缝连接。具体技术包括:DSP目标板和主机的数据交换,Matlab与Visual C++的接口。
2.1 DSP目标板和丰机的数据交换
        TI公司提供DSP与PC主机之间的实时数据传输技术RTDX(Real Time Data Exchange)协议.并在主机中提供了工业标准的目标连接与嵌入应用程序接口OLE API(Application Program Interface).因而能方便地与符合OLE API标准的第三方软件接口。实现与DSP的数据交换。完整的RTDX协议包含4个部分:主机应用程序、主机软件库、目标机软件库和目标机程序。图3是实现计算机和DSP之间数据传输的关系图。
  

                               图3 RTDX数据传输关系
         微软公司(Microsoft)提供的Visual C++软件开发环境封装了,TI公司的RTDX协议,配合DSP程序可方便、实时地与Pc主机进行数据通信。因此通过visual c++软件就有可能实现在MATLAB平台上完成对DSP数据采集和处理的控制。实现PC主机与DSP目标板的数据交换。
          PC主机和DSP目标板通过RTDX协议实现数据交换需要在PC主机程序和DSP程序中定义同名的一条RTDX通道,数据通过该通道在PC主机和DSP目标板之间传输。PC主机程序和目标板上的DSP程序需要严格的配合,PC主机的读操作和DSP目标板的写操作通过定义一个“写RTDX”通道实现:而PC主机的写操作与DSP目标板的读操作通过定义一个“读RTDX”通道实现.必须一一对应,这样才能实现主机与DSP目标板的数据交换。
2.2 Matlab与Visual C++的接口
     Matlab作为一种工具软件.通常是不能直接控制DSP目标板。但是Matlab软件为了扩充自身软件的功能,提供了一种与其它开发工具或开发语言进行交互的应用程序接口 (API)。其中.MEX文件就是MATLAB软件提供的一种与Visual c++沟通的接口文件。
      在MEX文件中使用c语言编写以mexFunction (int nlhs,mxArray *nlhs[ ],int nrhs,const mxArray * plhs[ ])函数为主函数的动态连接库程序(*.dll).然后只需在Matlab命令提示符下键入此MEX文件名(*.dll)即可完成调用.这与Matlab的内建函数的调用方式完全相同。mexFunction函数中的参数说明如下:
①int nlhs是左边输出参数的个数,即visual c++向Matlab传递的参数个数;
②mxArray *nlhs [ ]是左边参数的数组。它是一个mxArray结构体类型的指针数组.这个数组的元素按顺序(nlhs[0].nlhs[1]?)指向所有的输出参数:
③int nrhs是右边输入参数的个数,即Matlab向VisualC++传递的参数个数;
④const mxArray *plhs [ ]是右边参数的数组,它是一个mxArray结构体类型的指针数组,这个数组的元素按顺序(plhs[0],plhs[1]??)指向所有的输入参数。
在MEX文件中.利用DSP目标板提供的动态连接库函数,编写对目标板进行操作的动态连接库程序.然后在Matlab平台上调用这些动态连接库函数既町实现Matlab和底层DSP目标板的无缝连接。
  

图4系统测试结果
     具体过程是:在Matlab平台上.以传递参数的形式调用动态连接库程序。把需要传送给DSP目标板处理的数据,通过mexFunction函数的右边参数数组先传送给动态连接库程序。然后通过Visual C++程序和DSP程序共同定义的“写RTDX通道”把数据传送给DSP目标板:需要上传到Matlab平台的数据,首先被DSP应用程序写入到“读RTDX通道”中.然后在Visual C++中的动态连接库程序读取该R31DX通道中的数据,再经过MexFunction函数的左边参数数组把数据上传到Matlab平台。这样.就实现了在Matlab平台上控制和操作DSP目标板,并与之进行数据交换。
图4是按照上述方法编写的软件界面和对系统进行测试所得到的结果。
3 结束语
       基于Matlab平台的DSP数据采集和处理系统,在Matlab强大的数据分析和绘图功能的基础上,结合了Visual c++易于实现操作和控制的性能。改善了Matlab在控制底层板卡方面的不足。该系统的研究不仅是把Matlab应用于DSP数据采集和处理系统的一次尝试.也为一些半实物仿真系统提供了新的思路。Matlab/Simulink本身就是一种功能强大的系统仿真工具,因此,如果能在该系统的基础上把Matlat/Simulink的仿真功能添加上来。则可实现硬件在环的半实物仿真。相信Matlab丰富的函数库和众多的专业工具箱.必会为今后系统的完善以及扩展提供充分的条件。
本文作者创新点:通过在Matlab平台上直接控制DSP数据采集系统.把Matlab的优良算法应用于系统中。简化了系统的数据处理过程。提高了,系统数据处理速度,缩短了系统设计周期,具有广泛的应用前景。




欢迎光临 DIY编程器网 (http://diybcq.com/) Powered by Discuz! X3.2