摘要:随着电子技术的发展,家用电器和办公设备的智能化、系统化已成为发展趋势,而这些高性能几乎都要通过单片机实现。同时,温度作为与我们生活息息相关的一个环境参数,对其的测量和研究也变得极为重要。故温度检测报警系统在现代生活、生产中得到了越来越广泛的应用。本论文介绍了采用温度传感器DS18B20作为温度采集器、ATS51单片机为主控制器,外加显示模块以及报警电路实现该智能温度测量报警器的设计方法、工作原理、电路组成等。
关键词:DS18B20,单片机,温度控制,报警
1绪 论
温度是与人们生活息息相关的环境参数,许多情况下都需要进行温度测量及报警,温度测量报警系统在现代日常生活、科研、工农业生产中已经得到了越来越广泛的应用。所以对温度的测量报警方法及设备的研究也变得极其重要。随着人们生活水平的不断提高以及应对各种复杂测量环境的需要,我们对温度测量报警器的要求也越来越高,利用单片机来实现这些控制无疑是人们追求的目标之一,它带给我们的方便是不可否定的。其中温度检测报警器就是一个典型的例子。要为现代人工作、科研、生活、提供更好的更方便的设施,就需要从单片机技术入手,向数字化,智能化控制方向发展。
本设计所介绍的温度报警器,可以设置上下限报警温度,当温度不在设置范围内时,可以报警 。与传统的温度测量系统相比,本设计中的数字温度测量报警系统具有很多前者没有的优点,如测温范围广而且准确,采用LCD数字显示,读数方便等。
1.1 温度报警器的研究意义
随着电子技术的发展,家用电器和办公设备的智能化、系统化已成为趋势,而这些高性能几乎都要通过单片机实现。同时,温度作为与我们生活息息相关的一个环境参数,对其的测量和研究也变得极为重要。故温度检测报警系统在现代生活、生产中得到了越来越广泛的应用。
工业生产带动了人类社会的进步,同时也促进了各种新的传感器的发展。在工业生产中温度的准确测量是一个比较困难的事情。从最初的酒精、水银温度计到现在的数字化、集成化的温度计可见传感器的发展是飞快的。它的快速发展必将带来新一轮的工业化和社会发展的飞跃。
本设计所介绍的温度报警器可以设置上下限报警温度,当温度不在设定范围内时可以报警 ,主要用于对测温比较准确的场所,或科研实验室使用。它具有结构简单,不需外接元件,可由用户设置温度报警界限等特点,可广泛用于食品库、冷库、粮库等需要控制温度的地方。目前,该类产品已在温控系统中得到广泛的应用。所以设计意义较为深远。
1.2 温度报警器的现状及发展
温度是一种在生产、科研、生活中需要测量和控制的重要物理量,是国际单位制七个基本量之一。其测量控制一般采用各式各样形态的温度传感器。根据它们在讯号输出方式上的不同可以分为模拟温度传感器和数字温度传感器。单片机技术的出现则是为现代工业测控领域带来了一次新的技术,目前,单片机以其体积小、重量轻、抗干扰能力强、对环境要求不高、可靠性高、性价比高、开发较为容易等特点,在工业控制、数据采集、智能化仪器仪表、办公自动化等诸多领域得到了极为广泛的应用,并已走入我们的日常生活,现在,随处都可以看到单片机的踪影。目前温度报警器的发展已经比较成熟了,它能帮助我们实现想要的温度控制,解决身边的很多问题。
1.2.1 智能温度传感器
智能温度传感器(亦称数字温度传感器)是在20世纪90年代中期问世的。它是微电子技术、计算机技术和自动测试技术(ATE)的结晶。目前,国际上已开发出多种智能温度传感器系列产品。智能温度传感器内部都包含温度传感器、A/D转换器、信号处理器、存储器(或寄存器)和接口电路。有的产品还带多路选择器、控制器(CPU)、随机存取存储器(RAM)和只读存储器(ROM)。智能温度传感器的特点是能输出温度数据及相关的温度控制量,适配各种微控制器(MCU);并且它是在硬件的基础上通过软件来实现测试功能的,其智能化程度也取决于软件的开发水平。
1.2.2 传感器发展趋势
现代信息技术的三大基础是信息采集(即传感器技术)、信息传输(通信技术)和信息处理(计算机技术)。传感器属于信息技术的前沿尖端产品,尤其是温度传感器,它被广泛用于工农业生产、科学研究和生活等领域,数量高居各种传感器之首。近百年来,温度传感器的发展大致经历了以下三个阶段;(1)传统的分立式温度传感器(含敏感元件);(2)模拟集成温度传感器/控制器;(3)智能温度传感器。目前,国际上新型温度传感器正从模拟式向数字式、由集成化向智能化、网络化的方向发展。
2 硬件设计
2.1 总体设计方案
本设计是一个基于单片机的温度测量电路,传统的温度检测系统采用热敏电阻等温度敏感元件,热敏电阻虽然成本低,但是需要后续信号处理、A/D转换处理等才能将温度转换成数字信号,不但电路复杂,可靠性和精度也相对较低,在应用中还需要解决引线误差补偿、干扰等问题,故传统方案不可取。进而非常容易考虑到使用温度传感器,在单片机电路设计中,单片机除了可以测量电信号外,还可以用于温度、湿度等非电信号的测量,能工作的单片机温度检测、温度控制系统已经广泛的应用于很多领域。单片机的接口信号是数字信号,要用单片机作为控制器测量温度这类非电信号,就要使用温度传感器将温度信息转换为电流或者电压信号输出,如果转化的信号是模拟信号,还需要进行A/D转化,以满足单片机接口的需要。进一步联想到可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,成功地进行温度采集以后,就可以利用单片机进行数据处理,然后通过LCD将温度显示出来,就可以满足设计要求。硬件部分设计主要包括:测温电路、传感器电路及测温电路与单片机的接口、报警电路与单片机的接口等组成的。
本设计中,温度传感器采用DS18B20,控制器采用ATS51,显示电路采用LED数码管显示器实现,总体方框图如下:
图3.1 总体方框图
在研究出总体设计方案后,在这一阶段主要的主要工作是查阅各芯片资料,熟悉其功能特性和技术参数,同时学习PROTEL DXP软件,用其绘制出硬件原理图,然后继续分析各结构,查阅国内外相关技术资料,查缺补漏,反复修改设计方案,力求完美;通过原理图绘制PCB图;制作PCB板,购买所需元件,完成硬件方面的设计。
2.2系统器件的选择
2.2.1 单片机的选择
ATS系列的单片机是能用下载线进行在线编程的 ISP,使用简单的HC244电路,就可以通过电脑上面的程序来进行对单片机的编程,是无须拆下来放到笨重的编程器上面写片子的 。ATC系列则没有这个功能并且C系列无法调试。
2.2.2温度传感器的选择
本设计主要应用在机房、粮仓等地,测量温度在-20到+75摄氏度之间,ds18b20温度测量范围从-55到+125摄氏度,精度为±0.5 ° C,适合设计要求,所以传感器选择ds18b20温度传感器。
2.2.3显示模块的选择
1601显示一行的16个字符,1602显示两行的16个字符,1602海可以显示汉字,满足设计要求,所以选择LCD1602显示模块。
2.3传感器模块DS18B20
温度传感器是该系统的关键器件,本设计采用的DS18B20温度传感器是美国DALLAS半导体公司最新推出的一款改进型智能温度传感器,它集温度测量、A/D转换为一体,其温度测量范围从-55OC到+125OC,精度为±0.5 ° C,可在1秒钟内把温度变换成数字。DS18B20是世界上第一片支持“一线总线”接口的温度传感器,也就是说,它具有独特的单总线接口,仅需要占用一个I/O端口即可以完成与微处理器间的通信,占用微处理器的端口较少, 可节省大量的引线和逻辑电路,为读写以及温度转换带来方便,同时,它可以从数据线本身获得能量,不需要外接电源;它支持3V~5.5V 的电压范围, 使系统设计更灵活、方便; 其工作电源既可在远端引入, 也可采用寄生电源方式产生;此外,与传统的热敏电阻等测温元件相比,DS18B20能直接读出被测量的温度,并且可以根据实际要求通过简单的编程实现9 ~12位的数字值读数方式,它可在1 秒钟内把温度变换成数字;由DS18B20 组建的温度测量单元体积小, 便于携带和安装。同时,DS18B20 可以直接与单片机连接, 无需后接A/D 转换, 控制简单;还有,它具有负压特性,电源极性接反时,仅仅是不能正常工作,但温度计不会因发热而烧毁。Ds18b20内部结构主要由四部分组成:位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。整体来说DS18B20 的性能是新一代产品中最好的,性能价格比也非常出色,所以我们选择它来作为设计部件。
2.3.1 注意事项:
Ds18b20虽然具有测温系统简单、测温精度高、连接方便、占用口线少等优点,但在实际应用中叶应注意以下几个方面的问题:
1在对ds18b20进行读写编程时,必须严格的保证读写时序,否则将无法读取测温结果。
2当单总线上所挂ds18b20超过8个小时,就需要解决微处理器的总线驱动问题。
3在用ds18b20进行长距离测温系统设计是要充分考虑总线分布电容和阻抗匹配问题。
Ds18b20从测温结束到将温度值转换成数字量需要一定的转换时间。
图2.2 DS18B20的外观图 图2.3 DS18B20内部结构框图
图2.4 DS18B20引脚分布图
DS18B20的主要技术指标如下:测量范围:-55OC—+125OC;测量精度:0.5OC;反应时间<=500ms。
2.3.2 引脚功能
2、DQ:数据输入/输出引脚。开漏单总线接口引脚。当被用在寄生电源下,此引脚可以向器件提供电源;漏极开路, 常态下为高电平. 通常要求外接一个约5kΩ的上拉电阻。
3、VDD:外接供电电源输入端引脚。电压范围:3~5.5V;当工作于寄生电源时,此引脚必须接地
在本系统中用外接电源,DQ接到ATS51的P2.0端,R1为信号和5V电源之间的上拉电阻。在实际中,若需要多点检测是,可在单总线上挂多个DS18B20,但超过8个是要考虑驱动问题,软件设计也变得复杂多了同事要考虑DS18B20单总线的长度问题,一般不超过50M,为实现更远程的控制,可以考虑把系统设计成无线系统,以突破DA18B20单总线的长度。
表2.1 主要温度与转换后输出的数字对应值表
温度 /OC | 二进制表示 | 十六进制表示 |
+125 | 0000 0111 1101 0000 | 07D0H |
+85 | 0000 0101 0101 0000 | 0550H |
+25.0625 | 0000 0001 1001 0000 | 0191H |
+10.125 | 0000 0000 1010 0001 | 00A2H |
+0.5 | 0000 0000 0000 1000 | 0008H |
0 | 0000 0000 0000 0000 | 0000H |
-0.5 | 1111 1111 1111 1000 | FFF8H |
-10.125 | 1111 1111 0101 1110 | FFE5H |
-25.0625 | 1111 1110 0110 1111 | FE6FH |
-55 | 1111 1100 1001 0000 | FC90H |
(a)寄生电源工作方式 (b)外接电源工作方式
2.3.3 ds18b20 ROM指令表
指 令 | 约定代码 | 功 能 |
读ROM | 33H | 读DS1820温度传感器ROM中的编码(即位地址) |
符合 ROM | 55H | 发出此命令之后,接着发出 位 ROM 编码,访问单总线上与该编码相对应的 DS1820 使之作出响应,为下一步对该 DS1820 的读写作准备。 |
搜索 ROM | 0FOH | 用于确定挂接在同一总线上 DS1820 的个数和识别 位 ROM 地址。为操作各器件作好准备。 |
跳过 ROM | 0CCH | 忽略 位 ROM 地址,直接向 DS1820 发温度变换命令。适用于单片工作。 |
告警搜索命令 | 0ECH | 执行后只有温度超过设定值上限或下限的片子才做出响应。 |
ATS51是整个系统的核心处理器,单片机首先把通过传感器测到的现场温度与预先设置的温度进行比较,如果大于或小于预先设置值,就输出信号去控制加热器的工作,从而实现温度控制。Ats51还负责液晶显示、报警以及与上位机进行通信等工作。
ATS51是一种带4K字节闪烁可编程可擦除只读存储器的低电压、高性能位微处理器, 俗称单片机。
图3.6 ATS51单片机
ATS51的特点:
1、系统可编程特性: 创造了单片机学习开发系统的先例,可方便地在系统中实现程序下载,弥补了实时修改程序的不足之处,并可以立即从目标系统中反映出修改的结果,大大缩短单片机学习开发的周期,提高了工作效率。
2、代码全速仿真: 弥补传统学习系统不能全速仿真的缺陷,使系统运行的结果完全反映代码的执行情况,更切实地吻合人们工作、学习所需要的特点。其次,在软件开发前的仿真调试后,完全可烧写入目标芯片,并能获得完全一致的代码执行结果。是集学习、开发于一身的优良的目标系统。
3、资源的可重复利用性: 目标系统上的所有资源都能重复利用并能通过软件调配或通过扩展槽增加其它的功能,进而提高系统的实用性。
4、软硬结合,操作简单方便:
在ATS51提供硬件支持的同时,也提供良好的上位机控制软件,只要通过软件的功能操作就能实现:源代码的调试编译,查找与修改错误之处,在线代码下载等功能。使单机的学习与开发一体化,集成化,更进一步体现系统学习的优越性。
晶体振荡特性: ATS51中有一个用于构成内部振荡器的高增益反向放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。这个放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起构成自激振荡器。
外接石英晶体(或陶瓷振荡器)及电容C1、C2接在放大器的反馈回路中构成并联振荡电路,对外接电容C1、C2虽然没有十分严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程序及温度稳定性。如果使用石英晶体,则推荐电容使用30Pf+10pF,而如使用陶瓷谐振器建议选择40Pf+10Pf。也可以采用外部时钟,这种情况下,外部时钟脉冲接到XTAL1端,即内部时钟发生器的输入端,XTAL2则悬空。
由于外部时钟信号是通过一个2分频触发器后作为内部时钟信号的,所以对外部时钟信号的占空比没有特殊要求,但最小高电平持续时间和最大低电平持续时间应符合技术条件要求。
图3.8 晶体接线图和外接时钟线图
ATS51的极限参数:
工作温度:-55OC to+125 OC 储存温度:-65 OC to +150 OC
任一引脚对地电压:1.0V to7.0V 最大工作电压:6.6V
DC输出电流:15.0mA
2.5键盘控制
键盘分为八个按键,一端与单片机的p2口及50k上拉电阻相连,另一端接地,当任一按键按下时,p2口读取低电平有效。系统上点后,进入键盘扫描子程序,以查询的方式确定各按键,完成温度初值的设定,系统进入主程序后按键功能无效。
2.6驱动电路
驱动电路采用继电器驱动方式。通过控制继电器在控制周期内通断的时间,实现对加热的开关控制。由单片机I/O口输出的控制信号,经NPN晶体管放大,驱动继电器工作。
2.7报警电路
本设计采用蜂鸣器报警电路,它由晶体管和蜂鸣器组成。由单片机I/O口输出信号控制晶体管的导通或截止,晶体管导通,则蜂鸣器报警。通过单片机来控制蜂鸣器产生报警声音。
2.8温度控制的实现
系统工作时先由使用者设定预期达到的两位温度值,温度值输入后,打开电源,单片机自动复位,进行初始化,这时LED显示器显示设定温度,以便操作人员核对设定温度,然后温度检测电路将测点的温度输入单片机,经软件滤波后作为实测温度,此后显示器将一直显示实测温度。若实测温度高于设定温度时,则通过驱动电路关上加热器并报警;若实测温度低于设定温度是,则通过驱动电路打开加热并报警;若在设定温度范围内,则加热器状态不变。
图3.13 温度测量报警系统原理图
将分开的各功能模块部分的设计工作完成以后,最后整体连接到一起,就得到这个设计的完整电路,在PROTEL DXP中绘制好原理图以后,下一步将其转换为PCB图,布线、修改、检查,就完成该设计硬件部分的工作。
3 系统软件设计
3.1 主程序设计
主程序的主要功能是负责温度的实时显示,读出并处理DS18B20测量的当前温度值,送入主控制器进行数据处理并转换为数字信号后进行显示,其流程图如下所示。
图2.1 主程序流程图
系统软件采用C 语言编写。在中断服务程序中,实现用户输入以及上位机的接口功能;在主程序中,实现温度传感器网络的自动搜索、获取温度信息,并根据预先设定的温度上下限,实现相应的报警功能。该系统中,根据不同的分辨率要求,可通过编程设定,该流程可满足高精度设计要求。
3.2 子程序设计
3.2.1 测温子程序流程
图2.2 测温子系统流程图
在测温时首先设置DS18B20的DQ为高电平,然后初始化DS18B20,在成功后DS18B20接收单片机的命令,为了简单起见这里跳过ROM命令设置匹配过程,然后再次初始化DS18B20,在成功后启动测温,然后将温度保存起来,返回。
3.2.2 读温度流程
图2.3 读温度流程图
读温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写,如上图。
3.2.3 显示模块子程序
在测得温度后,将温度数据转换为十进制数的温度表示,然后再通过查表调用液晶1602显示在液晶上,这里面数据处理类似于由二进制转换为十进制,再由十进制转换为ASCII码。
首先要对LCD进行初始化设置,写入报警温度的上、下限值,若传感器正常工作,则LCD上会显示“OK”以及当前温度,同时进行温度比较,若当时温度在设定的上下限范围内,则系统无反应,若温度超过上、下限温度,则蜂鸣器报警。
参考文献(References)
[1]严芸.浅谈温度传感器的现状与发展[J].大众科技,2006,(5):38-39.
[2]谭浩强.C程序设计[M].清华大学出版社,1999.
[3]杨小川.Protel DXP设计指导教程[M].清华大学出版社,2003.
[4]贵国庆.LCD1602液晶显示秒表[J].电子制作,2006.(4):59-61. [
[5]朱蕤、张常年.基于ATC51单片机的温度传感器控制电路[D].北方工业大学,2006.
[6]黄继昌. 传感器工作原理及应用实例[M].人民邮电出版社.1998.
[7]周航慈. 单片机程序设计基础[M].北京航空航天大学出版社.2003.
[8]谢宜仁. 单片机实用技术问答[M].人民邮电出版社.2003.
[9]朱善君. 单片机接口技术与应用[M].清华大学出版社.2005.
[10]郭亨礼. 传感器实用电路[M].上海科学技术出版社.1992.
[11]谢宜仁. 单片机实用技术问答[M].人民邮电出版社.2003.
[12]肖来胜.单片机技术实用教程[M].华中科技大学出版社.2004.
[13]Transistor specifications manual.Howard W. Sams & Co., Inc[M].1972.
附件:主要程序
………
signed char shangxian=38; //上限报警温度,默认值为38
signed char xiaxian=5; //下限报警温度,默认值为38
………..
/*****读取温度*****/
void check_wendu(void)
{
uint a,b,c;
c=ReadTemperature()-5; //获取温度值并减去DS18B20的温漂误差
a=c/100; //计算得到十位数字
b=c/10-a*10; //计算得到个位数字
m=c/10; //计算得到整数位
n=c-a*100-b*10; //计算得到小数位
if(m<0){m=0;n=0;} //设置温度显示上限
if(m>99){m=99;n=9;} //设置温度显示上限
}
……………
/*****读取温度*****/
unsigned int ReadTemperature(void)
{
unsigned char a=0;
unsigned char b=0;
unsigned int t=0;
float tt=0;
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0x44); //启动温度转换
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0xBE); //读取温度寄存器
a=ReadOneChar(); //读低8位
b=ReadOneChar(); //读高8位
t=b;
t<<=8;
t=t|a;
tt=t*0.0625;
t= tt*10+0.5; //放大10倍输出并四舍五入
return(t);
}
四.心得体会
经过两个星期的实习,过程曲折可谓一语难尽。在此期间我也失落过,也曾一度热情高涨。从开始时满富盛激情到最后汗水背后的复杂心情,点点滴滴无不令我回味无长。生活就是这样,汗水预示着结果也见证着收获。劳动是人类生存生活永恒不变的话题。
整个设计通过了软件和硬件上的调试。我想这对于自己以后的学习和工作都会有很大的帮助。在这次设计中遇到了很多实际性的问题,在实际设计中才发现,书本上理论性的东西与在实际运用中的还是有一定的出入的,所以有些问题不但要深入地理解,而且要不断地更正以前的错误思维。一切问题必须要靠自己一点一滴的解决,而在解决的过程当中你会发现自己在飞速的提升。同时我认为我们的工作是一个团队的工作,团队需要个人,个人也离不开团队,必须发扬团结协作的精神。某个人的离群都可能导致导致整项工作的失败。课程设计中只有一个人知道原理是远远不够的,必须让每个人都知道,否则一个人的错误,就有可能导致整个工作失败。团结协作是我们实习成功的一项非常重要的保证。而这次实习也正好锻炼我们这一点,这也是非常宝贵的。
对我而言,知识上的收获重要,精神上的丰收更加可喜。挫折是一份财富,经历是一份拥有。这次实习必将成为我人生旅途上一个非常美好的回忆!