找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7637|回复: 3
打印 上一主题 下一主题
收起左侧

zigbee智能路灯控制系统设计论文(微波多普勒+FreeRTOS+cc2530板子实现)

[复制链接]
跳转到指定楼层
楼主
ID:326342 发表于 2018-5-9 21:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  系统关键技术分析
在路灯控制系统所使用的关键技术,主要包括ZigBee技术、嵌入式操作系统FreeRTOS和微波多普勒原理。

1.1  ZigBee技术
Zigbee是基于IEEE802.15.4标准的低功耗个域网协议。IEEE802.15.4 是针对低速的无线个人区域网络(low-rate wireless personal area network, LR-WPAN)而制定的标准[4]。该标准把能量消耗低、传输速率低、成本低作为目标,旨在为个人或者家庭范围内的设备的低速互连提供统一标准。
IEEE 802.15.4标准定义的LR-WPAN网络具有如下特点:
  • 提供20kbps40kbps250kbps三种不同的传输速率;
  • 两种网络拓扑结构:星型、点对点;
  • 两种地址格式:16位、64位,64位地址是全球惟一的扩展地址;
  • 采用载波多路侦听技术(carrier sense multiple access with collision avoidance, CSMA-CA)避免冲突;
  • 采用确认(ACK)机制以保证可靠传输。
而ZigBee协议规定的技术是一种短距离、低功耗的无线通信技术。其特点是距离短、复杂度低、自动组织、功耗低、数据速率低、成本低[6]。适合用于自动控制和远程控制领域,可以嵌入各种设备。
ZigBee协议栈是在IEEE 802.15.4标准基础上建立的,定义了协议的MAC和PHY层。ZigBee设备应该包括IEEE802.15.4(定义了RF射频以及与相邻设备之间通信)的PHY和MAC层,以及ZigBee堆栈层:网络层(NWK)、应用层和安全服务提供层。

图2.1 ZigBee协议栈结构[4]

1.1.1  物理层规范[4]
ZigBee的物理层是基于IEEE 802.15.4标准的。IEEE802.15.4标准定义了两个物理层:2.4GHz和868/915MHz的物理层。物理层主要任务如下:
  • 开启和关闭无线收发信机;
  • 能量检测(ED)
  • 链路质量指示(LQI)
  • 空闲信道评估(CCA)
  • 信道选择;
  • 数据发送和接收。
物理层提供了两种服务:通过物理层数据服务接入点(PHY Data Server Acess Point,PD-SAP)提供物理层的数据服务;通过PLME的服务接入点(PLME Service Acess Point,PLME-SAP)提供物理层的管理服务[1]。如下图:

图2.2 物理层参考模型

IEEE802.15.4 物理层协议数据单元(PPDU)格式如下:

表2.1物理层协议数据单元[1]

4字节

1字节

1字节

变长

前导码

  SFD

帧长度(7位)

保留位(1位)

PSDU

       同步头

         物理帧头

PHY负载

引导序列由32位全0字段组成,用于收发器进行码片或者符号的同步。SFD域由8位组成,表示引导序列结束,数据包开始传输,是8位二进制序列11100101。SFD与前导码构成同步头(SHR)。帧长度由7位组成,表示物理层的有效载荷PSDU的字节数,范围是0到aMaxPHYPacketSize。帧长度域和1位的保留位构成了物理头。PSDU域是变长的,是物理层要发送的数据包,是物理层的载荷。
1.1.2  MAC层规范
ZigBee的MAC层同样是基于IEEE 802.15.4标准的。MAC层为特定服务汇聚子层(SSCS)和PHY提供了接口[1]。IEEE802.15.4的MAC层使用PD-SAP和PLME-SAP接口。MAC层通过MAC公共部分子层(MCPS)的数据SAP(MCPS-SAP)提供MAC层数据服务;通过MLME-SAP提供管理服务[7]。MAC层内部MLME和MCPS之间存在一个隐藏接口,MLME可以通过它调用MAC数据服务。MLME还负责维护属于MAC层的管理对象数据库,该数据库被称为“MAC层的个域网信息库”(PAN Information Base,PIB)。如下图所示:

图2.3 MAC层组件接口模型

MAC层的数据服务通过两类服务原语MCPS-DATA和MCPS-PURGE实现的。而其管理功能通过使用15条服务原语来实现。
MAC层主要有四种类型的帧:信标帧、数据帧、确认帧以及MAC命令帧。帧的基本组成部分有:MAC头、MAC有效载荷、MAC尾。MAC头由帧的控制字段、序号字段和地址信息域组成;MAC有效载荷部分的长度与帧类型相关,确认帧的有效载荷长度为0;MAC尾是帧校验序列(FCS)。

表2.2通用MAC帧结构[1]

16位,字节:2

  1

   0/2

0/2/8

0/2

0/2/8

变长

2

帧控制

序列号

目标PAN标识

目标地址

源PAN标识

源地址

帧负载

FCS

            地址域

                           MHR

MAC负载

MFR

