×
嵌入式 > 技术百科 > 详情

基于单片机无线电子点菜系统硬件设计及实现

发布时间:2020-06-08 发布时间:
|

第一章 绪论
1.1 研究背景和意义

人类利用无线通信技术的历史已经有几千年了,古时候用的烽火台就是最原始的无线通信。但这时候的无线通信技术还只是处于萌芽阶段,只有到19世纪末意大利人马可尼发明无线电报开始,人类才真正开始大规模地利用无线通信技术[1]。近数十年来随着计算机技术和电子技术的发展,无线通信技术更是以日新月异的速度向前发展,它也成为了通信领域的一个重点研究方向。
现代的无线通信技术是建立在硬件电路的基础上的,因此微电子技术[2]的发展直接制约着无线通信技术的发展。回顾集成电路的发展历程,我们可以看到,自发明集成电路至今40多年以来,”从电路集成到系统集成”这句话是对IC产品从SSI(Small Scale Integrated,小规模集成电路)到VLSI(Very Large Scale Integrated超大规模集成电路)今天特大规模集成电路发展过程的最好总结,即整个集成电路产品的发展经历了从传统的板上系统(System-on-board)到片上系统(System-on-a-chip)的过程。随着集程度的提高,芯片的体积能耗和成本在逐步降低。这也使电子产品向便携式和低端市场发展。
虽然微电子的发展历史已经有半个多世纪,但是射频芯片[1][2]的发展却是近几年的事。从分类上来看,射频芯片属于专用集成电路。目前国际上有很多专门生产射频芯片的公司,例如Nordic公司和Chipcon公司。这些芯片一般工作在免费频段,采用专门的调制解调技术,内部集成了很多电路。像Nordic公司的NRF2401芯片,它是单片射频收发芯片,工作于2.4~2.5GHz ISM(Industry Science medicine,工业、科学、医学)频段,芯片内置频率合成器、功率放大器、晶体振荡器和调制器等功能模块,输出功率和通信频道可通过程序进行配置。芯片能耗非常低,以-5dBm的功率发射时,工作电流只有10.5mA,接收时工作电流只有18mA,多种低功率工作模式,节能设计更方便。其DuoCeiverTM技术使nRF2401可以使用同一天线,同时接收两个不同频道的数据。
无线电子点菜系统是无线通信技术的一个典型应用。近些年来,随着人民生活水平的提高和生活方式的转变,餐饮业具有巨大的投资市场,被称为中国的黄金产业。人们在消费过程中对服务质量也有了更高的要求,同时餐馆之间的激烈竞争也促进了无线通信技术在餐饮业中的应用。无线电子点菜系统的目的就是利用最先进的2.4GRF无线通信技术、嵌入式移动数据库技术[3][4]、以及触摸屏的掌上电脑技术, 为餐饮业走向全面数字化提供了完整的解决方案。该系统能够提高餐馆档次、提高效率、自动结账、避免人为错误、避免跑单、实时监控餐馆状况、提供各种各样统计信息、精简人手、管理库存、提高服务品质等,为餐饮行业带来崭新的管理理念与服务手段,优化业务流程,为客户提供更好的服务,实现企业价值最大化同时又使成本最低化,是餐饮行业向信息化发展的一个重要标志。由于使用无线技术通信,可以不用进行复杂的布线,这也大大降低了餐馆的建设成本,减少了对线路维护的开支。同时,无线通信的可以移动性也使服务员随时可以和吧台联系。
无线电子点菜系统基于目前很热门的技术–嵌入式技术[3],依托一定的硬件平台。因此微电子技术的发展对系统的性能有很大的限制,目前微电子技术已经发展到了SOC(System On Chip,片上系统),集成度获得了极大的提高。同时,芯片的价格,体积和能耗进一步降低,这些都使无线电子点菜系统向移动化和大众化方向发展。可以说,随着微电子技术的进一步发展,无线电子点菜系统仍然有很大的发展空间。

1.2 无线通信技术的发展现状

按照发射功率的不同,无线通信技术可分为短距离无线通信技术和长距离无线通信技术,它们各自依托的硬件平台和通信协议也有很大不同。几种常见的长距离无线通信系统如GPRS系统和我国即将投入使用的3G系统,它们都有一些共同的特点:使用专门的频段,需要专门的公司进行运营。由于本系统要求传输距离有限,而且对成本有限制,因此长距离无线通信协议不在考虑的范围之内,下面就重点阐述几种常见的短距离无线通信协议:
1 蓝牙[5]
爱立信在1994年开始研究一种能使手机与其附件(如耳机)之间互相通信的无线模块,4年后,爱立信、诺基亚、IBM等公司共同推出了蓝牙技术,主要用于通信和信息设备的无线连接。蓝牙工作频率为2.4GHz,有效范围大约在10m半径内。在此范围内,采用蓝牙技术的多台设备,如手机、微机、激光打印机等能够无线互联,以约1Mb/s的速率相互传递数据,并能方便地接入互联网。目前蓝牙技术开发重点是多点连接,即一台设备同时与多台(最多7台)其他设备互联。今后,市场上不同厂商的蓝牙产品将能够相互联通。
蓝牙技术的应用主要有以下3类:
1 语音/数据接入 是指将一台计算机通过安全的无线链路连接到通信设备上,完成与广域网的连接。
2外围设备互连 是指将各种设备通过蓝牙链路连接到主机上。
3 PAN(Personal Area Net,个人局域网)如图1所示,主要用于个人网络与信息的共享与交换。
蓝牙协议有以下技术特点:
(1)蓝牙工作在全球开放的2.4GHz ISM频段;
(2)使用跳频频谱扩展技术,把频带分成若干个跳频信道(hop channel),在一次连接中,无线电收发器按一定的码序列不断地从一个信道跳到另一个信道;
(3)一台蓝牙设备可同时与其它七台蓝牙设备建立连接;
(4)数据传输速率可达1Mbit/s;
(5)低功耗、通讯安全性好;
(6)在有效范围内可越过障碍物进行连接,没有特别的通讯视角和方向要求;
(7)支持语音传输;
(8)组网简单方便
正是由于蓝牙协议有以上特点,蓝牙产品涉及PC、笔记本电脑、移动电话等信息设备和A/V设备、汽车电子、家用电器和工业设备领域。蓝牙的支持者们预言说,一旦支持蓝牙的芯片变得非常便宜,蓝牙将置身于几乎所有产品之中,从微波炉一直到衣服上的纽扣。
但是蓝牙的传输距离比较短,而且蓝牙是一种还没有完全成熟的技术,尽管被描述得前景诱人,但还有待于实际使用的严格检验。蓝牙的数据传输速率也不是很高,在当今这个数据爆炸的时代,可能也会对它的发展有所影响。目前主流的软件和硬件平台均不提供对蓝牙的支持,这使得蓝牙的应用成本升高,普及难度增大。从以上各点综合考虑,蓝牙协议不适合本系统。
2 超宽带技术UWB(Ultra Wide band)[6]
超宽带技术UWB(Ultra Wide band)是另一个新发展起来的无线通信技术。UWB通过基带脉冲作用于天线的方式发送数据。窄脉冲(小于1ns)产生极大带宽的信号。脉冲采用脉位调制(Pulse Position Modulation,PPM)或二进制移相键控(BPSK)调制。UWB被允许在3.1~10.6GHz的波段内工作。它主要应用在小范围、高分辨率、能够穿透墙壁、地面和身体的雷达和图像系统中。除此之外,这种新技术适用于对速率要求非常高(大于100Mb/s)的LAN(Local Area Net,本地局域网)s或PANs。
军事部门已对UWB进行了多年研究,开发出了分辨率极高的雷达。直到2002年2月14日,美国联邦通信委员会才准许该技术进入民用领域。所以对于商业和消费领域,UWB还是新鲜事物。UWB有可能在10m范围内,支持高达110Mb/s的数据传输率,不需要压缩数据,可以快速、简单、经济地完成视频数据处理。虽然说UWB技术的数据传输距离相比蓝牙技术已经获得很大提高,但是仍然不能满足本系统的技术要求。
3 ZigBee [1][7]
Zigbee是一种短距离、低功耗的无线通信技术名称。这一名称来源与蜜蜂的八字舞。其特点是近距离、低复杂度、低功耗、低数据速率、低成本。主要适合用于自动控制和远程控制领域,可以嵌入各种设备。
ZigBee协议的技术特点和应用前景将在下一章详细叙述。
4 IrDA (infrared data association,红外数据标准协会)技术[5][6]
红外线是波长在750nm至1mm之间的电磁波,它的频率高于微波而低于可见光,是一种人的眼睛看不到的光线。由于红外线的波长较短,对障碍物的衍射能力差,所以更适合应用在需要短距离无线通讯的场合,进行点对点的直线数据传输,传输速率最快可达16Mbps。IRDA将红外数据通讯所采用的光波波长的范围限定在850nm至900nm之内。IRDA技术有以下特点:
(1)它是目前在世界范围内被广泛使用的一种无线连接技术,被众多的硬件和软件平台所支持;
(2)通过数据电脉冲和红外光脉冲之间的相互转换实现无线的数据收发。
(3)主要是用来取代点对点的线缆连接;
(4)新的通讯标准兼容早期的通讯标准;
(5)小角度(30度锥角以内),短距离,点对点直线数据传输,保密性强
(6) 传输速率较高,目前4M速率的FIR技术已被广泛使用,16M速率的VFIR技术已经发布。
虽然目前IRDA技术发展已经很成熟,而且有很多公司的产品都支持这种协议。但是由于红外线的波长较短,对障碍物的衍射能力差,所以它只能用于视距传输,传输距离比较短,因此也不适合本系统的技术要求。
综合比较以上各个短距离无线通信协议的技术特点和本系统的要求,只有ZigBee协议能基本满足要求。而且目前支持ZigBee协议的厂商比较多,技术发展也很成熟,可以作成低成本的嵌入式产品。

