目 录
1 绪论 1
1.1 研究背景和意义 1
1.2 研究现状 2
1.3 研究内容 3
2 系统概述和相关原理 4
2.1 系统的功能分析与设计 4
2.2 LabVIEW介绍 5
2.3 ZigBee技术 5
2.3.1 ZigBee技术概述 5
2.3.2 ZigBee网络协议 6
2.3.3 ZigBee网络拓扑结构 7
2.4 GSM技术 8
2.5 本章小结 8
3 系统硬件设计 9
3.1 系统总体硬件设计 9
3.2 数据采集发送部分硬件设计 9
3.2.1 ZigBee模块选型与设计 9
3.2.2 传感器选型 11
3.3 数据接收控制部分硬件设计 12
3.3.1 嵌入式微处理器选型 12
3.3.2 控制器电源电路设计 13
3.3.3 晶振和复位电路设计 13
3.3.4 下载电路设计 14
3.3.5 串口通讯电路设计 14
3.3.6 SD卡电路设计 15
3.3.7 LCD显示电路设计 16
3.3.8 GSM电路设计 17
3.3.9 本章小结 18
4 系统软件设计 19
4.1 数据采集传输模块软件设计 19
4.1.1 系统通信协议设计 19
4.1.2 ZigBee节点程序设计 20
4.2 数据处理显示模块软件设计 23
4.2.1 总体任务程序设计 24
4.2.2 GSM程序设计 26
4.3 LabVIEW上位机软件设计 27
4.4 本章总结 30
5 系统测试分析 31
5.1 ZigBee数据包抓包实验分析 31
5.2 串口接收数据包实验分析 31
5.3 控制器数据接收实验分析 32
5.4 上位机数据接收实验分析 33
5.5 本章总结 33
总 结 34
参考文献 35
致 谢 38
附 录 39
3系统硬件设计
对于一个系统而言,硬件的设计是不可或缺的。本章开始对系统的总体硬件设计进行了介绍,接着将系统硬件分为数据采集发送部分、数据接收控制部分,分别阐述了各部分的传感器及芯片选型和电路设计方法。
3.1 系统总体硬件设计
系统硬件根据模块化设计思想主要分为两部分:数据采集发送部分、数据接收控制部分。系统硬件总体框图如图4所示。
图4 系统硬件总体框图
3.2 数据采集发送部分硬件设计
数据采集发送部分由传感器的选型、ZigBee模块设计组成。传感器模块主要包括温湿度传感器和有毒气体检测传感器。其中ZigBee模块负责了传感器数据的采集及处理和数据的无线组网传输。该部分采集模块分布在各个监测区域,通过组成无线传感器网络将数据传输给协调器节点。
3.2.1 ZigBee模块选型与设计
随着ZigBee技术的诞生,各个大型公司都制作工作计划试图将该技术融入到自家产品和芯片中,来抢占市场。其中美国的德州仪器公司,率先推出了第一款基于2.4GHz IEEE802.15.4 ZigBee的片上系统CC2530芯片。CC2530集成了世界先进的RF收发器和加强工业标准的8051内核。TI公司为客户免费提供了完全兼容IEEE802.15.4协议规范和ZigBee协议规范的开源协议栈,以及丰富的开发调试工具[9]。故本课题将CC2530单片机作为ZigBee技术开发平台。
CC2530集成了控制功能和射频收发功能,拥有着超低功耗、较强的抗干扰抗噪声能力、信号传输稳定等射频性能,以及性能高、功耗低且具有代码提前处理功能的8051微控制器内核。同时CC2530拥有着大量功能强大的外部设备,如5个强大的DMA通道、IR发生电路、3个通用定时器(1个16位,2个8位)、具有捕获功能的睡眠定时器、电能监测器和温度测量传感器、可输入8路且可进行配置的12位ADC、看门狗定时器、2个USART、21个通用I/O口、AES安全协处理器等。在CPU处于空置情况下,只耗24mA的微小电流,非常适用于低功耗的产品。其具有如下主要特点:
(1)通信距离远。空旷情况下距离达到300m,障碍物下达到100m;
(2)具有待机低功耗和休眠模式;
(3)硬件支持CSMA/CA;
(4)较宽的工作电压范围。DC 2V-3.6V;
(5)可以达到4.5dBm输出功率;
(6)只需极少外接元件;
(7)支持硬件调试。
事件处理函数代码:
void even_process(void)
{
switch(Interface)
{
case Welcome: //欢迎界面
Lcd_show_bmp( 0,0,"/fm.bmp");
break;
case Set_temp: //设置界面
Lcd_show_bmp( 0,0,"/sz.bmp");
while(Interface == Set_temp) //等待设置完成
{
Set_eventProcess(); //设置事件处理函数
}
break;
case Monitor: //监测界面
Lcd_show_bmp( 0,0,"/jc.bmp");
Lcd_GramScan(1);
while(1)
{
data_chuli(); //数据处理
if(Interface == Set_temp)
break;
}
Break;
default:
break;
}
}
触摸屏函数代码:
void touch_process(void)
{
if(touch_flag == 1) {
switch(Interface)
{
case Welcome: //欢迎界面处触摸屏幕进入设置界面
if(Get_touch_point(&display,Read_2046_2(),&touch_para ) !=DISABLE)
{
if((display.y>=213&&display.y<=237)&&(display.x>=262 &&display.x<=298))
Interface = Set_temp;
}
break;
case Set_temp: //设置界面按键处理
Set_getEvent(); //设置界面 获取触摸坐标及处理
break;
case Monitor: //监测界面按键处理
if(Get_touch_point(&display,Read_2046_2(),&touch_para ) !=DISABLE)
{
if((display.y>=210&&display.y<=230)&&(display.x>=1 &&display.x<=13))
Interface = Set_temp;
}
break;
default:
break;
}
}
}