RSSI设计汇总.docx

上传人:b****7 文档编号:16160679 上传时间:2023-07-11 格式:DOCX 页数:22 大小:1.32MB
下载 相关 举报
RSSI设计汇总.docx_第1页
第1页 / 共22页
RSSI设计汇总.docx_第2页
第2页 / 共22页
RSSI设计汇总.docx_第3页
第3页 / 共22页
RSSI设计汇总.docx_第4页
第4页 / 共22页
RSSI设计汇总.docx_第5页
第5页 / 共22页
RSSI设计汇总.docx_第6页
第6页 / 共22页
RSSI设计汇总.docx_第7页
第7页 / 共22页
RSSI设计汇总.docx_第8页
第8页 / 共22页
RSSI设计汇总.docx_第9页
第9页 / 共22页
RSSI设计汇总.docx_第10页
第10页 / 共22页
RSSI设计汇总.docx_第11页
第11页 / 共22页
RSSI设计汇总.docx_第12页
第12页 / 共22页
RSSI设计汇总.docx_第13页
第13页 / 共22页
RSSI设计汇总.docx_第14页
第14页 / 共22页
RSSI设计汇总.docx_第15页
第15页 / 共22页
RSSI设计汇总.docx_第16页
第16页 / 共22页
RSSI设计汇总.docx_第17页
第17页 / 共22页
RSSI设计汇总.docx_第18页
第18页 / 共22页
RSSI设计汇总.docx_第19页
第19页 / 共22页
RSSI设计汇总.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

RSSI设计汇总.docx

《RSSI设计汇总.docx》由会员分享,可在线阅读,更多相关《RSSI设计汇总.docx(22页珍藏版)》请在冰点文库上搜索。

RSSI设计汇总.docx

RSSI设计汇总

课程设计任务书

学生姓名:

许杨专业班级:

物联网1001班

指导教师:

颜昕工作单位:

计算机科学与技术学院

题目:

RSSI设计

初始条件:

1.课程设计使用ATOS实验平台,使用CC2430芯片和辅助芯片以及器件;

2.CC2430有程序设计集成开发环境,程序设计语言为C、C++、或者nesC语言;

3.ATOS实验平台使用说明书;

要求完成的主要任务:

(包括课程设计工作量及其技术要求,撰写说明书具体要求)

1.学习使用ATOS硬件综合实验平台,程序设计集成开发环境;

2.根据课程设计题目,进行需求分析,搞清楚课程设计需要设计需求和需要解决的设计内容。

3.查阅和学习课程设计题目需要的ATOS实验平台资料,掌握CC2430接口芯片的使用方法和编程要领。

查阅和学习课程设计题目需要的辅助芯片以及器件资料。

4.利用ATOS硬件综合实验平台,搭建C、C++、或者nesC语言设计的集成开发环境。

给出程序流程图。

在集成开发环境中调试程序。

给出程序的详细注释。

能够解释使用程序模拟显示信息。

5.撰写课程设计报告,1)详细陈述以上的设计过程;2)详细陈述电路的调试过程。

时间安排:

第21周:

1.熟悉ATOS硬件综合实验平台,掌握CC2430接口芯片的使用方法和编程要领设计。

2.使用C语言或nesC程序编写程序,进行调试、显示结果。

3.撰写综合设计报告。

指导教师签名:

年月日

系主任(或责任教师)签名:

年月日

 

RSSI设计

1.需求分析

1.1.RSSI介绍

RSSI:

ReceivedSignalStrengthIndication接收的信号强度指示,无线发送层的可选部分,用来判定链接质量,以及是否增大广播发送强度。

RSSI技术是通过接收到的信号强弱测定信号点与接收点的距离,进而根据相应数据进行定位计算的一种定位技术,如无线传感的ZigBee网络CC2431芯片的定位引擎就采用的这种技术、算法。

接收机测量电路所得到的接收机输入的平均信号强度指示。

这一测量值一般不包括天线增益或传输系统的损耗。

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的精度。

1.2.RSSI设计原理

RSSI即ReceivedSignalStrengthIndication,CC2430芯片中有专门读取RSSI值的寄存器,当数据包接收后,CC2430芯片中的协处理器将该数据包的RSSI值写入寄存器。

如图所示。

RSSI的产生过程

RSS值和接收信号功率的换算关系如下:

P=RSSI_VAL+RSSI_OFFSET[dBm]

其中,RSSI_OFFSET是经验值,一般取-45,在收发节点距离固定的情况下,RSSI值随发射功率线性增长,如下图所示:

RSSI随发射功率的变化曲线

2.设计平台介绍

2.1.CC2430芯片介绍

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.2.TinyOS系统与nesC语言

