APP下载

基于DS18B20的单片机控制测温电路的设计及仿真

2015-05-09田小明安徽机械工业学校安徽淮南305淮南舜泰化工有限责任公司安徽淮南305

天津中德应用技术大学学报 2015年3期
关键词:数码管低电平高电平

胡 娜,田小明(.安徽机械工业学校,安徽淮南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

猜你喜欢

数码管低电平高电平
一种基于FPGA的PWM防错输出控制电路
微课教学设计之“数码管动态显示”
一种实用的电脑接口判断方法
Arduino编程
TS-03C全固态PDM中波发射机开关机控制电路原理及故障分析
MC9S08FL16单片机数码管静态显示分析
单片机控制的四位数码管动态显示编程
2017款凯迪拉克2.8L/3.0L/3.2L/3.6L车型低电平参考电压总线电路图
数字电子技术的应用
浅谈物理电路与数字电路