1.1.3  网络层规范[4]
网络层提供保证MAC层正确工作的能力并为应用层提供合适的服务接口。主要功能有:
  • 网络和设备维护;
  • 发送和接收;
  • 路由功能;
  • 信标发送时序;
  • 广播通信;
  • MAC信标中的网络层信息;
网络层提供两个服务实体:数据实体和管理实体。数据实体提供的服务允许同一网络中两个或多个节点之间传输数据;管理实体允许应用与协议栈之间交互,包括配置新节点、创建网络、节点请求加入/离开网络、寻址、近邻发现、路由发现、接收控制等服务。

图2.4 网络层参考模型

1.1.4  应用层规范[4]
ZigBee应用层包括应用支持子层(APS)ZigBee设备对象(ZDO)和厂商定义的应用对象。
应用支持子层(APS)提供了网络层(NWK)和应用层 (APL)之间的接口,功能是通过ZDO和厂商定义的应用对象都可以使用的一组服务来实现。数据和管理实体分别由APSDE-SAP和APSME-SAP 提供。APSDE提供的数据传输服务在同一网络的两个或多个设备之间传输应用层PDU;APSME提供设备发现和绑定服务,并维护管理对象数据库——APS信息库(AIB)。
ZDO描述了一个基本的功能函数,这个功能在应用对象、设备配置文件和APS之间的提供了一个接口。它满足所有在ZigBee协议栈中应用操作的一般需要。ZDO还有以下功能:
  • 初始化APS、网络层和安全服务规范;
  • 集合节点配置信息来确定和执行发现、安全管理、网络管理和绑定管理;
1.2  嵌入式实时操作系统FreeRTOS
在嵌入式领域中,嵌入式实时操作系统正得到越来越广泛的应用。采用嵌入式实时操作系统(RTOS)可以更合理、更有效地利用CPU的资源,简化应用软件的设计,缩短系统开发时间,更好地保证系统的实时性和可靠性。FreeRTOS操作系统是一个完全免费的嵌入式操作系统,具有公开源码、可移植、可裁减、多种调度策略等特点。包括的功能有:任务管理、信号量、消息队列、时间管理、内存管理、记录功能等。
FreeRTOS内核支持优先级调度算法,即根据重要程度,给每个任务赋予一个优先级,而处于就绪态的、优先级最高的任务总是先得到运行。同时,FreeRT0S允许在同一优先级中存在多个不同的系统任务。在优先级相同的情况下,同一优先级的任务采用轮换调度的方法共享CPU的使用时间。
用户可根据需要设置FreeRTOS的内核为可剥夺型的内核或不可剥夺型的内核。为满足系统实时性的要求,可设置FreeRTOS为可剥夺型的内核,这样当高优先级任务就绪时系统就会强制低优先级任务让出对CPU的使用权,而使就绪的高优先级任务运行;设置FreeRTOS为不可剥夺型的内核时,系统不能剥夺当前任务对CPU的使用权,就绪的高优先级任务只有任务主动让出CPU之后才能运行,这样提高了CPU的运行效率。
1.2.1  任务调度
在嵌入式实时操作系统中,任务调度机制是一个重要的概念,也是核心的技术。在可剥夺型的内核中,高优先级任务一旦就绪就会在下一个时钟节拍时迫使低优先级较任务让出CPU的使用权,运行高优先级任务。FreeRTOS的系统任务的数量是无限制,同时支持优先级调度算法和轮换调度算法,它采用双向的链表结构而不是采用轮询任务就绪表的方法来进行任务调度。FreeRTOS任务链表结构如下:

图2.5 任务调度

1.2.2  任务管理[3]
多任务管理是操作系统的主要功能。FreeRTOS中的任务管理功能有创建任务、删除任务、挂起任务、恢复任务、设定任务优先级、获得任务相关信息等。FreeRTOS系统任务的创建使用xTaskCreate()函数。调用xTaskCreate()时,FreeRTOS会分配内存给任务。内存成功分配之后,系统会初始化任务控制块中的任务名称、堆栈深度和任务优先级,然后根据CPU堆栈的增长方向初始化任务控制块的堆栈。接着,FreeRTOS把当前创建的任务加入到就绪任务链表,等待系统调度。
FreeRTOS系统任务的删除分两步完成。调用vTaskDelete()函数后,开始任务删除的第一步:先从就绪任务链表和事件等待链表中删除任务信息,然后把任务移动到任务删除链表,当正在执行删除的任务时,系统会进行一次任务调度,以切换任务。在系统空闲任务运行时,如果任务删除链表中有需要删除的任务存在,则开始删除任务的第二步:释放任务所使用的内存,并从任务删除链表中移除任务,这样任务就被彻底删除了。
1.2.3  时间管理
FreeRTOS中典型的时间管理函数是vTaskDelay()。此函数可以将任务延时一段特定的时间。系统存在一个时钟记录系统已运行时间。延时任务时,将延时时间与系统时钟相加并存入任务信息中,然后根据延时将任务加入等待列表中。每过一个系统时钟,系统查找等待列表,比较任务信息中的时钟和系统时钟,若相等则将任务移出等待列表,加入任务就绪列表,等待调度运行。
1.2.4  内存分配策略
当任务、队列和信号量创建的时候,会向系统申请一定的内存。FreeRTOS提供了两种内存分配的策略,用户可以根据实际需要选择不同的内存分配策略。
第1种方法是,系统将内存简单的按照任务所申请的大小分成若干块,这样就可以满足任务的需求。这种做法简单方便,执行时间可以确定,但是这样做会使内存释放后再分配很困难,内存不能得到有效的释放,不能实现任务或队列的删除。
第2种方法是,使用链表来分配内存。系统为空闲的内存块建立链表,并根据块的大小进行排序。当任务申请内存时,系统查找链表,选出最小的能满足任务需求的内存块。若内存块较大,则将内存块一分为二,一个分配给任务,另一个作为新的内存块插入到链表中。
1.3  微波多普勒原理
微波是指频率在300MHz~300GHz 范围内,是无线电波中一个有限频带的简称,即波长在100cm~1mm范围内的电磁波,是分米波、厘米波、毫米波和亚毫米波的统称。其中包括甚高频(VHF)、特高频 (UHF)、超高频(SHF)、极高频(EHF)4个波段。微波具有直线(视距)传播,抗干扰性强,频带宽等特点,广泛用于各种无线通讯和目标探测的场合。微波波段中,波长在1~25cm的波段专门用于雷达(RADAR,Radio Detection And Ranging),其余部分用于电讯传输。
多普勒雷达是利用多普勒效应进行定位、测速、测距等工作的雷达。多普勒效应是当声音、光和无线电波等振动源与观测者以相对速度V相对运动时,观测者所收到的振动频率与振动源所发出的频率有所不同[13]。多普勒效应的示意图如下:

