原创 在MATLAB中使用串口

2010-3-18 09:00 6361 8 8 分类: 工程师职场
3.2.1 MATLAB对RS232 的串口通信设计

   MATLAB是一个跨平台软件,而此处使用的是自主设计的数据采集卡,因此不具备直接访问的能力。但MATLAB的面向对象技术,已用一个对象把计算机串口封装起来,只要用Serial函数创建串口对象即可[6]。关键语句为:s=serial(‘COM1’,‘BaudRate’,9600)。 MATLAB封装的串口对象支持对串口的异步读写操作,通过对异步读写设置,PC在执行读写串口函数时能立即返回,不必等待串口把数据串输完毕。当指定数据传输结束时就触发事件,执行事件回调函数,对事件回调函数编程,进行数据处理,这样可以大大提高数据处理的效率。


MEX是MATLAB的可执行程序,是MATLAB调用其它语言编写的程序或算法的接口,在Windows环境下是扩展名为DLL的动态链接库。对MEX 编译器进行配置的方法是:在MATLAB命令窗口中运行mex-setup,选择VC6.0++作为编译器。用C语言编写端口读、写的操作程序,程序包含有头文件mex.h和mexFunction函数,mexFunction函数中nelhs表示输出变量的个数,plhs包含指向输出变量指针的数组,nrhs表示输入变量的个数,prhs包含指向输入变量指针的数组。接口编形成的MEX文件与参考文献[7][8]类似,在此不再累述。



  3.2.2 数据采集与分析


  (1)数据读取的MATLAB实现


  主要代码为:


  %读取通道数及总数据量


  fid=fopen(‘cardiogram.add’,‘r’);


  Status=fseek(fid,56,‘bof’);


  nDataChNum=fread(fid,1,‘long’);


  status=fseek(fid,204, ‘bof’);


  nAllDataLength=fread(fid,1, ‘long’);


  %按通道数循环读出各通道起始地址


  status=fseek(fid,76, ‘bof’);%


  for i="1:" nDataChNum


  pChannelAdr(i)=fread(fid,1, ‘long’)


  end


  %按通道数循环读出各通道数据


  for i="1:nDataChNum"


  status=fseek(fid,pChannelAdr(i)+360, ‘bof’)


  nSegNum=fread(fid,1, ‘log’)


  status=fseek(fid,pChannelAdr(i)+160*nSegNum+1024, ‘bof’);


  data=fread(fid,nAllDataLength, ‘short’);


  end


  sta=fclose(fid);


  (2)数据处理与图形绘制


  利用MATLAB的图形用户接口,通过编程可以很方便地构建数据采集与分析的用户交互界面。将数据采集系统采集的实际心电图信号,用RS232导入到PC 中。在MATLAB环境下,运行以上已经编好的程序,即可得到如下的模拟实验结果。不过要说明的是,此处使用的数据采集系统是八通道同步采集,而仿真时仅使用的是其中一个通道进行的操作。


点击看大图


figure 3 实际心电图信号的采集与处理效果图


  4、结语


   使用自主开发的数据采集系统,通过合理运用串口及MTLAB强大的数值计算和分析功能,实现了基于MATLAB的实时数据处理和分析。通过模拟实验表明,该方法对于其它类似采集卡依然实用,具有一定的应用价值和发展前景。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
8
关闭 站长推荐上一条 /3 下一条