1.3 论文的研究内容

无线电子点菜系统的实现是建立在硬件电路的基础上的,为了降低误码率,提高频率资源的利用律,数据必须按照一定协议传输。在发送端,数据按照一定的格式编码,然后调制到一约定的频率后发送;接受端将接收到的信号经过解调和解码后,将数据还原。
本论文的研究内容主要有两部分组成:
1.经过讨论各种无线通信协议的特点和电子技术的发展现状,在此基础上,提出了基于ZigBee协议的硬件平台。并详细分析了平台组成部分各自的原理以及功能。
2.分析了平台的编程规则,开发出了相应的驱动程序。

1.4内容安排

本文对无线电子电菜系统的硬件设计进行了深入的研究,全文共分为五章,各章节的内容安排如下:
第一章介绍了本文的研究背景和各章节的内容安排情况。
第二章介绍ZigBee协议的详细内容和一种基于ZigBee协议的芯片。
第三章在上一章的基础上提出了自己的硬件平台,详细介绍了平台的组成部分和各自的功能。
第四章和第三章相对应的,主要讲了硬件平台的驱动程序以及PC机端串行口调试工具的开发,并简单介绍了相应的软件开发工具。
第五章是总结与展望。对本文工作进行了总结,并探讨可以进一步深入研
究的方向。
第二章 ZigBee[7]协议分析
ZigBee协议是一种近距离、低复杂度、低功耗、低数据速率、低成本的无线网络技术。
在标准规范制订方面,主要是IEEE 802.15.4小组与ZigBee Alliance两个组织,两者分别制订硬体与软体标准。在IEEE 802.15.4方面,2000年12月IEEE成立了802.15.4小组,负责制订MAC(Media Access Control,媒体存取控制层)与物理层规范, 2003年5月通过802.15.4标准;在ZigBee 联盟方面,ZigBee[7]联盟是在2002年10月由Honeywell、Mitsubishi、Motorola、Philips与Invensys共同成立,ZigBee联盟负责制订网路层、安全管理、应用界面规范,其次也肩负互通测试,目前ZigBee联盟已推出第1.0版规范(Version 1.0),成员已达150多个。
ZigBee协议依据802.15.4标准[8][9],在数千个微小的传感器之间相互协调实现通信。这些传感器只需要很少的能量,以接力的方式通过无线电波将数据从一个传感器传到另一个传感器,所以它们的通信效率非常高。IEEE802.15.4规范是一种经济、高效、低数据速率(<250 kbps)、工作在2.4 GHz和868/915 MHz的无线技术,它是ZigBee应用层和网络层协议的基础。
相对于现有的各种无线通信技术,ZigBee技术将是最低功耗和成本的技术,同时由于ZigBee技术的低数据速率和通信范围较小的特点,也决定了ZigBee技术适合于承载数据流量较小的业务。所以ZigBee联盟预测的主要应用领域包括工业控制、消费性电子设备、汽车自动化、农业自动化和医用设备控制等。

2.1 ZigBee协议框架

ZigBee协议同其它网络通信协议一样采用分层模型,对各层所实现的功能和在整个协议中起的作用做了明确的划分,每层为其上层提供一组特定的服务。ZigBee的协议架构大致如表2.1所列。

表2.1 ZigBee的协议架构
第四层 应用层
第三层 网络层
第二层 媒体访问层(MAC)
第一层 物理层

ZigBee协议虽然是基于标准的七层OSI(Open System Interconnect,开放式系统互联)模型[10],但仅对那些涉及ZigBee的层予以定义。IEEE802.15.4-2003标准定义了最下面的两层:物理层和MAC。ZigBee联盟提供了网络层和应用层框架的协议。
相比于常见的无线通信标准,ZigBee协议套件紧凑而简单,具体实现的要求很低。以下是ZigBee协议套件的需求估计:硬件需要8位处理器,如广泛使用的80C51系列单片机[12];软件需要32KB的ROM(Read Only Memory,只读存储器),最小软件需要4KB的ROM;网络主节点需要更多的ROM以容纳网络内所有节点的设备信息,数据包转发表,设备关联表,与安全有关的密钥存储等。
1 物理层
IEEE802.15.4标准在物理层设计中面向低成本和更高层次的集成需求,才用的工作频段分别为2.4 GHz和868/915 MHz。各个频段可以使用的信道数目分别为16、10、1,各自提供250kbps,40kbps和20kbps的传输速率,其传输范围介于10-100米之间。
为了避免干扰,在各个频段均使用DSSS(Direct Sequence Spread Spectrum,直接序列扩频技术)[13],以化整为零方式将一个信号分为多个信号,再经由编码方式传送信号以避免干扰,这对大部分较低端的实现来说,直接序列的应用可以使模拟电路更加简单,具有更高的容错性能。
2 媒体访问层
IEEE802.15.4标准在媒体访问层(MAC)方面,主要沿用无线局域网WLAN中IEEE802.11系列标准的CSMA/CA(Carrier Sense Multiple Access/Collision Avoidance,载波监听多路访问与冲突避免)方式以提高系统的兼容性。这种MAC层的设计不但是多种拓扑结构网络的应用变得简单,还可以实现非常有效的功耗控制。
3 网络层
网络功能是ZigBee协议的重要特点,也是与其他无线局域网标准不同的地方。在网络层方面其主要工作在于负责网络机制的建立与管理,并且具有自我组态与自我修复功能。在网络层中ZigBee协议定义了三种角色:第一个是网络协调器,负责网络的建立以及网络位置的分配;第二个是路由器,主要负责找寻建立以及修复信息包的路由路径,并负责转发信息包;第三个是末端装置,只能选择加入他人已经形成的网络,可以收发信息包,但是不能转发,不具备路由的功能。通常,路由器和网络协调器由全功能装置(FFD)实现,而末端装置由简化功能装置(RFD)实现。在组网方式上,ZigBee主要采用图2.1所示三种方式:其一为主从方式的星形网,它需要一个能负责管理和维护网络的网络协调器和不超过65535个从属装置;其二为簇形网络,它可以是扩展的单个星形网或者互连多个星形网络;其三为网状网(Mesh),网络中的每个FFD可以做为路由器,根据AD hoc网络路由协议来优化最短和最可靠的路径。

