引言
温湿度是影响粮食仓储过程中品质好坏的主要因素。目前我国许多粮食仓储单位仍采用测温仪器与人工抄录、管理相结合的传统方法,这不仅效率低,而且往往由于判断失误和管理不力造成局部或大范围粮食霉变的现象时有发生。
本文介绍采用nRF905射频模块、多个DS18B20构成的测温网络、湿度传感器HS1101组成一种粮库无线全数字温湿度监控系统,彻底摆脱了传统的人工抄录方法,能实时检测粮仓中的温湿度,并根据所测的数据控制空调器、除湿机等外部设备的运行,确保粮仓内合适的温湿度环境,该设计具有简单可靠和灵活方便的特点。
硬件设计
系统硬件结构由两个部分组成:中央监控系统CMS和多个远程终端节点RTN(见图1)。
中央监控系统主要包括监控计算机和主接收器,监控计算机与主接收器之间通过串口(RS232)来通信,控制远程终端节点单片机(P89LPC916)读取温湿度值、并且实时记录读取的通道编号、DS18B20编号、时间。可以作为原始资料的积累,用于将来的数据分析,人机界面和单片机的通信用Visual Basic编程。
主接收器:通过无线射频 模块nRF905以点对点或广播方式发送监控计算机的各种控制命令,在命令发出以后,采用逐一扫描的方式探测各个数据终端有没有发送通信请求;若有则执行相应的要求。
远程终端主要由P89LPC916单片机、射频模块nRF905、DS18B20的测温网络、湿度传感器HS1101、外部设备驱动器及放大调整电路组成。通过P89LPC916单片机的3个通用IO连接多个DS18B20构成“一线总线”通信,实现DS18B20的测温网络。湿度传感器HS1101探测现场环境湿度,经过A/D转换后变为数字信号。现场检测信号由P89LPC916单片机进行处理,最后将数据通过nRF905收发器送出。当P89LPC916单片机检测到异常的储粮温湿度时,启动风机等外部设备,送信号到监控计算机和报警电路,有声光报警,提醒工作人员。
DS18B20
美国Dallas公司的DS18B20数字式温度传感器,工作电压3.0~5.5V,温度测量范围-55~125℃,在-10~85℃范围内测量精度为±0.5℃。与传统的热敏电阻温度传感器不同,它能够直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式,可以分别在93.75ms和750ms内将温度值转化为9位和12位的数字量。该芯片在检测点已把被测信号数字化了,因此在单总线上传送的是数字信号。本系统设计中选择了该传感器,使得系统温度传感器模块的硬件极其简单,只占用单片机系统的一个数据I/O口加一个上拉电阻即可。
DS18B20因其序列号在出厂前已写入片内ROM中,主机在进入操作程序前必须逐一接入DS18B20用读ROM(33H)命令将该DS18B20的序列号读出。当主机需要对众多在线DS18B20的某一个进行操作时,首先要发出匹配ROM命令(55H),接着主机提供64位序列码,之后的操作就是针对该DS18B20的。在DS18B20组成的多路测温系统中,主机在发出跳过ROM命令之后,再发出统一的温度转换启动码44H,就可以实现所有DS18B20的统一转换。再经过1s后就可以用很少的时间去逐一地读回每个DS18B20的温度数据。
射频芯片nRF905
nRF905是挪威Nordic公司推出的单片射频发射器芯片,工作电压为1.9~3.6V,工作于433/868/915MHz3个ISM频道。nRF905可以自动完成处理字头和CRT(循环冗余码校验)的工作,可由片内硬件自动完成曼彻斯特编码/解码,使用SPI接口与微控制器通信,配置非常方便,其功耗非常低,以-10dBm的输出功率发射时电流只有11mA,在接收模式时电流为12.5mA。
nRF905传输数据时为非实时方式,即发送端发出数据,接收端收到后先暂存于芯片存储器内,外面的MCU可以在需要时再到芯片中去取。nRF905一次的数据传输量最多为32B。
无线数据传送的实现
本设计中将单片机P89LPC916的SPI接口和nRF905的SPI接口相连,另外再选几个I/O口连接nRF905的输入输出信号,如图2所示。
nRF905在正常工作前应由P89LPC916先根据需要写好配置寄存器,其后的工作主要是两个:发送数据和接收数据。
发送数据时,P89LPC916先把nRF905置于待机模式(PWR_UP引脚为高、TRX_CE引脚为低),然后通过SPI总线把发送地址和待发送的数据都写入相应的寄存器中,之后把nRF905置于发送模式(PWR_UP、TRX_CE和TX_EN全置高),数据就会自动通过天线发送出去。为了数据可靠地传输,将射频配置寄存器中的自动重发位(AUTO_RETRAN)设为有效,数据包重复不断地一直向外发,直到P89LPC916把TRX_CE拉低,退出发送模式为止。
接收数据时,P89LPC916把nRF905的TRX_CE引脚置为高电平,TX_EN引脚拉为低电平后,就开始接收数据。本设计中P89LPC916设定的40s内一直判断nRF905的DR引脚是否变高,若为高,则证明接收到了有效数据,可以退出接收模式,若一直没有接收到,待时间到时也退出接收模式。退出后在待机模式,P89LPC916通过SPI总线把nRF905内部的接收数据寄存器中的数据读出,即接收到的有效数据。
软件设计
本系统设计的重点是控制nRF905的程序设计,首先是对nRF905进行初始配置,配置完成后按需要编写用户数据的发送或接收程序。
初始化
·初始化nRF905的射频配置寄存器
这些寄存器中有很多信息,必须根据实际情况进行配置,本设计中nRF905外接16MHz晶体,XOF应配置为0 11;PA_PWR为发射功率、RX_RED_PWR为接收灵敏度,可根据需要配置;另外还有发送地址、接收地址、发送数据和接收数据的长度(字节数),可根据实际应用配置。注意这组寄存器中还有接收时的实际地址,而发送地址在其他单独寄存器中。
·配置nRF905的发送地址
在实际工作中,nRF905可以自动滤除地址不相同的数据,只有地址匹配且校验正确的数据才会被接收,并存储在接收数据寄存器中。本设计中配置最多4个字节(32位),发送端的发送地址应与接收端设备的接收地址相同。