数字温度计在工业、农业、日常生活中都有广泛的应用。非接触式温度测量仪采用AT89S52单片机为主控芯片,用数字传感器DS18B20测量温度,测量精度高,传感器体积小,使用方便。
AT89S52是一种flash型单片机,可直接在线编程,向单片机中写程序简单方便。数字温度计采用DS18B20数字温度传感器,DS18B20是一种可组网的高精度数字式温度传感器,由于其具有单总线的独特优点,可以使用户轻松地组建起传感器网络,并可使多点温度测量电路变得简单、可靠。
本设计属于一种多功能温度计,温度测量范围是-55℃到125℃。温度值的分辨率可以被用户设定为9-12位,可以设置上下限报警温度,当温度不在设定的范围内时,就会启动报警程序报警。本设计的显示模块是用四位一体的数码管动态扫描显示实现的。在显示实时测量温度的模式下还可以通过调节按键查看设定的上下限报警温度和设置上下限报警温度。
1.采用非接触式温度传感器完成设计要求;
2.测量温度范围不小于-10℃~+55℃;
3.用数码管实时显示测量温度,至少保留小数点后1位有效数字;
4. 人体体温测试,误差不大于0.2℃;
5. 提高要求:
(1)可设置报警温度,当测量温度高于报警温度时具有声光报警功能;
(2)温度测量响应时间不超过1s;
6. 根据上述要求,画出电路框图、原理总图。
7. 完成原理图的仿真。
8. 设计制作印制电路板,完成电路的组装和调试。
9. 撰写设计总结报告。
非接触式测温电路总体设计框图如图1所示,控制器采用单片机AT89S52,温度传感器采用DS18B20,显示采用4位LED数码管,报警采用蜂鸣器、LED灯实现,键盘用来设定报警上下限温度。
基于单片机的温度计电路总体设计框图
与传统的热敏电阻等测温元件相比,DS18B20温度传感器能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。DS18B20的性能特点如下:独特的单线接口仅需要一个端口引脚进行通信;多个DS18B20可以并联在唯一的三线上,实现多点组网功能;无须外部器件;可通过数据线供电,电压范围为3.0~5.5v;零待机功耗;温度以9或12位二进制数字表示;用户可定义报警设置;报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。
头2个字节包含测得的温度信息,第3和第4字节TH和TL的拷贝是易失的,每次上电复位时被刷新。第5个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率,DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值,该字节各位的定义如表1所示。
表1 配置寄存器
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
TM | R1 | R0 | 1 | 1 | 1 | 1 | 1 |
配置寄存器的低5位一直为1,TM是工作模式位,用于设置DS18B20是在工作模式还是在测试模式,DS18B20出厂时该位被设置为0,用户要去改动,R1和R0决定温度转换的精度位数,来设置分辨率,“R1R0”为“00”是9位,“01”是10位,“10”是11位,“11”是12位。DS18B20分辨率越高,所需要的温度数据转换时间越长。在实际应用中要将分辨率和转换时间权衡考虑。
表2 DS18B20输出的温度值
温度值 | 二进制输出 | 十六进制输出 |
+125℃ | 0000 0111 1101 0000 | 07D0h |
+85℃ | 0000 0101 0101 0000 | 0550h |
+25.0625℃ | 0000 0001 1001 0001 | 0191h |
+10.125℃ | 0000 0000 1010 0010 | 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 | FF5Eh |
-25.0625℃ | 1111 1110 0110 1111 | FF6Fh |
-55℃ | 1111 1100 1001 0000 | FC90h |
DS18B20完成温度转换后,把测得的温度值与RAM中的TH、TL字节内容作比较。若T>TH或T<TL,则将该器件内的报警标志位置位,并对主机发出的报警搜索命令作出响应。因此,可用多只DS18B20同时测量温度并进行报警搜索。在64位ROM的最高有效字节中存储有循环冗余检验码(CRC)。主机ROM的前56位来计算CRC值,并和存入DS18B20的CRC值作比较,以判断主机收到的ROM数据是否正确。
DS18B20传感器操作流程:
根据DS18B20的通讯协议,主机(单片机)控制DS18B20完成温度转换必须经过三个步骤:
(1)每一次读写之前都要对DS18B20进行复位操作
(2)复位成功后发送一条ROM指令
(3)最后发送RAM指令
这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500μs,然后释放,当DS18B20收到信号后等待16~60μs左右,后发出60~240μs的存在低脉冲,主CPU收到此信号表示复位成功。
DS18B20的操作流程如图所示。
DS18B20传感器的操作指令如表3所示。传感器复位后向传感器写相应的命令才能实现相应的功能。
表3 DS18B20的指令表
指 令 | 指令代码 | 功 能 |
读ROM | 0x33 | 读DS1820温度传感器ROM中的编码(即64位地址) |
符合 ROM | 0x55 | 发出此命令之后,接着发出 64 位 ROM 编码,访问单总线上与该编码相对应的 DS1820 使之作出响应,为下一步对该 DS1820 的读写作准备。 |
搜索 ROM | 0xF0 | 用于确定挂接在同一总线上 DS1820 的个数和识别 64 位 ROM 地址。为操作各器件作好准备。 |
跳过 ROM | 0xCC | 忽略 64 位 ROM 地址,直接向 DS1820 发温度变换命令。适用于单片工作。 |
告警搜索命令 | 0xEC | 执行后只有温度超过设定值上限或下限的片子才做出响应。 |
温度变换 | 0x44 | 启动DS1820进行温度转换,12位转换时最长为750ms(9位为93.75ms)。结果存入内部9字节RAM中。 |
读暂存器 | 0xBE | 读内部RAM中9字节的内容 |
写暂存器 | 0x4E | 发出向内部RAM的3、4字节写上、下限温度数据命令,紧跟该命令之后,是传送两字节的数据。 |
复制暂存器 | 0x48 | 将RAM中第3 、4字节的内容复制到EEPROM中。 |
重调 EEPROM | 0xB8 | 将EEPROM中内容恢复到RAM中的第3 、4字节。 |
读供电方式 | 0xB4 | 读DS1820的供电模式。寄生供电时DS1820发送“ 0 ”,外接电源供电 DS1820发送“ 1 ”。 |
DS18B20传感器的初始化时序:
DS18B20传感器为单总线结构器件,在读写操作之前,传感器芯片应先进性复位操作也就是初始化操作。
DS18B20的初始化时序如图12所示。首先控制器拉高数据总线,接着控制器给数据总线一低电平,延时480μs,控制器拉高数据总线,等待传感器给数据线一个60-240μs的低电平,接着上拉电阻将数据线拉高,这样才初始化完成。
DS18B20传感器的读写时序
1.写时序
DS18B20传感器的读写操作是在传感器初始化后进行的。每次操作只能读写一位。
当主机把数据线从高电平拉至低电平,产生写时序。有两种类型的写时序:写“0”时序,写“1”时序。所有的时序必须有最短60μs的持续期,在各个写周期之间必须有最短1μs的恢复期。
在数据总线由高电平变为低电平之后,DS18B20在15μs至60μs的时间间隙对总线采样,如果为“1”则向DS18B20写“1”, 如果为“0”则向DS18B20写“0”。如图3-2的上半部分。
对于主机产生写“1”时序时,数据线必须先被拉至低电平,然后被释放,使数据线在写时序开始之后15μs内拉至高电平。
对于主机产生写“1”时序时,数据线必须先被拉至低电平,且至少保持低电平60μs。写时序注意是先写命令的低字节,比如写入跳过ROM指令0xCC(11001100),写的顺序是“0,0,1,1,0,0,1,1”
2.读时序
在数据总线由高电平变为低电平之后,数据线至少应保持低电平1μs,来自DS18B20的输出的数据在下降沿15μs后有效,所以在数据线保持低电平1μs之后,主机将数据线拉高,等待来自DS18B20的数据变化,在下降沿15μs之后便可开始读取DS18B20的输出数据。整个读时序必须有最短60μs的持续期。如图13的下半部分。读时序结束后数据线由上拉电阻拉至高电平。
通过Proteus进行非接触式测温电路仿真,验证软件程序设计和硬件电路设计实现设计要求的功能。
在做实物时出现了不少问题,自己设计电路时加入排针,以便自己可以用此系统连接其他外设做的PCB太大,浪费材料资源,是自己的错误,深受警示,采用NPN型三极管9013以增大电路,但是在实际调试过程中,数码管刚开始出现乱码并且闪烁太快,经多次试验,排查故障 ,发现是数码管的配置引脚不对且实际电路制作设计的9013放大电流的电路不起作用,软件设计的数码管动态显示时间延时200us不合适,改为延时50us,经过改接电路,通过杜邦线和插排连接数码管相应引脚和单片机输出引脚,最终使数码管显示温度正常,输入端由5V电源供电,前三个数码管亮度低,排除误差发现供电电源可以,最终排查数码管显示电路,发现数码管的焊接不牢固,焊接牢固后,数码管亮度可以,但是还不是太一致,报警时蜂鸣器电路响的声音小,LED闪烁报警,改变程序中的蜂鸣器报警频率,最终使蜂鸣器报警成功,报警发出滴答的声音,软件调试的过程中,经过代码的改进和硬件电路的调试,按键实现的实际功能和仿真有区别但是功能基本一致,完成了设计的功能要求。
收获和体会
经过将近三周的设计、焊接、编程、调试,最终完成了非接触式数字温度计的设计,基本能够达到设计要求,而且还设计了一些其他功能,如可以开启或消除蜂鸣器音的功能,查看和设置报警上下限温度功能。通过电子设计自动化的课程设计,我学到了如何将理论转化为实践,如何将自己所学知识运用到实践中,应用到我们现实的生活中去。这次的设计不仅将我课堂上学到的单片机和数模电的知识与实际应用充分结合,而且使我对电子电路设计、电子元器件的选取、印制电路板设计有了更进一步的认识,自己设计的电路板不合理,设计电路板时布局需要合理,有效;在软件编程、焊板调试、实验仪器的使用过程中增加自己的实际解决问题的能力,提高了自己的设计能力。理论要正确运用于实践十分重要,提升了自己发现问题和解决问题的能力,设计过程中的每一步都很重要,都需要以严谨认真的态度对待。
电路原理图