图2.1 三种网络拓扑结构

4 应用层
对于应用层,主要有三个部分:与网络层相连的应用支持(APS),ZigBee设备对象(ZDO)以及装置应用行规。ZigBee的应用层架构最重要的是已经覆盖了服务的观念。
对于ZigBee装置而言,当加入到一个WPAN(Wireless Personal Area Net,个人无线局域网)后,应用层的ZMO会发起一系列的初始化动作,先通过APS进行装置收寻以及服务收寻后,然后根据事先定义好的描述信息,将与其相关的装置或是服务记录在APS里的绑定表中;之后所有服务的使用,都要通过这个绑定表来查询资料的服务或者行规。而装置应用行规则是根据不同的产品设计出的不同的描述信息,以及ZigBee各层协议的参数设定。
5 安全层
安全层并非单独独立的协议,ZigBee为其提供了一套基于128位AES算法的安全类和软件,并且集成了IEEE802.15.4标准的安全元素,用来保证MAC层祯的机密性,一致性和真实性。
另外ZigBee联盟也负责ZigBee产品互通性测试与认证规则的制定,让开发ZigBee产品的厂商有一个公开的场合,能够互相测试互通性。而在认证部分,ZigBee联盟一共定义了三种层次的认证,第一级认证物理层和MAC,与芯片厂有着最直接的关系;第二级认证ZigBee协议栈;第三级认证ZigBee产品。只有通过第三级认证的产品才能贴上ZigBee的标志,所以也称作ZigBee注册认证。

2.2 ZigBee协议优缺点和应用前景

ZigBee协议是从WLAN发展过来的,经过近几年来ZigBee联盟成员[7]对标准的不断修改和完善,已经显示出了强大的生命力,但是本身还有一些缺点,这也限制了ZigBee协议的使用范围。
2.2.1 ZigBee协议的优点
功耗低:由于ZigBee网络节点设备工作周期较短、收发信息功耗较低,并且采用了休眠模式(当不传送数据时处于休眠状态,当需要接收数据时由ZigBee网络中的协调器设备负责唤醒它们),可以确保两节五号电池支持长达六个月到两年左右的使用时间。避免了频繁更换电池或者充电,从而减轻了网络维护的负担 。
数据传输可靠性高:采用了碰撞避免机制,同时为需要固定带宽的通信业务预留了专用时隙,避免了发送数据时的竞争和冲突。而且MAC层采用了完全确认的数据传输机制,发送的每个数据包都必须等待接收方的确认信息,从而从根本上确保了数据传输的可靠性,最大限度地降低信息损失的概率。
网络容量大:一个Zigbee网络可以容纳最多65536个从设备和一个主设备[14],一个区域内可以同时存在最多100个Zigbee网络。
时延小:针对时延敏感的应用做了优化,通信时延和休眠状态激活的时延都非常短。设备搜索时延典型值为30ms,休眠激活时延典型值为15ms,活动设备信道接入时延为15ms。

表2.2 Zigbee与蓝牙协议时延比较
设备收索时延典型值(ms) 休眠激活时延典型值(ms) 活动设备信道接入时延(ms)
ZigBee技术 30 15 15
蓝牙技术 >=3000 3000 2

兼容性:与现有的控制网络标准无缝集成。通过网络协调器(Coordinator)自动建立网络,采用CSMA-CA方式进行信道存取。为了可靠传递,提供全握手协议。
安全性:Zigbee提供了数据完整性检查和鉴权功能,加密算法采用AES-128,同时各个应用可以灵活确定其安全属性,是网络安全得到有效的保障。
实现成本低:模块的初始成本估计在6美元左右,很快就能降到1.5~2.5美元,且Zigbee协议是免专利费的。
协议套件紧凑而简单:其具体实现的要求很低。Zigbee协议套件的需求估计:8位微处理器,如80C51[10];全协议套件软件需要32K字节的ROM;最小协议套件软件大约4K字节的ROM。
2.2.2 ZigBee协议存在的问题及解决方案
802.15.4标准是ZigBee协议的基础,用它实现无线数据采集,主要有以下两个问题:
1、网络内传感器节点时钟需要同步,监控系统的多传感器信息融合时,上位机需要知道每个原始数据是何时采集的,采样的触发要求每个节点有统一的时钟;
2、其通信速率较低,而且又受到接口通信速率的限制,加之受纠错码的编码效率影响,真正的数据发送量是很低的。
解决此问题可以通过如下的途径: 传感器节点采用DSP处理器,尽可能在传感器节点一级多做些数据处理工作,尽量减少原始数据的发送量,只发送有用信息。例如,对于平稳状态的原始数据可以不发送到上位机中,只发送可疑状态前后的原始数据,这样就大大减少了数据的通信量。
2.2.3 ZigBee协议应用前景
ZigBee协议特别适合数据吞吐量小,网络建设投资少,网络安全要求较高,不便频繁更换电池或者充电的场合,预计将在消费类电子设备,家庭智能化,工业控制,医疗设备控制,农业自动化和无线点菜系统等领域获得广泛的应用。
消费类电子产品和家庭智能化将是ZigBee技术最有潜力的市场,家庭可以联网的设备包括电视,录象机,PC外设,儿童玩具,游戏机,门禁系统,窗户和窗帘,照明设备,空调设备和其他家用电器等。家用设备引进ZigBee协议后将极大改善人们的居住环境和舒适度。
在工业控制领域,利用传感器和ZigBee网络,可是数据的自动采集,分析和处理变得更加容易;可以作为决策辅助系统的重要组成部分,例如危险化学成分的检测,火警的早期检测和预报,高速旋转机器的检测和维护。这些应用不需要很高的数据吞吐量和连续的状态更新,重点在于低功耗,可最大限度地延长电池的寿命,减少ZigBee网络的维护成本。
在医学领域,利用传感器和ZigBee网络可以准确,实时地监测每个病人的血压,心率等情况,有助于医生快速做出反应,减少医生查房的工作负担,特别适合对重,危病患者的监护和治疗。
在现代农业中,利用传感器可以将土壤温度,氮浓度,PH值,降水量,气温,气压和采集信息的地理位置经由ZigBee网络传送到中央的控制部分,使农民能及早而且准确地发现问题,从而有助于保持并提高农作物的产量,减少发生灾害的概率。
本系统是将ZigBee协议用于餐馆的无线点菜系统,这样能够提高餐馆档次、提高效率、自动结账、避免人为错误、避免跑单、实时监控餐馆状况、提供各种各样统计信息、精简人手、管理库存、提高服务品质等,为餐饮行业带来崭新的管理理念与服务手段,优化业务流程,为客户提供更好的服务,实现企业价值最大化同时又使成本最低化,是餐饮行业向信息化发展的一个重要标志。