由于无线传感器网络的特殊性,需要操作系统能够高效地使用传感器节点的有限内存、低功耗处理器、多样传感器、有限的电源,并且能对各种特定应用提供最大的支持。

基于此,UCBerkeley研究人员专为嵌入式无线传感器网络开发出TinyOS系统,目前已经成为无线传感器网络领域事实上的标准平台。

TinyOS系统具有组件化编程、事件驱动模式、轻量级线程技术、主动消息通信技术等特点。

TinyOS采用组件架构方式,快速实现各种应用,组件包括网络协议、分布式服务、传感器驱动以及数据获取工具等,一个完整的应用系统通过组合不同的组件来实现。

采用事件驱动的运行模型,可以处理高并发性的事件,并实现节能。

TinyOS应用程序通常由顶层配件、核心处理模块和其它组件构成。

每个应用程序有且仅有一个顶层配件,组件间通过接口进行连接通信,下层组件提供接口,通过provideinterfaceinterfaceName来声明,上层组件使用接口,通过useinterfaceinterfaceName来声明。

接口提供两类函数,分别是命令(command)函数与事件(event)函数,上层组件向下层组件发出命令,启动下层组件的功能:

下层组件完成相应的功能后向上层组件报告事件。

TinyOS系统本身以及应用程序都是采用nesC语言编写,nesC语言是对C语言的扩展,具有类似于C语言的语法,但支持TinyOS的并发模型,同时具有组件化机制,能够与其他组件连接在一起从而形成一个鲁棒性很好的嵌入式系统。

nesC语言把组件化/模块化的编程思想和基于事件驱动的执行模型紧密结合起来。

应用nesC语言能够更快速方便地编写基于TinyOS的应用程序。

2.3.Cygwin

TinyOS及其所需的nesC编译器均为Linux下的程序,在Windows平台上无法直接进行使用,所以需要一个工具可以在Windows平台上正常的运行Linux下的程序,在这里我们选择使用Cygwin,而不是使用虚拟机(当然这么做也是可以的),Cygwin比普通的虚拟机运行有着本质区别,Cygwin是对操作系统调用接口的重新封装而非模拟,所以效率更高,下面是Cygwin的运行界面。

开发人员可以自己下载Cygwin进行安装,并自行配置TinyOS及nesC编译器,或在Linux下直接安装TinyOS组件及nesC编译器,但这两种做法都十分繁琐并极易出错,因此强烈建议使用ATOS实验平台光盘目录中的一键式安装包:

AtosDevKit(/TinyOS开发环境/AtosDevKit.exe)进行全自动安装。

2.4.ATOS硬件介绍

2.4.1.射频模块

射频模块是ATOS平台中重要的组成部分之一,是实现射频收发、存储控制程序、执行控制程序的多功能模块,模块采用了TI公司的CC2430芯片为核心芯片(集射频收发功能、8051微控制器、高速Flash为一体的芯片),同时还扩展了USB在线烧录接口用于在线烧录器进行烧录程序。

在ATOS实验平台当中,无论是节点还是基站,都需要配备一个射频模块进行程序控制。

硬件接口:

1.天线接口如图:

2.在线烧录接口如图:

2.4.2.传感器模块

传感器模块是将物理世界的信息进行量化的设备,是ATOS实验平台中采集数据的基本来源,传感器根据采集对象的不同,分为A/D式传感器及开关传感器,ATOS实验平台支持多达十几种传感器,使用统一连接的方式,方便使用和替换。

传感器模块一般由两部分构成:

探测部与连接部,由于传感器种类的不同,探测部形状各异,但连接部完全相同。

2.4.3.基站板

基站板(或称为网关板),是ATOS实验平台中用于采集节点数据、烧录程序(射频模块可以通过基站板进行烧录,也可以通过在线烧录接口),以及串口通讯的多功能设备。

基站板上有一个射频模块连接插槽,一个传感器模块连接插槽,一个USB烧录线接口,USB转串行接口以及一个标准串口。

基站板还具有三个红、蓝、黄三个状态指示灯(即LED灯)。

2.4.4.节点板

节点板是搭载射频模块与传感器模块的连接性质的设备,为两种模块提供电源,同时还有三个红、蓝、黄三个状态指示灯(即LED灯)。

节点板包括三个部分:

射频模块连接插槽、传感器模块连接插槽及电源插槽(用于给锂电池充电使用)。

如图所示:

2.4.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编译器

3.3.设计语言

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_RSSISample

5.在RSSI实验目录下执行makeantc3installGRP=03NID=01,进行软件的编译和烧录

6.烧录成功后,将烧录线连接在烧录器上面,再用MiniUSB线将节点和烧录器连接在一起,打开节点的开关

7.执行makeantc3reinstallGRP=03NID=02

