报告温度采集无线监测系统设计方案Word文档下载推荐.docx
《报告温度采集无线监测系统设计方案Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《报告温度采集无线监测系统设计方案Word文档下载推荐.docx(39页珍藏版)》请在冰豆网上搜索。
1.3无线接收发射方案设计
无线接收发射是系统设计的重点之一,它是连接监测端和被监测端的桥梁。
无线模块对环境比较敏感,同时,无线模块的功耗、传输距离也是影响系统可用度的一个因素。
所以必须选用能自己检测传输错误,并且功耗较小、传输距离长的无线模块。
【方案一】采用NRF905无线收发芯片。
具有体积小、功耗低、发射电流小、抗干扰能力强、发射速率高等特点,同时自带CRC检测,传输距离可达300M。
【方案二】采用PTR2000进行温度的发送和接收,该方案具有模块体积超小型,超低功耗,高速率,抗干扰能力强,开阔地时的使用距离最远可达1000米,但接收到发射的转换时间较长,不能及时传输时空变化的温度,所以采用方案一。
1.4上位计算机通信方案设计
【方案一】采用MAX232串口通信芯片。
具有电路简单、编程容易等特点,并且价格便宜,容易买到。
【方案二】采用USB通信。
采用此方案技术难度较大,编程困难。
综上所述,总体方案是:
控制部分采用通用的AT89S51芯片,温度采集使用数字温度传感器DS18B20,本地显示采用点阵液晶屏,无线收发采用NRF905芯片,采用MAX232串口方式与上位计算机通信。
2硬件电路设计
2.1温度采集模块工作原理与计算
2.1.1工作原理
系统在被监测端(发射端)采用数字温度传感器DS18B20实现温度的采集,DS18B20才用单总线接口,只占用单片机的一个端口。
DS18B20可以采用数据线供电的方式,但是为了采集速度更快,我们使用外部供电方式。
其测量范围从-55摄氏度到+125摄氏度,能满足一般民用需求。
其连接电路如图2.1:
图2.1
工作原理:
首先单片机初始化DS18B20,然后发送启动温度转换命令,然后再发送准备读取温度命令,最后读取2字节的温度数据。
具体步骤如下:
单片机给DS18B20一个初始化命令,然后发送0xcc命令跳过读序列号,发送0x44命令以启动温度转换。
再发送一个初始化命令,同样发送0xcc命令跳过读序列号,发送0xbe命令准备读取温度,单片机连续读取2字节的温度数据。
2.1.2温度计算
DS18B20采用2字节来存储温度,其中15~11位表示温度符号,10~4位表示温度的整数位,3~0位表示温度的小数位,如图2.2所示:
图2.2
正温度计算:
由于15~11位全为0,DS18B20采用正码形式存储温度,所以只需把10~0位右移4位就能算出温度,也就是除以16。
比如采集到的温度0550H,除以16,的十进制的85,那么温度就为85摄氏度。
采集到的温度为0191H则温度为25.0625摄氏度。
负温度计算:
对于负温度,DS18B20采用补码形式存储温度,15~11位全为1,10~0位为补码,所以要转换为正码,然后再用正温度的计算方式。
比如采集到的温度为FC90H,二进制为110010010000,转换为正码为001101110000,十六进制为370H,除以16为十进制55摄氏度,再加上符号位则计算出来的温度为-55摄氏度。
2.2显示模块电路
显示模块使用比较通用的LCD1602液晶屏,,它是以若干个5X10点阵块组成,具有清晰、快速、可靠等特点。
其电路如图2.3:
图2.3
本系统采用单片机P0口作为LCD1602的数据端口,E使能端使用单片机的P2.3口,RW使用单片机的P2.2口,RS使用单片机的P2.1口,VO背光接地,电源采用+5v。
排阻RR1为单片机P0口的上拉电阻。
2.3无线发射接收模块
无线发射接收模块使用NRF905芯片,它与控制器采用SPI协议进行通信,其内部原理如下图:
NRF905单片无线收发模块工作在433/868/915MHZ的ISM频段,本系统采用433MHZ频段。
由一个完全集成的频率调节器,一个带解调器的接收器,一个功率放大器,一个晶体振荡器和一个调节器组成。
ShockBurst工作模式的特点是自动产生前导码和CRC。
可以很容易通过SPI接口进行编程配置。
电流消耗很低,在发射功率为-10dBm时,发射电流为11mA,接收电流为12.5mA,进入POWERDOWN模式可以很容易实现节电。
由于AT89S51没有SPI端口,所以我们用AT89S51模拟SPI,从而与NRF905通信。
与单片机的连接如图2.4:
图2.4
NRF905管脚的具体含义请参考下图:
2.3.1SPI接口设计
SPI接口由状态寄存器、射频配置寄存器、发送地址寄存器、发送数据寄存器和接收寄存器5个寄存器组成。
1.状态寄存器:
包含数据就绪DR和地址匹配AM状态
2.射频配置寄存器:
包含收发器的频率,输出功率等配置信息
3.发送地址寄存器:
包含目标器件地址字节长度由配置寄存器设置
4.发送数据寄存器:
包含发送的有效数据包数据字节长度由配置寄存器设置
5.接收寄存器:
包含接收到的有效数据包数据字节长度由配置寄存器设置在寄存器中的有效数据由数据准备就绪DR指示
2.3.2工作模式
NRF905有4种工作模式,本系统采用其中的3种模式:
SPI编程模式、发送模式、接收模式。
其工作模式由TRX-CE、TX-EN、PWR-UP的设置来设定的。
如表2.1
表2.1
Standby模式(SPI编程模式):
Standby模式在保持电流消耗最小的同时保证最短的到shockBurstRx,ShouckBurstTx的启动时间。
当进入这种模式时,一部分晶体振荡器是活动的。
电流消耗取决于晶体振荡器的频率。
在此模式中,配置字的内容保持不变。
ShockBurstRx模式(接收模式):
当有相应的温度数据要传送时,则通过SPI接口,按时序把接收机的地址和要发送的数据送传给NRF905,SPI接口的速率在通信协议和器件配置时确定;
TRX-CE和TX-EN置高电平,使NRF905的发送模式启动;
NRF905进行数据的发送。
NRF905不断重发,直到TRX-CE被置低电平时,NRF905发送过程完成,自动进入空闲模式。
ShockBurstTx模式(发射模式):
当TRX-CE为高电平,TX-EN为低电平时,NRF905进入接收模式;
650S后,NRF905不断监测,等待接收数据;
当NRF905检测到同一频段的载波时,载波检测引脚被置高电平;
当接收到一个相匹配的地址,AM引脚被置高电平;
当数据包正确接收完毕,NRF905自动移去字头、地址和CRC校验位,然后把DR引脚置为高电平;
TRX-CE置为低电平,NRF905进入空闲模式;
在一次通过SPI口,以一定的速率把数据移到微控制器内,当所有数据接收完毕,NRF905把DR引脚和AM引脚置为低电平。
这时NRF905可以进入接收模式、发送模式或关机模式。
2.3.3工作电源
NRF905使用的是3.3v电源,所以必须给它单独配置一个电源,3.3v电源电路如图2.5:
图2.5
VDD输入为9V直流电压,稳压块采用的是德州仪器公司的TLV2217-33电源模块,具有精度高等特点。
TLV2217-33输入5~12V,输出3.3V。
无论NRF905工作在什么模式,它的电流都不大,所以,使用德州仪器公司的TLV2217-33电源模块给NRF905供电是比较合适的。
我们在监测端(接收端)使用了2个NRF905信号指示灯,信号指示灯电路如图2.6:
图2.6
其中CD为NRF905的载波检测脚,AM为NRF905的地址匹配脚,sn74ahc1g86dbc为德州仪器公司的单通道异或门,对CD和AM进行异或。
操作人员通过观察发光二极管DS2从而判断NRF905是否在接收数据,通过观察发光二极管DS1从而判断NRF905是否接收到了正确的数据。
2.3.4NRF905无线收发工作参数
写入配置寄存器的参数为:
0x01,0x0c,0x44,0x02,0x02,0xcc,0xcc,0xcc,0xcc,0x58
其含义为:
不自动重发数据,正常模式,输出功率为10dBm,器件工作在433MHZ,发射接收地址宽度为4字节,发射接收2字节数据,接收地址为0xcc,内部16MHZ晶振,不使用外部晶振,8位CRC自检。
还能配置为:
自动重发,节能模式,输出功率有-10dBm、-2dBm、+6dBm,可选的工作频率有433MHZ、868MHZ,收发字节最多32字节数据。
可以使用外部晶振,可以不使用CRC检测。
2.4上位计算机通信模块
上位计算机通信模块使用通用的MAX232串口通信方式,电路如图2.7:
图2.7
MAX232的主要作用是进行电平转换,从而使单片机AT89S51能和计算机进行通信。
我们只使用了11、12来连接单片机AT89S51的P3.0口和P3.1口。
MAX232的13和14脚与串口相连,将数据传送到计算机。
2.4.1串口通信的工作参数
波特率:
9600;
数据位是8位;
停止位是1位;
没有校验位。
3软件设计
3.1主程序设计
主程序主要的功能是组织并协调各模块的工作,处理“温度采集”模块传来的温度。
3.1.1被监测端(发射端)
被监测端(发射端)主程序时序图如图3.1:
图3.1
1.“操作人员”给“控制器1(AT89S51)”上电;
2.“控制器1(AT89S51)”对“本地显示(LCD1602)”进行初始化;
3.“控制器1(AT89S51)”对“无线收发(NRF905)”进行初始化;
4.“控制器1(AT89S51)”给“温度采集(DS18B20)”一个温度采集命令;
5.“温度采集(DS18B20)”把采集到的温度数据传输给“控制器1(AT89S51)”;
6.“控制器1(AT89S51)”对采集到的温度数据进行处理。
判断温度的正负,把负温度转换为正码,再把温度数据计算为实际温度,最后把温度数据传换成“本地显示(LCD1602)”能显示的格式。
7.“控制器1(AT89S51)”把处理后的温度数据传输给“本地显示(LCD1602)”以进行显示;
8.“控制器1(AT89S51)”设置“无线收发(NRF905)”为发射模式,以便发射原始温度数据;
9.“控制器1(AT89S51)”把未处理过的温度数据传输给“无线收发(NRF905)”,从而把温度数据发射出去;
10.回到第4步继续采集温度数据,一直这样循环;
以下是各模块对应的程序文件名称:
模块名称
程序文件名称
控制器1(AT89S51)
Main.c
本地显示(LCD1602)
Lcd1602.c及lcd1602.h
无线收发(NRF905)
Nrf905.c及nrf905.h
温度采集(DS18B20)
Ds1820.c及ds1820.h
3.1.2监测端(接收端)
监测端(接收端)主程序时序图如图3.2:
图3.2
2.“控制器2(AT89S51)”对“本地显示(LCD1602)”进行初始化;
3.“控制器2(AT89S51)”对“无线收发(NRF905)”进行初始化;
4.“控制器2(AT89S51)”初始化串口通信,设置串口通信的参数;
5.“控制器2(AT89S51)”设置“无线收发(NRF905)”为接收模式,以便接收被监测端(发射端)发射出来的原始温度数据;
6.“无线收发(NRF905)”接收到原始温度数据,进行CRC校验,如果数据正确则把数据传输给“控制器2(AT89S51)”;
7.“控制器2(AT89S51)”对接收到的数据进行处理,处理方法同被监测端(发射端)一样,这里就不重述。
8.“控制器2(AT89S51)”把处理后的温度数据传输给“本地显示(LCD1602)”以进行显示;
9.“控制器2(AT89S51)”向上位计算机传输温度数据,以便上位计算机对温度数据进行监控;
10.回到第15步继续接收温度数据,一直这样循环;
串口通信
Comm..c及comm.h
3.6计算机监控软件设计
计算机端监控软件的主要功能是接收单片机通过串口传输过来的温度数据,然后显示在屏幕上;
采用对平台兼容性很好的JAVA语言编写。
此软件的附加功能:
1.设置报警温度,当温度超过报警温度时,屏幕上会报警;
2.可以任意选择监控端口;
3.退出软件后,再次启动本软件会恢复上次设置的报警温度;
其软件界面如图3.3
图3.3
由于计算机端监控软件功能很少,所以没有使用现在最流行的MVC模式进行开发。
监控软件主要包括2部分:
1.屏幕显示及控制类,类名:
MainFrame;
2.串口收发类,类名:
SerialComm;
使用的串口通信参数和单片机上的串口通信参数一致。
控制类(MainFrame)主要控制串口收发类(SerialComm)发送过来的数据,然后设置“现在温度”滑条,当“现在温度”超过“报警温度”时则显示报警,如图3.4所示
图3.4
由于我们把JAVA语言的运行平台JDK进行了集成,所以计算机监控软件无需安装即可使用。
其使用方法如下:
1.解压文件夹下的“PC串口通信程序”。
2.进入解压后的文件夹,打开“温度监控”文件夹下的“温度监控.exe”即可。
4系统测试
4.1测试所使用的仪器
测试所使用的仪器有:
数字万用表,温度计,串口调试器软件。
4.2软硬件测试
4.2.1显示(LCD1602)测试及数据
显示(LCD1602)测试方式:
单片机AT89S51直接驱动LCD1602显示字符。
测试数据如下:
被监测端(发射端):
标准显示
实际显示
Temperatureis:
:
1234567890+-,./?
监测端(接收端):
4.2.2温度采集测试及数据
温度采集测试方式:
单片机AT89S51接收到DS18B20传来的数据后,在LCD1602上显示原始温度数据及处理过后的温度数据。
测试数据如下表:
实际温度℃
原始数据
测试温度℃
误差
-6
-3
4.2.3无线接收发送测试及数据
无线接收发测试方法:
被监测端(发射端)在LCD1602上显示要发射的数据,通过NRF905发射出去;
监测端(接收端)接收到数据后,在LCD1602上显示接收到的数据;
收发2字节数据。
相距(M)
发射数据
接收数据
<
1
3<
M<
5
5<
50
>
200
4.2.4上位计算机通信测试及数据
上位计算机端采用“串口调试器”;
我们用一下方式测试串口通信:
单片机端接收“串口调试器”发送过来的数据,然后单片机在LCD1602上显示接收到的数据,最后在把数据传回“串口调试器”。
“串口调试器”发送的数据
LCD1602显示的数据
“串口调试器”接收的数据
5总结
我们的设计完成了题目中的基本部分和发挥部分,采用DS18B20温度传感器很准确及时的采集到当前的温度。
通过使用NRF905无线发送接收模块将所采集的温度数据能够在0m~300m的范围内准确无误的发送给监控端(接收端)。
采用LCD1602显示模块完成了显示部分,利用串口通信完成了在计算机上显示所接收到的温度数据,同时也给系统增加了报警功能。
附录
计算机监控软件使用说明:
被检测端(发射端)主程序:
#include"
reg51.h"
lcd1602.h"
nrf905.h"
DS1820.h"
//0123456789.
unsignedcodelcdtable[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x2e};
//lcd显示代码;
uchard1,d2,d3,po4,po3,po2,po1;
//个位,十位,百位,1/10位,1/100位,1/1000位,1/10000位;
ucharlow,tdatalow,tdataheight;
//温度低字节,未处理温度的小数位
uinttemp,tempold,tempnew,point;
//采集温度,旧温度,新温度,实际温度的小数位
voidconvert(ucharc)
{
d1=0x00;
d2=0x00;
d3=0x00;
po1=0x00;
po2=0x00;
po3=0x00;
po4=0x00;
d3=(c%1000)/100;
//取百位
d2=(c%100)/10;
//取十位
d1=(c%10)/1;
//取个位
po4=(point%10000)/1000;
//取1/10位
po3=(point%1000)/100;
//取1/100位
po2=(point%100)/10;
//取1/1000位
po1=(point%10)/1;
//取1/10000位
}
voiddisplay()//LCD显示函数
//显示温度
wr_byte_ram(1,0x42,lcdtable[d3]);
//显示百位
wr_byte_ram(1,0x43,lcdtable[d2]);
//显示十位
wr_byte_ram(1,0x44,lcdtable[d1]);
//显示个位
wr_byte_ram(1,0x45,lcdtable[10]);
//显示小数点
wr_byte_ram(1,0x46,lcdtable[po4]);
//显示1/10位
wr_byte_ram(1,0x47,lcdtable[po3]);
//显示1/100位
wr_byte_ram(1,0x48,lcdtable[po2]);
//显示1/1000位
wr_byte_ram(1,0x49,lcdtable[po1]);
//显示1/10000位
wr_length_ram(1,0x4A,"
C"
1);
//显示温度单位
voiddispNegativeTemp(ucharl)//LCD显示负温度
convert(l);
//转换
wr_length_ram(1,0x40,"
"
16);
//擦除字符
-"
2);
//显示负温度
display();
//LCD显示函数
voiddispPositiveTemp(ucharl)//LCD显示正温度
//转换
+"
//显示正温度
//LCD显示函数
main()
ini_lcd1602();
//初始化LCD;
Config905();
//配置905
wr_length_ram(1,0x00,"
Temperatureis:
"
//显示提示字符
while
(1)
{
temp=0x0000;
temp=read_temp();
//读取温度
if(temp!
=tempold)//数据有变化者,重新显示
{
tempnew=temp;
tdatalow=temp&
0xff;
tdataheight=temp>
8;
point=temp&
0x000F;
//取小数位;
point=point*625;
//转换为实际温度
if(temp&
0x8000)//处理负温度
{