2. 3基于ZigBee协议的芯片[1][4][5]

2002年8月ZigBee联盟成立时Honeywell,Invensys,三菱电器,摩托罗拉和飞利浦等国际上知名的大公司就是ZigBee协议的支持者。目前,ZigBee已经吸引了上百家芯片研发公司和无线设备制造公司,并且不断有新的公司加盟这一联盟。现在国际上有很多公司生产基于ZigBee协议的芯片,芯片的集成度也越来越高。例如挪威的Nordic公司的nRF系列芯片,还有Chipcon公司的无线数据传输芯片等。各个公司的芯片原理基本相同,编程规则大致相同,因此选用Nordic公司的nRF2401,下面详细叙述一下nRF2401芯片的特点。
nRF2401无线收发一体芯片和蓝牙一样,都工作在2.4GHZ自由频段,能够在全球无线市场畅通无阻。nRF2401支持多点间通信,最高传输速率超过1Mbit/s,而且比蓝牙具有更高的传输速度。它采用SOC方法设计,只需少量外围元件便可组成射频收发电路。与蓝牙不同的是,nRF2401没有复杂的通信协议,它完全对用户透明,同种产品之间可以自由通信。更重要的是,nRF2401比蓝牙产品更便宜。所以nRF2401是业界体积最小、功耗最少、外围元件最少的低成本射频系统级芯片。
nRF2401的引脚排列如图2.2(顶视图)所示。它采用5mm×5mm的24引脚QFN封装。nRF2401的主要特点如下:
图2.2 nRF2401的引脚排列

(1)采用全球开放的2.4GHZ频段,有125个频道,可满足多频及跳频需要;
(2)速率(1Mbps)高于蓝牙,且具有高数据吞吐量;
(3)外围元件极少,只需一个晶振和一个电阻即可设计射频电路;
(4)发射功率和工作频率等所有工作参数可全部通过软件设置;
(5)电源电压范围为1.9-3.6V,功耗很低;
(6)电流消耗很小,-5dBm输出功率时的典型峰值电流为10.5mA;
(7)芯片内部设置有专门的稳压电路,因此,使用任何电源(包括DC/DC开关电源)均有很好的通信效果;
(8)每个芯片均可以通过软件设置最多40bit地址,而且只有收到本机地址时才会输出数据(提供一个中断指示),同时编程也很方便;
(9)内置CRC(Cyclic Redundancy Check,循环冗余校验)[16]纠检错硬件电路和协议;
(10)采用DuoCever技术可同时接收两个nRF2401的数据;
(11)采用ShockBurst TM模式时,能适用极低的功率操作和不严格的MCU执行;
(12)无需外部SAW滤波器;
(13)可100%RF检验;
(14)带有数据时隙和数据时钟恢复功能。
nRF2401的内部结构原理及外部组成框图如图2.3所示,下面介绍其工作原理。

图2.3 nRF2401的内部结构原理及外部组成框图

1 ShockBurst TM[16]模式
nRF2401的ShockBurst TM模式采用片上FIFO(First-In First-Out,先进先)出来进行低数据率的时钟同步和高数据率的传输,因此极大的降低了功耗。
ShockBurst TM发射主要通过MCU接口引脚CE、CLK1和DATA来完成。当MCU请求发送数据时,置CE为高电平,此时的接收机地址和有效载荷数据作为nRF2401的内部时钟,可用请求协议或MCU将速率调至1Mbps;置CE为低电平可激活ShockBurst TM发射。
ShockBurst TM接收主要使用MCU接口引脚CE、DR1、CLK1、DATA来实现。当正确设置射频包输入载荷的地址和大小后,置CE为高电平可激活RX。此后便可在nRF2401监测信息输入200μs,若收到有效数据包,则给MCU一个中断并置DR1为高电平,以使MCU 以时钟形式输出有效载荷数据,待系统收到全部数据后, nRF2401再置DR1为低?此时如果CE保持高电平,则等待新的数据包。若CE置低电平,则开始接收新的序列
nRF2401的 DuoCeiver TM[17]技术为RX提供了两个独立的专用数字信道,因而可代替两个单独接收系统。图4所示是DuoCeiver TM同时双接收信道结构图。 nRF2401可以通过一个天线接口从相隔8MHZ的两1Mbps接收机上接收数据。同时将两个数字信道的输出反馈到两个单独的MCU接口。具体的两个信道如下:
图2.4 DuoCeiver TM同时双接收信道结构图

数字信道1:CLK1,DATA,DR1;
数字信道2:CLK2,DOUT2,DR2;
应当说明的是,数字信道2的频率只有在比数字信道1的频率高出8MHZ时,才能保证正常接收。

第三章 基于ZigBee协议的硬件系统的设计及实现
目前,51系列单片机非常流行,而且资料众多,因此选用51系列单片机作为开发板的MCU,通过附加一定的外围电路后,来和无线数据传输模块进行通信,实现数据的无线传输。

3.1 STC89C58RD+[10]单片机概述

STC89C58RD+系列单片机是宏晶科技推出的新一代超强抗干扰,高速,低功耗的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可任意选择。
它具有以下特点:
1. 增强型6时钟/机器周期,12时钟/机器周期 8051 CPU(Central Process Unit,中央处理器)。
2. 工作电压:5.5V - 3.4V(5V单片机)
3. 工作频率范围:0 - 40 MHz,相当于普通8051的 0~80MHz.实际工作频率可达48MHz.
4. 用户应用程序空间32K字节
5. 片上集成 1280 字节RAM(Random Access Memory,随机存储器)。
6. 通用I/O口32个,复位后为: P1/P2/P3是准双向口/弱上拉(普通8051传统I/O口),P0口是开漏输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。
7. ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器/ 仿真器 可通过串口(P3.0/P3.1)直接下载用户程序,8K程序3秒即可完成一片
8. EEPROM 功能
9. 看门狗
10.共3个16位定时器/计数器,其中定时器0还可以当成2个8位定时器使用
11.外部中断4路,下降沿中断或低电平触发中断,Power Down模式可由外部中断低电平触发中断方式唤醒
12. 通用UART(Universal Asynchronous Receiver/Transmitter ,通用串行接口),还可用定时器软件实现多个UART
14.工作温度范围: 0 - 75℃ / -40 - +85℃
15.封装: PDIP-40,PLCC-44,PQFP-44
使用这种单片机做开发板,最大的优势就在于它支持ISP,这样不用购买昂贵的编程器/ 仿真器,直接通过串口线就能实现在线编程。而且内部集成了看门狗和Flash,简化了PCB板的制作。指令代码与51单片机兼容,这样可以用常用的51单片机软件开发工具开发驱动程序。

3.2 开发板的各个组成部分原理图以及功能

整个开发板是由单片机最小系统和它的一些外围电路组成,单片机最小系统做为整个开发板的控制中心,控制各个外围电路协调工作,完成系统设计的功能。整个系统原理图见附录2,下面详细叙述各个组成部分的原理及各自实现的功能。原理图由Protel 99SE[18][19]绘制。
3.2.1 单片机最小系统组成电路[page]

