无线通信系统课程设计.docx
《无线通信系统课程设计.docx》由会员分享,可在线阅读,更多相关《无线通信系统课程设计.docx(29页珍藏版)》请在冰豆网上搜索。
![无线通信系统课程设计.docx](https://file1.bdocx.com/fileroot1/2023-1/14/ef02874c-7949-478c-aa16-3d091bd48e2d/ef02874c-7949-478c-aa16-3d091bd48e2d1.gif)
无线通信系统课程设计
西安邮电大学
通信与信息工程学院
无线通信系统课程设计报告
(2017~2018学年第一学期)
实验名称:
无线通信系统课程设计____
学生姓名:
___________
专业:
______
学号:
_________
指导教师:
_______
摘要
温湿度是生活生产中的重要的参数。
本设计为基于单片机的温湿度检测系统,采用模块化、层次化设计。
用新型的智能温湿度传感器DHT11主要实现对温度、湿度的检测,将温度湿度信号通过传感器进行信号的采集并转换成数字信号,再运用单片机STC89C52进行数据的分析和处理。
然后将温湿度数据通过NRF24L01发送数据,实现点对点或多点对点的无线通信。
显示部分采用LCD1602液晶显示所测温湿度值。
系统电路简单、集成度高、工作稳定、调试方便、检测精度高,具有一定的实用价值。
关键词:
单片机;温湿度传感器;无线通信
1.绪论
温湿度的检测与数据采集是工业生产过程必不可少的环节之一,在生产中,温湿度的高低对产品的质量影响很大。
由于温湿度的检测控制不当,可能使我们导致无法估计的经济损失。
为保证日常工作的顺利进行,首要问题是加强生产车间内温度与湿度的监测工作,但传统的方法过于粗糙,通过人工进行检测,对不符合温度和湿度要求的库房进行通风、去湿和降温等工作。
这种人工测试方法费时费力、效率低,且测试的温度及湿度误差大,随机性大。
目前,在低温条件下(通常指100℃以下),温湿度的测量已经相对成熟。
同时通过无线通信系统进行温湿度数据的收发,能够将温湿度的检测距离拉长几个数量级,而且节约了布线开销成本,
利用新型单总线式数字温度传感器实现对温度的测试与控制得到更快的开发。
但人们对它的要求越来越高,要为现代人工作、科研、学习、生活提供更好的更方便的设施就需要从数字单片机技术入手,一切向着数字化,智能化控制方向发展。
对于国内外对温湿度检测的研究,从复杂模拟量检测到现在的数字智能化检测越发的成熟,随着科技的进步,现在的对于温湿度研究,检测系统向着智能化、小型化、低功耗的方向发展。
在发展过程中,以单片机为核心的温湿度控制系统发展为体积小、操作简单、量程宽、性能稳定、测量精度高,等诸多优点在生产生活的各个方面实现着至关重要的作用。
2.课程设计任务及要求
2.1设计任务
本课程设计的主要任务是使用以STC89C52芯片为数据处理与运算模块,使用DHT11温湿度传感器为采集数据模块,使用NRF24L01为数据收发模块,实现温湿度的采集与发送、接收功能。
2.2设计要求
实现温湿度数据的采集以及通过点对点或两点对一点的通信来传输数据。
湿度精度为±5%RH,温度±2℃,量程湿度20-90%RH,温度0~50℃。
3.系统总体设计方案
3.1方案论证
本系统使用PCB作为电路板,核心器件是STC89C52芯片、DHT11温湿度传感器以及NRF24L01。
依靠DHT11采集数据、STC89C52处理数据、NRF24L01传输数据实现采集温湿度数据并无线传输至接收端的功能。
系统电路简单、集成度高、工作稳定、调试方便、检测精度高,具有一定的实用性。
3.2系统总体设计
图3.1系统总体设计图
图3.1为实现两点对一点的温湿度数据无线通信系统总设计图。
此系统分为三个子系统,分别是左上角的发送端1、右上角的发送端2和下方的接收端。
每个子系统又分为三个模块,分别是主芯片模块、液晶显示模块以及温湿度传感器模块。
最后如有需要,还可以在接收端的输出口连接PC上位机,以实现数据在PC上的处理。
图3.2发射端程序流程图图3.3接收端程序流程图
3.3工作原理
本系统是以STC89C52单片机为核心的一套多点温湿度采集和无线传输系统,由温湿度采集、数据传输、数据处理三个部分组成,主要包括单片机系统,无线传输系统,电源电路,复位电路,温湿度检测,显示系统等模块。
单片机STC89C52是整个硬件电路的核心,它一方面控制无线传输模块NRF24L01发送、接受数据;另一方面,将收到的数字温湿度数据送到LCD1602显示器显示,可以直观的看到测量点的温湿度并进行监测。
整个系统的软件设计是通过c语言程序对发射机、接收机的STC89C52编程来实现其控制功能。
4.系统硬件设计
4.1.系统整体设计
图4.1系统硬件总体结构
用新型的智能集成温温度传感器DHT11主要实现检测温度、湿度的检测,将温度湿度信号通过传感器进行信号的采集并转换成数字信号,再运用单片机STC89C52进行数据的分析和处理,之后一方面送入无线传输器件NRF24L01进行信号的发送,另一方面送入显示器显示;接收端则是通过NRF24L01接收数据后送入STC89C52后再送入显示器显示。
4.2.各单元电路设计
4.2.1温湿度传感器
4.2.1.1DHT11产品概述
DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。
它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。
传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。
因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。
每个DHT11传感
器都在极为精确的湿度校验室中进行校准。
校准系数以程序的形式储存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。
单线制串行接口,使系统集成变得简易快捷。
超小的体积、极低的功耗,信号传输距离可达20米以上,使其成为各类应用甚至最为苛刻的应用场合的最佳选则。
产品为4针单排引脚封装。
连接方便,特殊封装形式可根据用户需求而提供。
4.2.1.2引脚说明:
引脚号引脚名称类型引脚说明
1VCC电源正电源输入,3V-5.5VDC
2DATA输出单总线,数据输入/输出引脚
3NC空空脚,扩展未用
4GND地电源地
图4.2DHT11连接图
4.2.2单片机STC89C52
STC89C52是一种低功耗、高性能CMOS八位微控制器,具有8K在系统可编程Flash存储器,使用ATMEL公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
片上Flash允许ROM在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使其为众多嵌入式控制应用系统提供灵活的解决方案。
STC89C52的功能以及引脚完全可以满足本系统对于控制核心的要求,且其成本低,应用广泛,相关技术的使用已经很成熟,开发难度相对不高,所以,选择其作为发射机、接收机的主控芯片。
图4.3STC89C52引脚图
图4.4单片机的复位与晶振电路
4.2.3NRF24L01无线模块
本系统设计采用无线方式向终端传输温湿度数据。
本系统无线输模块采用单片射频收发芯片NRF24L01。
4.2.3.1NRF24L01的管脚
NRF24L01有8个引脚,各个引脚的具体说明如表4.1所示。
表4.1NRF24L01各个引脚说明
管脚
名称
管脚功能
方向
pin1
VDD
正电源输入
pin2
CE
工作模式选择,RX或TX
I
Pin3
CSN
SPI片选使能,低电平使能
I
pin4
SCK
SPI时钟
I
pin5
MOSI
SPI输入
I
pin6
MISO
SPI输出
O
pin7
IRQ
中断输出
O
pin8
GND
电源地
4.2.3.2无线传输模块的硬件设计
本系统中两个发射机各有一个无线发射模块,一个接收机含有一个无线接收模块。
由于NRF24L01兼备发送与接收功能,所以发射、接受模块全部采用NRF24L01,与主机STC89C52的硬件连接也全部相同。
NRF24L01无线模块直接与STC89C52连接,电路图如图4.5所示。
图4.5NRF24L01无线模块电路图
4.2.4显示模块
LCD1602液晶显示是一种常用的显示方式。
LCD1602显示内容十分丰富,能够显示字母,符号和数字等192种字符,且可同时显示16x2个字符,满足了本系统对于多组数据同时显示的要求。
显示屏共有16个引脚,节省了单片机的大量I/O口,且电路连接简单,容易焊接。
此种显示方式响应也较快,亮度可调,成本低,是显示终端的最佳选择。
接收机收到温湿度数据后,利用LCD1602显示两个监测点A1、A2的温湿度信息。
LCD1602液晶显示芯片采用标准的16脚接口,其各个引脚及说明如表3.6所示。
表4.2LCD1602各个引脚的说明
编号
符号
引脚说明
编号
符号
引脚说明
1
VSS
电源地
9
D2
数据I/O
2
VDD
电源正极
10
D3
数据I/O
3
VL
液晶显示偏压
11
D4
数据I/O
4
RS
数据/命令选择
12
D5
数据I/O
5
R/W
读/写选择
13
D6
数据I/O
6
E
使能信号
14
D7
数据I/O
7
D0
数据I/O
15
BLA
背光源正极
8
D1
数据I/O
16
BLK
背光源负极
LCD1602电路连接图如图4.6所示。
图4.6LCD1602模块电路图
5.系统软件设计
5.1主程序流程设计
本系统由两个发射机A1、A2与一个接收机B组成,可以设计出发射机的总体程序流程图和接收机的总体程序流程图。
发射机程序主要是温湿度采集处理程序,NRF24L01发送程序。
接收机主要是数据接收程序,液晶显示程序。
5.1.1发射机的总体软件设计
发送部分的总体设计思路为:
初始化温度传感器DHT11;传感器测得温湿度;把温湿度值写入待发射数据;初始化NRF24L01无线模块;将温湿度发送给接收机,其流程图如图5.1所示
图5.1发射机程序流程图
5.1.2接收机的总体软件设计
接收部分的总体设计思路是:
初始化NRF24L01无线模块和LCD1602显示模块;接收温湿度数据;在LCD1602上分组显示,其程序流程图如图5.2所示。
图5.2接收机程序流程图
5.2.子程序设计
5.2.1温湿度采集模块软件设计
发射机利用DHT11进行温湿度采集,DATA引脚连接于STC89C52的P17口以进行数据传输。
NRF24L01通过DATA总线发送出的温湿度数据分小数部分和整数部分,共40bit。
数据格式为:
8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据+8bit校验。
本系统DHT11的工作流程如下:
开机后,DHT11处于低功耗模式,当它检测到STC89C52发送出的开始信号后,其转换到高速模式,开始进行温湿度采集,并以以上所说的数据格式发送至STC89C52,然后进入低速模式。
单片机可以选择读取温湿度数据。
DATA总线空闲状态为高电平,DHT11接收到的开始信号必须是大于18ms的低电平,否则,DHT11便无法视其为开始信号。
开始信号结束后,DHT11会发送80us的低电平响应信号。
STC89C52发送开始信号后,需要等待20-40us,然后读取DHT11回馈的低电平响应信号。
若读取总线为低电平,则说明DHT11收到了开始信号。
DHT11发送响应信号后,再把总线拉高80us,准备发送数据,每一bit数据都以50us低电平时隙开始,高电平的长短决定了数据位是0还是1。
当最后一bit数据传送完毕后,DHT11拉低总线50us,随后总线再次进入空闲状态。
根据DHT11与单片机的数据通信时序,可以设计出温湿度采集处理的程序流程图,如图5.3所示。
图5.3温湿度采集程序流程图
5.2.2无线传输模块软件设计
5.2.2.1数据发送模块软件设计
NRF24L01的发送模块程序流程图如图5.4所示。
图5.4发送模块程序流程图
5.2.2.2数据接收模块软件设计
接收机要想显示温湿度,就必须要通过NRF24L01接收两个发射机发送的温湿度数据。
NRF24L01的接收模块程序流程图如图5.5所示。
图5.5接收模块程序流程图
5.2.3显示模块软件设计显示模块软件设计相对简单,首先将LCD1602初始化,然后STC89C52通过数据传输端口P0.0~P0.6向LCD1602传送温湿度数据信息。
若LCD1602正确接收到数据信息,则显示收到的温湿度数据。
延时0.8S后,重新开始读取下一个时间段温湿度数据,进入循环。
若LCD1602读取数据错误,则直接返回,重新读取。
程序流程图如图5.6所示
图5.6LCD1602显示模块程序流程图
6.系统调试
整个系统的电路焊接完成后,开始进行整个系统的调试。
在整个调试的过程中主要使用Keil
vision5软件和pz-isp软件。
首先对程序进行设计以及编译。
程序的编译是一个很重要的过程,他是这整个系统关键。
在编写代码的过程中,通过设计的流程图,按照自己的思路进行定义以及调用函数,编译调试可以让我们清楚地认识到函数的调用顺序以及函数的调用情况。
并且我们可以通过调试发现其中的错误,并通过调试改正过来。
通过不断地对代码进行调试,从而将设计完美的实现。
程序编译完成后利用pz-isp软件把三个程序分别烧录进发射机A和接收机B的STC89C52单片机中。
完成后,对系统进行功能测试,测试流程如下。
1.启动发射机A和接收机B。
如图6.1所示。
A的初始温度21°C、湿度54%
图6.1A、B初始温湿度
2.将电烙铁放在A的温湿度传感器DHT11旁边,接收机的液晶屏显示如图6.2所示。
可以看到,A采集点的温度上升至22℃。
湿度下降至46%RH。
可知发射机A工作正常,接收机能正常显示温湿度数据,达到了本设计的对于无线采集某点温湿度要求。
图6.2A、B温湿度发生改变
综上可知,本系统完整的实现了预设功能,本次设计制作成功。
7.总结
本系统是基于51单片机的多点温湿度采集和无线传输系统,由两个发射模块与一个接收模块组成。
发射机利用数字温湿度传感器DHT11采集环境温湿度数据并传送给STC89C52单片机,单片机进行数据处理后利用无线传输模块NRF24L01进行无线发送。
接收模块的NRF24L01将接收到的数据传给STC89C52单片机,最后用数字显示屏LCD1602将经过单片机处理后的温湿度数据显示出来。
本设计基于51单片机,能够完成同时远距离采集两点温湿度并在系统终端进行显示的功能,以达到监测多点环境温湿度的目的。
结果表明,本系统能够方便、高效、及时地测量出两个采集点的温湿度。
系统成本低,性能好,制作相对简单。
远程测量能达到百米左右,基本满足日常生活的测量要求。
可以轻松添加多个监测点,程序移植性十分好。
系统可扩展性也比较强,在此程序框架上添加其他模块程序,并加入相应的硬件,可以实现其他功能。
如温湿度异常报警功能,温湿度自动调节功能。
通过这次为期两周的实习,不仅温习了之前学习的电烙铁焊锡丝的焊接技术,更通过学习系统的各个模块电路原理图,回顾了相关知识。
同时,对单片机软件的编写也是一种全新的学习,温故又知新。
可以说此次的实习是从理论和实践一举两得的实习。
8.参考文献
[1]丁向荣,单片机应用系统与开发技术项目教程,北京:
清华大学出版社,2015
[2]丁永红,孙运强,基于nRF2401的无线数传系统设计,北京:
国外电子测量技术,2008
[3]魏立峰,王宝兴,单片机原理与应用技术,北京:
北京大学出版社,2016
[4]李文仲,段朝玉,短距离无线数据通信入门与实战,北京:
北京航空航天大学出版社,2006
[5]喻金钱,喻斌,短距离无线通信详解:
基于单片机控制,北京:
北京航空航天大学出版社,2009
9.附录
附录1:
系统总体结构电路原理图
附录2:
程序清单
1.发送端
#include
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
//dht接口
sbitio=P1^7;
//lcd接口
typedefbitBOOL;
sbitrs=P2^5;
sbitrw=P2^6;
sbitep=P2^7;
//nrf接口
#defineREAD_REG0x00//读寄存器指令
#defineWRITE_REG0x20//写寄存器指令
#defineRD_RX_PLOAD0x61//读取接收数据指令
#defineWR_TX_PLOAD0xA0//写待发数据指令
#defineFLUSH_TX0xE1//冲洗发送FIFO指令
#defineFLUSH_RX0xE2//冲洗接收FIFO指令
#defineREUSE_TX_PL0xE3//定义重复装载数据指令
#defineNOP0xFF//保留
/******************寄存器地址****************************/
#defineCONFIG0x00//配置收发状态,CRC校验模式以及收发状态响应方式
#defineEN_AA0x01//自动应答功能设置
#defineEN_RXADDR0x02//可用信道设置
#defineSETUP_AW0x03//收发地址宽度设置
#defineSETUP_RETR0x04//自动重发功能设置
#defineRF_CH0x05//工作频率设置
#defineRF_SETUP0x06//发射速率、功耗功能设置
#defineSTATUS0x07//状态寄存器
#defineOBSERVE_TX0x08//发送监测功能
#defineCD0x09//地址检测
#defineRX_ADDR_P00x0A//频道0接收数据地址
#defineRX_ADDR_P10x0B//频道1接收数据地址
#defineRX_ADDR_P20x0C//频道2接收数据地址
#defineRX_ADDR_P30x0D//频道3接收数据地址
#defineRX_ADDR_P40x0E//频道4接收数据地址
#defineRX_ADDR_P50x0F//频道5接收数据地址
#defineTX_ADDR0x10//发送地址寄存器
#defineRX_PW_P00x11//接收频道0接收数据长度
#defineRX_PW_P10x12//接收频道1接收数据长度
#defineRX_PW_P20x13//接收频道2接收数据长度
#defineRX_PW_P30x14//接收频道3接收数据长度
#defineRX_PW_P40x15//接收频道4接收数据长度
#defineRX_PW_P50x16//接收频道5接收数据长度
#defineFIFO_STATUS0x17//FIFO栈入栈出状态寄存器设置
#defineTX_ADR_WIDTH5
#defineRX_ADR_WIDTH5
#defineTX_PLOAD_WIDTH8
#defineRX_PLOAD_WIDTH8
sbitSCK=P2^0;
sbitMISO=P2^1;
sbitIRQ=P2^2;
sbitMOSI=P2^3;
sbitCSN=P2^4;
sbitCE=P3^7;
ucharbdatasta;
sbitMAX_RT=sta^4;
sbitTX_DS=sta^5;
sbitRX_DR=sta^6;
ucharconstTX_ADDRESS[TX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01};//本地地址
//主函数数据
sbitLED=P3^5;
ucharTxBuf[8];
externucharRH,RL,TH,TL;
//延时模块1
voiddelay_us(uinti)//误差0us
{
uchara,b,c;
for(c=i;c>0;c--)
{
for(b=1;b>0;b--)
for(a=32;a>0;a--);
}
}
voiddelay(ucharms)
{
uchari;
while(ms--)
{
for(i=0;i<250;i++);
}
}
voiddelay1()//延时10us
{
uchari;
i--;
i--;
i--;
i--;
i--;
i--;
}
voidlongdelay(uchars)//长延时
{
while(s--)
{
delay(60);
}
}
//延时模块2
voidDelay_t(uintj)
{uchari;
for(;j>0;j--)
{
for(i=0;i<27;i++);
}
}
voiddelay2(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//lcd模块
BOOLlcd_bz()//测试LCD忙碌状态
{
BOOLresult;
rs=0;
rw=1;
ep=1;
result=(BOOL)(P0&0x80);
ep=0;
returnresult;
}
voidwrite_cmd(ucharcmd)//写指令
{
while(lcd_bz());
rs=0;
rw=0;
ep=0;
P0=cmd;
ep=1;
ep=0;
}
voidwrite_addr(ucharaddr)//写地址
{
write_cmd(addr|0x80);//“位或”,让addr的bit7强制赋值为1然后传入函数0x80=10000000D
}
voidwrite_byte(uchardat)//写字节
{
while(lcd_bz());
rs=1;
rw=0;
ep=0;
P0=dat;
ep=1;
ep=0;
}
voidlcd_init()//初始化
{
write_cmd(0x38);
delay
(1);
write_cmd(0x08);
delay
(1);
write_cmd(0x01);
delay
(1);
write_cmd(0x06);
delay
(1);
write_cmd(0