引言
本文设计了一种基于AVR单片机和Matlab串口通信的计时器系统,本计时器系统可以满足体育竞赛中精确计时的要求。在该设计中,主要以Atmel公司ATmega16单片机作为信号采集系统,通过串口和上位机的Matlab通信,自定义了一项通信协议,使上位机接收到不同的信号,可以实现对Matlab中计时器的控制。[1]利用Matlab软件提供的GUI设计出一套友好的人机界面。[2]本系统中,可以有多个单片机作为下位机,通过串口连接ZigBee无线传输模块,与上位机进行通信。无线传输模块的接入可以实现远程多点信号采集,使系统更加灵活,可扩展性大大增强。
1 系统总体设计
本系统包括多个以ATmega16单片机为主控制器的信号采集系统和一个上位机Matlab软件编写的计时器程序。多个下位机和上位机之间通过串口接ZigBee无线通信模块,实现数据传输功能。ATmega16捕捉到的对射型光电开关信号传输给上位机Matlab,控制计时器的开始、中断和结束功能。系统的整体框图如图1所示。
图1 系统的整体框图
2 信号采集系统的设计
信号采集系统主要由对射型光电开关、信号电平转换电路和单片机组成。
对射型光电开关由发射器和接收器组成,结构上是相互分离的,在光束被中断的情况下会产生一个开关信号变化。本文使用的对射型光电开关的特征是:能辨别不透明的反光物体;有效距离大,检测距离可达10 m;不易受干扰,可以可靠地在野外或者有灰尘的环境中使用。
光电开关信号的高电平输出+12 V数字信号,而ATmega16 I/O口电平为TTL电平,电压范围为0~+5 V,因此,在光电开关和单片机之间必须设计一个电平转换电路。本设计考虑使用光电耦合器件TLP521-2,它提供了两个孤立的光耦8引脚塑料封装,不仅能够实现+12~+5 V电压的转换,还能隔离两端信号,提高电路的稳定性。信号电平转换电路示意图如图2所示。
图2 信号电平转换电路示意图
ATmega16单片机的外部中断通过引脚INT0、INT1触发。只要使能了中断,即使引脚INT0、INT1配置为输出,当电平发生了合适的变化,中断也会触发。通过设置ATmega16控制寄存器MCUCR和控制与状态寄存器MCUCSR,中断可以由下降沿、上升沿或者是低电平触发。[3]本文使用E3FDS10C4的对射光电开关,输出方式为NPN常开型,当其光线被遮挡时,则信号输出由高电平跳变为低电平,即输入ATmega16外部中断引脚的中断信号为下降沿。本设计中,两路光电开关信号接ATmega16的外部中断INT0、INT1引脚,外部中断相关寄存器设置如下:
MCUCR=0x0A;//INT0、INT1下降沿触发中断
GICR=0xC0;//使能INT0、INT1
当光电开关出现下降沿时,则程序进入相应的外部中断处理程序,将外部中断标志位置位。单片机主程序流程图如图3所示。[page]
图3 单片机主程序流程图
3 下位机和上位机的串口通信
本系统下位机为单片机,信号电压是TTL电平0~+5 V,而上位机为PC机,串口电平是RS232电平-10~+10 V。为了实现串口通信,需要经过MAX232电平转换,才能匹配。考虑到应用的灵活性、方便性,以及多个下位机与一个上位机进行的通信,本设计在单片机和上位机之间接入ZigBee无线通信模块,使用的是SZ05-ZigBee无线通信模块。SZ05ZigBee无线通信模块接线图如图4所示。
图4 SZ05ZigBee无线通信模块接线图
该模块数据接口包括TTL电平接收发送接口、RS232发送接收接口,还可以按照广播方式发送数据和按照目标地址发送数据,除可实现一般的点对点数据通信功能外,还可实现多点之间的数据通信。串口通信使用方法简单、便利,可以大大缩短模块的嵌入匹配时间进程。它具有通信距离远、抗干扰能力强、组网灵活、性能可靠稳定等优点。[4]
将SZ05ZigBee无线通信模块CONFIG跳线短接,系统进入配置状态。打开计算机的超级终端,超级终端的设置为:波特率38 400、数据位8、校验NONE、停止位1、流控无。主要参数配置如下:网络类型网——星型网;发送模式——主从模式;数据类型——HEX;数据位——8+0+1;波特率——38 400;单片机端连接的设备类型——终端设备(DEVICE跳线短接);上位机端连接的设备类型——中心节点(CENTER端口与地短接)。每个终端设备需设置自己不同的MAC_ADDR设备地址,范围为0000~0xFFFE。主从模式下,终端设备发送数据无需目标地址,数据默认给中心节点,而中心节点发送数据则必须加上终端设备的目标地址。
无线通信模块在测试上电时,会自动发送一串随机数据。为了防止干扰,自定义了一项通信协议,定义3字节数据为一帧,数据包格式为0xAABB××,在检测到数据头AA BB时,才接收数据,保证接收到数据的准确性。
4 基于Matlab GUI的串口通信和计时器的实现
4.1 Matlab对串口RS232的编程
从Matlab6.0版本开始,软件中增加了设备控制箱功能,提供了对RS232/RS485通信标准的串口通信的正式支持。利用该工具箱的串口类及fopen、fread等函数,能可靠地进行实时串行通信。[5]
从建立串口通信到结束串口通信的完整流程包括以下几个步骤[6]:
① 为应用程序创建串口对象。实现该功能的函数为obj=serial(“port”,“PropertyName”, PropertyValue,…)。其中,参数port为完整的串口名称,如COMl;PropertyName为串口通信参数,如baudrate、startbits等。
② 连接打开串口。其函数为fopen(obj)。
③ 设置或者修改串口通信参数。在能够有效地进行串口通信前,必须设置正确的串口通信参数。实现该功能的函数为props=set(obj,“PropertyName”,PropertyValue,…)。
④ 关闭串口以及释放串口对象占用的存储空间。关闭串口函数为:fclose(obj)。释放串口对象占用的内存空间,函数为delete(obj)。释放串口对象在Matlab工作区中占用的存储空间函数为clear obj。
要实现自动收发数据,还需要定义串口中断处理函数以及触发串口中断的方式如下:
① 触发串口中断的方式。涉及到串口读写的事件包括:Bytes available、Output empty。其中,Bytes available事件有两种:一种是接收到的字符数达到人工设定的数目时,系统产生该事件;另一种是当接收到指定字符时,系统产生该事件。本文采用前一种,当接收字节数达到3时,触发中断。[page]
Bytes available事件需要事先设置。可以使用函数set(obj,“By tesAvailableFcnMode”,“byte”)和set(obj,“BytesAvailableFcnCount”,3)。以上两个函数设置为当串口检测到输入缓存中达到了3个字符的数据时,则触发串口中断。
② 串口中断处理函数。串口中断处理函数可以根据用户需要自行定义。如串口读中断处理函数可以这样定义:obj.BytesAvailableFcn=@receiveData。receiveData即为串口读中断处理函数。在读中断处理函数中可以进行串口读操作,即将输入缓存区中的数据读到用户自定义的存储变量中,以备后续的数据处理与分析。[7]
4.2 Matlab基于GUI界面的计时器实现
利用Matlab的GUI设计出整体的控制界面,界面功能包括:可以设置串口参数如端口号、波特率、数据位、校验位和停止位;计时器显示窗口,能实时显示计时器的时间;还具有实现打开串口、开始计时、停止、重置等功能的按钮。设计的GUI控制界面如图5所示。
图5 GUI控制界面
单片机发过来的信号,触发Matlab上的串口中断,标志FLAGA/FLAGB置位,进而可以使计时器停止计时。同时,在GUI界面上,也可以通过手动按键使标志FLAGA/FLAGB置位,停止计时。计时部分的程序流程图如图6所示。
图6 计时部分的程序流程图
Matlab文件编译完毕后,生成的可执行程序还需要Matlab环境的支持。为了使本设计更广泛地应用到一般用户,需要发布到没有安装Matlab的机器上运行,还要进行最后一项工作,即打包Matlab组件运行环境(Matlab Component Runtime,MCR)。将MCR与可执行程序一起打包,拷贝到其他没有安装Matlab的机器上,在该机器上安装MCR,安装完毕即可直接在该机器上运行编译的Matlab可执行程序。[8]
5 系统设计及应用中需注意的问题
实际测试时,光电开关在环境照度较高时,一般都能稳定工作。但应回避将传感器光轴正对太阳光、白炽灯等强光源。在不能改变传感器(受光器)光轴与强光源的角度时,可在传感器上方四周加装遮光板或套上遮光长筒,以确保光电开关可靠工作。
另外,在ZigBee无线通信模块配置时,应注意选择合适的通信信道,以避免WiFi的干扰。在同一个网络中,无论是终端设备还是中心节点,ID设置必须相同,模块间才能正常通信。同一个网络中,所有模块的串口超时时间设置必须相同,否则串口通信不能同步,通信也会失败。
结语
在本设计中,主要以ATmega16单片机作为信号采集系统,通过串口和上位机的Matlab进行信号通信,通信采用ZigBee无线通信模块实现,使系统灵活性、可扩展性大大增强。本文利用Matlab GUI进行了包含一般界面元素的界面开发,在此基础上,加入串口通信功能和计时器计时功能。GUI设计出的人机友好界面,使得系统简单易懂,操作起来更加方便。
上一篇:基于Atmel QTouch的ATmega48感应的按键设计
下一篇:AVR单片机的CAN总线分析仪设计
推荐阅读最新更新时间:2024-03-16 13:30