单片机最小系统是整个开发板的控制中心,它由电源,复位电路和晶振组成。电源采用5V供电,晶振为12MHZ。为了便于调试,将P0.4-P0.7和发光管相连,发光管为共阳极连接,这是因为开发板初上电或者或者复位后,所有的I/O口均为高电平。由于不使用外部存储器,因此将EA接高电平。为了方便调试和降低成本,因此选用USB(Universial Serial Bus,通用串口总线)方式供电。USB的即插即用特性,使对开发板供电非常方便。图3.1所示为单片机最小系统。
图3.1 单片机最小系统
3.2.2 串行口电平转换部分
大多数PC机都有一个串行通讯端口RS-232用于两台计算机间进行串行通讯。RS - 232通讯接口是一种标准化的串行接口,是为DTE(Data Terminal Equipment,远程通讯连接终端设备)与DCE (Data Communication Equipment,数据通讯设备)定义的物理接口。RS-232采用非平衡连接(又称为单端线路),在这个线路中,信号电压加到一条导线上,所有的信号电压都使用一个公共的接地线。为了提高抗干扰能力和增加传送距离,RS一232的每个脚线的信号和电平规定采用负逻辑电平,DC(-15一5V)规定为逻辑”1″,DC(+ 5-+15V)规定逻辑”0″, DC(-5一+5V规定为过渡区)。由于单片机的输入、输出电平为TTL电平,与 PC机RS-232标准串行接口的电气规范不一致,因此要实现单片机与PC机之间的数据通读,必须进行电平转换。选用的电平转换芯片为MAX232,它的工作电压为+5V,和单片机的工作电源相同。
由于STC89C58RD+单片机支持ISP下载,因此通过这个串行口既可以用来和PC机通信,又能将程序下载到单片机,不用购买昂贵的编程器。图3.2所示为串口电平转换部分。
图3.2 串口电平转换部分
3.2.3 LED部分
由于单片机复位后,各个引脚输出都为高电平,因此选用共阴极的LED数码管。每个数码管的使能端com1,com2,com3,com4分别接到P1.0,P1.1,P1.2,P1.3,当向使能端输出低电平,即可选通相对应的数码管。74LS244为三态输出的八组缓冲器和总线驱动器,选用的四位八段数码管本身已经集成了译码器,这样既简化了线路的连接,又降低了错误发生的概率。图3.3为LED部分。
图3.3 LED部分

3.2.4 开发板和无线数据传输模块接口部分
这一部分有两部分组成:由于nRF2401的工作电压为1.9V-3.6V,工作电压超过3.6V就会烧坏芯片。而开发板的电源为5V,因此为了使系统工作,必需要有5V电平转换为3.3V电平的部分。为了实现这一过程,选用LM1117-MAX3.3作为核心芯片。LM1117是一个低压差电压调节器系列,其压差在1.2V输出,负载电流为800mA时为1.2V。LM1117提供电流限制和热保护,电路包含1个齐纳调节的带隙参考电压以确保输出电压的精度在±1%以内。LM1117系列具有LLP、TO-263、SOT-223、TO-220和TO-252 D-PAK封装;此外为了使两个模块直接相连,将P2口的部分引脚用排针引到一起,排针间距为 100mil,标准 DIP 插针。图3.4为开发板和无线数据传输模块接口部分,图3.5为5V电平转3.3V电平部分。
图3.4 开发板和无线数据传输模块接口部分
图3.5 5V电平转3.3V电平部分

3.2.5 键盘部分
图3.6 键盘部分

键盘部分用来实现人机通信。有四个按键开关构成,分别为S5(P3.3/INT1), S6(P3.4/T0), S7(P3.5/T0), S5(P3.2/INT0),正常情况下均为高电平。当键按下后,输出为低电平。由于四个键盘的组成一样,这里只画出了S5的电路图。图3.6为键盘部分。

3.3 无线数据传输模块

通过仔细的比较和反复的论证后,决定选用nRF2401芯片作为无线模块的核心芯片,它的特点在上一章已经详细论述,这里不在重复。nRF2401芯片的典型应用电路如图3.7所示。

图3.7 nRF2401芯片的典型应用电路
从图11可以看出,只需要很少外围电路就可以组成无线数据传输模块。
它与开发板的接口电路为图3.8
各个接口的要求如下:
(1) VCC脚接电压范围为 1.9V~3.6V之间,不能在这个区间之外,超过3.6V将会烧毁模块。推荐电压3.3V左右。
(2) 除电源 VCC 和接地端,其余脚都可以直接和普通的 5V 单片机IO 口直接相连,无需电平转换。当然对 3V 左右的单片机更加适用了。
(3) 硬件上面没有SPI的单片机也可以控制本模块,用普通单片机IO口模拟SPI不需要单片机真正的串口介入,只需要普通的单片机IO口就可以了,当然用串口也可以了。
(4)6脚,12脚为接地脚,需要和开发板的逻辑地连接起来。
图3.8 无线数据传输模块与开发板的接口电路

3.4 无线数据传输模块和开发板的PCB图设计

PCB板是一块绝缘材料,在表面合理安放各种电子元件,并安排连接电子元件引脚间的铜膜导线,在不同的表面间有连接不同表面的铜导孔。
随着电子技术的不断发展进步,PCB在复杂程度和应用范围方面都有了长足的进步,按复杂程度来分,可以将PCB板分为3类:1.单面印刷电路板;2.双面印刷电路板;3.多层印刷电路板。为了方便布线,本系统所用的开发板和无线数据传输模块均为双层印刷电路板。
PCB的生成主要由四个过程组成:其一是原理图的生成;其二是根据已经生成的原理图产生对应的网络表,网络表是PCB图和原理图的纽带;第三步是新建一个PCB文件,并导入网络表;第四步是将合理布局元件,并用导线将元件的引脚连起来。
3.4.1 开发板的PCB图
将开发板的原理图按照以上的步骤生成相应的PCB图。如图3.9所示:
在PCB图设计的所有过程中,原理图在上一节已经生成。网络表的生成也比较简单。由于PCB图上使用元件的封装来代表元件,因此原理图中各个元件都要明确有自己的封装方式,而且在绘制PCB图前必须将用到的封装所在的封装库调入。否则,在调入网络表的过程中将会出现元件丢失的错误。

图3.9 开发板的PCB图

开发板上主要用到两个封装库:Advpcb.ddb和Miscellaneous.ddb.另外由于USB电源接口,电源开关,键盘和四位八段数码管没有对应的封装,因此需要使用元件库编辑器建立新元件封装。图3.10为键盘封装,图3.11为USB封装,图3.12为开关封装,图3.13为四位八段数码管封装。

图3.10 键盘封装 图3.11 USB封装

图3.12 开关封装 图3.13 四位八段数码管封装

各个元件的封装的引脚的序号必须和原理图中引脚的序号保持一致,不然将会在调如网络表过程中出现管脚丢失的错误。
下面再重点分析一下布线的过程。
布线是完成产品设计的重要步骤,可以说前面的准备工作都是为它而做的,在整个PCB中,以布线的设计过程限定最高,技巧最细、工作量最大。本系统的PCB布线为双面布线,布线的方式有两种:自动布线及交互式布线。但由于自动布线效果不好,往往实际的效果和预计效果有很大的出入,因此全部使用交互式布线。布线过程中充分考虑到如何降低元件字之间互相的干扰。
首先根据印制线路板电流的大小,尽量加租电源线宽度,减少环路电阻,它们的关系是:地线>电源线>信号线。同时使电源线、地线的走向和数据传递的方向一致,这样有助于增强抗噪声能力。线条有讲究:有条件做宽的线决不做细;高压及高频线应园滑,不得有尖锐的倒角,拐弯也不得采用直角。
由于采用双层设计,因此不可避免地将会使用到过孔。过孔太多,沉铜工艺稍有不慎就会埋下隐患。所以,设计中应尽量减少过线孔。此外,应该合理布置电源滤波/退耦电容:一般在原理图中仅画出若干电源滤波/退耦电容,但未指出它们各自应接于何处。其实这些电容是为开关器件(门电路)或其它需要滤波/退耦的部件而设置的,布置这些电容就应尽量靠近这些元部件,离得太远就没有作用了。
3.4.2 无线数据传输模块的PCB图
由于无线数据传输模块的核心芯片工作在2.4GHZ,因此在设计PCB图时对干扰的控制要格外重视。在PCB设计时,必须考虑到各种电磁干扰,注意调整电阻、电容和电感的位置,特别要注意电容的位置。
nRF2401的PCB为双层板,底层一般不放置元件,顶层的空余地方敷上铜,这些敷铜通过过孔与底层的地相连。nRF2401的供电电源应通过电容隔开,这样有利于给nRF2401提供稳定的电源。在PCB中,尽量多打一些通孔,使顶层和底层的地能够充分接触。nRF2401模块的PCB如图3.14所示。
图3.14 无线数据传输模块的PCB图

