摘要
本课题以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.0~5.5V,在寄生电源方式下可由数据线供电。
- 独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
- DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温。
- DS18B20在使用中不需要任何外围元件,全部 传感元件及转换电路集成在形如一只三极管的集成电路内。
- 温范围-55℃~+125℃。
- 可编程 的分辨率为9~12位,对应的分辨力分别为0.5℃、0.25℃、0.125℃和0.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和结构寄存器。
配置寄存器结构 低五位一直都是"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 |
温度分辨率设置表
DS18B20暂存寄存器分布 根据DS18B20的通讯协议,主机(单片机)控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行 复位操作,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500微秒,然后释放,当DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。 | | | | | 读DS1820温度传感器ROM中的编码(即64位地址) | | | 发出此命令之后,接着发出 64 位 ROM 编码,访问单总线上与该编码相对应的DS1820 使之作出响应,为下一步对该 DS1820 的读写作准备。 | | | 用于确定挂接在同一总线上 DS1820 的个数和识别 64 位 ROM 地址。为操作各器件作好准备。 | | | 忽略 64 位 ROM 地址,直接向 DS1820 发温度变换命令。适用于单片工作。 | | | 执行后只有温度超过设定值上限或下限的片子才做出响应。 | | | 启动DS1820进行温度转换,12位转换时最长为750ms(9位为93.75ms)。结果存入内部9字节RAM中。 | | | | | | 发出向内部RAM的3、4字节写上、下限温度数据命令,紧跟该命令之后,是传送两字节的数据。 | | | 将RAM中第3 、4字节的内容复制到EEPROM中。 | | | 将EEPROM中内容恢复到RAM中的第3 、4字节。 | | | 读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的指令说明及时序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 | | | 1 | 1 | 1 | | | 1 | 0 | 1 | | | 1 | 0 | 1→0 | | | 1 | 0 | 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 |
| |
| 设置24L01工作模式 | 01 |
| |
| 设置接收通道及自动应答 | 02 |
| |
| 使能接收通道地址 | 03 |
| |
| 设置地址宽度 | 04 |
| |
| 设置自动重发数据时间和次数 | 07 |
| |
| 状态寄存器,用来判定工作状态 | 0A~0F |
| |
| 设置接收通道地址 | 10 |
| |
| 设置接收接点地址 | 11~16 |
| |
| 设置接收通道的有效数据宽度 | 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)
|