远程温度检测交Word文档格式.docx

上传人:b****4 文档编号:17634615 上传时间:2022-12-07 格式:DOCX 页数:33 大小:268.24KB
下载 相关 举报
远程温度检测交Word文档格式.docx_第1页
第1页 / 共33页
远程温度检测交Word文档格式.docx_第2页
第2页 / 共33页
远程温度检测交Word文档格式.docx_第3页
第3页 / 共33页
远程温度检测交Word文档格式.docx_第4页
第4页 / 共33页
远程温度检测交Word文档格式.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

远程温度检测交Word文档格式.docx

《远程温度检测交Word文档格式.docx》由会员分享,可在线阅读,更多相关《远程温度检测交Word文档格式.docx(33页珍藏版)》请在冰豆网上搜索。

远程温度检测交Word文档格式.docx

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的精度较差为±

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1