第四章 硬件驱动程序和串行口调试工具
驱动程序是硬件电路的灵魂,没有驱动的硬件电路是没有用的。STC89C58RD+是51类单片机,可以像开发其他51单片机驱动一样开发它的驱动程序。单片机软件开发平台选择比较流行的Keil uVision2,因为现在关于Keil uVision2软件的资料很多,这样上手就会很快。
串行口调试工具是用来将PC机上的数据通过串行口发送到单片机,和PC机接收从单片机发送过来的数据。选用Visual C++ 6.0来开发串行口调试工具,Visual C++ 6.0是微软公司推出的一款优秀开发工具,代码紧凑,运行速度快,而且比较适合低层开发。

4.1 硬件驱动程序

整个数据传输系统有两部分组成:与PC机相连的开发板为主机端,它不能移动,接收从机端发送过来的数据,并向从机端发送指令;可以移动的为从机端,它由开发板和无线数据传输模块组成。由于两端的地位和功能不同,因此对应的驱动程序也不同。
使用Keil uVision2开发硬件驱动程序,它支持众多不同公司的MCS51架构的芯片,它集编辑,编译,仿真等于一体,同时还支持,PLM,汇编和C语言的程序设计,它的界面和常用的微软VC++的界面相似,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能。因此很多开发51应用的工程师或普通的单片机爱好者,都对它十分喜欢。51 的编程语言常用的有二种,一种是汇编语言,一种是 C 语言。汇编语言的机器代码生成效率很高但可读性却并不强,复杂一点的程序就更是难读懂,而 C 语言在大多数情况下其机器代码生成效率和汇编语言相当,但可读性和可移植性却远远超过汇编语言,而且 C 语言还可以嵌入汇编来解决高时效性的代码编写问题。对于开发周期来说,中大型的软件编写用 C 语言的开发周期通常要小于汇编语言很多。综合以上C语言的优点,在开发时选择了C51语言.
4.1.1 主机端硬件驱动程序
主机端的硬件驱动程序主要有两种功能:实现开发板通过串行口和PC机通信;实现开发板通过某些I/O口和无线数据传输模块进行通信。
STC89C58RD+单片机的串行口是一个全双工通信接口,即能同时进行发送和接收,它可以作UART用,也可以作为同步移位寄存器用,其祯格式和波特率可以通过软件编程来设置,在使用上非常方便。
STC89C58RD+单片机串行口的工作方式和波特率由控制寄存器SCON和特殊功能寄存器PCON组成。
串行口控制寄存器SCON:

D7 D6 D5 D4 D3 D2 D1 D0
SM0 SM1 SM2 REN TB8 RB8 TI RI

特殊功能寄存器PCON:

D7 D6 D5 D4 D3 D2 D1 D0
SMOD

串行口可以通过软件设置四种工作方式,各种工作方式的数据格式和波特率均有所不同,这四种工作方式如下:
1. 方式0
当设定SM1、SM0为00时,串行口工作于方式0,在方式0下,RXD为数据输入/输出端,TXD为同步脉冲输出端,发送或接收的数据为8位,低位在前,高位在后,方式0的波特率固定震荡频率的1 /12,也就是每一机器周期传送一位数据。方式0可以外接移位寄存器,将串行口扩展为并行口,也可以外接同步输入/输出设备。发送完毕后,硬件自动将TI置1。再次发送数据前,需要软件将TI位清0。
REN为1时,单片机允许接收数据。RXD为数据接收端,接受数据保存到SBUF接收缓冲器中。发送完毕后,硬件自动将RI置1。再次接收数据前,需要通过软件将RI清0。
2. 方式 1
当设定SM1、SM0为01时,串行口工作方式1。方式1为波特率可变的8位异步通信方式,由TXD发送RXD接收,一帧数据为10位,1位起始位(低电平),8位数据位(低位在前)和1位停止位(高电平),波特率取决于定时器 的T 溢出率(1/溢出周期)和波特率的选择位SMOD。
3.方式2和方式3
当设定SM0、SM1为10或11时,串行口工作于方式2或方式3,这两种方式都是9位异步通信,仅波特率不同,适用于多机通信。在方式2或方式3下,数据由TXD发送RXD接收,1帧数据为11位,1位起始位(低电平),8位数据位(低位在前),1位可编程位(第9位数据,用作奇偶校验或地址/数据选择),1位停止位(高电平)。与方式1相比,多了一位可编程位,发送时,第9位数据为TB8,接收时,第9位数据送入RB8。
通过以上单片机串行口各种工作方式的比较,由于使用一个开发板和PC机进行单独的通信,因此工作方式1比较适合系统的要求。通过设置合适的波特率和帧格式,来实现开发板和PC机之间准确的数据传递。
由于PC机和单片机的处理速度的不同,PC机给开发板发送数据时,单片机采用中断的方式进行数据接收。通过软件设置单片机的传输属性参数为”9600,N,8,1″,来实现和PC机端串行口传输速率同步。开发板向PC机发送数据时,采用查询方式,这样可以节省单片机有限的资源。
开发板还要通过专门的接口和无线数据传输模块进行数据交换,由于系统设计为点对点通信,因此只使用了nRF2401一个信道。nRF2401的数据传输方式为同步传输,因此使用普通的I/O口通过软件方式模拟SPI方式传输。
nRF2401有四种工作模式:收发模式,配置模式,空闲模式和关机模式[16][17]。工作模式由PWR_UP 、CE、TX_EN和CS三个引脚决定,详见表4.1。

表4.1 nRF2401的各种工作模式的设置方式
工作模式 PWR_UP CE CS
收发模式 1 1 0
配置模式 1 0 1
空闲模式 1 0 0
关机模式 0 * *

前文已经讲过有关nRF2401的收发方式,这里重点讨论一下它的配置方式。nRF2401的所有配置工作都是通过CS、CLK1和DATA三个引脚完成,把其配置为ShockBurstTM收发模式需要15字节的配置字。
ShockBurst TM的配置字可以分为以下四个部分:
(1) 数据宽度:声明射频数据包中数据占用的位数。这使得nRF2401能够区分接收数据包中的数据和CRC校验码;
(2) 地址宽度:声明射频数据包中地址占用的位数。这使得nRF2401能够区分地址和数据;
(3) 地址:接收数据的地址,有通道1的地址和通道2的地址;
(4) CRC:使nRF2401能够生成CRC校验码和解码。
nRF2401的配置字如表4.2所示:
在配置模式下要保持PWR_UP引脚为高电平,CE引脚为低电平,配置字从最高位开始,依次写入nRF2401。在CS引脚的下降沿,新送入的配置字开始工作。
表4.2 nRF2401的配置字
位 位数 名字 功能
Shockb
Brst T
M 配置 143:120 24 TEST 保留
119:112 8 DATA2_W 接收频道2有效数据长度
111:104 8 DATA1_W 接收频道1有效数据长度
103:64 40 ADDR2 接收频道2的地址,最高为5字节
63:24 40 ADDR1 接收频道1的地址,最高为5字节
23:18 6 ADDR_W 接受频道地址位数
17 1 CRC_L 8位或16位CRC校验
16 1 CRC_EN 使能CRC校验
常用器件配置 15 1 RX2_EN 使能第二频道
14 1 CM 通信方式设置
13 1 RFDR_SB 发射数据速率
12:10 3 XO_F 晶震频率
9:8 2 RF_PWR 发射输出电源
7:1 7 RF_CH# 频道设置
0 1 RX_EN 接收或发送操作
开发板通过串行口和PC机交换数据的流程图如下:
图4.1 开发板和PC机通过串行口交换数据的流程图
开发板通过IO口和无线数据传输模块进行数据交换的流程图为图4.2。

