matlab串口通信基础讲义_第1页
matlab串口通信基础讲义_第2页
matlab串口通信基础讲义_第3页
matlab串口通信基础讲义_第4页
matlab串口通信基础讲义_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上matlab串口通信基础讲义支持基于串行接口(RS-232、RS-422、RS-485)、GPIB总线(IEEE2488、HPIB标准)、VISA总线的通信;通信数据支持二进制和文本(ASCII)两种方式,文本方式支持SCPI(Standard Commands for Programmable Instruments)语言;支持异步通信和同步通信;支持基于事件驱动的通信。从以上的Matlab设备控制工具箱的特点可以看到,Matlab完全可以满足我们实现串行通信的要求。3.1 Matlab对串行口控制的基础知识Matlab对串行口的编程控制主要分为四个步骤。创建串口设

2、备对象并设置其属性。scom=serial('com1');%创建串口1的设备对象scomscom.Terminator='CR'%设置终止符为CR(回车符),缺省为LF(换行符)scom.InputBufferSize=1024;%输入缓冲区为256B,缺省值为512Bscom.OutputBufferSize=1024;%输出缓冲区为256B,缺省值为512Bscom.Timeout=0.5;%Y设置一次读或写操作的最大完成时间为0.5s,缺省值为10ss.ReadAsyncMode='continuous'(缺省方式);%在异步通信模式方式

