找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8783|回复: 1
收起左侧

基于51单片机和NRF24L01的无线温度监控设计论文

[复制链接]
ID:343190 发表于 2018-6-1 22:24 | 显示全部楼层 |阅读模式



摘要

本课题以51单片机为核心实现智能化远程无线温度监控。利用18B20温度传感器获取温度信号,将需要测量的温度信号自动转化为数字信号,通过无线模块NRF24L01一对一传送将数据传送到接收机,最终单片机将信号转换成LCD可以识别的信息显示输出。

基于STC89C52RC+NRF24L01+LCD1602的单片机的智能远程无线温度监控系统,设计采用18B20温度传感器,其分辨率可编程设计。本课题设计应用于温度变化缓慢的空间,综合考虑,以降低灵敏度来提高显示精度。设计使用12位分辨率,因其最高4位代表温度极性,故实际使用为11位半,而温度测量范围为-55℃~+125℃,则其分辨力为0.0625℃。

设计使用LCD1602显示器,可显示16*2个英文字符,显示器显示实时温度和过温警告信息。报警采用蜂鸣器加LED组成的声光电报警。

目录
一、设计功能              3
二、系统设计
三、器件选择              4
3.1温度信号采集模块              4
3.2 液晶显示器1602LCD
   3.3 无线NRF24L01              11
四、软件设计
4.1 程序设计流程图
五、设计总结              21
六、参考文献              22
七、硬件原理图              22
八、程序清单              23


一、设计功能
·由单片机、温度传感器、无线模块NRF24L01以及液晶显示器等构成高精度远 程无线温度监测系统。
·温度显示精确到小数点后一位。
·按键设定过温值,过温在液晶屏提示。
  • 系统设计
三、器件选择3.1温度信号采集模块

传统的温度检测大多以热敏电阻为传感器,采用热敏电阻,可满足 40℃度 至 90℃测量范围,但热敏电阻可靠性差,测量温度准确率低,对于1℃的信号是不适用的,还得经过专门的接口电路转换成数字信号才能由微处理器进行处理。

目前常用的微机与外设之间进行的数据通信的串行总线主要有总线, SPI 总线等。其中总线以同步串行 2 线方式进行通信(一条时钟线,一条数据线)。SPI 总线则以同步串行 3 线方式进行通信(一条时钟线,一条数据输入线,一条数据输出线)。这些总线至少需要两条或两条以上的信号线。而单总线( 1-wire bus ),采用单根信号线,既可传输数据,而且数据传输是双向的, CPU 只需一根端口线就能与诸多单总线器件通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。

单总线具有广阔的应用前景,是值得关注的一个发展领域。单总线即只有一根数据线,系统中的数据交换,控制都由这根线完成。主机或从机通过一个漏极开路或三态端口连接到数据线,以允许设备在不发送数据时能够释放总线,而让其它设备使用总线。单总线通常要求外接一个约为 4.7K 的上拉电阻,这样,当总线闲置时其状态为高电平。

3.1.1 DS18B20 数字式温度传感器

DS18B20 数字式温度传感器使用集成芯片,采用单总线技术,其能够有效的减小外界的干扰,提高测量的精度,同时,它可以直接将被测温度转化成串行数字信号供微机处理,接口简单,使数据传输和处理简单化。部分功能电路的集成,使总体硬件设计更简洁,能有效地降低成本,搭建电路和焊接电路时更快,调试也更方便简单化,大大缩短了开发的周期 。

3.1.2 DS18B20特性

采用单总线的接口方式,与微处理器连接时仅需要一条口线即可实现微处理器与 DS18B20 的双向通讯。 单总线具有经济性好,抗干扰能力强,适合于恶劣环境的现场温度测量,使用方便等优点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。

  • 适应电压范围更宽,电压范围:3.05.5V,在寄生电源方式下可由数据线供电
  • 独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯
  • DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温
  • DS18B20在使用中不需要任何外围元件,全部 传感元件及转换电路集成在形如一只三极管的集成电路内
  • 温范围-55+125℃。
  • 可编程 的分辨率为912位,对应的分辨力分别为0.50.250.1250.0625,可实现高精度测温
  • 9位分辨率时最多在 93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快
  • 测量结果直接输出数字温度信号,以" 1-wire bus "串行传送给CPU可选择同时传送CRC校验码,具有极强的抗干扰纠错能力
  • 负压特性:电源极性接反时,芯片不会因发热而烧毁, 但不能正常工作
