基于USB的实时数据采集系统及其在MATLAB中的应用
2008-10-08
作者:夏文芳 吴鸿修 李享元
摘 要: 应用越来越广泛的USB为实现实时数据采集" title="数据采集">数据采集提供了很大的便利,功能强大的MATLAB工具软件对数据分析和处理十分方便。介绍一种利用MEX文件将二者结合起来,实现在MATLAB平台下对数据实时采集,然后利用其库函数对采集到的数据进行处理和分析的方法。
关键词: USB MATLAB MEX文件 数据采集 实时
1 MATLAB的特点
MATLAB(Matrix Laboratory)机矩阵实验室是由美国MathWorks公司推出的一款集数值分析、矩阵计算、信号处理和图形显示于一体的工具软件。它的命令语句功能非常强大,包含了大量高度集成的可直接调用的函数,高效简洁;另一方面,它又是一个开放系统,针对不同的学科,推出了不同的工具箱。自1984年推向市场以来,经过十几年的发展和竞争,现已成为国际认可(IEEE)的最优化的科技应用软件之一。
正是由于MATLAB具有良好的扩展性以及强大的数据分析和处理能力,现已广泛应用于矩阵代数、数值计算、数字信号处理、振动理论、神经网络控制、动态仿真等领域。虽然MATLAB是一个完整的、功能齐全的编程环境,但在某些情况下,与外部环境的数据和程序的交互是非常必须而且有益的。例如,MATLAB不能实现对数据的实时采集,它所处理的数据必须是现成的,因此它不能很好地应用于需要在现场对数据进行分析和处理马上得出结论的环境。如果将MATLAB与外部的数据和程序进行交互,问题就可迎刃而解了。
MATLAB是用M语言编程,尽管不能在M文件中直接调用C语言程序,但可以通过MATLAB提供的应用编程接口(API)来与外部接口,在MATLAB环境中调用C语言或Fortran程序、输入或输出数据" title="输出数据">输出数据以及与其他软件程序建立客户/服务器关系。在MATLAB中调用C语言程序,必须通过MEX文件来实现。
2 MEX文件
MEX文件是MATLAB命令解释器能够自动加载和执行的动态链接子函数。C语言的MEX文件是一种动态链接子程序,可以象调用M文件一样调用它。MEX文件主要有以下几方面的应用:
(1)在MATLAB中,M文件的计算速度特别是循环迭代速度远比C语言慢,因此可以把大量循环迭代用C语言编写为MEX文件,提高计算速度,解决MATLAB中循环的瓶颈问题;
(2)已经开发的C语言程序,不必将其转化为M文件而重复劳动,通过添加入口程序mexFunction,可以由MATLAB调用;
(3)直接控制硬件,如A/D采集卡、D/A输出卡等,以用于数据采集或控制应用。
MEX文件与动态链接库从某种意义上来说有很多相似之处,不同之处在于MEX文件是专门针对MATLAB的动态链接库,可以像MATLAB自身的库函数一样被调用。
C语言的MEX文件的源程序由两个部分组成:
(1)计算程序,即在MEX文件中完成计算功能的程序代码。计算程序可以是普通的C语言程序,按照C语言规则编写即可;
(2)入口程序,即将计算程序与MATLAB连接的入口函数mexFunction。入口函数mexFunction相对复杂一些,函数中有四个参数nlhs、plhs、nrhs和prhs。这里nlhs是输出数据的个数,plhs是指向mxArray(MATLAB中所有数据都由mxArray定义)的输出数据的指针,nrhs是输入数据的个数,prhs是指向mxArray的输入数据的指针。
3 USB的特点
USB(Universal Serial Bus)就是通用串行总线,它是一种PC机的外挂总线,是多家主要电脑、电子科技厂商为了解决PC机外围设备的拥挤,提高设备的传输速度而联合提出的一种新型总线。当适合它的Windows98操作系统一出现,USB便得到了迅猛的发展。USB之所以具有如此魅力,还在于它具有许多其它总线无法比拟的优点。USB规范能针对不同的性能价格比要求提供不同的选择,以满足不同的系统和部件及相应不同的功能,其主要优点可归结为以下几点:
(1)速度快。USB有高速和低速两种方式,主模式为高速模式,速率为12Mbps;另外为适应一些不需要很大吞吐量和很高实时性的设备,如鼠标等。USB还提供低速方式,速率为1.5Mbps。
(2)易扩展。用USB连接的外围设备可以分为5层,外设数目最多可达127个。
(3)能够采用总线供电。USB总线提供最大5V,500mA电流,对于功耗较小的设备来说非常有效。
(4)设备安装和配置容易。USB设备支持即插即用和热插拔,系统对其进行自动配置,不再占用中断资源或者DMA资源,彻底抛弃了过去的跳线和拨码开关设置。USB为电缆和连接头提供了单一模型,解决了因外设越来越多造成的插槽紧张问题。
(5)使用灵活。USB共有4种传输模式:控制传输(control)、同步传输(Synchronization)、中断传输(interrupt)、批量传输(bulk),以适应不同设备的需要。
(6)实现USB功能的模块价格低廉。
实现实时数据的采集,并利用MATLAB强大的数据处理和分析功能,最理想的情况当然就是在MATLAB中直接对USB总线进行控制。但是MATLAB自身并不能实现对USB的控制功能。众所周知,在C语言环境中,可以非常方便地实现对USB的驱动开发和控制。如果使用C语言对USB的数据采集部分进行驱动和控制,编译成MEX文件,然后在MATLAB中调用即可。
4 USB数据采集系统
4.1 USB驱动(USBD)
USBD为客户提供两组工具:命令工具和通道工具。命令工具允许客户在配置和控制USBD操作的同时配置并控制USB设备,它提供了对设备标准通道的所有访问;通道工具允许USBD客户管理特定设备的数据,控制数据的传输,它不允许客户直接访问设备的标准通道。USBD客户可以直接命令设备或从通道直接输入和输出数据流。
USBD提供了供操作系统组件特别是设备驱动程序" title="设备驱动程序">设备驱动程序访问设备的一组接口。这些操作系统组件只能通过USBD来访问USB。一个USBD可以访问一个或多个HCD,而一个HCD可能与一个或多个主机控制器相连。某些操作系统可能允许对USBD进行初始化设置。从客户来看,与其进行通信的USBD管理着所有连接着的USB设备。
其通信过程如图1所示。
从硬件连接的角度来看,系统由两部分构成:开发板和PC机。从软件角度来看,可以分为三个层次:板载程序、设备驱动程序和客户应用程序。
·板载程序由8051执行,完成控制开发板的工作。
·设备驱动程序是Windows核心的一部分,它与系统中的USB总线驱动程序一起完成对设备的管理。
·客户应用程序主要完成上层控制功能,将数据写入设备或者将设备中的数据读出显示。
4.2 采集系统硬件连接
一个实用的USB数据采集系统包括A/D、微控制器及USB通信接口。为了扩展还可以加上多路" title="多路">多路模拟开关和数字I/O端口。系统硬件结构框图如图2所示。
一种方案就是采用普通单片机加上专用USB通信芯片。这种方案设计和调试比较麻烦,成本相对较高。
随着单片机制造技术的发展以及USB应用的日益广泛,还可以使用具有USB通信接口的单片机。这些单片机处理能力强,有的本身就具备多路A/D。系统电路简单、调试方便、电磁兼容性好。
本系统从性能角度以及今后的发展方向出发,选用Cypress公司生产的具有USB通信功能的CY7C64613。EZ-USB FX(CY7C64613)属于Cypress半导体第二代全速USB系列,它较第一代具有更好的性能和更高的集成度。CY7C64613不但具备了EZ-USB的所有特征,还包括了一个智能的USB核心,一个增强8051,8KB的RAM和维持上层代码兼容性的高性能I/O。该单片机可以与USB1.1协议和2.0协议兼容。
系统A/D采用Analog Devices公司的AD7891。它是一个8通道的12位数据采集系统,可以任意选择并行或串行接口" title="串行接口">串行接口。这部分包括一个多路输入复用器,一个片上监控放大器,一个高速12位ADC,+2.5V参考电压和一个高速接口。AD7891选择并行还是串行接口由MODE脚决定。无论是并行还是串行接口,它都具有标准的控制输入和快速的数据采集,从而保证了与现代微处理器、微控制器以及数字信号处理器的简单接口连接。AD7891的每一个通道都有过压保护,这意味着未选通道的过压现象不会影响已选通道的数据传输。
系统框图如图3所示。
4.3 MEX文件的编写
为了使程序具有良好的可移植性,实现功能的模块化,MEX文件的两个部分分别放在两个不同的文件里。控制和实现部分主要完成对USB的读写以及管理功能,入口程序调用它们,从而实现对USB发送控制命令、从USB读取数据以及存储数据的功能。
MEX文件执行流程如图4所示。
在传统的工程检测中,需要将采集到的数据存储起来,经过一系列的处理和转换,才能利用MATLAB进行分析和处理。实时性较差,造成人力物力的浪费。而该系统可以在MATLAB平台上直接调用,简洁明了,克服了传统方法的缺点。
参考文献
1 (美)Jan Axelson著, 陈逸译.USB应用大全.北京:中国电力出版社, 2001
2 刘志俭.MATLAB应用程序接口用户指南.北京:科学出版社,2000
3 程卫国.MATLAB5.3应用指南.北京:人民邮电出版社,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