3、下,读取串口数据采用连续接收数据(continuous)的缺省方式,那么下位机返回的数据会自动地存入输入缓冲区中.注意:在些属性只有在对象没有被打开时才能改变其值,如InputBufferSize、OutputBufferSize属性等。对于一个RS-232/RS-422/RS-485串口设备对象,其属性的缺省值为波特率9 600b/s,异步方式,通信数据格式为8位数据位,无奇偶校验位,1位停止位。如果要设置的串口设置对象的属性值与缺省值的属性值相同,用户可以不用另行设置。另外,设置串口设置对象的属性也可以用一条指令完成,如:scom=serial('COM1','Ba

4、udRate',38400,'Parity','none','DataBits',8,'StopBits',1)。也可以用set命令,如set(scom,'BaudRate',19200,'Parity','even')。创建了对象后可以在Matlab命令窗口直接敲对象名并回车,看到其基本属性和当前状态。若需要知道其全部的属性,可以用get(scom)命令。打开串口设备对象。fopen(scom);读写串口操作。初始化并打开串口调协对象之后,现在可以对串口设备对象进行读写操作

5、,串口的读写操作支持二进制和文本(ASCII)两种方式。当Matlab通信数据采用西方(ASCII)方式时,读写串口设备的命令分别是fscanf、fpritf;当Matlab通信数据采用二进制方式时,读写串口设备的命令分别是fread、fwrite。下面以文本方式读写串口为例:a.读串口。A=fscanf(scom,'%d',10,100;%从串口设备对象scom中读入10*100个数据填充到数组A10,100中,并以整型的数据格式存放。h.写串口。Fprintf(scom,'%s','RS232','async');%将字符串R

6、S232?以字符的数据格式写入到串口设备scom,写操作以异步的方式进行。关闭并清除设备对象。fclose(scom);%关闭串口设备对象delete(scom);%删除内存中的串口设备对象clear scom; %清除工作空间中的串口设备对象当不再使用该串口设备对象时,顺序使用以上3条命令,可以将所创建的串口对象对象清除,以免占用系统资源。可以看出,在Matlab中进行串行通信是十分方便的,编程较为简单。而且,在Matlab中串行通信的失误率很低,通信较为可靠,也可以采用增加握手信号以及数据校验等的方式进一步增加通信的可靠性。32 Matlab实现串行通信的软件设计在Matlab环境下,读取

7、串口数据的方式可以分为两种查询和中断。以查询的方式进行串行通信时,如下位单片机有大量的数据分时分批传送给PC机,就需要不停查询串行口的缓冲区,有数据就读取;虽然编程容易,但这样做不能对数据进行实时处理,系统实时性不高,而且会极大地占用系统的资源。以中断的方式对串口进行控制实现串行通信,就可以实时处理下位机传送的数据;但编程相对复杂一些,需要采用Matlab的事件和回调函数机制。(1)基于Matlab查询方式的异步串行通信编程Matlab查询方式的串行通信编程虽然简单,但这种方法在实际应用中实用价值不高,下面只作简单介绍。通信源程序如下:clc;%初始化串口设备对象,设置串口属性为:PC机com

8、2口,输入缓冲区为1024,读写最大完成时间为0.6s,波特率为115 200b/s,1位停止位,遇到换行符中止,硬件流控制g=serial('com2');g.InputBufferSize=4096;g.timeout=0.6;g.BaudRate=;g.Parity='none'g.StopBits=1;g.Terminator='LF'g.FlowControl='hardware'fopen(g);%打开串口设备对象sfwrite(g,255);%以二进制的方式发送握手信号0xFF,缺省为异步通信方式out=fread(

9、g,33,'uint8')%接收单片机发送的33个数据(8位),并存入out数组中%释放串口设备对象fclose(g);delete(g);clear g;(2)基于Matlab中断方式的实时串行通信编程在Matlab环境下以中断的方式进行串行通信,实际上是采用事件驱动的方法实现的。Matlab提供了instrcallback(obj,event)回调函数,用户根据需要可以自行设置具体的串行通信事件。Matlab常用的串行口通信中断事件有:缓冲区有指定字节数目的数据可用事件(bytes-available event)、串口接收到的数据长时间处于非激活状态事件(break-in

10、terrupt event)、串行口引脚状态改变事件(pin-status event)、输出缓冲区为空事件(output empty event)等。当串口上有监视的事件发生时,Matlab会自动调用回调函数进行通信事件的处理。因此,事件驱动实质上是一种中断机制,而回调函数实质上相当于一个中断服务子程序。Matlab端实时串行通信的程序流程如图4所示。以下是具体的编程步骤。建立一个串行通信主程序:serial.m文件,在主程序中进行串口设备初始化操作,并指定回调函数中串行通信的事件。程序主要源代码如下(创建串口设备对象、设备串口设备属性及打开串口等初始化操作的代码与前述的查询方式下的初始化代

11、码相同):%设置回调函数触发事件当串口缓冲区中有33字节的数据时,触发中断事件,此后主程序自动调用instrcallback(obj,event)回调函数g.BytesAvaibleFcnMode='byte'%中断触发事件为bytes-available Eventg.BytesAvailableFcnCount=33;%接收缓冲区每收到33个字节时,触发回调函数g.BytesAvailableFcn=instrcallback;%得到回调函数句柄fopen(g);%连接串口设备对象fwrite(g,255);%写串口,发送握手信号0xFF(等价于十进制下的数值255)修改i

12、nstrcallback(obj,event)回调函数,对所发生的串口通信事件进行处理。Matlab缺省的回调函数instrcallback(obj,event)存在于instrcallback.m文件中。该文件实际上是一个有待于用户修改的程序模块。其中只有一些最基本的程序代码,能够显示导致串口中断发生的是哪一类事件,中断事件所发生的时间以及导致事件发生的对象名等信息(修改回调函数文件时,注意要取消文件中相应信息后的分号,才能够在Matlab的命令窗口(command window)中将这些信息显示出来)。中断发生后的通信事件处理以及通信数据的分析处理任务,需要用户自行添加相应的服务程序代码。

13、Matlab安装目标下有两个instrcallback.m文件,我们只需要修改instrument目录下的instrcallback.m文件即可。当然,在修改instrcallback.m文件之前,最好对其做一个备份。另外,需要注意的是:程序调试过程中如果再次修改了该回调函数,要重新启动Matlab配置该文件,才能使得新的回调函数文件生效。 修改后的instrcallback.m文件见网站。该修改后的回调函数能够完成如下任务:实时接收单片机实时5ms发送的33个串行通信数据,其中包括1个握手信号和32个A/D转换数据(这些数据是PIC单片机系统采集到的传感器信号,每个数据占1字节),并存储在o

14、ut数组中;对接收到的数据进行处理,由于PIC单片机的A/D转换值为10位,占2字节,而单片机每次只能传送1个字节的数据,故将收到的每两个通信数据整合成为1个真实的A/D转换数据,共16个A/D转换数据,并存储在Dataout数组中;将接收到的串口数据存储到serialdata.txt文件中,将整合后的单片机A/D转换数据存储到一个以中断事件发生的时间为文件名的txt文件中;根据A/D转换数据,利用Matlab求其最大值、最小值和平均值,并利用FIR滤波器对传感器信号A/D转换值作FIR滤波处理,得到窗格为5的滑动滤波平均值;利用Matlab中的plot()函数实时绘制单片机采集到的传感器信号的原始波形图和FIR滤波后波形图,如图5所示,可以看到经过FIR滤波后的传感器动态信号值较为稳定,精度大幅提高。实验证明,基于Matlab中断方式的PC机与单片机的实时

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论