远程温度检测交Word文档格式.docx
- 文档编号:17634615
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:33
- 大小:268.24KB
远程温度检测交Word文档格式.docx
《远程温度检测交Word文档格式.docx》由会员分享,可在线阅读,更多相关《远程温度检测交Word文档格式.docx(33页珍藏版)》请在冰豆网上搜索。
1系统方案分析与选择论证
1.1系统方案设计
方案:
采用传统的AT89S52单片机作为主控芯片。
此芯片价格便宜、操作简便,低功耗,比较经济实惠。
采用NRF24L01无线射频模块进行通信,NRF24L01是一款高速低功耗的无线通信模块。
他能传输上千米的距离(加PA),而且价格较便宜、,采用SPI总线通信模式电路简单,操作方便。
1.1.3温度传感方案
采用美国DALLAS公司生产的DS18B20可组网数字温度传感器芯片,具有耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。
经济,方便。
使用DS18B20线路简单,编程容易,但是比AD590精度低。
AD590还需要其它辅助电路,线路复杂,编程难度大,但是温度精确。
考虑到电路的设计,成本,还有多点通信,我们选择方案二,即用DS18B20作为本系统的温度传感器。
1.1.4显示模块方案
采用字符液晶LCD1602显示信息,1602是一款比较通用的字符液晶模块,能显示字符和数字等信息,且价格便宜,容易控制。
1.2系统最终方案
发送端:
发送端由温度传感器DS18B20,AT89S52单片机,nRF24L01无线射频模块,数码管显示模块和外设继电器组成。
图1.2发送端系统方框图
接收端:
接收端由AT89S52单片机,nRF24L01无线射频模块,LCD1602显示模块,报警电路和串口组成。
图1.3接收端系统方框图
2主要芯片介绍和系统模块硬件设计
2.1AT89S52
AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52在众多嵌入式控制应用系统中得到广泛应用。
2.1.1单片机控制模块
单片机控制模块由AT89S52最小系统组成,其中包括单片机,晶振电路和复位电路。
(1)、晶振电路
晶振电路由两个30pF电容和一个12MHz晶体振荡器构成,接入单片机的X1、X2引脚。
(2)、复位电路
单片复位端低电平有效。
单片机最小系统如图2.2:
图2.2单片机最小系统
2.2单片2.4GHznRF24L01无线模块
2.2.1nRF24L01芯片概述
nRF24L01是一款新型单片射频收发器件,工作于2.4GHz~2.5GHzISM频段。
内置频率合成器、功率放大器、晶体振荡器、调制器等功能模块,并融合了增强型ShockBurst技术,其中输出功率和通信频道可通过程序进行配置。
nRF24L01功耗低,在以-6dBm的功率发射时,工作电流也只有9mA;
接收时,工作电流只有12.3mA,多种低功率工作模式(掉电模式和空闲模式)使节能设计更方便。
2.2.3工作模式
通过配置寄存器可将nRF241L01配置为发射、接收、空闲及掉电四种工作模式,如表所示。
待机模式1主要用于降低电流损耗,在该模式下晶体振荡器仍然是工作的;
待机模式2则是在当FIFO寄存器为空且CE=1时进入此模式;
待机模式下,所有配置字仍然保留。
在掉电模式下电流损耗最小,同时nRF24L01也不工作,但其所有配置寄存器的值仍然保留。
nRF24L01单端匹配网络:
晶振,偏置电阻,去耦电容。
图2.6nRF24L01单端50Ω射频输出电路原理图
2.3温度传感器DS18B20
DALLAS最新单线数字温度传感器DS18B20简介新的"
一线器件"
体积更小、适用电压更宽、更经济Dallas半导体公司的数字化温度传感器DS1820是世界上第一片支持"
一线总线"
接口的温度传感器。
一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。
DS18B20、DS1822"
数字化温度传感器同DS1820一样,DS18B20也支持"
接口,测量温度范围为-55°
C~+125°
C,在-10~+85°
C范围内,精度为±
0.5°
C。
DS1822的精度较差为±
2°
C。
现场温度直接以"
的数字方式传输,大大提高了系统的抗干扰性。
2.3.1DS18B20管脚配置和内部结构
内部结构:
图2.8DS18B20内部结构图
(1)光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。
64位光刻ROM的排列是:
开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。
光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。
(2)
DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:
用16位符号扩展的二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S为符号位。
bit7
bit6
bit5
bit4
bit3
bit2
bit1
bit0
LSByte
23
22
21
20
2-1
2-2
2-3
2-4
bit15
bit14
bit13
bit12
bit11
bit10
bit9
bit8
MSByte
S
26
25
24
图2.9DS18B20温度值格式表
这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;
如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。
例如+125℃的数字输出为07D0H,+25.0625℃的数字输出为0191H,-25.0625℃的数字输出为FF6FH,-55℃的数字输出为FC90H。
2.3.2DS18B20的硬件设计
DS18B20在本系统中与发送端单片机的P3.3连接。
如图:
图2.10的DS18B20硬件连接图
2.4显示模块
本系统显示模块分两种:
1、接收端显示模块用LCD1602液晶模块。
2、发送端使用数码管显示。
2.4.1接收端显示模块
本设计在接收端部分采用LCD1602液晶显示模块来显示温度,,P0由上拉电阻提高驱动能力,作为数据输出并作为LCD的驱动,P2口的P2.7-P2.6分别作为液晶显示模块的使能信号E,数据/命令选择RS,R/W端则配置成写。
具体电路如图2.11所示。
2.4.2发送端显示模块
本设计在发送端部分采用数码管显示,P0由上拉电阻提高驱动能力,作为数据输出。
P2.7-P2.4分别作为数码管位显示S1-S4。
如图2.12所示:
图2.12发送端数码管显示连接
2.5报警电路
当外界温度超过预设温度上下限时,为更加有效的引起用户的注意,及时关注温度的变化,本系统设计了声报警电路。
该电路由蜂鸣器和NPN三极管组成,具体电路如图2.13所示。
图2.13接收端报警电路
2.7电源电路设计
A、本系统单片机需要一组+5V电源,
B、本系统无线模块需要一+3.3V电源,采用电源电路如图2.16所示。
该电路把先前转换得到的+5V电源经过低压差电压调节器ams1117转换为+3.3V电源。
2.8其他外围电路
本系统需要在温度过高的情况下驱动继电器,打开通风系统。
继电器连接发送端单片机P3.7口。
3系统软件设计
3.1.1发送端软件设计
本系统发送端采用DS18B20温度传感器采集温度,经AT89S52收集处理数据,温度数据数码管显示,如果温度过高,则单片机控制继电器工作,再由nRF24L01模块发送到接收端。
其中包括DS18B20和nRF24L01模块的初始化配置。
软件流程图如3.1。
图3.1发送端程序流程图
3.1.2接收端软件设计
本系统接收端采用nRF24L01无线模块接收发送端传来的温度数据,经单片机AT89S52在LCD1602液晶显示器上显示。
温度过高则报警电路工作。
最后单片机把数据经串口传输给PC机。
其中包括nRF24L01模块和LCD1602液晶显示器的初始化。
流程图如3.2。
图3.2接受端程序流程图
5硬件电路板设计
电源模块:
由VCC提供+5V高电平,Power接口接入,经过LM1117降压为+3.3V电平,为nRF24L01模块提供高电平。
显示模块:
P1口接无线模块的控制端口。
P0.0—P0.7接数码管段选端D0-D7。
无线模块控制模块:
无线模块由P2口控制。
温度采集模块:
温度采集由DS18B20I/O端接入单片机P3.3口。
单片机最小系统:
X1,X2接外部振荡电路,RESET端接复位电路,EA端接高。
接收端由单片机主控电路、USB电源+5V接入、串口通信电路、无线模块供电电路、LCD1602液晶显示接口和报警电路组成。
单片机主控电路由AT89S52最小系统组成。
+5V电源由USB接口提供给单片机和其他模块。
接入后发光二极管点亮。
串口通信模块由DB9和RS232的外围电路组成。
串口通信一边接单片机的RXD和TXD,一边连接PC机。
LCD1602显示模块数据端接单片机P0口,RS,RW,E分别接单片机的P2.0-P2.2。
报警电路接单片机的P1.5脚。
由一个三极管和喇叭组成。
发送程序
#include<
reg52.h>
intrins.h>
#defineuintunsignedint
#defineucharunsignedchar
#defineTX_ADDR_WITDH5//发送地址宽度设置为5个字节
#defineRX_ADDR_WITDH5
#defineTX_DATA_WITDH5
#defineRX_DATA_WITDH5
/******************************************************************
//nRF24L01指令格式:
*******************************************************************/
#defineR_REGISTER0x00//读寄存器
#defineW_REGISTER0x20//写寄存器
#defineR_RX_PLOAD0x61//读RXFIFO有效数据,1-32字节,当读数据完成后,数据被清除,应用于接收模式
#defineW_TX_PLOAD0xA0//写TXFIFO有效数据,1-32字节,写操作从字节0开始,应用于发射模式
#defineFLUSH_TX0xE1//清除TXFIFO寄存器,应用于发射模式
#defineFLUSH_RX0xE2//清除RXFIFO寄存器,应用于接收模式
#defineREUSE_TX_PL0xE3//重新使用上一包有效数据,当CE为高过程中,数据包被不断的重新发射
#defineNOP0xFF//空操作,可以用来读状态寄存器
//nRF24L01寄存器地址
#defineCONFIG0x00//配置寄存器
#defineEN_AA0x01//“自动应答”功能寄存
#defineEN_RX_ADDR0x02//接收通道使能寄存器
#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状态寄存器
//*********************************************************************************
ucharsta;
//状态变量
#defineRX_DR(sta&
0x40)//接收成功中断标志
#defineTX_DS(sta&
0x20)//发射成功中断标志
#defineMAX_RT(sta&
0x10)//重发溢出中断标志
sbitCE=P3^5;
sbitIRQ=P3^6;
sbitCSN=P3^4;
sbitMOSI=P3^2;
sbitMISO=P3^1;
sbitSCK=P3^3;
sbitLED=P1^7;
sbitDQ=P1^0;
ucharcodeTX_Addr[]={0x34,0x43,0x10,0x10,0x01};
ucharRX_Buffer[RX_DATA_WITDH];
ucharTemp_Value[]={0x00,0x00};
ucharTemp;
ucharDisplay_Digit[]={0,0,0,0};
bitDS18B20_IS_OK=1;
ucharcodedf_tab[]={0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9};
//decimalfraction
void_delay_tus(uintx)
{
while(--x);
}
void_delay_us(uintx)
uinti,j;
for(j=0;
j<
x;
j++)
for(i=0;
i<
12;
i++);
void_delay_ms(uintx)
120;
sbitbeep=P1^5;
//定义蜂鸣器口
//////////////////////////////////////
/********报警声音********/
voidbi(uintt)
intc,n;
for(c=0;
c<
t;
c++)
{
for(n=0;
n<
50;
n++)
beep=~beep;
//按位取反beep
}
//return(t);
/**************************************************/
/*函数功能:
DS18B20初始化 */
/*入口参数:
无*/
/*出口函数:
status*/
ucharDS18B20_Init(void)
ucharstatus;
DQ=1;
_delay_tus(10);
DQ=0;
_delay_tus(90);
_delay_tus(8);
status=DQ;
_delay_tus(100);
returnstatus;
从DS18B20读取一字节 */
dat(返回读取到数据)*/
ucharRead_One_Byte(void)
uchari,dat=0;
_nop_();
for(i=8;
i>
0;
i--)
DQ=0;
dat>
>
=1;
DQ=1;
_nop_();
_nop_();
if(DQ)
dat|=0x80;
_delay_tus(30);
returndat;
向DS18B20写一字节 */
dat(把dat写入DS18B20)*/
无 */
voidWrite_One_Byte(uchardat)
uchari;
DQ=dat&
0x01;
_delay_tus(5);
从DS18B20读取数据(数据) */
无 */
voidRead_Temp(void)
ucharng=0;
if(DS18B20_Init()==1)
DS18B20_IS_OK=0;
else
Write_One_Byte(0xcc);
Write_One_Byte(0x44);
DS18B20_Init();
Write_One_Byte(0xbe);
Temp_Value[0]=Read_One_Byte();
Temp_Value[1]=Read_One_Byte();
DS18B20_IS_OK=1;
if((Temp_Value[1]&
0xf8)==0xf8)
Temp_Value[1]=~Temp_Value[1];
Temp_Value[0]=~Temp_Va
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 远程 温度 检测