使用AT89C51和DS18B20温度测量方法

温度的测量和控制在激光器、光纤光栅的使用及其他的工农业生产和科学研究中应用广泛 。温度检测的传统方法是使用诸如热电偶、热电阻、半导体PN结之类的模拟温度传感器 。信号经取样、放大后通过模数转换,再交自单片机处理 。被测温度信号从温敏元件到单片机,经过众多器件,易受干扰、不易控制且精度不高 。因此,本文介绍一种新型的可编程温度传感器DS18B20,他能代替模拟温度传感器和信号处理电路,直接与单片机沟通,完成温度采集和数据处理 。DS18B20与AT89C51结合实现最简温度检测系统,该系统结构简单,抗干扰能力强,适合于恶劣环境下进行现场温度测量,有广泛的应用前景 。
2温度测量系统硬件
系统结构图如图1所示[1] 。这里通过上拉电阻直接驱动LED显示 。以增加线路复杂度为代价,减少芯片数量 。
 
2.1数字温度传感器DS18B20
DS18B20是美国DALLAS公司推出的单总线数字测温芯片 。他具有独特的单总线接口方式,仅需使用1个端口就能实现与单片机的双向通讯 。采用数字信号输出提高了信号抗干扰能力和温度测量精度 。他的工作电压使用范围宽(3.0~5.5V),可
以采用外部供电方式,也可以采用寄生电源方式,即当总线DQ为高电平时,窃取信号能量给DS18B20供电 。他还有负压特性,电源极性接反时,DS18B20不会因接错线而烧毁,但不能正常工作 。可以通过编程实现9~12位的温度转换精度设置 。由表1[2]可见,设定的分辨率越高,所需要的温度数据转换时间就越长,在实际应用中要将分辨率和转换时间权衡考虑 。
DS18B20采用3脚TO-92封装,形如三极管,同时也有8脚SOIC封装,还有6脚的TSOC封装 。测温范围为-55~+125℃,在一10~85℃范围内,精度为±0.5℃ 。每一个DS18B20芯片的ROM中存放了一个64位ID号:前8位是产品类型编号,随后48位是该器件的自身序号,最后8位是前面56位的循环冗余校验码 。又因其可以采用寄生电源方式供电 。因此,一条总线上可以同时挂接多个DS18B20,实现多点测温系统 。另外用户还可根据实际情况设定非易失性温度报警上下限值TH和TL 。DS18B20检测到温度值经转换为数字量后,自动存入存储器中,并与设定值TH或TL进行比较,当测量温度超出给定范围时,就输出报警信号,并自动识别是高温超限还是低温超限 。
 
2.2 AT89C51单片机
AT89C51单片机是ATMEL公司生产的高性能8位单片机,主要功能特性如下:
①兼容MCS-51指令系统;
②32个双向I/O口,两个16位可编程定时/计数器;
③1个串行中断,两个外部中断源;
④可直接驱动LED;
⑤低功耗空闲和掉电模式;
⑥4 kB可反复擦写(>1 000次)FLASI ROM;
⑦全静态操作O~24 MHz;
⑧128×8 b内部RAM 。
该款芯片的超低功耗和良好的性能价格比使其非常适合嵌入式产品应用 。
3温度测量系统软件
DS18B20简单的硬件接口是以相对复杂的接口编程为代价 。由于DS18B20通过单总线与单片机进行通讯,所以其通讯功能是分时完成的 。他与单片机的接口协议是通过严格的时序来实现的,只有在特定的时隙,才能实现DS18B20数据的写入和读出 。这里以AT89C51和一个DS18B20通讯为例,列出部分通讯的汇编语言代码 。
 
3.1 初始化子程序(RESET)
与DS18B20的所有通讯都是由一个单片机的复位脉冲和一个DS18B20的应答脉冲开始的 。单片机先发一个复位脉冲,保持低电平时间最少480μs,最多不能超过960μs 。然后,单片机释放总线,等待DS18B20的应答脉冲 。DS18B20在接受到复位脉冲后等待15~60μs才发出应答脉冲 。应答脉冲能保持60~240μs 。单片机从发送完复位脉冲到再次控制总线至少要等待480μs 。程序代码如下:
 
3.2 WRITE子程序
写时隙需要15~75μs,且在2次独立的写时隙之间至少需要1μs的恢复时间 。写时隙起始于单片机拉低总线 。以要把单片机A中的数据发给DS18B20为例,程序代码如下:
 
3.3 READ子程序
读时隙需15~60 μs,且在2次独立的读时隙之间至少需要1 μs的恢复时间 。读时隙起始于单片机拉低总线至少1μs 。DSl8820在读时隙开始15μs后开始采样总线电平 。以单片机读取2 B的数据为例 。程序代码如下:
 
【使用AT89C51和DS18B20温度测量方法】用DS18820测量温度,在其内部就能进行A/D转换,输出数字量与单片机直接通讯,无需外加A/D转换器,转换速度快,降低了成本,而且简化了电路,提高了系统的集成度,使其满足了最简的要求 。这个温度传感器稍加改良,配合半导体制冷器还能实现高精度的温度控制功能 。

    推荐阅读