8.烧录成功后,将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.心得体会

此次课程设计较以往的课程设计有很大的区别,主要区别在于其动手能力更强,要求我们理解和掌握的知识更多。

通过此次课程设计,首先使我对ATOS这个实验平台有了更进一步的认知和学习。

了解了ATOS中的硬件以软件等相关知识,对基站、传感器节点、烧录器、Cygwin等硬件及软件有了较为熟练的应用及操作。

通过对RSSI的设计,让我对无线通信中一个比较重要的参数RSSI有了一定程度的认识和掌握,RSSI——ReceivedSignalStrengthIndication接收的信号强度指示,无线发送层的可选部分,用来判定链接质量,以及是否增大广播发送强度。

我们可以通过测量接收到信息的RSSI值来判断一个无线信号的强度,进而可以测出该信号发送源距接收源的距离。

另外可以通过多个节点和基站来实验无线传感器网络的定位功能。

另外,实验是在TinyOS下通过nesC语言来进行编程和运行的。

所以自己又对TinyOS系统以及nesC语言进行了学习,通过学习发现nesC语言就是对C语言的扩展,具有类似于C语言的语法,但支持TinyOS的并发模型,同时具有组件化机制,能够与其他组件连接在一起从而形成一个鲁棒性很好的嵌入式系统。

nesC语言把组件化/模块化的编程思想和基于事件驱动的执行模型紧密结合起来。

应用nesC语言能够更快速方便地编写基于TinyOS的应用程序。

因为之前有一定C语言的基础,所以很快就对nesC语言有了较为全面和系统的认识和掌握,并可以通过其进行简单的应用程序编写。

这也让我学到了很多新的知识。

最后,我觉得ATOS整个硬件平台及是一个功能更加丰富的单片机,其使用的CC2430芯片具有更加强大的处理能力和更加快速的处理速度。

也是因为之前对单片机有一定的学习经历,所以在进行本次课程设计时在硬件设计这块有一定的基础。

通过阅读了CC2430芯片手册很快就对RSSI设计有了比较系统的认识。

总之,这次课程设计我从中收获了很多,希望以后有更多这样的实践机会,同时也希望老师们可以指导我们更加深入地学习更多有关传感器方面的知识。

8.设计代码

RSSISampleC.nc:

configurationRSSISampleC

{

}

implementation

{

componentsRSSISampleM;

componentsMainC;//Main组件

RSSISampleM.Boot->MainC;

/*活动消息组件*/

componentsActiveMessageC;

RSSISampleM.Packet->ActiveMessageC;

RSSISampleM.AMPacket->ActiveMessageC;

RSSISampleM.RFControl->ActiveMessageC;

#defineAM_DATA_TYPE123

RSSISampleM.AMSend->ActiveMessageC.AMSend[AM_DATA_TYPE];

RSSISampleM.Receive->ActiveMessageC.Receive[AM_DATA_TYPE];

componentsCC2420PacketC;

RSSISampleM.CC2420Packet->CC2420PacketC;

componentsnewTimerMilliC();

RSSISampleM.Timer->TimerMilliC;

}

RSSISampleM.nc:

#defineDBG_LEV1000

moduleRSSISampleM

{

uses{

interfaceBoot;

interfaceTimer;

interfaceAMSend;

interfaceReceive;

interfacePacket;

interfaceAMPacket;

interfaceCC2420Packet;

interfaceSplitControlasRFControl;

}

}

implementation

{

message_tmsg;

uint16_tcount=0;

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;

}

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");

if(callAMPacket.address()==1)

{

ADBG(DBG_LEV,"\r\n*PreparetoReceive:

\r\n");

}

else

{

ADBG(DBG_LEV,"\r\n*PreparetoSend:

\r\n");

}

}

/**实现接口RFControl接口中的事件*/

eventvoidRFControl.startDone(error_tresult)

{

/**

启动定时器定时发送,

1号节点收,其他节点发送到1号节点

*/

if(callAMPacket.address()!

=1)

{

callTimer.startPeriodic(2000);

}

}

eventvoidRFControl.stopDone(error_tresult)

{

}

eventvoidTimer.fired()

{

/*定时器定时完成,准备发送数据*/

postsendTask();

}

/*发送完处理*/

eventvoidAMSend.sendDone(message_t*msg,error_tsuccess)

{

ADBG(DBG_LEV,"*Sent%s!

\r\n",(success==SUCCESS)?

"OK":

"FAIL");

}

/*射频接收数据*/

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;

}

}

 

本科生课程设计成绩评定表

班级:

物联网1002班姓名:

许杨 学号:

0121010340403

序号

评分项目

满分

实得分

1

学习态度认真、遵守纪律

10

2

设计分析合理性

10

3

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2