图2.6多普勒效应

多普勒雷达测速的原理,是检测发射出去的无线电波与遇到运动物体反射回来的无线电波之间的频率变化和相位变化,根据频率的变化计算出物体的速度,由发射波和回波信号的相位关系,判断运动物体是朝着无线电波的发射方向还是其反方向移动的。设声波或电磁波的波长为λ,频率为f0,速度为c,运动物体的径向速度为v,回波多普勒频移为fd,则:
1.4  本章小结
本章介绍了项目中所使用到的关键技术,讲述了IEEE 802.15.4标准、ZigBee技术、嵌入式操作系统FreeRTOS的移植和微波多普勒原理。在项目中将使用无线通信技术实现各个路灯节点的通信,而在主控节点将使用FreeRTOS嵌入式操作系统对各节点的信息进行处理,并对各节点进行控制,各节点对车辆人流的检测将使用微波多普勒原理来实现。



1


第三章 Zigbee智能路灯控制系统方案设计
  Zigbee智能路灯控制系统方案设计
本章主要根据路灯系统的功能需求,对系统进行的整体设计,介绍了整体设计方案以及所使用的关键器件的型号。
2.1  系统整体方案设计
本节将介绍系统整体设计方案。系统包括一个主控节点和多个路灯节点,其中主控节点用于接收和处理路灯节点发送过来的信息以及向路灯节点发送控制信息,系统框图如下:

图3.1 系统结构框图

2.1.1  主控节点功能
主控节点的功能主要是对路灯节点的监控以及和上位机的通信。因此需要无线通信模块和路灯节点进行通信,需要单片机来处理路灯节点发送过来的信息,同时单片机还需要具备和上位机通信的能力。主控节点系统框图如下:

图3.2 主控节点模块图

2.1.2  路灯节点功能
路灯节点具有检测当前交通状况及光线强度的功能,同时还控制路灯的点亮和熄灭,还可以将当前检测到的信息显示出来。因此,路灯节点需要车辆人流的检测模块以及光感应模块,一个主控芯片对采集的数据进行处理以及控制路灯的亮灭和信息的显示,同时,主控芯片还具备无线通信的能力。路灯节点设计如下图所示:

图3.3 路灯节点模块图

2.2  系统关键器件选型
本节介绍系统所示用的关键器件的型号,其中主控节点所使用的器件有英飞凌单片机XC167CI和无线收发器CC2420,路灯节点使用的器件主要是无线SOC芯片CC2430和微波模块HB100。
2.2.1  英飞凌单片机XC167CI
XC167CI英飞凌公司开发的基于C166SV2内核的16位单片机,也是目前广泛使用的C166微控制器系列的全新衍生产品。它是英飞凌16位单片机CMOS微控制器系列的增强型产品,具有如下特性[15]:
  • 5级流水线高性能16CPUMAC单元;
  • 高效的控制指令集;
  • 智能的片上外设子系统;
  • 16级优先级中断系统;
  • 片上调试支持;
  • 多达103个具有独立位寻址功能的I/O引脚;
XC167功能框图如下:

图3.4 XC167功能框图[15]

本系统主要使用XC167的通用I/O功能用于模拟SPI总线与CC2420通信以及串口功能用于和PC通信。
2.2.2  无线收发器CC2420[4]
CC2420是Chipcon As公司推出的首款符合2.4GHz IEEE802.15.4标准的射频收发器。该器件包括众多额外功能,是第一款适用于ZigBee产品的RF器件。使用此芯片组成的网线通信网络,数据传输率高达250kbps,可以实现多对多的通信。芯片开发的短距离射频传输系统成本低、功耗小,适于电池长期供电。具有硬件加密、安全可靠、组网灵活、抗毁性强等特点。
CC2420使用SPI总线与微控制器通信。微控制器向CC2420发送命令,然后可以向CC2420写入数据或从其中读出数据,实现无线收发信息的功能。

图3.5 CC2420简化功能图[8]

2.2.3  无线SOC芯片CC2430
CC2430由德洲仪器(Texax Instruments,TI)旗下的Chipcon公司设计生产,它是一款真正为IEEE 802.15.4和ZigBee而设计的SOC系统芯片。CC2430集成了高性能的无线收发器CC2420和增强型的工业级8051微处理器内核,提供32/64/128KB的Flash程序存储器,8K的SRAM以及其它功能强大的特性。其主要特性有[4]:
  • 高性能低功耗的增强型8051内核;
  • 适应2.4GHz符合IEEE 802.15.4标准的无线收发器;
  • 电流消耗小(微处理器运行于32MHz时钟,RX27mATX:25mA);
  • 掉电模式下仅0.9uA的电流消耗,可由外部中断或实时时钟(RTC)唤醒;
  • 挂起模式下耗电低于0.6uA,可由外部中断唤醒;
  • 8814AD转换器;
  • AES加密协处理器;
  • 1个符合IEEE 802.15.4 MAC定时器;
  • 支持硬件调试;
CC2430结构框图如下:

图3.6 CC2430结构框图[9]

本项目中主要用到的模块有I/O模块,中断模块,ADC模块,RF模块。各模块介绍如下:
I/O:CC2430有21个数字输入/输出引脚,可以配置为通用的数字I/O或者是复用为外围设备管脚与ADC、定时器或USART等相连。这些I/O口的使用可以通过一组配置寄存器完全由用户软件来设置。
中断:CC2430的CPU有18个中断源,每个中断源有它自己的、位于一系列SFR中的中断请求。
ADC:CC2430支持14位的ADC,包括1个参考电压发生器、8个独立可配置通道、电压发生器和通过DMA模式把转换结果写入内存的控制器。
RF:CC2430无线通信的核心部分是CC2420射频收发器。
2.2.4  微波模块HB100[13]
HB100多普勒微波传感器是Agilis通信技术公司开发成功的多谱勒移动传感模块,内部由GAS FET介质谐振振动器(DRO)微波振荡源(10.525GHz)、功率分配器、发射天线、接收天线、混频器、检波器等电路组成。
在HB100的输出端(IF)会有三种类型的信号输出:
  • 多普勒频移
当有物体在微波检测信号的覆盖范围内移动时,在IF端有多普勒信号输出,该信号为低频信号,强度很弱,一般在毫伏级。由多普勒频移公式 Fd = 2v/λ= 2vf/c 可知,当f=10.525GHz时,回波信号的多普勒频率为 Fd=19.49v,其中v的单位为km/h。实际测试,HB100的输出频率为70Hz/m.s。低频信号经过低通放大器选频放大,即可得到目标物体移动信号。
  • 噪声信号
传感器模块的内部电路以及周围环境会产生一些噪声。可能的噪声来源有电源及热电噪声、振荡器谐波混频干扰、微带雷达的固有干扰等。
  • 直流信号
IF输出端会产生电压为0.1V左右的直流信号,该信号的极性可以是正的也可以是负的。因此在IF信号输出和低频放大器之间采用交流耦合的方式进行连接,以滤除直流的干扰信号。
IF信号的输出幅度与运动物体的大小、距离有关,输出幅度与距离的平方近似成反比例关系。物体相对于传感器模块的径向运动速度越快,IF的输出信号频率越高,而且基本满足多普勒频移公式。
利用多普勒原理,通过对回波信号进行混频,检波等信号处理得到多普勒频移。由多普勒传感器输出的IF信号,其中的多普勒频移信号需要做进一步的处理,才能够实现对目标速度的估计。现在已有的多普勒信号的处理技术主要有频率跟踪法、计数法、快速傅里叶变换法、滤波器组法、频谱分析法等方法[7]。本项目主要是检测公路上车辆的有无和速度的范围,对速度测量的精度以及噪声的要求相对较低,要测量的频率也比较低;而且装置要求简单、低成本,因此系统选用比较经济实用的计数法进行运动目标速度的测量。
IF输出的脉动信号是电压值非常低且连续变化的模拟信号,该信号需要经过放大才能做进一步的处理。而且在放大的同时,必须对信号进行滤波,去掉高频和甚低频的干扰信号。经过放大和滤波后的经过放大处理后的信号与比较器的门限电平相比较,将幅值连续的模拟信号转化成“0” 、“1” 信号,然后才能送到单片机进行计数处理。
2.3  本章小结
本章中主要介绍了项目的整体设计方案,包括对主控节点和路灯节点的设计,给出了系统、主控节点以及路灯节点框架图,同时还介绍了系统所使用的主要器件,包括主控节点的XC167CI和CC2420以及路灯节点的CC2430和HB100模块,说明了各个器件的主要功能。

第三章 Zigbee智能路灯控制系统方案设计


第四章 路灯控制系统软硬件设计
  路灯控制系统软硬件设计
本章主要讲述路灯系统的软硬件系统的设计实现,包括主控节点和路灯节点的硬件电路以及软件系统设计。
3.1  主控节点硬件电路设计
根据上一章中设计的主控节点的功能框图和器件的选型,主控节点使用CC2420和路灯节点通信,使用XC167CI从CC2420中读取接收到的信息并进行处理然后发送给上位机,同时XC167CI可以接收上位机的命令并写入到CC2420中发送给路灯节点。主控节点的电路设计如下:

图4.1 XC167与CC2420连接图

XC167CI和CC2420之间的通信是使用SPI总线进行的,此外,CC2420还有一些状态引脚需要连接到XC167CI引脚上,供XC167CI查询CC2420当前的状态。XC167CI和PC的通信是使用串口进行的,串口是XC167CI内部集成的异步/同步串行接口ASC模块。
3.2  路灯节点硬件电路设计
根据路灯节点的功能框图,路灯节点用到的器件有CC2430、HB100、光敏电阻等,其中CC2430是节点的主控芯片,HB100用于车辆人流的检测,光敏电阻用于光线强度的检测。
3.2.1  CC2430模块电路
CC2430模块用于控制整个路灯节点系统,负责对外界数据的采集、和其他节点进行通信以及控制路灯的点亮和熄灭。与外设的连接的引脚主要有:电源引脚,复位引脚,在线调试支持引脚,用于接收微波模块数据的P0_5引脚,用于模拟SPI与LCD通信的P1_0、P0_0、P0_2、P0_4和P0_6引脚,以及用于光感应模块ADC的P0_7引脚。CC2430模块实际应用电路图如下:

图4.2 CC2430应用电路

3.2.2  微波检测电路
由于HB100的输出信号过于微弱,需要对信号进行放大,系统对HB100输出的信号进行了三级放大,并对高频和低频进行滤波,只留下频率合适的中频信号,而且由于单片机只能处理数字信号,因此在放大信号之后添加了电压比较电路,进行电压比较,使最终输入到单片机上数据成为数字信号。详细电路设计如下图所示:

图4.3 微波模块电路

3.2.3  光感应模块
光敏电阻器是利用半导体的光电效应制成的一种电阻值随照射光的强弱而改变的电阻器;照射光强,其电阻值减小,照射光弱,则电阻值增大。系统使用CC2430的ADC模块对光敏电阻的输入值进行采样,然后进行数据处理。模块电路如下图:

图4.4 光感应电路

3.2.4  路灯控制
路灯的控制使用CC2430的一个通用I/O引脚控制一个三极管的基级,从而实现控制路灯点亮和熄灭的控制。其电路图如下:

图4.5 路灯控制电路

3.2.5  信息显示模块
信息显示使用Nokia5110LCD,通过SPI总线与CC2430模块相连,主要用于显示节点当前信息,包括节点编号、光线强弱等。详细电路如下:

图4.6 LCD连接图

3.2.6  其他电路设计
除了以上各模块电路,路灯节点还需其他电路支持,有电源模块,SoCDebuger。
电源模块如下图,图中采用LM1117-3.3和LM1117-5分别实现从外输入电压到3.3V和5V的板上电压输出。同时有两个LED灯显示电源状态。

图4.7 电源模块电路

SoCDebuger模块如下图,此模块用于CC2430模块的在线仿真和程序下载。

图4.8 SoCDebuger模块

3.3  主控节点软件系统设计
主控节点主要用于和上位机通信、接收节点发送过来的信息以及发送对路灯的控制信息。主控节点使用XC167CI微控制器和CC2420无线收发器,在XC167CI上运行嵌入式操作系统FreeRTOS对系统进行任务、时间和内存的管理。
3.3.1  软件系统整体流程
主控节点的软件系统采用FreeRTOS嵌入式操作系统。在操作系统开始运行之前,需要对硬件和软件进行初始化,流程如下:

图4.9 主控节点软件系统整体流程图

FreeRTOS操作系统开始运行前,首先初始化单片机,完成对各引脚的定义,然后对CC2420进行初始化配置,创建系统任务CC2420_Send、CC2420_Receive、UART_Send,分别用于发送无线信息、接收无线信息、向PC发送信息。系统开始运行后,由操作系统进行多任务管理,根据各个任务的优先级进行任务切换。此外,系统中存在串口中断用于接收PC的控制信息。
3.3.2  FreeRTOS内核运行过程[14]
在嵌入式操作系统中,必须依赖硬件定时器产生固定时间间隔的时钟中断以产生系统时钟节拍,时钟节拍是系统心脏的脉动。系统时钟节拍使得内核可以以时钟节拍为单位延时任务,以及当任务等待某个事件时,提供等待超时的依据。
在系统开始运行前需要对硬件进行初始化,之后使用xTaskCreate函数建立系统任务。创建任务时系统为任务分配一块内存,用来保存CPU寄存器和任务程序的地址,然后将堆栈的地址存入任务控制块,这样任务程序代码、任务堆栈和任务控制块就联系成一个整体了。操作系统内核可以通过任务控制块找到任务堆栈,从任务堆栈中取得任务代码地址。其基本的结构如下图所示:

图4.10 任务的内存结构[2]

任务建立完成之后调用vTaskStartScheduler函数开始系统的运行。vTaskStartScheduler函数会首先建立空闲任务,然后对系统一些变量进行初始化。之后调用xPortStartScheduler函数,开始系统任务的调度,系统开始运行。
系统运行过程中,任务的切换有两种情况:一种是任务级切换,另一种是中断级切换。任务级切换是指当前任务运行完毕,即切换到下一个准备就绪的最高优先级任务。任务级切换的大致流程如下:
  • 当前任务完成,调用vTaskDelay函数进行延时;
  • vTaskDelay函数将当前任务移出就绪队列,并修改当前任务的参数;
  • 最终调用vPortYield函数将任务的各种参数和寄存器压入堆栈,函数中再调用vTaskSwitchContext函数进行任务调度, 选出高优先级就绪任务,vPortYield函数从新任务的堆栈中恢复寄存器;
  • 运行高优先级任务。
任务级切换过程如下图所示:

图4.11 任务级切换过程

中断级切换是指在中断处理程序运行过程中,有一些任务进入就绪状态,因而需要重新进行任务调度,找到最高优先级任务并进行切换。中断处理函数的结构如下:
  • 调用函数vTaskSuspendAll, 挂起所有任务;
  • 用户中断处理代码;
  • 调用函数xTaskResumeAll退出中断处理。
函数xTaskResumeAll过程如下图所示:

图4.12 函数xTaskResumeAll过程

3.3.3  FreeTRTOS移植[14]
操作系统的移植,就是使一个操作系统内核能在某个微处理器或微控制器上运行。操作系统的移植需要满足以下条件:
  • 目标平台支持堆栈操作,有CPU内部寄存器入栈、出栈指令;
  • 使用的C编译器支持内嵌汇编或者C语言可扩展连接汇编模块,使得开关系统中断能在C语言中实现,从而可以通过使用C调用进入和退出临界区代码;
  • 目标平台的C编译器可以产生可重入代码;
  • 目标平台必须支持硬件定时中断。
移植需要使用C和汇编语言写一些与处理器相关代码,这是因为嵌入式操作系统在处理CPU内部寄存器时只能通过汇编语言来实现。FreeRTOS在XC167上的移植大致由3个文件实现:一个.h文件定义编译器相关的数据类型和中断处理的宏定义;一个.c文件实现任务的堆栈初始化的请求;一个.asm汇编文件实现具体的任务切换、系统心跳的管理。
PORTMACRO.H文件包括数据类型的定义,堆栈单位定义,堆栈增长方向定义,临界段代码的声明,开关中断的宏定义以及进行任务切换的宏定义等。
PORT.C文件主要包含任务堆栈初始化函数pxPortInitialiseStack、进入临界段的函数portEXIT_CRITICAL和退出临界段的函数portENTER_CRITICAL。
PORTEXT.ASM文件是对处理器的寄存器进行操作,所以必须使用汇编语言来编写,主要包含3个子函数:
  • 系统启动函数xPortStartScheduler
vTaskStartScheduler函数通过调用xPortStartScheduler函数来使系统开始运行。其功能是:对系统节拍定时器、临界段计数器usCriticalNesting进行初始化;从就绪表中选出优先级最高的任务,将任务的堆栈指针装载到SP中,并强制中断返回。这样就绪的最高优先级任务就如同从中断中返回到运行态一样,系统开始运行。
  • 任务级切换函数vPortYield
  • 时钟节拍服务函数vTickISR,程序流程如下:

图4.13 函数vTickISR的流程图

  • 保存当前CPU寄存器的值到当前最高优先级的任务堆栈中;
  • 先调用函数vTaskIncrementTick进行任务时间管理,使延时的任务进入就绪或者任务的等待时间-1
  • 再调用函数vTaskSwitchContext选出已就绪的最高优先级任务;
  • 从最高优先级的堆栈中恢复CPU寄存器,完成任务切换;
  • 运行高优先级任务。
操作系统核心功能就是完成任务的切换,而任务的切换需要用到堆栈。堆栈分为两种:系统堆栈和用户堆栈。在XC167CI32F微控制器中,发生函数调用时,使用系统堆栈来保存调用函数的PSW(程序状态字),CSP(堆栈段指针)和IP(指令指针)。指针SP用于指示当前系统堆栈的栈顶。用户堆栈用于保存任务被打断时的微控制器状态,这些状态包含系统堆栈的信息以及R1~R15、CP、DPP3、DPP2、DPP0、MDC、MDH、MDL、PSW.MULIP等寄存器的值。用户堆栈由(DPP1:R0)来指示。
任务切换是将当前任务的运行状态保存到任务堆栈,而从当前就绪的最高优先级任务的任务堆栈中恢复系统堆栈以及对应的寄存器,然后进行中断返回。当前任务的状态存在于寄存器R1~R15,CP,DPP3,DPP2,DPP0,MDC,MDH,MDL,PSW.MULIP,PSW,CSP,IP寄存器中;其中用户堆栈的页指针保存在DPP1中,而页偏移指针保存在R0中。任务切换时XC167CI的堆栈操作[2]示意图如下图所示:

图4.14 任务切换时的堆栈操作示意图

在进行任务切换时,首先将当前运行的任务的各个状态寄存器以及系统堆栈的内容压入到用户堆栈中,然后改变用户堆栈指针,使其指向将要运行的任务的用户堆栈,再从用户堆栈中恢复各个寄存器的状态以及系统堆栈中PSW、CSP、IP的内容,之后进行中断返回,这样就完成了任务的切换。
3.4  Zigbee路灯节点无线通信设计
根据路灯节点的功能,路灯节点的软件系统划分为以下几个模块:无线通信模块、信息显示模块、光感应模块、车辆人流检测模块,如下图所示:

图4.15路灯节点简化模块图

在路灯节点软件系统中,接收无线信息使用中断方式,而其他模块的使用轮询的方式,详细逻辑设计如下图所示。

图4.16路灯节点软件系统逻辑

在系统开始上电之后,开始硬件的初始化,之后开始循环检测各个模块采集到的数据,并对数据进行处理,设置相应的标志位。在系统的最后,检测系统当前模式,处于自主控制模式时,系统根据当前系统的信息点亮或熄灭路灯;处于PC控制模式时,若需要点亮路灯则向PC控制端发送请求信息,否则结束循环,进入下一次轮询。
对于无线信息的接收,系统采用中断的方式,并在中断中做信息处理,中断过程如下图:

图4.17中断接收信息

系统发送或接收信息之后都会触发中断。对于发送中断,将闪烁LED灯提醒用户。而发生接收中断时,首先将信息读出,然后如果CRC正确,则进行地址识别,若正确则根据接收到的信息修改系统信息,否则中断结束。
3.5  本章小结
本章详细介绍了主控节点和路灯节点的软硬件系统的设计,给出了具体的硬件电路设计,同时对软件系统的程序流程进行了详细的分析。在主控节点,使用微控制器XC167CI和无线收发器CC2420组成了硬件系统,使用FreeRTOS对系统的多任务进行管理,完成了软件系统的设计。在路灯节点,使用CC2430和HB100等器件设计了硬件电路,同时分析完成了软件系统的程序流程.

第四章 路灯控制系统软硬件设计

第五章 系统软硬件综合调试
  系统软硬件综合调试
在完成了软件和硬件系统的设计之后,本章主要讲述软硬件系统的综合调试过程及结果。
4.1  软件开发环境介绍
主控节点的单片机XC167CI的开发环境是Keil uVision3以及DAvE。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。DAvE包含基于DAVE™Apps的自动代码生成器、免费GNU编译器、免费调试器以及Flash加载器等。DAvE主要用于自动生成XC167CI的配置代码,方便工程的创建。DAvE软件视图如下:

图5.1 DAvE软件

我们只需要完成各个模块参数的设置,单片机XC167CI的初始化配置代码就可由DAvE自动生成。在配置代码生成之后,使用Keil uVision3开始应用开发。
安装DAS后,可以使用Keil uVision3对XC167CI进行在线调试,支持断点设置和变量寄存器的读取。
路灯节点的芯片CC2430的集成开发环境为IAR Embedded Wordbench for MCS-51。IAR Embedded Workbench是一个高效的C/C++编译器,也是多种8位、16位、32位的微控制器的调试工具。

图5.2 IAR软件

IAR Embedded Workbench为CC2430提供了在线调试的功能,同样允许在程序的运行过程中设置断点,并且可以在断点处读取芯片中各个变量及寄存器的值。
4.2  Zigbee路灯节点调试
路灯节点的主要功能有无线通信、车辆人流检测、光感应、信息显示。
无线通信功能的测试使用两个节点,节点间相互发送信息,在IAR Embedded Workbench中设置断点并读取数据,对数据加以验证。经验证,路灯节点无线通信功能正常,通信距离达到50m,能满足系统对无线通信功能的需求。
车辆人流的检测使用HB100模块,主要检查多普勒模块能否正确接收回波信号并输出多普勒信号,经放大调整能否得到正确的数字信号。通过测试模块输出引脚的波形图,可以知道模块是否正常工作。经测试,模块输出的波形图和输入到CC2430引脚的波形图均正确无误,对车辆人流的检测距离达到15m,可以满足系统的需求。
光感应模块是根据光敏电阻的工作原理设计的,然后使用CC2430芯片的ADC功能读出电压。光敏电阻和一个普通电阻串联组成了电路,通过测试光敏电阻两端的电压即可知道模块是否正常工作。经测试,当光照强度小于100Lux时,通过CC2430的ADC转换之后可以判断当前光照不足,此模块正常工作。
信息显示模块使用Nokia5110LCD,通过SPI总线和CC2430通信。CC2430控制LCD的显示信息。经测试,模块可以显示路灯节点编号和当前光照强度,正常工作,能满足节点信息显示功能。
各模块组合实物图如下所示,将根据功能编写的程序经过IAR Embedded Workbench编译下载到CC2430中之后,经过调试,路灯节点正常工作。至此,路灯节点的设计完成。

图5.3 路灯节点模块组合图

图5.4 路灯节点整体实物图

4.3  主控节点功能调试
主控节点的功能包括无线通信、串口通信。无线通信部分是使用CC2420芯片。芯片使用SPI总线和单片机XC167CI通信,XC167CI可以从CC2420中读取FIFO和配置寄存器的内容。在初始化配置CC2420时,可以通过XC167CI的在线调试功能读出写入CC2420的数据,以验证XC167CI和CC2420的通信是否正确。验证CC2420的通信功能时,使用一个路灯节点不断发送信息,用XC167CI的在线调试功能读取CC2420的接收FIFO,验证模块信息接收是否正确;用XC168CI控制CC2420不断发送信息,使用路灯节点接收信息,在路灯节点中对接收到的信息进行验证,可以判断模块信息发送是否正常。经过一系列的调试验证,模块工作正常,能满足系统接收发送信息的功能要求。
串口通信功能使用单片机XC167CI的片上异步/同步串行接口模块ASC0。模块支持全双工异步通信和半双工同步通信,系统使用全双工异步通信方式和PC进行通信。模块的测试使用PC通过串口向XC167CI发送信息,XC167CI接收到信息后经处理后在回发给PC。经验证,模块工作正常,PC接受的数据如下所示,可以使用。

图5.5 主控节点收到的数据

系统的整体组合如下图,使用Keil uVision3将编写的程序编译下载到XC167CI中之后,再经过调试,系统正常工作,满足设计时的功能需求。

图5.6 主控节点整体实物图

4.4  系统联合调试
一个完整的路灯控制系统模型由3个路灯节点和1个PC控制端组成。系统网络通信图如下所示,PC控制端用于接收路灯节点发送的路灯信息和发送对路灯的控制信息。路灯节点对路灯周围的环境数据进行采样之后根据需要点亮或熄灭路灯,并将信息发送给相邻路灯节点和主控节点。

图5.7 系统调试通信图

针对系统的功能,设计调试方案流程,如下图所示。首先当系统开始运行时,路灯节点不断向PC控制端发送路灯信息,PC控制端负责将信息显示在PC上,以供监测路灯的状况。由于路灯同时也在向相邻节点发送信息,可以验证路灯节点之间的通信是否正确。最后使用PC控制端向各个节点发送信息,通过观察各个节点的状态可以验证PC控制端的功能是否正常。

图5.8 系统整体调试流程图

将系统整体组合,经过以上流程的测试验证,各个节点的功能模块正常工作,节点间的通信距离达到50m,每个节点对车辆人流的检测达到15m,对光线的检测是100Lux,各项功能满足系统对路灯节点的要求;主控节点工作正常,能够与各个节点进行通信,可以通过串口接收路灯节点的信息以及设置路灯节点的状态,各项功能满足系统的设计要求。至此,智能路灯控制系统设计完成。
4.5  本章小结
本章主要讲述了软硬件系统的调试以及系统的整体调试。经过对各个系统模块的调试验证,以及对系统的整体调试测试,同时给出了测试结果,验证了系统各个功能模块正常工作,满足系统的设计要求.

第五章 系统软硬件综合调试

第六章 结束语
  结束语
本次论文工作主要完成了智能路灯控制系统的设计。在系统的设计过程中,学习使用了无线通信、ADC、SPI总线、信号放大等技术,并且完成了嵌入式操作系统FreeRTOS在XC167上的移植。
在本次论文工作中,设计了路灯系统的主控节点和路灯节点的电路图。主控节点使用XC167CI和CC2420等器件,设计实现了CC2420和XC167CI的通信电路,软件方面移植了FreeRTOS到XC167CI上对系统的多任务进行管理。路灯节点主要使用了CC2430、HB100和LCD等器件,完成了CC2430与外设的连接电路以及HB100、LCD、光敏电阻等器件的驱动电路,软件方面实现了各个模块的数据采集和处理。
论文工作基本完成了路灯智能控制功能,但是仍有一些问题需要解决,如节点之间的组网问题,节点之间的地址识别使用软件方式,缺乏上位机操作软件等。在接下来的工作中,将努力完善系统,对系统不合理不完善之处进行修改。
在系统的实现过程中,遇到了很多问题,主要是自己对模拟电路知识学习的不够,例如信号的放大电路,对于一些原理只是限于书本理论,不能很好的应用于实践中,需要多学习在实践中使用理论知识。


完整的Word格式文档51黑下载地址:
基于zigbee的智能路灯控制系统.doc (2.96 MB, 下载次数: 108)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏5 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:338674 发表于 2018-5-26 13:39 | 只看该作者
很好的文章,谢谢楼主。
回复

使用道具 举报

板凳
ID:279667 发表于 2018-6-5 10:04 | 只看该作者
文章内容很棒,感谢楼主的分享
回复

使用道具 举报

地板
ID:716906 发表于 2020-3-27 14:36 | 只看该作者
xc167移植freeRTOS的portext.asm文件可以发给我参考一下吗?不胜感激,谢谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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