基于DS18B20的单片机控制测温电路的设计及仿真
2015-05-09田小明安徽机械工业学校安徽淮南305淮南舜泰化工有限责任公司安徽淮南305
胡 娜,田小明(.安徽机械工业学校,安徽淮南305 .淮南舜泰化工有限责任公司,安徽淮南305)
基于DS18B20的单片机控制测温电路的设计及仿真
胡娜1,田小明2
(1.安徽机械工业学校,安徽淮南232052 2.淮南舜泰化工有限责任公司,安徽淮南232052)
摘要:采用AT89S52型单片机作为主控制器的数字式温度计,它用单总线式温度传感器DS18B20采集环境温度,并用三位LED数码管显示。文章介绍这种温度计的电路硬件结构设计和软件设计,并进行Protues仿真分析及硬件电路实验,展示了其电路的功能效果。
关键词:DS18B20;单片机;Protues仿真;亚龙YL-236
2.田小明(1979-),男,安徽舜泰化工有限公司工程师,本科,研究方向为机械自动化。
温度是日常生活生产中常常需要检测的物理量,随着单片机技术的发展,结合温度传感器实现实时自动化控制,不仅误差低,测量速度快,精度高,而且适合各种环境下的自动检测。本文的设计目的是模拟DS18B20作为传感器的测温电路,利用中等职业学校技能大赛“单片机控制装置安装与调试”的设备,验证了电路的正确性和灵活性,设计了由单片机作为控制器,数码管为显示器的测温电路,该电路简单易操作,读数直接,分辨率高。设计的理论依据包括:DS18B20传感器的工作原理、单片机输入输出I/O口的应用以及Keil uVision4和Protues仿真软件的使用。
一、DS18B20传感器
DS18B20内部有四个数字部件:64位光刻ROM,温度传感器,配置寄存器,非易失性温度报警触发器TH和TL。与传统的热敏电阻等测温元件相比,它能直接读出被测温度,通过设置配置寄存器中的R0、R1实现9~12位的数值读取方式,相应的精度分别为:0.5℃、0.25℃、0.125℃和0.0625℃。温度传感器可以测量温度,得到的温度值用16位数据表示,高5位是符号位,全1为负温度,全0为正温度,低4位为温度的小数部分,中间7位为温度的整数部分。64位光刻ROM包括前8位产品类型标号,中间48位序列号,后8位校验码。9字节RAM数据暂存器包括9个字节的暂存单元,每个字节有8位,见表1。
表1数据暂存器结构表
(一)单总线信号类型
由于DS18B20采用一根总线DQ传输数据,必须严格遵守通信协议,才能保证数据完整有序。发送或者接收数据都是靠操作总线上的时间顺序来实现的,不管是发送还是接收数据都是先低位数据再高位数据。
1.初始化时序
单片机将总线拉低至少480μs,最多不能超过960μs,然后释放总线,数据线为高电平“1”,从低电平到高电平的时间间隔为15~60μs,此后检测总线状态,若为低电平,说明DS18B20器件是存在的,复位成功,低电平持续时间为60~240μs,若主机检测到低电平后,还需要延时,持续的时间为从释放总线开始至少480μs;若为高电平,说明器件不存在,复位失败。
2.位写入(包括1和0)时序
主机把总线从高电平拉到低电平,开始写“1”或写“0”。所有写时序至少要持续60μs,并且两次写时序间隔时间至少1μs。写时序开始后主机在15μs后释放总线,DS18B20在此后的15μs~60μs内采样总线数据,若DQ引脚为高电平,就是主机对DS18B20写“1”,若是低电平,就是主机对DS18B20写“0”。主机写时序时每次只能向DS18B20写一位数据,使用语句DQ=dat&0x01获得低位,再使用语句dat=dat>>1获得次高位,先低后高,重复8次,向DS18B20写入一个字节。
3.位读取(包括1和0)时序
当主机发出读暂存器指令后,DS18B20向主机传输数据。主机将总线从高电平拉到低电平“0”,保持至少1μs,然后释放总线到高电平“1”,此时检测总线状态,若为低电平,主机读到的数据为“0”,若为高电平,主机读到的数据为“1”。不管是读“1”时序还是读“0”时序,每个时序至少持续60μs,并且两次读取时序间隔时间至少1μs。由于总线每次只能发送一位数据,所以主机在读取一个字节时,要重复8次位读取命令。由于先读的是低位数据,因此使用语句k=(j<<7)|(k>>1)将8次读取的数据组成为一个字节。读取位操作时,DS18B20发出数据后,在起始时隙之后保持15μs的有效时间。
(二)ROM操作命令
当器件存在时,单片机即可向总线发送ROM操作命令。包括:读ROM数据,读出64位激光ROM代码;指定匹配芯片,用于指定某一DS18B20进行操作;跳过ROM,当总线上只有一个DS18B20时,执行此操作命令;芯片搜索,确定总线上的节点数以及所有节点的序列号;报警芯片搜索,用于识别超出程序设定的报警温度界限的节点。由于DS18B20依靠一个单总线端口通信,必须先建立ROM操作协议才能进行存储器的控制操作。因此主机必须先执行ROM操作命令后,再写入RAM操作命令。
(三)RAM操作命令
RAM操作命令总共有6条,代码及操作说明如表2。
二、硬件电路设计
硬件电路主要由时钟电路、复位电路、温度采集电路、数码管显示驱动电路组成,DS18B20采用外部电源供电方式,电路图1和图2:
表2 RAM命令集
图1DS18B20初始化及读写控制时序
图2硬件电路图
三、软件设计
系统软件分函数序和子函数。主函数要完成系统的初始化,跳过ROM程序,启动温度转换,读取温度值,数码管显示温度,温度报警程序。子程序有毫秒、微秒延时子函数,数码管段选、位选、显示子函数,DS18B20初始化、位读取、读字节、写字节、温度值读取子函数。
(一)主函数
系统主函数要完成系统的初始化,调用读取温度值子函数,分离出温度的百位、十位、个位送给数码管显示,报警程序,流程图如图3所示。当测得的温度高于用户设定值或低于用户设定值时,采用红灯、黄灯报警,温度正常时绿灯显示。
图3主程序流程图
(二)DS18B20温度值读取子函数
读取温度包括五个步骤:(1)复位DS18B20;(2)跳过ROM命令;(3)发出读暂存器命令;(4)读两字节的温度;(5)温度格式转换。温度转换值采用默认的12位分辨率,单片机接收到数据后,先左移八位变为高八位字节,再与接收到的低八位数据组成16字节,若是负值,读取出来的数值是用补码表示的,可直接赋值给int型变量value,再将变量value乘以0.0625,即可得到实际温度,将数值放大10倍,使显示时可显示小数点后1位,并对小数点后第二进行4舍5入,具体函数内容如下:
uint read_temperature()
{
unsigned int tmpvalue; int value; float t;
unsigned char low,high; sendReadCmd(); low=readByte(); high=readByte(); tmpvalue=high; tmpvalue<<=8; tmpvalue|=low; value=tmpvalue; t=value*0.0625; value=t*10+(value>0?0.5:-0.5);
return value;
}
四、仿真与实验
在Keil软件中,首先新建工程,再新建C语言文件,并添加到工程文件中,编写程序并编译、调试,生成HEX文件,导入到Protues ISIS硬件电路图中,设置单片机的编辑元件里的Program File属性,将DS18B20设置为25.0℃时,点击“开始”按键运行仿真,在数码管上显示相应的温度值,如图4所示。
图4仿真结果图
采用亚龙YL-236型单片机控制功能实训考核装置,DS18B20的输出接单片机的P2.7口,八个共阳数码管接单片机P0口,数码管同样显示25.0℃,结果如图5所示。
图5实验图
从以上仿真和实验结果可以看出:利用DS18B20作为数字传感器测量温度,测温范围广泛,可以实现-55℃~+125℃的测量,不需要像模拟测温电路那样进行模数转换。以单片机AT89S52作为控制器,电路设计合理,成本较低,简单易操作,可以实现智能化的实时操作系统。
参考文献:
[1]黄保瑞等.基于AT89C51单片机的温度测控系统设计[J].现代电子技术,2011(06):78-80
[2]刘训非,陈希.单片机技术及应用[M].清华大学出版社.2012.
[3]郭天祥.51单片机C语言教程[M].电子工业出版社,2009.
编辑朱荣华
作者简介:1.胡娜(1981-),女,安徽机械工业学校讲师,硕士研究生,研究方向为电力电子技术。
收稿日期:2015-03-09
中图分类号:TN4
文献标识码:A
文章编号:2095-8528(2015)03-093-03