图4.2开发板通过IO口和无线数据传输模块进行数据交换的流程图

4.1.2 移动端驱动程序
移动端的开发板的结构和PC机端的开发板的结构完全相同,但由于它不需要和PC机通信,只需要和无线数据传输模块进行通信。因此相对另一端的驱动简单一些。具体编程规则在上一节已经详细叙述,这里不再多说,具体的程序是PC机端程序的一部分。

4.2 串行口调试工具

串行口调试工具是用微软公司的visual c++6.0[20][21]开发的。几乎所有世界级的软件,从业界领先的Web浏览器到面向任务的企业应用,都是使用Microsoft Visual C++开发系统来开发的。要用C++来开发Windows和Web上的高性能应用程序,Visual C++是效率最高的首选工具。Visual C++ 6.0在不牺牲灵活性、性能和控制力度的同时,给C++带来了更高水平的生产效率。它具有可视化的界面,封装了大量的类,使界面制作变的很简单,使用它可以方便快捷地开发Windows环境下的应用程序。visual c++6.0专门为串行口通信提供了Mscomm[20][21]控件,使用该控件程序员不必花时间去了解比较复杂的API函数,通过简单修改控件的属性和使用控件提供的方法就可以实现对串口的配置,完成串口发送和接收数据。
4.2.1串行通信的基本原理
串行端口的本质功能是作为CPU和串行设备间的编码转换器。当数据从CPU经过串行端口发送出去时,字节数据转换为串行的位。在接收数据时,串行的位被转换为字节数据。 在Windows环境下,串口是系统资源的一部分。 应用程序要使用串口进行通信,必须在使用之前向操作系统提出资源申请要求(打开串口),通信完成后必须释放资源(关闭串口)。32位下串口通信程序可以用两种方法实现:利用ActiveX控件;使用API通信函数。在本次课程设计中,所用到的是MFC的MSComm控件,下面先将这个关键的控件做一下简单的介绍。
Microsoft Communications Control(以下简称MSComm)是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,为应用程序提供串行通信功能,它为应用程序提供了通过串行接口收发数据的简便方法。MSComm控件在串口编程时非常方便,其实际上是调用了API函数,但我们不必再了解复杂的API函数就可控制串行通信。通信的过程,实际上是对属性的操作和对控件事件的响应。
在Windows操作系统中,串行通信采用”事件通知”方式,支持数据按块传送。进行通信时,Windows开辟一个用户定义的输入输出缓冲区,每接收一个字符就产生一个低级硬件中断,串行驱动程序立即取得控制权,并将字符放入输入数据缓冲区,然后将控制权返还正在运行的应用程序。如果输入数据缓冲区满了,驱动程序用当前定义的流控制机制通知发送方停止发送数据。发送数据也采用类似的处理方式,应用程序将需要发送的数据放入输出数据缓冲区,串口每发送一个字符就产生一个低级硬件中断。
Visual C++ 6.0通信控件Mscomm提供了功能完善的串口数据的发送和接收功能,Mscomm 控件具有两种处理方式:一是事件驱动(Event-driven)方法,一是查询法。
1)事件驱动方式。当通信事件发生时,MSCOMM控件会触发OnComm事件,调用者可以捕获该事件,通过检查其CommEvent属性便可确认发生的是哪种事件或错误,从而进行相应的处理。这种方法的优点是响应及时、可靠性高。
2)查询方式。在程序的每个关键功能之后,可以通过检查CommEvent属性的值来查询事件和错误。如果应用程序较小,这种方法可能更可取。例如,如果写一个简单的电话拨号程序,则没有必要每接收1个字符都产生事件,因为惟一等待接收的字符是调制解调器的”确定”响应。
在使用MSCOMM控件时,1个MSCOMM控件只能同时对应1个串口。如果应用程序需要访问和控件多个串口,那么必须使用多个MSCOMM控件。
在VC++中,MSCOMM控件只对应着1个C++类–CMSComm。由于MSCOMM控件本身没有提供方法,所以CMSComm类除了Create()成员函数外,其他的函数都是Get/Set函数对,用来获取或设置控件的属性。MSCOMM控件也只有1个OnComm事件,用来向调用者通知有通信事件发生。
MSCOMM控件有许多很重要的属性,限于篇幅只给出几个较为重要和常用的属性。

表4.3 MSCOMM控件的重要属性
属 性 说 明
CommPort 通信端口号
Settings 以字符串形式表示的波特率、奇偶校验、数据位
PortOpen 通信端口的状态,打开或是关闭
Input 接收数据
Output 发送数据
InputMode 接收数据的类型:0为文本;1为二进制

表4.4 程序中用到的所有控件,以及它们的ID
控件 ID 标题
按钮 ID_SEND 发送
按钮 ID_CLEAR 清空
编辑框 IDC_EDIT_SEND
编辑框 IDC_EDIT_RCV
静态文本 IDC_STATIC 接收缓冲区
静态文本 IDC_STATIC 发送缓冲区
组框 IDC_STATIC 端口选择
单选按钮 IDC_1 端口1
单选按钮 IDC_2 端口2
mscomm IDC_MSCOMM

表4.5 用到的变量和变量的类型
Control IDS Type Member
IDC_EDIT_SEND CString m_str_send
IDC_EDIT_RCV CString m_str_recv
IDC_MSCOMM CMSComm m_mscomm

Object IDS Messages Function
ID_SEND BN_CLICKED OnSend
ID_CLEAR BN_CLICKED OnClr
IDC_1 BN_CLICKED On_Com1
IDC_2 BN_CLICKED On_Com2
IDC_MSComm OnComm OnComm

