基于DS18B20的远程粮仓温控系统
扫描二维码
随时随地手机看文章
1 引言
粮食温度检测是储备库中防止粮食霉烂、保质存放的重要环节。对于一个农业大国来讲,粮食生产、需求与储备量都很大。大量粮食在储备的过程中常因粮食湿度过大而升温发热,导致粮食大量腐烂变质,给国家带来巨大损失。所以粮仓监控系统中温度测量是整个系统的主要功能之一。
本文介绍一种以单线数字温度传感器DS18B20为温度敏感元件的粮仓温控系统,系统以微型计算机为上位机, 89C51单片机为检测分机,DS18B20数字温度传感器直接与分机连接,分机与测温主机通过RS-485总线网进行通信,系统所有操作通过菜单命令完成。本文主要围绕下位机数据采集部分进行论述,并结合粮仓监控系统,对DSl8B20的这种单总线技术及其在本系统中的具体应用进行了讨论。
2 系统硬件设计
2.1 系统的总体设计
整个系统从结构上可分为三层:由微型计算机构成上位机——用户监控层,51 单片机系统分别构成测温主机——控制层和分机——温度数据采集层。上位机通过串行口与测温主机交换数据。测温主机与多台分机采用主从分布式结构。系统组成结构如图1 所示,测温主机与上位机通过RS-232 总线连接,测温分机与主机通过RS-485 总线连接。一台主机最多可管理64 台分机,一台分机可以测试大约1000 个温度点。本设计适用于中小型粮库。
图1 系统结构图
2.2 温度数据采集模块的设计
DS18B20是美国DALLAS公司生产的数字温度传感器芯片,具有结构简单、体积小、功耗小、抗干扰能力强、使用方便等优点。可以在三根线上同时并联多个温度传感器,每台分机上可以连接多根电缆,每根电缆上可以并联几十个点,构成串行总线工作方式。由于18B20芯片送出的温度信号是数字信号,因此简化了A/D转换的设计,提高了测量效率和精度;并且芯片的ROM中存有其唯一标识码,即不存在相同标识码的DS18B20,特别适合与微处理芯片构成多点温度测控系统。
每台测温分机的P0~P3 口分别可接N 个DS18B20 传感器(N<40)。上位机控制每台分机工作,实现多点测温。采集到的温度数据通过RS-485 通信总线连成的总线型网络进行传输,测温分机接收到DS18B20 所传送的温度数据,并将这些数据进行简单的处理发往上位机。主程序实现对DS18B20 的实时数据采集,将结果存贮于单片机的RAM 区。中断服务程序实现测温分机与上位机的通信。
测温分机按照上位机的命令来完成温度数据采集和发送工作。其先将采集的数据存放于外部存储器SRAM中,当收到上位机的上传数据命令时,由发送子程序将数据进行简单处理后通过串口TXD端送出。在测温主机的配合下,数据上传到上位机并在上位机的监控界面显示给用户。
2.3 RS-485总线在温控系统中的设计
在系统中用51单片机构成主从分布式测控系统, 具有价格低、控制功能强等许多特点。然而在应用中,测温主机与各粮仓相距较远,距离从几十米到几千米不等。对此远程粮仓,系统采用RS-485总线实现数据的远程传输。进行串行通信的主机与分机的RS-485接口电路如图2.3所示。该电路以MAX485芯片为核心器件进行半双工通信,具有通信功能强、可靠性高、程序设计简单等特点。
图2 典型RS-485(半双工)通信网
在使用RS-485接口时,对于特定的传输线径,从发生器到负载,其数据信号传输所允许的最大电缆长度是数据信号速率的函数,这个长度主要是受信号失真及噪声等影响所限制。当数据信号速率降低到90Kbit/S以下时,假定最大允许的信号损失为6dBV时,则电缆长度被限制在1200M。实际上,在实用时是完全可以取得比它大的电缆长度。当使用不同线径的电缆时,取得的最大电缆长度是不相同的。例如:当数据信号速率为600Kbit/S时,采用24AWG电缆,计算可知最大电缆长度是200m,若采用19AWG,电缆则电缆长度将大于200m;若采用28AWG电缆,则电缆长度只能小于200m。
RS-485总线是半双工方式,即总线上某一时刻不能同时出现发送和接收的情况。此方式用于多站互连时,可节省信号线,方便地实现RS-485的多点通信功能。考虑到中小型仓库地理位置特点,系统采用较低的接收、发送波特率,以换取更远距离的传送,此设计完全可以满足系统需求?/p>
3 软件设计
3.1 系统软件的工作流程
DS18B20 以单总线协议工作,测温分机首先发送复位脉冲命令,使信号线上所有的DS18B20 芯片都被复位,接着发送ROM 操作命令,使序列号编码匹配的DS18B20 被激活进入接收内存访问命令状态;内存访问命令完成温度转换、温度读取等工作(单总线在ROM 命令发送之前存储命令和控制命令不起作用)。DS18B20 工作流程见图3 所示。
图3 DS18B20 工作流程图
系统以ROM 命令和存储器命令的形式对DS18B20 操作。ROM 操作命令均为8 位,命令代码分别为:读ROM(0x33H)、匹配ROM(0x55H)、跳过ROM(0xCCH) 、搜索ROM(0xF0H) 和告警搜索(0xECH) 命令;存储器操作命令为:写暂存存储器(0x4EH) 、读暂存存储器(0xBEH)、复制暂存存储器(0x48H)、温度变换(0x44H)、重新调出EERAM(0xB8H)以及读电源供电方式(0xB4H)命令。其对时序及电特性参数要求较高,必须严格按照它的时序要求去操作。DS18B20 的数据读写由测温分机来完成,包括初始化、读数据和写数据。
系统软件采用模块化程序设计,主从式结构通信方式。规定总线上有一个测温主机和64台分机,分机地址唯一。初始化完成后各分机均处于监听状态,采用中断方式工作,测温分机接受上位机命令,向DS18B20发出地址匹配命令帧,进入等待状态,每一帧数据位都对应着不同意义,若地址匹配成功则进行响应分机,否则继续等待,直到等待超时而重发命令。温度采集模块负责数据的采集工作。
当缓冲区有数据时产生中断,程序转向中断服务子程序入口,中断子程序如下:
void SerialInterrupt() interrupt 4 //中断服务子程序
{
loop0:if(RI);SlaveNo=SBUF;
RI=0; while (! RI); //等待下一个命令
loop1:RI=0;
SensorNo=SBUF;
if(SlaveNo==0x81&SensorNo<0x80) //判别数据是否合法
{
while(1)
{
Gettemp(SensorNo); if(RI) goto loop1;
}
}
else goto loop0;
} //否则继续等待
3.2 DS18B20的时延及读写时序问题
为保证DS18B20的严格I/O时序,需要作较精确的延时。在DS18B20的操作中,短时间延时是指10us以下的延时,在汇编语言下采用若干个NOP指令即可。因C51编译器提供了若干内部函数,(_nop_()函数为其中之一)其编译结果就是在对应位置嵌入一个nop汇编指令,所以短时间延时可利用_nop_()函数实现。较长时间延时指10us以上的延时。在DS18B20操作中,用到的较长时间延时有15us、90us、270us、540us等。因这些延时均为15us的整数倍,可编写一个Delayl5(n)函数,该函数可实现约15us×n的延时。
DS18B20的初始化包括测温分机发送的复位脉冲和其向测温分机返回的存在脉冲。总线在开始时刻发出一个最短为480us的低电平复位脉冲,接着在该时刻释放总线并进入接收状态,DS18B20在接收到总线的电平上升沿,等待15—60us后在下一时刻发出60—240us时延的低电平存在脉冲信号,表明器件已接在总线上。时序如图4所示。
图4 初始化图
当总线于该时刻从高电平拉至低电平时,就产生“写”的时间间隙。从该时刻开始15us之内,应将所需写的位送到总线上,DS18B20在该时刻后的15—45us期间内对总线采样,低电平写入0,高电平写入1。连续写两位之间的间隙应大于1us。写时序如图5所示。
图5 读写时序图
起始时刻将总线从高电平拉至低电平,持续15us之后将总线释放,就产生读时间间隙。测温分机必须在该时刻之后的15us之内完成读总线状态,并在45us内释放总线,连续读两位之间的间隙应大于1us。读时序如图5所示。
4 总结
本文论述了以DS18B20 为传感器,AT89C51 单片机为控制核心组成的远程粮仓温控系统。由于DS18B20 采用数字单总线技术,使得系统电路简单,易于扩展,加上总线数字化,使得系统的抗干扰性能好,可靠性高,测温范围比较宽(-55~125℃),与传统的温控系统相比还具有较高的性价比。此外,系统的应用范围不仅仅局限于粮仓领域,稍作改动还可作为其它自控领域的解决方案,如烟叶烘烤箱控制系统等。
本文作者创新观点:采用新型数字温度传感器DS18B20,并将其与51 单片机、RS-485总线技术有机的结合在一起,组成抗干扰性能较强的温控系统。系统具有较高的性价比,已成功应用于许昌、尉氏等中型粮库中。该系统避免了因温度过高而导致大量粮食发霉变质所造成的损失,对于中型粮库可产生经济效益百万元以上,在粮食储藏技术领域内具有广阔的市场前景。