DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 121|回复: 0
打印 上一主题 下一主题

Matlab环境下PC机与单片机的串行通信及数据处理

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-16 16:55:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

                    摘要:结合单片机和Matlab两者的优点,基于事件驱动的中断通信机制,提出一种Matlab环境下PC机与单片机实时串行通信及数据处理的方法;完成单片机数据采集系统与PC机的RS-232/RS-485串行通信及其通信数据的分析处理、文件存储、FIR滤波及图形显示;简化系统开发流程,提高开发效率。该方法已成功应用于一个PIC16F876单片机应用系统实例之中。
关键词:PIC16F876 Matlab 串口通信 RS-232 事件驱动 回调函数
引言
Matlab是由美国Mathworks公司开发的面向理论分析研究、工程计算数据处理和缓图的一套具有强大功能的软件系统。其中Matlab语言是一种以矩阵为基本运算单元的解释执行的高级语言,编程简例,只要几条语句就能实现诸如FFT变换、FIR/IIR滤波等数据分析处理,易于掌握。从Matlab6.0版本开始,Mathworks公司在软件中增加了设备控制箱(instrument control toolbox),提供了对RS-232/RS-485通信标准的串口通信的正式支持。利用该工具箱的serial类及instrcallback()回调函数,能可靠地进行实时串地通信。为此,笔者充分结合单片机和Matlab的优点,基于事件驱动的中断通信机制,提出了一种Matlab环境下PC机与单片机实时串行通信的数据处理方法,极大地简化开发流程,提高了系统开发效率。另外,与目前普遍采用的基于Matlab查询方式下的非实时串行通信技术相比,这种方法的实用性也大大增强了。
1 系统总体设计简介
下面以Mircochip公司的PIC16F876单片机为下位机,PC机为上位机组成的实时数据采集处理系统为例,介绍基于Matlab环境下PC机与单片机串行通信的实时数据处理方法的实现。数据采集系统的结构框图如图1所示。PC机串口与单片机USART口通过MAX232电平转换芯片相连,系统工作时,Matlab通过调用设备控制工具箱中的serial类及相关函数。来创建串口设备对象,得到设备的文件句柄,从而以操作文件的方式实现对PC机串行口的读写操作。因而PC机可以通过Matlab向串行口发送特殊指令,PIC单片机应用系统对此作出相应的反应,将A/D采样数据通过串行口回送给PC机。此时,Matlab通过中断的方式,实时接收单片机发送的数据,并完成对数据的分析处理、文件存储、FIR滤波及图形显示。
2 PIC16F876与PC机串行通信接口的设计
2.1 PIC16F876单片机串行通信接口的硬件设计
PIC16F876微处理器芯片内部集成了一个串行通信(SCI)模块。该模块是一个通用的同步/异步收发(USART)通信接口。
PIC16F876的SCI通信接口有两个外部引脚——RC6/TX(SCI发送输出引脚)和RC7/RX(SCI接收输入引脚),引脚的信号电平为TTL类型;而PC机串口的异步串行通信基于RS232标准。两者通信信号的逻辑电平不一致,必须进行信号电平转换。为此,在电路中选用Maxim公司的MAX232芯片,以实现TTL电平与RS-232电平的双向转换。RS-232通信距离一般以不超过12m为宜,在工业控制现场很受限制。为保证硬件设计的兼容性和易扩展性,能够应用于不同场合,考虑到实际应用的需要,在硬件电路中还可选用一个MAX491芯片,添加了一个RS-485通信接口。
如图2所示,实际使用过程中,系统可以根据需要,灵活使用不同的通信标准,十分方便。当PIC单片机SCI通信接口引脚直接通过MAX232芯片与PC机串口相连时,系统采用RS-232的通信标准;当PIC单片机SCI通信接口口引脚与MAX489芯片的DI、RO引脚相连时,系统采用RS-485的通信标准。另外,还可通过PIC单片机控制MAX489芯片的DE、RE引脚,随时使能或屏蔽掉MAX489的数据接收和数据发送功能。
2.2 PIC16F876与PC机串行通信接口的软件设计
本通信系统中规定的字符格式为:每一帧的数据占10位——1位起始位,8位数据位,1位停止位,无奇偶校验位。中间的8位数据位即为有效的通信传输字节。双方的波特率设置为115.2kb/s,以较高速度进行通信。同时,为了增强通信的可靠性、减少通信的误码率,在通信过程中约定了双方的软件握手方法。为了不致使通信过于复杂,提高通信速度,可以直接将握手信号0xFF嵌入到数据包中。软件握手协议规定如下:PC机发送符合握手信号0xFF给单片机,PIC单片机接收到的上位机数据若为握手信号0xFF,则回送两次A/D采样数据包,并将握手信号0xFF嵌入到数据包作为第一个数据,两次发送数据的时间间隔为5ms;单片机接收到的上位机数据若不是握手信号,则继续等待。若PC机接收到的数据包的第1个字节不是0xFF,则屏弃该数据包;若是,则表示握手成功,经校验正确后将该数据包直接存储接收,并从中分解有效的A/D采样数据信息。
PIC16F876端串行通信的C语言程序流程如图3所示,相应的主要通信源代码如下:
//串口相关寄存器的初始化子程序
void sci_initial(){
SPBRG=0C0A; //设置通信波特率为115.2kb/s   TXSTA=0X04; //选择异步高速通信模式
RCSTA=0x80; //串行口使能,接收数据长度为8位,无奇偶校验
TRISC6=0; //RC6引脚设置为输出方式   TRISC7=1; //PC7引脚设置为输入方式   }
?//串口接收和发送数据子程序   void sci_com(){
while(!RCIF); //查询接收中断标志位,等待上位机发送的串口数据
rec_data[0]=RCREG;//接收串口数据
?if(rec_data[0]==0xFF){
send_data[0]=rec_data[0]; //在第1组数据中嵌入回送握手数据0xFF   for(j=0;j g.BytesAvailableFcn=@instrcallback;%得到回调函数句柄
fopen(g);%连接串口设备对象
?fwrite(g,255);%写串口,发送握手信号0xFF(等价于十进制下的数值255)
②修改instrcallback(obj,event)回调函数,对所发生的串口通信事件进行处理。
?????? Matlab缺省的回调函数instrcallback(obj,event)存在于instrcallback.m文件中。该文件实际上是一个有待于用户修改的程序模块。其中只有一些最基本的程序代码,能够显示导致串口中断发生的是哪一类事件,中断事件所发生的时间以及导致事件发生的对象名等信息(修改回调函数文件时,注意要取消文件中相应信息后的分号,才能够在Matlab的命令窗口(command window)中将这些信息显示出来)。中断发生后的通信事件处理以及通信数据的分析处理任务,需要用户自行添加相应的服务程序代码。
?????? Matlab安装目标下有两个instrcallback.m文件,我们只需要修改@instrument目录下的instrcallback.m文件即可。当然,在修改instrcallback.m文件之前,最好对其做一个备份。另外,需要注意的是:程序调试过程中如果再次修改了该回调函数,要重新启动Matlab配置该文件,才能使得新的回调函数文件生效。
?????? 修改后的instrcallback.m文件见网站www.dpj.com.cn。该修改后的回调函数能够完成如下任务:
?①实时接收单片机实时5ms发送的33个串行通信数据,其中包括1个握手信号和32个A/D转换数据(这些数据是PIC单片机系统采集到的传感器信号,每个数据占1字节),并存储在out数组中;
?②对接收到的数据进行处理,由于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机与单片机的实时串行通信稳定可靠,处理数据方便,编程简单,开发效率大大提高。
4.结论?

???????本文介绍的基于Matlab环境下PC机与PIC单片机串行通信的实现方法,利用Matlab的Instrument Control Tollbox的serial类及instrcallback()回调函数,实现基于事件驱动的实时中断通信。使开发人员可以充分利用Matlab工具箱中的现有函数,方便地实现串行通信、数据分析处理和图形显示,大大简化系统上位机软件的编程工作量。
            
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2025-12-20 00:25 , 耗时 0.100849 秒, 18 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表