3.1.3 DS18B20结构

DS18B20的内部结构
3.1.4 DS18B20测温原理
DS18B20测温原理框图
图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振 随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入.
计数器1对 低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重 新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图3中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。

3.1.5 DS18B20的读写功能
DS18B20温度值格式表
这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0, 这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。 例如+125℃的数字输出为07D0H,+25.0625℃的数字输出为0191H,-25.0625℃的数字输出为FE6FH,-55℃的数字输出为FC90H 。
DS18B20温度数据表
DS18B20温度传感器的存储器 DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的EEPRAM,后者存放高温度和低温度触发器 TH、TL和结构寄存器。
TM
R1
R0
1
1
1
1
1

配置寄存器结构
低五位一直都是"1",TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。在DS18B20出厂时该位被设置为0,用 户不要去改动。R1和R0用来设置分辨率,如下表所示:(DS18B20出厂时被设置为12位)
R1
R0
分辨率
温度最大转换时间
0
0
9位
93.75ms
0
1
10位
187.5ms
1
0
11位
375ms
1
1
12位
750ms

温度分辨率设置表
寄存器内容
字节地址
温度值低位LS Byte
0
温度值高位MS Byte
1
高温限值(TH
2
低温限值(TL
3
配置寄存器
4
保留
5
保留
6
保留
7
CRC校验值
8

DS18B20暂存寄存器分布
根据DS18B20的通讯协议,主机(单片机)控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行 复位操作,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500微秒,然后释放,当DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。
约定代码
ROM
33H
读DS1820温度传感器ROM中的编码(即64位地址)
符合ROM
55H
发出此命令之后,接着发出 64 位 ROM 编码,访问单总线上与该编码相对应的DS1820 使之作出响应,为下一步对该 DS1820 的读写作准备。
搜索ROM
0FOH
用于确定挂接在同一总线上 DS1820 的个数和识别 64 位 ROM 地址。为操作各器件作好准备。
跳过ROM
0CCH
忽略 64 位 ROM 地址,直接向 DS1820 发温度变换命令。适用于单片工作。
告警搜索命令
0ECH
执行后只有温度超过设定值上限或下限的片子才做出响应。
温度变换
44H
启动DS1820进行温度转换,12位转换时最长为750ms(9位为93.75ms)。结果存入内部9字节RAM中。
读暂存器
0BEH
读内部RAM中9字节的内容
写暂存器
4EH
发出向内部RAM的3、4字节写上、下限温度数据命令,紧跟该命令之后,是传送两字节的数据。
复制暂存器
48H
将RAM中第3 、4字节的内容复制到EEPROM中。
重调EEPROM
0B8H
将EEPROM中内容恢复到RAM中的第3 、4字节。
读供电方式
0B4H
读DS1820的供电模式。寄生供电时DS1820发送“ 0 ”,外接电源供电 DS1820发送“ 1 ”。
ROM指令表

3.2液晶显示器1602LCD
显示容量:16×2个字符,芯片工作电压:4.5—5.5V,工作电流:2.0mA(5.0V),模块最佳工作电压:5.0V,字符尺寸:2.95×4.35(W×H)mm。
3.2.1引脚功能说明
1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如图
编号
符号
引脚说明
编号
符号
引脚说明
1
VSS
电源地
9
D2
数据
2
VDD
电源正极
10
D3
数据
3
VL
液晶显示偏压
11
D4
数据
4
RS
数据/命令选择
12
D5
数据
5
R/W
读/写选择
13
D6
数据
6
E
使能信号
14
D7
数据
7
D0
数据
15
BLA
背光源正极
8
D1
数据
16
BLK
背光源负极






3.2.2 1602LCD的指令说明及时序
序号
指令
RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
1
清显示
0
0
0
0
0
0
0
0
0
1
2
光标返回
0
0
0
0
0
0
0
0
1
*
3
置输入模式
0
0
0
0
0
0
0
1
I/D
S
4
显示开/关控制
0
0
0
0
0
0
1
D
C
B
5
光标或字符移位
0
0
0
0
0
1
S/C
R/L
*
*
6
置功能
0
0
0
0
1
DL
N
F
*
*
7
置字符发生存贮器地址
0
0
0
1
字符发生存贮器地址
8
置数据存贮器地址
0
0
1
显示数据存贮器地址
9
读忙标志或地址
0
1
BF
计数器地址
10
写数到CGRAM或DDRAM)
1
0
要写的数据内容
11
从CGRAM或DDRAM读数
1
1
读出的数据内容
1602液晶模块内部的控制器共有11条控制指令,如图
3.2.3 1602LCD的一般初始化过程
              延时15mS
              写指令38H(不检测忙信号)
              延时5mS
              写指令38H(不检测忙信号)
              延时5mS
              写指令38H(不检测忙信号)
              以后每次写指令、读/写数据操作均需要检测忙信号
              写指令38H:显示模式设置
              写指令08H:显示关闭
              写指令01H:显示清屏
              写指令06H:显示光标移动设置
              写指令0CH:显示开及光标设置
NRF24L01无线模块
nRF24L01是一款新型单片射频收发器件,工作于2.4 GHz~2.5 GHz ISM频段。内置频率合成器、功率放大器、晶体振荡器、调制器等功能模块,并融合了增强型ShockBurst技术,其中输出功率和通信频道可通过程序进行配置。nRF24L01功耗低,在以-6dBm的功率发射时,工作电流也只有9mA;接收时,工作电流只有12.3mA,多种低功率工作模式(掉电模式和空闲模式)使节能设计更方便[10]。nRF24L01主要特性如下:
1、GFSK调制,硬件集成OSI链路层;
2、具有自动应答和自动再发射功能;
3、片内自动生成报头和CRC校验码;
4、数据传输率为l Mb/s或2Mb/s;
5、SPI速率为0 Mb/s~10 Mb/s;
6、125个频道与其他nRF24系列射频器件相兼容;
7、QFN20引脚4 mm×4 mm封装;
8、供电电压为1.9 V~3.6 V;
3.2.2  引脚功能及描述
nRF24L01的封装及引脚排列如图所示[11]。各引脚功能如图3.5所示。

图3.5 nRF24L01封装图
CE:使能发射或接收;
CSN,SCK,MOSI,MISO:SPI引脚端,微处理器可通过此引脚配置nRF24L01:
IRQ:中断标志位;
VDD:电源输入端;
VSS:电源地;
XC2,XC1:晶体振荡器引脚;
VDD_PA:为功率放大器供电,输出为1.8 V;
ANT1,ANT2:天线接口;
IREF:参考电流输入;
3.2.3 工作模式
通过配置寄存器可将nRF24L01配置为发射、接收、空闲及掉电四种工作模式,如表3.1所示。
3.1 nRF24L01工作模式
模式
PWR_UP
PRIM_RX
CE
FIFO寄存器状态
接收模式
1
1
1
-
发射模式
1
0
1
数据在TX FIFO 寄存器中
发射模式
1
0
1→0
停留在发送模式,直至数据发送完
待机模式2
1
0
1
TX_FIFO为空
待机模式1
1
-
0
无数据传输
掉电
0
-
-
-

待机模式1主要用于降低电流损耗,在该模式下晶体振荡器仍然是工作的;待机模式2则是在当FIFO寄存器为空且CE=1时进入此模式;待机模式下,所有配置字仍然保留。在掉电模式下电流损耗最小,同时nRF24L01也不工作,但其所有配置寄存器的值仍然保留。
3.2.4工作原理
发射数据时,首先将nRF24L01配置为发射模式:接着把接收节点地址TX_ADDR和有效数据TX_PLD按照时序由SPI口写入nRF24L01缓存区,TX_PLD必须在CSN为低时连续写入,而TX_ADDR在发射时写入一次即可,然后CE置为高电平并保持至少10μs,延迟130μs后发射数据;若自动应答开启,那么nRF24L01在发射数据后立即进入接收模式,接收应答信号(自动应答接收地址应该与接收节点地址TX_ADDR一致)。如果收到应答,则认为此次通信成功,TX_DS置高,同时TX_PLD从TX FIFO中清除;若未收到应答,则自动重新发射该数据(自动重发已开启),若重发次数(ARC)达到上限,MAX_RT置高,TX FIFO中数据保留以便在次重发;MAX_RT或TX_DS置高时,使IRQ变低,产生中断,通知MCU。最后发射成功时,若CE为低则nRF24L01进入空闲模式1;若发送堆栈中有数据且CE为高,则进入下一次发射;若发送堆栈中无数据且CE为高,则进入空闲模式2。
接收数据时,首先将nRF24L01配置为接收模式,接着延迟130μs进入接收状态等待数据的到来。当接收方检测到有效的地址和CRC时,就将数据包存储在RX FIFO中,同时中断标志位RX_DR置高,IRQ变低,产生中断,通知MCU去取数据。若此时自动应答开启,接收方则同时进入发射状态回传应答信号。最后接收成功时,若CE变低,则nRF24L01进入空闲模式1。在写寄存器之前一定要进入待机模式或掉电模式。
3.2常用配置寄存器
地址(H)

寄存器名称

功能
00

CONFIG

设置24L01工作模式
01

EN_AA  

设置接收通道及自动应答
02

EN_RXADDR

使能接收通道地址
03

SETUP_AW

设置地址宽度
04

SETUP_RETR

设置自动重发数据时间和次数
07

STATUS

状态寄存器,用来判定工作状态
0A~0F

RX_ADDR_P0~P5

设置接收通道地址
10

TX_ADDR

设置接收接点地址
11~16

RX_PW_P0~P5

设置接收通道的有效数据宽度
3.2.5 配置字
SPI口为同步串行通信接口,最大传输速率为10 Mb/s,传输时先传送低位字节,再传送高位字节。但针对单个字节而言,要先送高位再送低位。与SPI相关的指令共有8个,使用时这些控制指令由nRF24L01的MOSI输入。相应的状态和数据信息是从MISO输出给MCU。
nRF24L0l所有的配置字都由配置寄存器定义,这些配置寄存器可通过SPI口访问。nRF24L01 的配置寄存器共有25个,常用的配置寄存器如表3.2所示。经过综合考虑,如果采用单芯片自己焊接无线模块可能会产生以下问题:电路板电磁影响较大,天线不好弄,在焊接过程中易损坏芯片。所以最终决定采用已集成了的模块进行课题的制作。模块PCB版图提供于下:


4、软件设计4.1.1 温度检测温度检测模块软件设计DS18B20的测温原理遵循严格的单总线协议,以确保通信数据的准确性,单片机通过时序来写入和读出DS18B20中的数据,包括初始化、读l、读0,写1、写0等操作。传感器复位后,接收应答信号,跳过读ROM中序列号后,启动温度转换,等待温度转换完毕后,保存数据。如此反复,完成所有操作,其流程图如图所示。
4.1.2无线发射模块软件设计
首先进行初始化操作,初始化包括设置单片机I/O和SPI相关寄存器两部分其可以和nRF24L01通信。通过SPI总线配置射频芯片使其进入正确的工作模式。发射数据时,首先将nRF24L01配置为发射模式。接着把发送端待发射数据的目标地址TX—ADDR和数据TX—PLD写入nRF24L01缓冲区,延时后发射数据,其流程图如图4.2所示[14]。

图4.2 无线发射软件流程图
4.1.3无线接收模块软件设计
接收数据时,首先将nRF24L01配置为接收模式。接着延迟进入接收状态等待数据的到来。当接收方检测到有效地址和CRC时,就将数据包储存在接收堆栈中,同时状态寄存器中的中断标志位RX—DR置高,产生中断使IRQ引脚变为低电平,以便通知MCU去取数据,其流程图如图4.3所示。

图4.3 无线接收软件流程图

4.2软件的总体设计4.2.1 发送部分
发送部分的一个循环的总体思路是这样的先初始化DS18B20,从DS18B20读出温度(DS18B20采用默认的12位精度),将得到的温度值的反码转化成十进制,取温度数组的高两位(即整数部分)写入发送数据数组,然后初始化nRF24L01,将温度发送,其流程图如图4.5所示[15]。

图4.5 发射部分总体流程图
4.2.2接收部分
接收部分的总体思路是这样的,首先还是初始化nRF24L01,然后进入大循环判断状态寄存器是否有接收中断。如果有就从FIFO_buffer读入二进制数据,然后将数据转换成十进制在数码管上显示出来,其流程图如图4.6所示。


               图4.6 接收部分总体流程图

  登临对晚晴 翔云列晓阵                                          


     四川工程职业技术学院 电气系2012级电子信息一班 张登翔 201212020216

  登临对晚晴 翔云列晓阵                                          


     四川工程职业技术学院 电气系2012级电子信息一班 张登翔 201212020216

五、设计总结
在这课题设计中我学到了很多东西,获益匪浅。本次课题以51单片机为核心实现了远程无线智能化温度监控,过温警告。
利用温度传感器获取被控对象指标,通过温度传感器将需要测量的温度信号转化为数字电信号,通过单总线与MCU进行传输,再经单片机转换成温度值经过NRF24L01无线模块进行传输,再由接收机通过NRF24L01进行接收,最终由接收机进行处理,并将当前所监控的温度值,通过LCD1602进行显示。并且可以由按键进行温度的最大最小值得设定,最终将监控温度设定在一个范围内。若温度过高或过低都可由报警模块进行报警。
在设计此次课题的初期,考虑到手中有两块闲置的单片机,并且有一块1602显示模块及两块无线模块。所以快速的决定做一个无线的课题,可是无线控制什么呢?于是上网百度了一下,发现在现代的工业控制中,温度是一个非常重要的因数。并且在电子行业中,温度也是非常重要的,而且温度过高对电子产品的损害非常厉害。于是决定做一个关于温度监控的课题。这是设计之初的目的。
但是在设计的过程中,暴露的问题非常之多。而且反了一个致命的错误。由于本人在焊接NRF24L01模块时,没有查阅相关的模块供电电压,直接用了单片机的VCC对其进行供电。导致模块被烧坏,本人深深的心痛啊。悔不当初,不看说明书,自己想怎么干就怎么干。在模块被烧坏后,一直处于后悔中,但是想想,就当花钱买个教训吧,于是重新振作起来,上网淘宝淘宝,当新的模块到手后,这下,我并不急于对无线模块进行焊接,反而是将重点转向了模块供电电压部分的设计,由于模块是3.3V供电的(这是后来查阅说明书了解到的),可是自己手中只有7805和7809这两种稳压芯片。并无3.3v的稳压管及稳压模块。于是向盛老师求助。最终盛老师给了我两块AZ1117T,电源问题才得以解决。在此感谢盛老师。还有就是单片机对于RF24L01高频模块的读写、操作等比较复杂,查找的资料也很难理解。还有就是DS18B20的时序也有一定难度。
不过,通过这次的学习和实践,我学会了如何看待问题,解决问题。例如,调试无线收发时,1602老显示乱码,而且一直跳跃不定,又例如后来整合程序时,温度不正确,老是成不断上升趋势,后来检查程序后才发现是没有将温度的全局变量清零,导致每次循环累加。

七、硬件原理图及调试7.1系统硬件原理图
发射机

接收机


完整的Word格式文档51黑下载地址(内含源码):
基于51单片机和NRF24L01的无线温度监控.doc (1.37 MB, 下载次数: 139)
回复

使用道具 举报

ID:1069354 发表于 2023-4-6 12:06 | 显示全部楼层
可以可以,多谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表