AVR单片机和Matlab串口通信的计时器系统

发布者:快乐的舞蹈最新更新时间:2013-11-12 来源: eefocus关键字:AVR单片机  Matlab  串口通信  计时器系统 手机看文章 扫描二维码
随时随地手机看文章

引言

  本文设计了一种基于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设计出的人机友好界面,使得系统简单易懂,操作起来更加方便。

关键字:AVR单片机  Matlab  串口通信  计时器系统 引用地址:AVR单片机和Matlab串口通信的计时器系统

上一篇:基于Atmel QTouch的ATmega48感应的按键设计
下一篇:AVR单片机的CAN总线分析仪设计

推荐阅读最新更新时间:2024-03-16 13:30

【C51自学笔记】串口通信+RS-232C接口+ RS-422A/RS-485接口
简介: 计算机通信是指计算机与外部设备或计算机与计算机之间的信息交换。通信有并行通信和串行通信两种方式。在多微机系统以及现代测控系统中信息的交换多采用串行通信方式。 并行通信 串行通信 串行通信的异步通信 异步通信是以字符(构成的帧)为单位进行传输,字符与字符之间的间隙(时间间隔)是任意的,但每个字符中的各位是以固定的时间传送的,即字符之间不一定有“位间隔”的整数倍的关系,但同一字符内的各位之间的距离均为“位间隔”的整数倍。 串行通信的传输方向 单工是指数据传输仅能沿一个方向,不能实现反向传输。 半双工是指数据传输可以沿两个方向,但需要分时进行。 全双工是指数据可以同时进行双向传输。 串行
[单片机]
【C51自学笔记】<font color='red'>串口通信</font>+RS-232C接口+ RS-422A/RS-485接口
C51语言编程:单片机与 PC 串口通信程序
单片机接收PC机发来的指令信号,然后单片机又向PC机发送字符串。具体要求如下: 当接收指令信号为:'go',单片机向PC机发送字符串:WELCOME TO CHINA!; 当接收指令信号为:'who',单片机向PC机发送字符串:MY NAME IS LIMING; 当接收指令信号为:'home',单片机向PC机发送字符串: YINGYONGKEXUEXUEYUAN。 PC机上的串口调试软件,会在窗口显示出单片机送回来相应字符串; 如果接送的字符串不正确,单片机不响应。 采用C语言。 题目链接:http://zhidao.baidu.com/quest
[单片机]
avr单片机八位流水灯程序
八位流水灯程序 单片机源程序如下: #include iom16v.h #define uint unsigned int #define uchar unsigned char void Delay_ms(uint k) { uint i,j; for(;k 0;k--) for(i=142;i 0;i--) for(j=2;j 0;j--); } void port_init(void) { DDRD=0xff; PORTD=0xff; } void main(void) { uchar temp,i; port_i
[单片机]
LabVIEW与STC89C54单片机串口通信实现
  1.概述   在现代测控系统中,我们经常会采用上位机和下位机的开发控制模式。下位机主要是用来采集数据,可以通过嵌入式控制器、单片机控制器、PLC等来实现。上位机主要是图形界面,用来实时显示采集数据,并进行数据分析及处理,同时可以控制下位机。上位机的实现可以通过各种高级语言,比如VB、Delphi等以及NI公司的图形化虚拟仪器软件开发环境LabVIEW.由于LabVIEW采用的是图形化的编程方法,所以无论你是否有过编程经验,都可以快速、高效地设计用户界面,实现与控制硬件的通信,并进行数据分析和处理。如今LabVIEW已经渗透到工业测量的各个领域,与此同时在嵌入式、FPGA、DSP、实时控制等领域也发挥着巨大的作用。   2.
[单片机]
LabVIEW与STC89C54单片机<font color='red'>串口通信</font>实现
基于LabVIEW串口通信的数据采集串口收录系统设计
可视化编程软件LabVIEW不仅能很轻松地将各种软硬件连接起来,还提供了强大的后续数据处理能力。与传统仪器相比,虚拟仪器提高了仪器资源的可再用性和可移植性,只需在原有基础上作相应改动即可增强它的功能,无需更换硬件设备 。基于此,本文在研究LabVIEW的基础上,开发了基于LabVIEW的串口收录系统,以单片机为核心的硬件部分作为前端数据采集系统,可实现200 kHz的采样速率、16 bit的分辨率,具有采样率高、应用性强等优点。该收录系统将采集数据以曲线方式显示在上位机上,以二进制.dat格式记录,并且可回放记录的数据,这是该系统的创新点。 1 系统总体方案 系统总体方案框图如图1所示,主要由前端数据采集和上位机波形显示记录两大
[测试测量]
基于LabVIEW<font color='red'>串口通信</font>的数据采集串口收录<font color='red'>系统</font>设计
基于AVR单片机的终端显控设计方案
1 引言 随着信息产业的迅速发展,作为信息显示终端之一的LCD器件也得到了空前的发展。液晶显示器(LCD)具有显示信息丰富、功耗低、体积小、重量轻、超薄等许多其他显示器无法比拟的优点。近些年来被广泛应用于单片机控制的智能仪器、仪表和低功耗电子产品中。为LCD配置驱动电路,就形成了液晶显示模块LCM(Liquid Crystal Module)。它的基本组成部件除了LCD、驱动电路外一般还有连接件、背光源等。液晶显示模块同一个系统中的其他电路一样,有简单的接口,并提供了丰富的控制显示的指令系统。为整机的开发节约了时间。AVR单片机是Atmel公司推出的具有精简指令集RISC结构的新型8位单片机。具有丰富的硬件接口。它采用低功耗、
[单片机]
The MathWorks公布新版MATLAB及Simulink
The MathWorks宣布推出MATLAB及Simulink产品家族更新版本──R2006a;新版本内容在MATLAB部份,主要是推出Windows x64位平台的MATLAB、提供分布式计算机运算的新功能,以及增加1个应用程序转文件分享目标环境的新产品,包括.NET加载宏工具箱(MATLAB Builder for .NET);在Simulink部份,则增添了Simulink模型检视及分享、嵌入式软件设计及实现等等新功能。 The MathWorks表示,R2006a亦是该公司实现加快产品更新速度的开始;未来该公司将把产品更新转变为一年两次,即3月及9月,而每次的改版也将同步更新所有产品线、增加新的产品功能、修正现有产品b
[新品]
STM32 串口通信实验
一,串口操作相关库函数: 获取状态标志位函数-操作USART_SR寄存器 // 获取状态标志位 FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG); // 清除状态标志位 void USART_ClearFlag(USART_TypeDef* USARTx, uint16_t USART_FLAG); // 获取中断状态标志位 ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT); // 清除中断状态标志位 void USART_ClearITPe
[单片机]
STM32 <font color='red'>串口通信</font>实验
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved