RSSI设计1.需求分析1.1RSSI定位原理RSSI全称ReceivedSignalStrengthIndicator(接收信号强度指示),是一种基于距离的定位算法。RSSI原理是已知发射节点的发射信号强度,接收节点根据接收信号的强度,计算出信号在传播过程中的损耗,利用理论和经验模型将传输损耗转化为距离,再根据接收节点的已知位置利用三边测量法计算出发射节点的位置。由于该方法不需要额外的硬件设备,是一种低功耗廉价的测距技术,因此在很多项目中得到了广泛的应用。为了获取反向信号的特征,在RSSI的具体实现中做了如下处理:在104us内进行基带IQ功率积分得到RSSI的瞬时值,即RSSI(瞬时)=sum(I^2+Q^2);然后在约1秒内对8192个RSSI的瞬时值进行平均得到RSSI的平均值,即RSSI(平均)=sum(RSSI(瞬时))/8192,同时给出1秒内RSSI瞬时值的最大值和RSSI瞬时值大于某一门限时的比率(RSSI瞬时值大于某一门限的个数/8192)。由于RSSI是通过在数字域进行功率积分而后反推到天线口得到的,反向通道信号传输特性的不一致会影响RSSI的精度。CC2430芯片中有专门读取RSSI值的寄存器,当数据包接收后,CC2430芯片中的协处理器将该数据包的RSSI值写入寄存器。RSS值和接收信号功率的换算关系如下:P=RSSI_VAL+RSSI_OFFSET[dBm]其中,RSSI_OFFSET是经验值,一般取-45,在收发节点距离固定的情况下,RSSI值随发射功率线性增长。2.设计平台2.1CC2430芯片介绍CC2430芯片是TI/Chipcon公司生产的真正意义上的片上系统(SOC)级解决方案,它集增强型工业标准8051核心、优秀的射频芯片CC2420、强大的外围资源于一体。集成的外设资源主要有DMA、定时/计数器、看门狗定时器、AES-128协处理器、8通道8~14位ADC、USART、休眠模式定时器、复位电路及21个可编程I/O,支持IEEE802.15.4和ZigBee协议。CC2430芯片具有性能高、功耗低、接收灵敏度高、抗干扰性强、硬件CSMA/CA支持、数字化RSSI/LQI支持、DMA支持等特点,支持无线数据传输率高达250kbps。2.2TinyOS系统与nesC语言由于无线传感器网络的特殊性,需要操作系统能够高效地使用传感器节点的有限内存、低功耗处理器、多样传感器、有限的电源,并且能对各种特定应用提供最大的支持。基于此,UCBerkeley研究人员专为嵌入式无线传感器网络开发出TinyOS系统,目前已经成为无线传感器网络领域事实上的标准平台。TinyOS系统具有组件化编程、事件驱动模式、轻量级线程技术、主动消息通信技术等特点。TinyOS采用组件架构方式,快速实现各种应用,组件包括网络协议、分布式服务、传感器驱动以及数据获取工具等,一个完整的应用系统通过组合不同的组件来实现。采用事件驱动的运行模型,可以处理高并发性的事件,并实现节能。TinyOS应用程序通常由顶层配件、核心处理模块和其它组件构成。每个应用程序有且仅有一个顶层配件,组件间通过接口进行连接通信,下层组件提供接口,通过provideinterfaceinterfaceName来声明,上层组件使用接口,通过useinterfaceinterfaceName来声明。接口提供两类函数,分别是命令(command)函数与事件(event)函数,上层组件向下层组件发出命令,启动下层组件的功能:下层组件完成相应的功能后向上层组件报告事件。应用程序总体框架如图1所示。TinyOS系统本身以及应用程序都是采用nesC语言编写,nesC语言是对C语言的扩展,具有类似于C语言的语法,但支持TinyOS的并发模型,同时具有组件化机制,能够与其他组件连接在一起从而形成一个鲁棒性很好的嵌入式系统。nesC语言把组件化/模块化的编程思想和基于事件驱动的执行模型紧密结合起来。应用nesC语言能够更快速方便地编写基于TinyOS的应用程序。2.3ATOS硬件2.3.1.射频模块射频模块是ATOS平台中重要的组成部分之一,是实现射频收发、存储控制程序、执行控制程序的多功能模块,模块采用了TI公司的CC2430芯片为核心芯片(集射频收发功能、8051微控制器、高速Flash为一体的芯片),同时还扩展了USB在线烧录接口用于在线烧录器进行烧录程序。在ATOS实验平台当中,无论是节点还是基站,都需要配备一个射频模块进行程序控制。天线接口在线烧录接口2.3.2传感器模块传感器模块是将物理世界的信息进行量化的设备,是ATOS实验平台中采集数据的基本来源,传感器根据采集对象的不同,分为A/D式传感器及开关传感器,ATOS实验平台支持多达十几种传感器,使用统一连接的方式,方便使用和替换。传感器模块一般由两部分构成:探测部与连接部,由于传感器种类的不同,探测部形状各异,但连接部完全相同。2.3.3基站板基站板(或称为网关板),是ATOS实验平台中用于采集节点数据、烧录程序(射频模块可以通过基站板进行烧录,也可以通过在线烧录接口),以及串口通讯的多功能设备。基站板上有一个射频模块连接插槽,一个传感器模块连接插槽,一个USB烧录线接口,USB转串行接口以及一个标准串口。2.3.4节点板节点板是搭载射频模块与传感器模块的连接性质的设备,为两种模块提供电源,同时还有三个红、蓝、黄三个状态指示灯(即LED灯)。节点板包括三个部分:射频模块连接插槽、传感器模块连接插槽及电源插槽(用于给锂电池充电使用)。2.3.5在线烧录器在线烧录器用于在节点板上或独立的对射频模块进行程序烧录,在线烧录器方便批量烧录,免去插拔射频模块过程,在线烧录器具有两个USB接口,分别连接PC端与射频模块,需要注意的是:方向插反时极易损毁芯片或烧录器。3.设计使用主要器材3.1实验耗材(1)带有CC2430芯片的基站一个(2)基本节点一个(3)天线两个(4)烧录线一根(5)在线烧录器一个(6)MiniUSB线一根(7)平行串口线一根(8)PC机一台3.2实验软件(1)WindowsXP操作系统(2)TinyOS系统(3)Cygwin软件(4)nesC编译器4.实验设计4.1设计流程图烧录基站的时候节点号一定要为1,烧录节点的时候,组号要和基站统一。因为在代码中规定,节点号为1的只收不发,而节点号不为1的只发不收。4.2重要代码(一)eventvoidBoot.booted(){callRFControl.start();LED_YELLOW_OFF;LED_BLUE_OFF;ADBG(DBG_LEV,\r\n###############################################\r\n);ADBG(DBG_LEV,[RSSISAMPLEDEMO]MyAddress=0x%x,Group=0x%x\r\n,ADBG_N(callAMPacket.address()),ADBG_N(TOS_IEEE_PANID));ADBG(DBG_LEV,###############################################\r\n);}callRFControl.start();表示开启射频,准备接受或发送信息。ADBG_N(callAMPacket.address())表示获得设备自身的地址。ADBG_N(TOS_IEEE_PANID)表示获得设备所在组号。(二)taskvoidsendTask(){uint16_t*packet=(uint16_t*)callPacket.getPayload(&msg,NULL);packet[0]=count++;ADBG(DBG_LEV,\r\n\r\n*Sending..from[%d],to[%d],len=[%d]\r\n,ADBG_N(callAMPacket.address()),ADBG_N(1),ADBG_N(sizeof(uint16_t)));callAMSend.send(1,&msg,sizeof(uint16_t));LED_BLUE_TOGGLE;}此代码功能即为信息发送功能,callAMSend.send(1,&msg,sizeof(uint16_t))中“1”表示发送给NID号为“1”的基站,msg表示要发送的信息,sizeof(uint16_t)表示信息包的长度。(三)eventmessage_t*Receive.receive(message_t*msg,void*payload,uint8_tlen){intrssi=callCC2420Packet.getRssi(msg);ADBG(DBG_LEV,\r\n*Receive,len=[%d],RSSI:[%d],ADBG_N(len),ADBG_N(rssi));LED_YELLOW_TOGGLE;}intrssi=callCC2420Packet.getRssi(msg)即为获得接收信号的RSSI值的大小,调用的是CC2420Packet.getRssi()这个方法。实验中可以通过此方法来测定RSSI,判断信息强弱,也可以用其来进行测距或定位。5.实验步骤1.将基站同电脑用烧录线连接好,打开基站的开关2.用串口线将基站和PC机器连接起来3.打开Cygwin开发环境4.在Cygwin开发环境中执行cd/opt/atos/apps/Demos/RFDemos/2_RSSISample5.在RSSI实验目录下执行makeantc3installGRP=04NID=01,进行软件的编译和烧录6.烧录成功后,将烧录线连接在烧录器上面,再用MiniUSB线将节点和烧录器连接在一起,打开节点的开关7.执行makeantc3reinstallGRP=04NID=028.烧录成功后,将MiniUSB线从节点上拔掉,同时将烧录线与基站相连给基站供电。9.打开串口助手10.重启基站,在串口助手中有如下的内容11.程序编译成功后,在原始文件夹中会增添一个名为build的文件夹,其中包含了编译后的工程文件以及一个log.txt的日志文件。如下:build文件夹和log.txt文件build中的文件:6.实验结果实验中,烧录基站的时候节点号一定要为1,烧录节点的时候,组号要和基站统一。因为在代码中规定,节点号为1的只收不发,而节点号不为1的只发不收。在烧录完毕后,因为传感器节点的节点号不为1,所以其会一直向外发送信息。而基站的节点号为1,其会接收其他传感器节点发送的信息,并将结果显示在串口助手中。基站节点在接收信息后,通过调用CC2420Packet.getRssi(msg)的方法来得到该信号的RSSI的值,即信号强度指示。通过不断移动传感器节点,会使基站接收到不同强度的信号,因而就会在串口助手中显示不同的RSSI值。RSSI的值有时会为负值,因为无线信号多为mW级别,所以对它进行了极化,转化为dBm而已,不表示信号是负的。1mW就是0dBm,小于1mW就是负数的dBm数。实验时有时会因为烧录线连接不良或硬件问题,导致烧录时不能一次成功烧录。此时需检查线路连接并复位烧录器,待传感器指示灯正常显示时开始烧录。7.实验小结及心得这次课程设计我从中收获了很多,有关于实验平台的理解和实践经验,有对TinyOS系统和nesC语言的初步学习和代码的学习和编写以及调试,有关于RSSI的整体设计和实践,加上本次课设的实现是以团体合作为基础实现的,因此在整个课设的实践过程中我在自己学习的同时也与同组同学有很多的交流,在学习实践的同时得到同组同学的很多帮助。此次RSSI实验课程设计较为特别,在实验课设的实现中要求我们具有很好的实验动手能力,要求我们对于课设的知识点和实验器材有很好的理解和实践。通过此次RSSI课程设计,我对ATOS实验平台有了更进一步的理解和实践。更为深刻的了解了ATOS中的硬件以软件等相关知识,对基站、传感器节点、烧录器、Cygwin等硬件及软件有了较为熟练的应