基于NRF905的无线温度采集系统的设计.docx
《基于NRF905的无线温度采集系统的设计.docx》由会员分享,可在线阅读,更多相关《基于NRF905的无线温度采集系统的设计.docx(49页珍藏版)》请在冰豆网上搜索。
基于NRF905的无线温度采集系统的设计
摘要
该设计是基于NRF905无线收发模块的温度采集系统。
环境温度通过数字温度传感器DS18B20测得,从机将采集的温度信息处理后通过无线模块传送给主机,之后主机通过串口再将温度信息发送给PC机,并通过上位机显示,从而使系统起到远距离实时监测环境温度的作用。
本文较为详细地介绍了温度的采集,NRF905无线模块的使用方法以及单片机与PC机之间通过RS232串行标准进行通信的基本原理。
关键词:
温度;NRF905;单片机;上位机;
Abstract
ThisdesignisbasedonNRF905wirelesstransceivermoduleoftemperatureacquisitionsystem.ThetemperatureoftheenvironmentthatmeasuredthroughthedigitaltemperaturesensorDS18B20,andprocessedthroughthewirelessmoduletransferingtothehost,whichsentthetemperatureinformationtothePCmachinethroughtheserialportafteragain,willbedisplayedoncomputer.Thusthesystemshavetheabilitytocollectionremotereal-timemonitoringenvironmentaltemperature.Inthispaperitdescribesthetemperaturecollectionindetail,NRF905wirelessmoduleusingmethodandsinglechipmicrocomputerandPCmachinethroughRS232serialstandardsbetweenthebasicprinciplesofcommunication.
Keywords:
Temperature;NRF905;SCM;Epistemicmachine;
引言
温度是一个重要的物理量,在工、农业生产和日常生活中,各个环节都与温度紧密相联,温度的测量及控制占据着极其重要的地位。
在一些大型仓库中,如大型粮库、油库,都需要进行实时多温度点的检测及预警,以消除安全隐患[1]。
温室里实行温度检测可以确保花卉或农作物的成活率,从而提高经济效益,由此可知温度检测系统应用十分广阔。
无线通信技术不断进步,低功耗、体积小的无线数据采集系统成为无线通信技术的一个重要发展方向。
在传统的测控系统中,通常使用导线传输信号,这种传输方式常常会带来电磁干扰和信号衰减。
而无线传输方式就可以克服上述不足,同时也避免了复杂的线路连接,有效地节约了人力物力。
并具有分布灵活,使用简单,几乎不受空间条件限制等特点。
基于以上考虑,设计出了一种基于NRF905无线收发模块的温度采集系统,单片机采用AT89S52,下位机将温度信息传送给PC机,通过上位机实现对环境温度的实时监测。
1系统设计
1.1设计指标
1.1.1设计任务
系统设计要求:
设计并制作一个无线温度采集系统,从机要能够进行温度采集和显示,主机能够和从机进行无线通信,从机能够将温度数据有效的传输给主机。
主机能够将收到的温度数据显示出来,并通过串口传送给PC机,再通过上位机实时显示当前环境温度。
1.1.2设计思路
从机温度采集系统的建立:
由从机通过数字温度传感器采集温度信息,将其对应的温度值通过数码管显示出来。
按键做各个功能模块的选择及一些参数的设置。
主从机通信系统的建立:
通过NRF905无线模块,进行主从机之间的通信。
单片机通过SPI接口对NRF905无线模块进行工作状态的配置及数据的读写。
按照系统设计功能的要求,确定系统由7个模块组成:
电源、单片机最小系统、显示电路、按键、测温电路、NRF905无线模块、RS232串口通信及上位机。
系统设计总体结构框图如图1所示。
图1-1系统设计总体结构框图
1.2方案设计与论证
1.2.1温度传感器方案论证
方案一:
采用数字温度传感器DS18B20。
DS18B20是一线式数字温度传感器,具有3引脚TO-92小体积封装形式;温度测量范围为-55℃~+125℃,可编程为9位~12位A/D转换精度[2],测温分辨率可达0.0625℃.DS18B20可以直接读出被测的温度值,而且采用3线制与单片机相连,减少了外部的硬件电路,每个DS18B20具有唯一的64位长序列号,存放于DS18B20内部ROM只读存储器中。
这样一条总线上可以挂多个DS18B20,大大节省了资源,因而使系统结构更趋简单。
方案二:
采用热敏电阻NTC。
热敏电阻NTC电阻值随环境温度的变化幅度较大,从而不需要放大电路,且热敏电阻NTC成本低、功耗小、体积小。
但由于AT89S52单片机不带内部AD,需要另外使用外部AD对温度采样,使得系统变的复杂及成本升高。
基于以上分析拟订采用方案一。
1.2.2显示模块方案论证
方案一:
使用液晶显示。
液晶显示屏(LCD1602)具有轻薄短小、耗能低、无辐射危险,平面直角显示以及影像稳定不闪烁,可视面大,画面效果好,分辨率高,抗干扰能力强,显示字符多,内部自带128个字符,也可以自己创建字符库,不需要动态显示,这样不会限制控制器的送显时间,但价格较贵,成本太高,相对低成本的硬件设计来说不够经济实用。
方案二:
使用传统的数码管显示。
数码管具有:
低能耗、低压、高频特性好,单色性好,亮度高,显示稳定,使用寿命长,成本低,便于广泛使用。
由于该系统只须显示数字即可,就经济实用性来看,该系统选择方案二。
1.2.3通信标准及收发器方案论证
方案一:
采用RS-232-C标准。
RS-232-C标准规定,驱动器允许有2500pF的电容负载,通信距离将受此电容限制。
如采用150pF/m的通信电缆时,最大通信距离为15m;若每米电缆的电容量减小,通信距离可以增加。
传输距离短的另一原因是RS-232属单端信号传送,存在共地噪声和不能抑制共模干扰等问题,所以抗噪声干扰性能弱,因此一般用于20m以内的通信,而且RS-232接口适合点对点通信,常用于PC机的连接。
方案二:
采用RS-485标准。
RS-485接口的最大传输距离标准值为1200米(9600bps时),实际上可达3000米,RS-485接口在总线上是允许连接多达128个收发器.,RS-485总线,在要求通信距离为几十米到上千米时,广泛采用RS-485串行总线标准。
RS-485采用平衡发送和差分接收,抗噪声干扰性好,具有抑制共模干扰的能力[3]。
加上总线收发器具有高灵敏度,能检测低至200mV的电压,故传输信号能在千米以外得到恢复。
RS-485采用半双工工作方式,任何时候只能有一点处于发送状态,因此,发送电路须由使能信号加以控制。
RS-485用于多点互连时非常方便,可以省掉许多信号线。
由于本系统主机与PC机距离比较近,采用RS232标准即可满足要求。
故选择方案。
2单元电路设计
2.1电源模块
2.1.1电源模块原理图
电源模块原理图如图2所示
2.1.2工作原理
电路原理如图2所示。
由于系统工作的功耗较小,且对纹波的要求不高,所以用三端稳压集成芯片LM7805和LM1117-3.3输出的电压即可。
其中LM7805给单片机最小系统、显示电路等提供+5V电源;LM1117-3.3为无线模块提供+3.3V电源。
该电路简单实用、性能可靠稳定。
2.2温度采集模块
2.2.1温度采集原理图
温度采集原理图如图3所示。
2.2.2温度采集工作原理
系统采用数字温度传感器DS18B20进行环境温度采集。
DS18B20内部结构主要由四部分组成:
64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。
其采用单总线的接口方式与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
DS18B20的一线工作协议流程是:
初始化→ROM操作指令→存储器操作指令→数据传输。
DS18B20中的温度传感器完成对温度的测量,用16位二进制形式提供,其中S为符号位(如图四所示)。
例如+125℃的数字输出为07D0H(正温度直接把16进制数转成10进制即得到温度值)-55℃的数字输出为FC90H。
(负温度把得到的16进制数取反后加1再转成10进制数)
图2-3DS18B20数据格式
2.3无线通信模块
2.3.1无线通信模块原理图
无线通信模块原理图如图五所示
2.3.2无线通信模块工作原理
NRF905模块特点:
1、工作电压范围为1.9-3.6V。
2、工作于433/868/915MHz3个ISM频道(可以免费使用)。
3、使用SPI接口与微控制器通信,配置与数据读取比较方便。
4、功耗非常低,以-10dBm的输出功率发射时电流只有11mA,在接收模式时电流为12.5mA。
表2-1NRF905工作模式
nRF905有2种工作模式和2种节能模式。
2种工作模式分别是ShockBurstTM发送模式和ShockBurstRM接收模式,2种节能模式分别是掉电和SPI编程模式、STANDBY和SPI编程模式[4];nRF905的工作模式由TRX_CE、TX_EN、PWR_UP3个引脚的设置来决定,见表2-1。
PWR_UP
TRX_CE
TX_EN
工作模式
0
X
X
关机模式
1
0
X
空闲模式
1
1
0
射频接收模式
1
1
1
射频发送模式
表
2.4单片机与PC机通信模块
2.4.1单片机与PC机通信模块原理图
单片机与PC机通信原理图如图六所示
2.4.2单片机与PC机通信模块原理
由于PC系列微机串行口为RS232C标准接口,与输入、输出均采用TTL电平的89S52单片机在接口规范上不一致,因此TTL电平到RS232接口电平的转换采用MAXIM公司的MAX232标准RS232接口芯片,该芯片可以用单电压(+5V)实现RS232接口逻辑”1”(-3V~15V)和逻辑”0”(+3V~15V)的电平转换[5]。
按照RS232通信要求,分别设置上下位机的数据收发波特率,数据位数等信息。
MAX232主要特点:
1、符合所有的RS-232C技术标准
2、只需要单一+5V电源供电
3、片载电荷泵具有升压、电压极性反转能力,能够产生+10V和-10V电压V+、V-
4、功耗低,典型供电电流5mA
5、内部集成2个RS-232C驱动器
6、高集成度,片外最低只需4个电容即可工作。
2.4.3VB上位机
VisualBasic是一种由微软公司开发的包含协助开发环境的事件驱动编程语言。
从任何标准来说,VB都是世界上使用人数最多的语言——不仅是盛赞VB的开发者还是抱怨VB的开发者的数量。
它源自于BASIC编程语言。
VB拥有图形用户界面(GUI)和快速应用程序开发(RAD)系统,可以轻易的使用DAO、RDO、ADO连接数据库,或者轻松的创建ActiveX控件。
程序员可以轻松的使用VB提供的组件快速建立一个应用程序[6]。
MSCOMM控件介绍:
MSComm控件提供下列两种处理通讯的方式:
事件驱动方式和查询方式。
属性设置:
1、CommPort设置并返回通讯端口号。
2、Settings以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。
3、PortOpen设置并返回通讯端口的状态。
4、Input从接收缓冲区返回和删除字符。
5、Output向传输缓冲区写一个字符串
6、RThreshold属性 设置并返回接收的字符数出OnComm事件。
7、SThreshold属性 设置并返回发送的字符数出OnComm事件。
本系统通过MSComm控件,开发出了一个比较简单的可以实时显示温度并绘制其曲线的上位机程序。
其界面如图七所示。
3主模块程序流程图
3.1主程序流程图
3.1.1主机主程序流程图
3.1.1从机主程序流程图
3.2无线收发模块流程图
3.2.1无线模块发射流程图
3.2.2无线模块接收流程图
3.3温度采集流程图
3.2.1DS18B20读操作程序流程图
3.2.1DS18B20写操作程序流程图
4系统测试
4.1系统性能
系统从机能够对温度进行有效的采集,并通过数码管显示出来,之后通过NRF905无线模块将温度信息发射出去;主机能够通过NRF905无线模块正确接收从机发来的温度信息并在数码管上显示出来;主机通过串口将温度信息传送给PC机,并通过上位机显示出来。
在室内无线模块的通信距离可达30米。
4.2测试结果
在室内,将从机置于与主机30米左右位置处,上电后通过按键将从机调整到发射接收测试模块,同时将主机也调整到发射接收测试模块,可以观测到主从机能够准确的通过NRF905无线模块进行数据间的交换;再将主从机调整到测温模块,从机能够有效的对温度进行有效的采集,并通过数码管显示出来,之后通过NRF905无线模块将温度信息发射出去;主机能够通过NRF905无线模块正确接收从机发来的温度信息并在数码管上显示出来;主机通过串口将温度信息传送给PC机,并通过上位机显示出来。
系统整体上满足了设计要求,能够实时的进行对环境温度的监控。
5结论
本系统的重要作用在于数据的无线传输和实时监控。
经过对系统的现场测试,基本达到了预期设计指标。
系统设计的难点在于软件部分,由于对温度的读取,无线收发模块的操作都需要较长的时间,一般都在几百毫秒以上,系统又采用数码管动态显示,对时间要求比较高,需采用定时器中断解决时间上的冲突。
单片机与PC机之间的通信协议要保持一致才能正常通信,否则会发生通信错误,或者数据显示不正常的现象。
6改进意见
本系统虽然完成了设计指标,但明显的可以看到系统还有很大的改进空间。
系统还可以将环境的其它的信息(比如湿度,光照强度等)同时进行监控;在上位机方面,可以做个数据库,将收集来的信息在PC机上进行保存,以便日后的信息查询和参考;可以通过上位机对从机进行控制,以改变其工作状态。
7参考文献
[1]陈敏.孟立凡.王华斌,基于NRF905的无线多点温度测量系统[A].电子测量.2011年4月
[2]边春元.李文涛.江杰.杜平,C51单片机典型模块设计与应用.机械工业出版社,2008年4月.121-130
[3]童诗白,华成英,第三版.模拟电子技术基础,高等教育出版社.2005年12月.501-550
[4]崔政委,汪焰恩,魏生民,董芊里,基于单片机和nRF905SE的无线射频收发模块的系统设计[A].机械与电子.2010年12月
[5]朱建林,上位机与下位机通信的设计初步[J].可编程控制器与工厂自动化,2005.01
[6]邱李华,计算机程序设计基础VisualBasic版[M].北京:
机械工业出版社,2005:
169~186
致谢
感谢此次设计中,给予我帮助和指导的老师和同学。
感谢郭海燕老师的指导!
此次设计的顺利完成,也有他们的一份智慧与汗水。
再次由衷的感谢!
.
附录
附录1、系统原理图及PCB图
(1)原理图
主机原理图
从机原理图
(2)主从机PCB
主机部分
从机部分
附录2、程序清单
(1)主机部分
/*-----------------------------------------------
名称:
基于NRF905的无线温度采集系统的设计——主机
编写:
lyd
日期:
2012.07~09
内容:
数据的接收与处理串口发送等
晶振:
11.0592M
------------------------------------------------*/
#include"reg52.h"
#include"NRF905.h"
//#include"com_fuc.h"
/*-----------------------------------------------
函数声明
------------------------------------------------*/
voidTRtest_work();//数据收发测试模块
voidTemperature_work();//温度检测模块
/*-----------------------------------------------
主函数
------------------------------------------------*/
voidmain()
{//uchari;
dot=0;
Init_timer();
InitUART();
nRF905Init();
Config905();
while
(1)
{while(!
TF0);//10ms?
TF0=0;
TH0=0xdc;//定时器初值重设
TL0=0x00;
KeyScan();
switch(msta)
{
case0:
TRtest_work();//测试模块
if(esw3){msta=1;d3=d2=d1=d0=wsta=dot=0;}
break;
case1:
Temperature_work();//测温模块
if(esw3){msta=2;d3=d2=d1=d0=wsta=dot=0;}
break;
case2:
Voltage_work();
if(esw3){msta=0;d3=d2=d1=d0=wsta=dot=0;}
break;
default:
break;
}
}
}
/*-----------------------------------------------
数据收发测试模块
------------------------------------------------*/
voidTRtest_work()
{
switch(wsta)
{
case0:
{
if(f500flag)
d3=d2=d1=d0=12;
else
d3=d2=d1=d0=13;
if(esw0){wsta=1;
d3=10;
d2=TxRxBuf[0]/100;
d1=TxRxBuf[0]%100/10;
d0=TxRxBuf[0]%100%10;}
break;}
case1:
{SetTxMode();
TxPacket(TxRxBuf);//发送命令数据
if(secflag)
{secflag=0;
dot3flag=~dot3flag;
TxRxBuf[0]++;
d2=TxRxBuf[0]/100;
d1=TxRxBuf[0]%100/10;
d0=TxRxBuf[0]%100%10;
}
if(esw0){wsta=2;
d3=11;
d2=TxRxBuf[0]/100;
d1=TxRxBuf[0]%100/10;
d0=TxRxBuf[0]%100%10;}
break;}
case2:
{RX();
wsta=3;
break;}
case3:
{if(secflag)
{secflag=0;
wsta=2;
d2=TxRxBuf[0]/100;
d1=TxRxBuf[0]%100/10;
d0=TxRxBuf[0]%100%10;
}
if(esw0){wsta=0;dot=0;}
break;}
default:
break;
}
}
/*-----------------------------------------------
温度检测模块
------------------------------------------------*/
voidTemperature_work()
{uchari;
switch(wsta)
{
case0:
{RX();
wsta=1;
break;}
case1:
{if(secflag)
{secflag=0;
wsta=0;
/*d3=(TxRxBuf[0]%100)/10;//十位温度
d2=(TxRxBuf[0]%100)%10;dot2flag=1;//个位温度,带小数点
d1=TxRxBuf[1]*6/10;*/
d3=TxRxBuf[0];
d2=TxRxBuf[1];
d1=TxRxBuf[2];dot2flag=1;
d0=14;//显示C符号
SendByte(d3+48);
SendByte(d2+48);
SendStr(".");
SendByte(d1+48);
SendByte(32);
SendByte(32);
SendByte(32);
}
if(esw0){wsta=0;dot=0;}
}
break;
case2:
break;
default:
break;
}
}
(2)从机部分
/*-----------------------------------------------
名称:
基于NRF905的无线数据采集系统的设计——从机
编写:
lyd
日期:
2012.07~09
内容:
数据处理与发送等
晶振:
11.0592M
------------------------------------------------*/
#include"reg52.h"
#include"NRF905.h"
#include"ds18b20.h"
/*-----------------------------------------------
函数声明
-------------------------------------