4.2.2程序设计原理
第一步:初始化串行口。调用SetCommPort()函数,选择使用的端口好,然后设置波特率发送接收的处理方式,以及数据的传输方式,最后将串口打开。
第二步:发送数据。将要发送的字符串变成特定的类型后,调用函数SetOutput(),将数据发送到发送缓冲区
第三步:接受数据。将接收缓冲区中的数据通过GetInput()函数读出,并将它转换为Cstring类型,显示在界面上。
程序的各个主要部分和一些流程图:
(1)登陆界面后,程序首先将接收缓冲区和发送缓冲区清空
程序如下:
m_str_send=” “;
m_str_recv=” “;
UpdateData(FALSE);
(2)然后进行串行口的初始化,也即是设置MSComm控件的各种属性。首先要进行端口的选择,由于所用到的计算机只有两个串行口,因此本程序只给了两个选择,具体的程序代码如下:
void CMyDlg::On_Com1()
{
if(m_mscomm.GetPortOpen())
m_mscomm.SetPortOpen(FALSE);
m_mscomm.SetCommPort(1);
m_mscomm.SetSettings(”9600,n,8,1″);
m_mscomm.SetRThreshold(1);
m_mscomm.SetSThreshold(0);
m_mscomm.SetInputLen(0);
m_mscomm.SetInputMode(1);
m_mscomm.SetPortOpen(TRUE);
}
void CMyDlg::On_Com2()
{
if(m_mscomm.GetPortOpen())
m_mscomm.SetPortOpen(FALSE);
m_mscomm.SetCommPort(2);
m_mscomm.SetSettings(”9600,n,8,1″);
m_mscomm.SetRThreshold(1);
m_mscomm.SetSThreshold(0);
m_mscomm.SetInputLen(0);
m_mscomm.SetInputMode(1);
m_mscomm.SetPortOpen(TRUE);
}
1)CommPort:分别选1和2。
2) Setting设置或返回串行端口的波特率:9600、无奇偶校验位、数据位数为8、1位停止位。
3) InBufferSize:设置接收缓冲区为1024字节。
4) RThreshold:设置当接收缓冲区内字节个数为1时,触发MSCOMM的OnComm事件,然后由计算机将接收缓冲的数据读出,并将接收缓冲区清空。
5) InputLen:值为0,设置INPUT读取整个缓冲区的内容。
6) OutBufferSize:设置发送缓冲区为512字节。
(3)发送数据的源程序代码
void CMyDlg::OnSend()
{
if(!m_mscomm.GetPortOpen())
m_mscomm.SetPortOpen(TRUE);
UpdateData(TRUE);
m_mscomm.SetOutput(COleVariant(m_str_send)); //发送数据
}
将文本框内的字符串送到变量m_str_send中,然后将字符转化为ColeVariant类型的数据,再通过SetOutput函数将数据发送到发送缓冲区中。
(4)接收数据的源程序代码
void CMyDlg::OnComm()
{
VARIANT variant_tmp;
COleSafeArray safearray_tmp;
LONG len,i;
BYTE buf[2048];
CString str_tmp;
if(m_mscomm.GetCommEvent()==2)
{
variant_tmp=m_mscomm.GetInput();
safearray_tmp=variant_tmp;
len=safearray_tmp.GetOneDimSize();
for(i=0;isafearray_tmp.GetElement(&i,buf+i);
for(i=0;i{
BYTE ch=*(char*)(buf+i);
str_tmp.Format(”%c”,ch);
m_str_recv+=str_tmp;
}
}
UpdateData(FALSE);
}
当m_mscomm.GetCommEvent()==2时候,数据到来,触发OnComm事件,调用该函数。首先通过m_mscomm.GetInput()将接收缓冲区内的数据读到变量variant_tmp中,再将variant_tmp赋予safearray_tmp来实现数据类型转化为ColeSafeArray。通过safearray_tmp.GetOneDimSize()求出接收到的字符的总长度,再将每个ColeSafeArray变量转化为Byte类型的变量,最后转化为字符类型,并将它显示在文本框内。
void CMyDlg::OnComm() 的流程图:

图4.3 void CMyDlg::OnComm() 的流程图

(5)清空功能函数源代码
void CMyDlg::OnClr()
{
m_str_send=” “;
m_str_recv=” “;
UpdateData(FALSE);
}
总的程序流程图如图4.4所示
图4.5是PC机通过端口1向单片机发送数据时候的图型界面。进入界面后,首先要进行根据连接的串行口选择要初始化的端口,然后使用键盘在发送缓冲区内输入一系列的字符。等单片机开发板上电后,单击发送按键将数据发送出去。
图4.6是PC机通过串口接收单片机发送过来的数据时候的图形界面。在缓冲区接收的数据为二进制形式,程序内已经将这些二进制转化为字符串在界面上显示。
图4.7是串行口调试工具初始运行时候的图形界面。
事件驱动方式时,由计算机直接管理,字节之间不可控,而且单片机串行口和PC机串行口速率差别较大,接收程序一定要精心合理的设计,才能使传输稳定可靠,否则很容易出现意想不到的问题。在调试过程中,如果不小心将串行口调试工具的波特率和开发板串行口的波特率设置为不同,就会出现错误。程序中已经将串行口的波特率设置为9600bps,这样可以避免错误。
图4.5通过端口1进行发送时候的图型界面

图4.6 通过串口接收时候的图形界面
图4.7 串行口调试工具的运行界面
第五章 总结与展望
5.1 全文总结

通过这次毕业设计,我学到了不少课本上没有的知识,也锻炼了自己的动手能力,将以前学过的零散的知识串到一起。
首先在毕业设计刚开始的调研阶段,我学会了怎么通过各种方式查询相关的资料。通过对这些资料的学习,我大致了解了无线通信的发展现状以及未来的发展趋势,认识到目前无线通信方面的各种各样的协议,以及它们之间的竞争。了解了无线通信方面的先进技术,这些都为我未来的学习指明了方向。
我毕业设计主要涉及硬件和软件两个方面的内容,通过这些我的硬件和软件开发能力都获得了提高。首先在硬件方面,基本了解了电子产品的开发流程和所要做的工作。基本掌握了Protel 99 SE设计原理图和简单的PCB图的方法,并设计了一个单片机最小系统。通过开发板的设计和硬件搭建的过程,使我对51系列单片机的接口有了更深层次的理解,熟悉了一些单片机常用的外围电路的引脚和连接方法,如LED数码管,键盘等。
在软件方面,通过串行口调试工具的开发,我基本掌握了Visual C++ 6.0的使用方法,加深了对类封装的理解。通过开发板驱动程序的开发,使我熟练掌握了Keil uVision2,熟悉了51系列单片机内部的寄存器和编程规则,以及如何控制外围电路。
当然,由于单片机功能的局限性,当面对很复杂的系统时像无线点菜系统,单片机就不太合适。这是因为单片机的引脚过少,能够使用操作系统过于简单,不能进行复杂的工作调度,也不能驱动复杂的外围电路,因此使用单片机完全实现点菜系统的要求比较困难。
近几年来,处理器已经发展到32位机,尤其是以ARM(Advanced RISC Machines)为内核的32位处理器受到越来越多嵌入式开发人员的青睐。ARM处理器支持复杂的嵌入式操作系统,例如Win CE,UClinux等。可以进行复杂的功能调度,而且能够驱动比较复杂的外围电路例如触摸屏等。这样使用ARM处理器和嵌入式操作系统,配合嵌入式移动数据库技术,更能完成点菜系统的要求。所以,毕业设计也给我将来的学习指明了一个方向。
单就本论文而言,主要完成了以下工作:
1.在ZigBee协议的基础上,以51系列单片机为处理器,配合一定的外围电路构建了硬件开发平台。
2.用C51语言为硬件部分编写驱动程序,并用Visual C++6.0开发了串口调试工具。

5.2 研究展望

目前,无线通信的各种技术呈现百花齐放的局面。但是随着经济的发展,人民需求的提高,无线通信技术依然有很大的发展空间。在以下方面仍然有很长的路要走。
1随着IP(Internet Protocol,网际协议)技术的发展,无线通信网和IP网有融合的趋势。尤其是多媒体信息需求的增加,多媒体信息对实时性要求不高的特点,使得利用无线通信网传输多媒体信息成为一大热门。
2随着人民生活水平的提高,生活方式的转变,无线通信技术必然向移动化和便携化方向发展。
3由于无线频谱资源有限和无线通信传输信道的特殊性,使得如何提高频谱资源的利用率以及提高抗干扰能力成为未来很热门的研究方向。
4 现代微电子技术发展迅猛,摩尔定理仍然有效,集成电路技术已经发展到SOC,32位的ARM处理器已经得到了广泛的应用。因此在未来越来越复杂的嵌入式系统开发中,32位处理器和嵌入式操作系统将得到更广泛的应用。

 

 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
Semtech的LoRa技术携手Chipsafer将牧场连接至云端