基于TI Z-STACK的智能小车调度系统设计
扫描二维码
随时随地手机看文章
摘要:针对高职院校物联网应用技术专业实训问题,基于MCS-51及CC2430单片机、红外及超声波传感器,设计了一套基于TI Z-STACK协议栈的智能小车调度系统。分析了无线网的组建流程及软件实现方法。
关键词:Z-STACK协议栈;智能小车;物联网实训;CC2430
无线传感器网络是高职高专物联网应用技术专业课程体系中的核心课程之一。目前,各院校的无线传感器网络课程实验实训平台多以51内核的CC2430为主,如何快速从51单片机转型到掌握CC2430是专业实训平台需解决的核心问题。为此,设计了本套基于单片机及TI Z-STACK协议栈的智能小车调度系统。
1 系统组成及功能
本系统由模拟通信指挥车(Coordinator)、探路车(Sensor Endpoint)、架桥车和运输车(Endpoint)及沙盘等构成,在图1所示的模拟调度环境运行。由探路车先行获取路面信息,发送给通信指挥车,由通信指挥车调度其他车辆行驶。探路车若进入架桥区,则向通信指挥车报告路面遇阻信息,然后由通信指挥车下发指令,让运输车停车,让架桥车赶赴架桥区架桥。待桥面架好后,探路车再次向通信指挥车报告路面恢复信息,由后者下发指令,调度探路车、运输车继续行驶,最终到达指定泊车区。
2 硬件电路设计
通信指挥车、架桥车、运输车的硬件电路包括51单片机控制模块、红外传感器模块、L298N电机驱动模块及CC2430通信模块,探路车还包括超声波传感器模块,如图2所示。其中,红外传感器模块主要用于巡线;超声波传感器用于探测架桥区的断裂路面;L298N电机驱动模块用于驱动小车电机;51单片机控制模块用于小车巡线控制,并与CC2430通信模块通过串口方式进行通信。CC2430通信模块是调度系统的核心,用于完成无线通信网络组建和数据传输功能。由于CC2430和51单片机控制模块分别工作于3.3 V和5 V逻辑电平,故在进行串口通信时需进行电平转换。本系统采用在51单片机的TX和CC2430的RX引脚间接100 Ω电阻的方案保证了二者通信正常运行。
3 软件设计
3.1 基于Z-STACK协议栈的无线网络组建
3.1.1 Z-STACK无线网络组建的基本流程
Z-STACK是TI公司推出的符合ZigBee2006规范,定义了完全构建在应用层上的操作系统抽象层(Operation System Abstraction Layer,OSAL层)来隔离Z-STACK协议栈和特定硬件系统,采用轮询及优先级控制方式实现任务调度。在进入应用层小车调度任务(Car_Dispatch)处理之前,需首先进行无线网络的组建。本系统采用星形网络拓扑结构,由通信指挥车(协凋器)负责网络的发起。在Z-STACK(基于ZigBee2006)中,无线网络组建的基本流程为:
main()→osal_init_system()→osalInitTasks()→ZDApp_Init(taskID++)→ZDOInitDevice(0)→ZDApp_NetworkInit(extendedDelay)→osal_set_event(ZDAppTaskID,ZDO_NETWORK_INIT)
通过tasksEvents[ZDAppTaskID] |=ZDO_NETWORK_INIT向ZDAppTaskID任务中添加ZDO_NETWORK_INIT事件(消息),进行网络初始化,接下来在ZDApp_event_loop中处理ZDO_NETWORK_INIT事件,其过程为:
ZDApp_event_loop→ZDO_StartDevice
在该函数中,协调器将通过NLME_NetworkFor-mationReques发起网络,执行回调函数ZDO_NetworkFormationConfirmCB(),向ZDAppTask ID任务发ZDO_NETWORK_START消息,然后在ZDApp_event_loop中通过osal_set_event(ZDAppTaskID,ZDO_STATE_CHANGE_EVT)向应用层发ZDO_ STATE_CHANGE_EVT消息,应用层的小车调度任务处理函数根据ZDO_STATE_CHANGE_EVT判断无线网的状态,并确定探路车、运输车的注册情况;而路由器和终端节点将通过NLME_NetworkDiscoveryRequest发现网络,并执行回调函数ZDO_NetworkDiscoveryConfirmCB(),加入协调器组建的无线网络。
3.1.2 网络拓扑与数据帧格式
本系统采用星型网络拓扑结构,通信指挥车负责系统的调度。无线网络上下行链路以及各小车的车载CC2430模块与51单片机模块通信的数据帧格式如图3所示。
以探路车为例,它与通信指挥车通信的信息流向如图4所示。图中①为Endpoint向Sink注册;②为51单片机利用传感器采集路面信息,通过串口发送到Endpoint;③为Endpoint通过RF方式将数据传输到Sink;④为Sink从收到的数据中提取信息,分析出路面状态,然后向Endpoi nt下发控制指令;⑤为Endpoint从收到的数据控制指令后进行处理,然后通过串口向51单片机下发控制指令;⑥为循环执行①~⑤。
3.2 CC2430程序买现
从图4可知,CC2430通信模块的主要功能是完成无线数据传输和处理串口事件。在处理串口事件上,需首先注册串口,然后编写串口处理函数。串口波特率设置为57 600波特,以满足使用11.059 2 MHz晶振的单片机模块与CC2430通信模块通信。串口注册由函数SPIMgr_Regis terTaskID(Car_Dispatch_TaskID)实现。串口接收处理函数在协议栈MT层SPIMgr.c中,由uartConfig.callBackFunc=SPIMgr_ProcessZTool Data指明串口接收回调函数。为能接收自定义格式的串口数据,需修改协议栈自带的SPIMgr_ProcessZToolData函数,包括在SPIMgr.h中定义图3中SOP(#define SOP1_VALUE 0x2A),FCS(#defineEND 0x23),在SPIMgr.c中重构数据格式,向APP层Car_Dispatch应用程序发送CMD_ SERIAL_MSG消息等。根据图3可知,Endpoint上行传输需在第6个字节发送数据长度LEN-Token,因此在串口数据重构中需添加SPI_Msg->msg[5]=LEN_Token,然后在Car_Dispatch应用程序中的SYS_EVENT_MSG消息处理函数下面,加入处理串口消息代码:
通信指挥车(Sink)在收到Endpoint发来的无线网信息后触发AF_INCOMING_MSG_CMD事件,然后执行Car_Dispatch_MessageMSGCB(MSGpkt)回调函数,首先判断信息类型(探路车、架桥车还足运输车发送的),然后进行分析和下发指令(例如若是探路车发来路面遇阻信息,则按图3向架桥车发送指令0x2A0x00 0x00 0x6F 0x79 0x02 0x01 0xFF 0x23,启动架桥)。
3.3 51单片机程序实现
51单片机模块主要用于小车巡线控制及串口通信。以架桥车为例,工作流程如图5所示。串口设置为接收中断模式,全局变量USART_Re ce_CMD用于控制小车的运行状态,当通信指挥车下发指令后,车载CC2430模块接收数据并进行解析,通过串口向51单片机发送指令,51单片机在串口接收中断函数中修改USART_Rece_CMD的值,进而改变小车的运行状态。
4 结语
本系统以51单片机为小车控制平台,以CC2430为通信平台,通过Z-STACK实现无线网络组建,并以串口通信为纽带,实现51单片机和CC2430的通信,由此实现了简易的小车调度。本系统还可进行进一步扩展,例如开发上位机应用程序对协调器进行控制,可实现人机交互。本系统综合运用了单片机、无线传感器网络及传感器的知识,可应用于物联网应用技术的专业实训。