资源描述
*****************
实践教学
*******************
兰州理工大学
计算机与通信学院
2013年春季学期
嵌入式系统开发技术课程设计
题 目: 2.4G各信道信号强度测试实验
专业班级: 通信工程4班
姓 名: 牛毅
学 号: 10250424
指导教师: 薛建斌
成 绩:
目 录
摘 要 1
前 言 2
一 CC2530 基本介绍 3
1.1.CC2530 芯片基本介绍 3
1.2.2 电源引脚功能 5
1.2.3 控制线引脚 5
1.2.4 增强型 8051 内核 5
1.2.5复位 6
二 CC2530 RF模块以及信号信道分配模式 7
三 设计流程 8
3.1 CC2530 模块进行简单的点到点无线通信 8
3.2 设计原理及说明 8
3.3 设计步骤 8
3.4 程序流程图 10
四 测试 17
五 参考文献 19
总 结 20
致 谢 21
摘 要
在嵌入式操作系统上,Linux一直因其内核精简、代码开发、基于移植等特点使得嵌入式能力更加强大。而本设计是嵌入式应用里比较简单的一个实现,是针对嵌入式开发板CC2530的一个模块进行构建和设计的,要实现的是两个CC2530间的RF的无线通信,并且要对各个信道信号进行监测,嵌入式开发是现阶段,现世界比较流行的开发模式。
在模块设计中,在两个CC2530的RF模块间进行无线通信,并且在无线通信的基础上进行2.4G 频段信道11-26 各个信道的信号强度分析与测试。本次课程设计使用CC2530的RF射频CC2530RF功能模块及带有RF功能模块的智能主板分析2.4G频段信道11-26各个信道的信号强度。而且测试的效果是通过LED灯的亮灭来进行监测的。
关键词:RF的无线通信、CC2530、2.4G信道信号监测
前 言
嵌入式系统(Embedded system)是一种专用的计算机系统,是以应用为中心,计算机技术为中心,硬件软件可裁剪的系统。作为装置或设备的一部分。通常,嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板。事实上,所有带有数字接口的设备,如手表、ATM、智能手机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是是由单个程序实现整个控制逻辑。
而本设计是嵌入式应用里比较简单的一个实现,是针对嵌入式开发板CC2530的一个模块进行构建和设计的,要实现的是两个CC2530间的RF的无线通信,并且要对各个信道信号进行监测,嵌入式开发是现阶段,现世界比较流行的开发模式。
嵌入式系统是计算机技术、通信技术、半导体技术、微电子技术、语音图象数据传输技术,甚至传感器等先进技术和具体应用对象相结合后的更新换代产品。因此往往是技术密集、投资强度大、高度分散、不断创新的知识密集型系统。嵌入式系统为控制、监视或辅助设备、机器或用于工厂运作的设备。与个人计算机这样的通用计算机系统不同,嵌入式系统通常执行的是带有特定要求的预先定义的任务。由于嵌入式系统只针对一项特殊的任务,设计人员能够对它进行优化,减小尺寸降低成本。由于嵌入式系统通常进行大量生产。
嵌入式系统的核心是由一个或几个预先编程好以用来执行少数几项任务的微处理器或者单片机组成。信息时代,数字时代使得嵌入式产品获得了巨大的发展契机,为嵌入式市场展现了美好的前景,同时也对嵌入式生产厂商提出了新的挑战,从中我们可以看出未来嵌入式系统的几大发展趋势。
一 CC2530 基本介绍
1.1.CC2530 芯片基本介绍
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.1 、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 的输出驱动能力。
图一CC2530芯片
1.2.2 电源引脚功能
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的数字电源连接电压。
1.2.3 控制线引脚
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.2.4 增强型 8051 内核
CC2530 集成了增强工业标准 8051 内核 MCU 核心。该核心使用标准 8051 指令集。每个指令周期中的一个时钟周期与标准 8051 每个指令周期中的 12个时钟周期相对应,并且取消了无用的总线状态,因此其指令执行速度比标准 8051 快。由于指令周期在可能的情况下包含了取指令操作所需的时间,故绝大多数单字节指令在一个时钟周期内完成。除了速度改进之外,增强的 8051 内核也包含了下列增强的架构:第二数据指针;扩展了 18 个中断源。该 8051 内核的目标代码与工业标准 8051 微控制器目标代码兼容。但是,由于与标准8051 使用不同的指令定时,现有的带有定时循环的代码可能需要修改。此外,由于外接设备单元比如定时器的串行端口不同于它们在其他的 8051 内核,包含有使用外接设备单元特殊功能寄存器 SFR 的指令代码将不能正常运行。 Flash 预取默认是不使能的,提高了 CPU 高达 33%的性能。这是以功耗稍有增加为代价的,但是因为它更快,所以在大多数情况下提高了能源消耗。可以在FCTL寄存器中使能Flash预取。
1.2.5复位
CC2530有 5个复位源:强置输入引脚 RESET_N为低电平;上电复位;掉电复位;看门狗定时器复位;时钟丢失复位。复位后的初始状况如下:I/O 引脚设置为输入、上拉状态(P1.0 和P1.1 为输入,但是没有上拉/下拉);CPU 的程序计数器设置为 0x0000,程序从这里开始运行;所有外部设备的寄存器初始化到它们的复位值(参考有关寄存器的描述);看门狗定时器禁止; 时钟丢失检测禁止。
二 CC2530 RF模块以及信号信道分配模式
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的工作频段。
三 设计流程
3.1 CC2530 模块进行简单的点到点无线通信
3.2 设计原理及说明
实验主要分为 3 大部分,第一部分为初始化与 RF 相关的信息;第二部分为发送数据和接收数据;最后为选择模块功能函数。其中模块功能的选择是通过开发板上的按键来选择的,其中按键功能分配如下:
SW1 --- 开始测试(进入功能选择菜单)
SW2 --- 设置模块为接收功能(Light)
SW3 --- 设置模块为发送功能(Switch)
SW4 --- 发送模块发送命令按键
当发送模块按下 SW4 时,将发射一个控制命令,接收模块在接收到该命令后,将控制LDE1 的亮或者灭。其中 LED6 为工作指示灯,当工作不正常时,LED5 将为亮状态。
3.3 设计步骤
1、给智能主板供电(USB外接电源或 2 节干电池) 。
2、将两个无线节点模块分别插入到两个带 LCD的智能主板的相应位置。
3、将 2.4G的天线安装在无线节点模块上。
4、将 CC2530仿真器的一端通过 USB线(A 型转B型)连接到 PC 机,另一端通过 10Pin下载线连接到智能主板的 CC2530 JTAG 口(J203) 。
5、将智能主板上电源开关拨至开位置。按下仿真器上的按钮,仿真器上的指示灯为绿
色时,表示连接成功。
6、使用 IAR7.51 打开“…\OURS_CC2530LIB\lib11(simple_RF)\ IAR_files”下的simple_RF.eww 文件,下载程序。
7、关掉智能主板上电源,拔下仿真器,按 4、5步骤对另一个模块下载程序。
8、打开两个模块的电源,当 LED1 处于亮时,按下 SW1 进入模块功能选择。然后一个模块按下 SW2 设置为接收功能(Light),此时 LED3 将被点亮;另一个模块按下 SW3 设置为发
送功能(Switch) ,此时LED4 将被点亮。
9、按下发送模块的 SW4 按键,接收模块的 LED6 将被点亮,再次按下 SW4 按键,LED6
将被熄灭。
注:如果需要重新设置模块的收发功能,按复位按键。
3.4 程序流程图
3.5 代码清单:
#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]; //接收数据数组
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()
{
basicRfConfig.myAddr = LIGHT_ADDR; //设置接收模块的地址
if(basicRfInit(&basicRfConfig)==FAILED) //RF 初始化
{
ctrPCA9554FLASHLED(5); //RF 初始化不成功,则所有的 LED5 闪烁
}
basicRfReceiveOn(); //打开接收功能
// Main loop
while (TRUE)
{
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; //向发送数据中写入命令
basicRfConfig.myAddr = 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);//发送数
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 上显示相应的文字
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)
{
uint8 appMode = NONE; //应用职责(角色)初始化
basicRfConfig.panId = PAN_ID; //配置PANID 2011
basicRfConfig.channel = RF_CHANNEL; //设置信道 25
basicRfConfig.ackRequest = TRUE; //需要ACK 请求
#ifdef SECURITY_CCM //编译未选选项
basicRfConfig.securityKey = 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(); //执行接收模式功能
}
}
四 测试
4.1、802.15.4—2.4G各信道信号强度测试实验
4.2、测试流程
4.3、实验设备:
1.装有IAR的 PC 机一台;
2.2530 仿真器,usb 线(A 型转B 型) ;
3.无线节点模块 1 块,带 LCD 的智能主板 1 块,2.4G 天线1 根。
4.4、实验原理及说明:
本实验主要是在学会了配置 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.5、设计步骤:
1、给智能主板供电(USB外接电源或2节干电池)。
2、将1个无线节点模块插入到带LCD的智能主板的相应位置。
3、将2.4G的天线安装在无线节点模块上。
4、将CC2530仿真器的一端通过USB线(A型转B型)连接到PC机,另一端通过10Pin下载线连接到智能主板的CC2530JTAG口(J203)。
5、将智能主板上电源开关拨至开位置。按下仿真器上的按钮,仿真器上的指示灯为绿色时,表示连接成功。
6、使用IAR7.51打开“…\OURS_CC2530LIB\lib13(spectrum_analyzer)\ IAR_files”下的spectrum_analyzer.eww文件,下载程序。
7、运行程序,然后按 SW1 进入测试。
8、观察 LCD的显示结果。
9、按 SW2(加)和 SW3(减)分别查看其他信道的 RSSI 值。
10、程序流程图
五 参考文献
[1]覃团发、姚海涛、覃远年、陈海强. 嵌入式开发 . 重庆大学出版社
[2]Gordon.Stuber .CC2530手册. 电子工业出版社
[3]沈振元、聂志泉、赵雪符. 无线通信原理. 西安电子科技出版社
[4]邱玲、朱近康、孙葆根、张磊. 嵌入式开发与编程. 人民邮电出版社
[5]郭梯云、邬国扬、李建东.物联网概述(第三版)西安电子科技大学出版社
总 结
通过这一次的课程设计,我不仅仅学到了专业知识,更使我懂得如何做事。其实每一次的课程设计都是在教会我怎么样做事情,它告诉我完成一件事情,光靠团队的人数是没有任何优势的,关键在于团队之中是否有优秀的骨干去引领这个团队完成这件事情。但可惜的是,每次都没有,而本来并不优秀也不是骨干的我无奈成为了矮子军里的姚明,我只好在无限的感慨中奋力完成课程报告。在大多数老师的眼里,我们的课设肯定都是百度的,但事实上,的确是那样的。
在为期两周的嵌入式课设当中我们学习了课本的知识,上网查了很多。通过本次课设让我了解了各种嵌入式的知识,这次嵌入式对将来从事这一通信的同学尤为重要,这等于让我们提前对这方面的知识有了进一步的认识。不过在老师的进一步讲解之后,我们逐步认识和理解了其中的关键,而且又对所学的理论知识有了升华。 在大学阶段,理论的学习和实践是密不可分的。离开了实践的理论是没有任何意义可言的。与此同时,理论是需要伴随着实践才能完善。同时,在与同学共同在解决一些问题的过程中,提高了我们的团队协作精神。
致 谢
通过这次课设,我们都学到了许多东西,体会到了从书本学习与实际应用中的不同,这种感同身受必将对我们今后的学习与生活带来很大的帮助。在两周的时间中,我们的指导老师时时在我们的身旁引导我们,帮助我们,倾注他们所有的才华,用心血让我们学会从理论走向实际这一目标十分辛苦,对我们来说是一次很大的挑战。不会忘记他们为了我们付出的关心和信任。谢谢我们的指导老师对我们的帮助!也谢谢同学之间的互相帮助!
21
展开阅读全文