admin 管理员组文章数量: 1086019
2024年4月28日发(作者:进程利用流socket建立与其他)
*****************
实践教学
*******************
兰州理工大学
计算机与通信学院
2013年春季学期
嵌入式系统开发技术课程设计
题 目:
2.4G各信道信号强度测试实验
专业班级: 通信工程4班
姓 名: 王强
学 号: 10250424
指导教师: 薛建斌
成 绩:
摘 要
本次课程设计使用CC2530的RF射频CC2530RF功能模块及带有RF功能模块的智能主
板分析2.4G频段信道11-26各个信道的信号强度。在模块设计中,在两个CC2530的RF
模块间进行无线通信,并且在无线通信的基础上进行2.4G 频段信道11-26 各个信道的信号
强度分析与测试。而且测试的效果是通过LED灯的亮灭来进行监测的。
关键词:
CC2530 无线通信2.4G信道信号监测
目 录
前 言 ..........................................................................
一、CC2530 基本介绍 ............................................................ 5
1.1CC2530芯片基本介绍 ...................................................... 5
1.2CC2530芯片引脚功能 ...................................................... 5
1.3电源引脚功能 ............................................................ 6
1.4控制线引脚 .............................................................. 7
1.5强型8051内核 ........................................................... 7
1.6复位 .................................................................... 7
二、CC2530RF模块以及信号信道分配模式 .......................................... 8
三、设计流程 ................................................................... 9
3.1计原理及说明 ............................................................ 9
3.2设计步骤 ................................................................ 9
3.3程序流程图 ............................................................. 10
四、测试 ...................................................................... 11
4.1测试装置 ............................................................... 11
4.2设计原理及说明 ......................................................... 11
4.3测试步骤 ............................................................... 11
总 结 ........................................................................ 13
参考文献 ...................................................................... 14
致 谢 ........................................................................ 15
附 录 ........................................................................ 16
前 言
本设计是嵌入式应用里比较简单的一个实现,是针对嵌入式开发板CC2530的一个模块
进行构建和设计的,要实现的是两个CC2530间的RF的无线通信,并且要对各个信道信号
进行监测,嵌入式开发是现阶段,现世界比较流行的开发模式。
嵌入式系统(Embedded system)是一种专用的计算机系统,作为装置或设备的一部分。
通常,嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板。事实上,所有带
有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统,有些嵌入式
系统还包含操作系统,但大多数嵌入式系统都是是由单个程序实现整个控制逻辑。
嵌入式系统是一种“完全嵌入受控器件内部,为特定应用而设计的专用计算机系统”,
根据英国电器工程师协会( U.K. Institution of Electrical Engineer)的定义,嵌入式系统为控
制、监视或辅助设备、机器或用于工厂运作的设备。与个人计算机这样的通用计算机系统
不同,嵌入式系统通常执行的是带有特定要求的预先定义的任务。由于嵌入式系统只针对
一项特殊的任务,设计人员能够对它进行优化,减小尺寸降低成本。由于嵌入式系统通常
进行大量生产。所以单个的成本节约,能够随着产量进行成百上千的放大。
由于个人数码助理(PDA,Personal Digital Assistant)及手持设备在硬件上设计的特性,
即使在软件上的扩充性比其他设备来得好,但普遍被认为是嵌入式设备。但是这个定义也
逐渐模糊。举例来说,Intel 公司的凌动(ATOM)微处理器原本是为了移动互联网设备(MID,
Mobile Internet Device)这一类的嵌入式系统设计的,但是现在更多的被应用于上网本
(Netbook),而上网本属于使用Windows或者Linux的个人计算机,因此嵌入式系统的定
义又更模糊了。
嵌入式系统的核心是由一个或几个预先编程好以用来执行少数几项任务的微处理器或
者单片机组成。与通用计算机能够运行用户选择的软件不同,嵌入式系统上的软件通常是
暂时不变的;所以经常称为“固件”。
一、CC2530 基本介绍
1.1CC2530 芯片基本介绍
CC2530 芯片具有如下主要性能:高性能和低功耗的 8051微控制器核;32 KB、64 KB
或128KB 的系统内可编程闪存;8-KB RAM,具备在各种供电方式下的数据保持能力;集成
符合 IEEE 802.15.4标准的 2.4GHz 的RF 无线电收发机;极高的接收灵敏度和抗干扰性
能; 可编程的输出功率高达 4.5dBm;只需一个晶振,即可满足网状网络系统的需要;
在供电模式 1 时仅 24mA 的流耗 4μs 就能唤醒系统;在睡眠定时器运行时仅 1μA 的流
耗;在供电模式 3 时仅0.4μA 的流耗,外部中断能唤醒系统;硬件支持 CSMA/CA 功能;
较宽的电压范围(2.0~3.6V);支持精确的数字化 RSSI/LQI 和强大的 5 通道DMA;具有
捕获功能的 32KHz睡眠定时器;具有电视监视器和温度传感器;具有 8 路舒服和可配置分
辨率的 12位 ADC;集成了 AES安全协处理器;带有 2 个支持多种串行通信协议的强大
USART,以及 1 个符合 IEEE802.15.4 规范的MAC定时器,1个 16 位定时器和 1 个8位
定时器;强大和灵活的开发工具。
1.2 CC2530 芯片引脚功能
CC2530 芯片如图1所示,它采用 6 mm×6 mm的 QFN 封装,共有 40 个引脚。全部引
脚可以分为 I/O 端口线引脚,电源线引脚和控制线引脚三类。 CC2530 有 21 个可编程的
I/O 口引脚,P0、P1 口是完全的 8 位口,P2 口只有 5 个可使用的位。通过软件设定一
组 SFR 寄存器的位和字节,可使这些引脚作为通常的 I/O 口或作为连接 ADC、计时器或
USART 部件的外围设备 I/O 口使用。 I/O 口有下面的关键特性:可设置为通常的 I/O 口,
也可设置为外围的 I/O 使用;在输入时有上拉和下拉能力;全部 21 个 I/O 口引脚都具
有响应外部中断源输入口。如果需要外部中断,可对 I/O 口引脚产生中断,同时外部中断
事件也能被用来唤醒休眠模式。 12~19 脚(P0_7~P0_0):具有 4mA 的输出驱动能力。 11,
9 脚(P1_0,P1_1):具有 20mA 的驱动能力。 5~8,37~18 脚(P1_7~P1_2):具有4mA 的
输出驱动能力。 32~38 脚(P2_4~P2_0):具有 4mA 的输出驱动能力。
5
图一 CC2530 芯片
1.3电源引脚功能
AVDD1(28 脚):为模拟电路连接 2.0V~3.6V的电压。
AVDD2(27 脚):为模拟电路连接 2.0V~3.6V的电压。
AVDD3(24 脚):为模拟电路连接 2.0V~3.6V的电压。
AVDD4(29 脚):为模拟电路连接 2.0V~3.6V的电压。
AVDD5(21 脚):为模拟电路连接 2.0V~3.6V的电压。
AVDD6(31 脚):为模拟电路连接 2.0V~3.6V的电压。
DCOUPL(40 脚):提供1.8V的数字电源去耦电压,不使用外部电路供应。
DVDD1(39 脚):提供2.0V~3.6V 的数字电源连接电压。
DVDD2(10 脚):提供 2.0V~3.6V的数字电源连接电压。
6
1.4控制线引脚
RBIAS(30 脚):为参考电流提供精确的偏置电阻。
RESET_N(20 脚):复位引脚,低电平有效。
RF_N(26 脚):在 RX 期间向 LNA输入负向射频信号。
RF_P(25 脚):在 RX 期间向 LNA输入正向射频信号。
XOSC_Q1(22 脚):32MHz 的晶振引脚 1,或外部时钟输入引脚。
XOSC_Q2(23 脚):32MHz 的晶振引脚 2。
1.5强型8051内核
CC2530 集成了增强工业标准 8051 内核 MCU 核心。该核心使用标准 8051 指令集。每
个指令周期中的一个时钟周期与标准 8051 每个指令周期中的 12个时钟周期相对应,并且
取消了无用的总线状态,因此其指令执行速度比标准 8051 快。由于指令周期在可能的情
况下包含了取指令操作所需的时间,故绝大多数单字节指令在一个时钟周期内完成。除了
速度改进之外,增强的 8051 内核也包含了下列增强的架构:第二数据指针;扩展了 18 个
中断源。该 8051 内核的目标代码与工业标准 8051 微控制器目标代码兼容。但是,由于
与标准8051 使用不同的指令定时,现有的带有定时循环的代码可能需要修改。此外,由于
外接设备单元比如定时器的串行端口不同于它们在其他的 8051 内核,包含有使用外接设
备单元特殊功能寄存器 SFR 的指令代码将不能正常运行。 Flash 预取默认是不使能的,
提高了 CPU 高达 33%的性能。这是以功耗稍有增加为代价的,但是因为它更快,所以在大
多数情况下提高了能源消耗。可以在FCTL寄存器中使能Flash预取。
1.6复位
CC2530有 5个复位源:强置输入引脚 RESET_N为低电平;上电复位;掉电复位;看门狗定时器复
位;时钟丢失复位。复位后的初始状况如下:I/O 引脚设置为输入、上拉状态(P1.0 和P1.1 为输入,
但是没有上拉/下拉);CPU 的程序计数器设置为 0x0000,程序从这里开始运行;所有外部设备的寄存
器初始化到它们的复位值;看门狗定时器禁止; 时钟丢失检测禁止。
7
二、CC2530RF模块以及信号信道分配模式
RF是CC2530的射频模块,无线信道的分配IEEE 802.15.4 规范的物理层定义了
三个载波频段用于收发数据:868~868.6 MHz、902~928 MHz和 2400~2 483.5 MHz。
在这三个频段上发送数据使用的速率、信号处理过程以及调制方式等方面都存在着一定的
差异,其中 2 400 MHz 频段的数据传输速率为 250 kbit/s,915 MHz、868 MHz 分别为
40 kbit/s 和20 kbit/s。 IEEE 802.15.4 规范定义了 27 个物理信道,信道编号从 0 至
26,每个具体的信道对应着一个中心频率,这 27 个物理信道覆盖了以上 3个不同的频段。
不同的频段所对应的宽度不同,标准规定 868 MHz 频段定义了 1 个信道(0 号信道);915
MHz 频段定义了 10个信道(1~10 号信道);2 400 MHz 频段定义了 16 个信道(11~26 号
信道)。这些信道的中心频率定义如下:
F=868.3 MHz k=0
F=906+2(k-1)MHz k=1,2,…,10
F=2405+5(k-11)MHz k=11,12,…,26
式中:k 为信道编号,F 为信道对应的中心频率。通常,ZigBee 硬件设备不能同时兼容两
个工作频段,在选择时,应符合当地无线电管理委员会的规定。 由于 868~868. 6 MHz 频
段主要用于欧洲, 902~928 MHz 频段用于北美, 400~2483.5 MHz频段可以用于全球,
因此在中国所采用的都是2400MHz的工作频段。
8
三、设计流程
3.1计原理及说明
本实验主要分为 3 大部分,第一部分为初始化与 RF 相关的信息;第二部分为发送数
据和接收数据;最后为选择模块功能函数。其中模块功能的选择是通过开发板上的按键来
选择的,其中按键功能分配如下:
SW1 --- 开始测试(进入功能选择菜单)
SW2 --- 设置模块为接收功能(Light)
SW3 --- 设置模块为发送功能(Switch)
SW4 --- 发送模块发送命令按键
当发送模块按下 SW4 时,将发射一个控制命令,接收模块在接收到该命令后,将控
制LDE1 的亮或者灭。其中 LED6 为工作指示灯,当工作不正常时,LED5 将为亮状态。
3.2设计步骤
1、给智能主板供电(USB外接电源或 2 节干电池) 。
2、将两个无线节点模块分别插入到两个带 LCD的智能主板的相应位置。
3、将 2.4G的天线安装在无线节点模块上。
4、将 CC2530仿真器的一端通过 USB线(A 型转B型)连接到 PC 机,另一端通过 10Pin
下载线连接到智能主板的 CC2530 JTAG 口(J203) 。
5、将智能主板上电源开关拨至开位置。按下仿真器上的按钮,仿真器上的指示灯为绿
色时,表示连接成功。
6、使用 IAR7.51 打开“…OURS_CC2530LIBlib11(simple_RF) IAR_files”下的
simple_ 文件,下载程序。
7、关掉智能主板上电源,拔下仿真器,按 4、5步骤对另一个模块下载程序。
8、打开两个模块的电源,当 LED1 处于亮时,按下 SW1 进入模块功能选择。然后一个模
块按下 SW2 设置为接收功能(Light),此时 LED3 将被点亮;另一个模块按下 SW3 设置
为发
送功能(Switch) ,此时LED4 将被点亮。
9、按下发送模块的 SW4 按键,接收模块的 LED6 将被点亮,再次按下 SW4 按键,LED6
将被熄灭。
注:如果需要重新设置模块的收发功能,按复位按键。
9
3.3程序流程图
10
四、测试
4.1测试装置
1.装有IAR的 PC 机一台;
2.2530 仿真器,usb 线(A 型转B 型) ;
3.无线节点模块 1 块,带 LCD 的智能主板 1 块,2.4G 天线1 根。
4.2设计原理及说明
本设计主要是在学会了配置 CC2530 RF 功能基础上,掌握分析 2.4G 频段信道 11-26
各个信道的信号强度。然后通过 LCD显示测试结果,结果的显示分为两个部分,一部分是
通过16个矩形条的形式同时显示各个信道中的信号强度,16个矩形条从左至右依次代表信
道 11到信道 26 的 RSSI 值,其中矩形越高,表示该信道的 RSSI 值越强。另一个是通过
按键可以切换显示(LCD 的左上角)不同信道具体的 RSSI值。
其中按键功能分配如下:
SW1 --- 开始测试
SW2 --- 显示 RSSI 值的信道加
SW3 --- 显示 RSSI 值的信道减
测试中,矩形高度的变化是完成一次测试就改变一次。而具体的显示 RSSI 值是每个
信道抽取8个值后再显示。其中扫描 16个信道的间隔为2000us。其中LED1为工作指示灯,
当工作不正常时,LED2将为亮状态。
4.3测试步骤
1、给智能主板供电(USB外接电源或2节干电池)。
2、将1个无线节点模块插入到带LCD的智能主板的相应位置。
3、将2.4G的天线安装在无线节点模块上。
4、将CC2530仿真器的一端通过USB线(A型转B型)连接到PC机,另一端通过10Pin
下载线连接到智能主板的CC2530JTAG口(J203)。
5、将智能主板上电源开关拨至开位置。按下仿真器上的按钮,仿真器上的指示灯为绿色
时,表示连接成功。
6、使用IAR7.51打开“…OURS_CC2530LIBlib13(spectrum_analyzer) IAR_files”
下的spectrum_文件,下载程序。
11
7、运行程序,然后按 SW1 进入测试。
8、观察 LCD的显示结果。
9、按 SW2(加)和 SW3(减)分别查看其他信道的 RSSI 值。
12
总 结
在这次课程设计中我们比较深入的学习了嵌入式开发的知识,通过本次综合训练让我
了解了各种移动信道的知识,这次课设训练对以后学习嵌入式应用很有意义,让我们提前对
这方面的知识有了进一步的认识。但同时在这次课设训练过程中也当遇到了很多实际问题,
比如说对有些关于嵌入式知识的缺乏,不过在老师的进一步讲解之后,我们逐步认识和理
解了其中的关键,而且又对所学的理论知识有所理解。
通过本次嵌入开发综训练,加深了我对所学过的各种理论数据的认识和理解,并在一
定程度上掌握并会运用。我还学会了把学到的知识用于解决实际问题,培养、加强锻炼了
我的动手实践能力。更为难得的是,在这次训练过程中,屡屡碰见一些问题,在解决这些
问题的过程中,不断加强了我的理解。嵌入式对于一些自己不清楚,不明白但平时又很难
发现的知识点有了一次全面的巩固与复习。
最后让我知道在大学阶段,理论的学习和实践是密不可分的。离开了实践的理论是没
有任何意义可言的。与此同时,理论是需要伴随着实践才能完善。同时,在与同学共同解
决一些问题的过程中,提高了我们的团队协作精神。
13
参考文献
[1]覃团发、姚海涛、覃远年、陈海强. 嵌入式开发.重庆大学出版社
[2] .CC2530手册. 电子工业出版社
[3]沈振元、聂志泉、赵雪符. 无线通信原理. 西安电子科技出版社
[4]邱玲、朱近康、孙葆根、张磊. 嵌入式开发与编程. 人民邮电出版社
[5]郭梯云、邬国扬、李建东.物联网概述(第三版)西安电子科技大学出版社
14
致 谢
通过嵌入式系统开发技术课程设计,让我都学到了许多东西,体验到了书本学习与实
际应用的不同,这种感同身受必将对我们今后的学习与生活带来很大的推动作用。在这几
周的时间中,张老师时时在我的身旁引导我,同时也倾注他们所有的精力,最终指导我顺
利的完成了这次课程设计,我非常感谢张老师的辛勤教诲,我将终生难忘我的张老师对我
的亲切关怀和悉心指导,再一次向他表示衷心的感谢,感谢他为学生营造的浓郁学术氛围,
以及学习、生活上的无私帮助!
5 1
附 录
主程序
#include "hal_board.h"
#include "hal_int.h"
#include "hal_mcu.h"
#include "hal_rf.h"
#include "basic_rf.h"
#include "LCD.h"
#define RF_CHANNEL 25 // 2.4 GHz RF 使用信道 25
#define PAN_ID 0x2011 //通信 PANID
#define SWITCH_ADDR 0x2530 //开关模块地址
#define LIGHT_ADDR 0xBEEF //灯模块地址
#define APP_PAYLOAD_LENGTH 1 //命令长度
#define LIGHT_TOGGLE_CMD 0 //命令数据
// 应用状态
#define IDLE 0
#define SEND_CMD 1
//应用角色
#define NONE 0
#define SWITCH 1
#define LIGHT 2
#define APP_MODES 2
//按键
#define HAL_BUTTON_1 1
#define HAL_BUTTON_2 2
#define HAL_BUTTON_3 3
#define HAL_BUTTON_4 4
#define HAL_BUTTON_5 5
#define HAL_BUTTON_6 6
static uint8 pTxData[APP_PAYLOAD_LENGTH]; //发送数据数组 164
static uint8 pRxData[APP_PAYLOAD_LENGTH]; //接收数据数组
16
static basicRfCfg_t basicRfConfig; //RF 初始化结构体
extern void halboardinit(void); //硬件初始化函数
extern void ctrPCA9554FLASHLED(uint8 led); //IIC 灯控制函数
extern void ctrPCA9554LED(uint8 led,uint8 operation);
extern uint8 halkeycmd(void); //获取按键值函数
#ifdef SECURITY_CCM //安全密钥
static uint8 key[]= {
0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
};
#endif
static void appLight(); //灯应用处理函数
static void appSwitch(); //开关应用处理函数
static uint8 appSelectMode(void); //选择应用功能函数
/************************************* /
函数名称:appLight
* 功能描述:接收模式应用函数,初始化 RF 一些参数,接收另一个模块发送的控制命令,
然后控制相应的 LED 灯
* 参 数:无
* 返 回 值:无
/***************************************************/
static void appLight()
{
= LIGHT_ADDR; //设置接收模块的地址
if(basicRfInit(&basicRfConfig)==FAILED) //RF 初始化
{
ctrPCA9554FLASHLED(5); //RF 初始化不成功,则所有的 LED5 闪烁
}
basicRfReceiveOn(); //打开接收功能
// Main loop
while (TRUE)
{
17
while(!basicRfPacketIsReady()); //准备接收数据
if(basicRfReceive(pRxData, APP_PAYLOAD_LENGTH, NULL)>0) //接收数据
{
if(pRxData[0] == LIGHT_TOGGLE_CMD) //判断命令是否正确
{
ctrPCA9554FLASHLED(1); //关闭或打开 LED1
}
}
}
}
* 函数名称:appSwitch
* 功能描述:发送模式应用函数,初始化发送模式 RF,通过按下 SW4 向另一个模块发
送控制命令。
* 参 数:无
* 返 回 值:无
static void appSwitch()
{
pTxData[0] = LIGHT_TOGGLE_CMD; //向发送数据中写入命令
= SWITCH_ADDR; //设置发送模块的地址
if(basicRfInit(&basicRfConfig)==FAILED) //RF 初始化
{
ctrPCA9554FLASHLED(5); //RF 初始化不成功,则所有的 LED5 闪烁
}
basicRfReceiveOff(); //关闭接收功能
// Main loop
while (TRUE)
{
if(halkeycmd() == HAL_BUTTON_4) //判断是否按下 SW4
{
basicRfSendPacket(LIGHT_ADDR, pTxData, APP_PAYLOAD_LENGTH);//发
送数
18
halIntOff(); //关闭全局中断
halIntOn(); //打开中断
}
}
}
* 函数名称:appSelectMode
* 功能描述:通过 SW2 或SW3 选择模块的应用模式。
* 参 数:无
* 返 回 值:LIGHT -- 接收模式
* SWITCH -- 发送模式
* NONE -- 不正确模式
/*******************************************************************/
static uint8 appSelectMode(void)
{
uint8 key;
GUI_ClearScreen(); //LCD 清屏
GUI_PutString5_7(25,6,"OURS-CC2530"); //在 LCD 上显示相应的文字
GUI_PutString5_7(10,22,"Device Mode: ");
GUI_PutString5_7(10,35,"SW2 -> Light");
GUI_PutString5_7(10,48,"SW3 -> Switch");
LCM_Refresh();
do
{
key = halkeycmd();
}while(key == HAL_BUTTON_1); //等待模式选择
if(key == HAL_BUTTON_2) //接收模式
{
GUI_ClearScreen();
GUI_PutString5_7(25,6,"OURS-CC2530"); //在 LCD 上显示相应的文字
19
GUI_PutString5_7(10,22,"Device Mode: ");
GUI_PutString5_7(10,35,"Light");
LCM_Refresh();
return LIGHT;
}
if(key == HAL_BUTTON_3) //发送模式
{
GUI_ClearScreen();
GUI_PutString5_7(25,6,"OURS-CC2530"); //在 LCD 上显示相应的文字
GUI_PutString5_7(10,22,"Device Mode: ");
GUI_PutString5_7(10,35,"Switch");
GUI_PutString5_7(10,48,"SW4 Send Command");
LCM_Refresh();
return SWITCH;
}
return NONE;
}
/******************************************************************************
******************** /
* 函数名称:main
* 功能描述:通过不同的按键,设置模块的应用角色(接收模式或发送模式) 。通过SW4
发送控制命令
* 参 数:无
* 返 回 值:无
/******************************************************************************
********************/
void main(void)
{
20
uint8 appMode = NONE; //应用职责(角色)初始化
= PAN_ID; //配置PANID 2011
l = RF_CHANNEL; //设置信道 25
uest = TRUE; //需要ACK 请求
#ifdef SECURITY_CCM //编译未选选项
tyKey = key; // 安全密钥
#endif
halboardinit(); //初始化板的外围设备(包括 LED LCD 和按键等)
if(halRfInit()==FAILED) //初始化 RF
{
ctrPCA9554FLASHLED(5); //RF初始化不成功,则所有的 LED5 闪烁
}
ctrPCA9554FLASHLED(6); //点亮 LED6,以指示设备正常运行
GUI_PutString5_7(10,22,"Simple RF test");//在 LCD 上显示相应的文字
GUI_PutString5_7(10,35,"SW1 -> Start");
LCM_Refresh();
while (halkeycmd() != HAL_BUTTON_1); //等待按键1按下,进入下一级菜单
halMcuWaitMs(350); //延时 350MS
appMode = appSelectMode(); //设置应用职责(角色) 同时在
LCD 上显示相应的设置信息
if(appMode == SWITCH) //发送模式
{
ctrPCA9554LED(2,1);
appSwitch(); //执行发送模式功能
}
else if(appMode == LIGHT) //接收模式
{
ctrPCA9554LED(3,1);
appLight(); //执行接收模式功能
}
}
21
版权声明:本文标题:2.4G各信道信号强度测试实验 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/p/1714285985a673491.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论