宋晓博 柴 波
摘 要:给出一种基于DS18B20的1-Wire总线的嵌入式测温系统的软硬件设计,详细介绍了数字温度传感器DS18B20和桥接器DS2480B的内部结构、工作原理及使用方法;给出基于1-Wire操作的时序图和部分驱动代码,并对代码做出比较详细的说明。给出系统硬件电路逻辑,并对硬件电路中的细节问题做了说明。在以往的应用中,大多为PC机通过串口控制测温芯片DS18B20和桥接器DS2480B进行温度测量。采用单片机C8051F040代替传统的PC机,通过片上UART对测温芯片进行控制,在空间狭小的特殊嵌入式环境中对温度值进行采集。经实践证明电路系统工作正常,温度采集效果良好。
关键词:1-Wire总线;DS18B20;DS2480B;硬件电路;驱动程序
中图分类号:TP274 文献标识码:B 文章编号:1004-373X(2009)04-162-04
Design of Embedded TemperatureMeasurement System Based on 1-Wire Bus
SONG Xiaobo,CHAI Bo
(Xi′an Micro-electronics Technology Institute,Xi′an,710075,China)
Abstract:The software and hardware design of 1-wire embedded temperatare measurement system based on DS18B20 are proposed.the interior structure,work protocol and using method of DS18B20 and DS2480B are introduced.The time sequence pictures and driving code of 1-wire operation,the circuit logic of system′s hardware are given.In the past applications,the temperatare measuremant mostly for the PC-chip through the serial port control DS18B20 and bridges DS2480B.In this paper,C8051F040 is applied to instead of the traditional PC,through on-chip UART chip to control the temperature in the special environment.Practice proves that the circuit system is working normal,the temperature acquisition is good.
Keywords:1-Wire bus;DS18B20;DS2480B;hardware circuit;driving program
温度作为一种基本的环境因素,直接影响着工业控制、化工、医药、航空航天等生产工艺过程,因此如何安全、可靠、快速地取得温度值就显得尤为重要。随着计算机软件、硬件技术及集成电路工业的迅速发展,各种温度采集技术不断出现。这里介绍一种基于DS18B20的
1-Wire总线的嵌入式测温系统设计。
1-Wire总线是美国Dallas公司的一项专有技术单总线技术(1-Wire Bus Technology),该技术在理论上每条总线连接的1-Wire 器件数量可达248еВ适用于单主机、多从设备的系统。它与其他串行通信方式最大的不同在于它采用单根信号线双向传输数据,以其节省I/O口线资源,成本低廉,体积小,便于总线扩展和维护等优点,在串行数据通信领域占有越来越重要的地位。
1-Wire 网络构成简单,一般情况下只使用电源线、地线、信号线3条线,当使用寄电方式供电时只需电源/信号线和地线2根线。
DS18B20是Dallas公司生产的一种简便易用的数字式温度传感器。它体积小巧,温度测量范围广(-55~ +125 ℃),测量分辨率可选,分别为0.062 5 ℃,0.125 ℃,0.25 ℃,0.5 ℃。
1 主要器件结构及工作原理
1.1 DS18B20结构及工作原理
Dallas公司生产的DS18B20可编程单总线数据温度传感器共有3种封装形式:8管脚SO封装、8管脚μSOP封装和3管脚TO-92封装。该设计中为了节省空间采用3管脚的TO-92封装,它的管脚排列图和底视图如图1所示,其中GND为接地管脚,VDD为外部供电电源管脚,DQ为数据输入/输出管脚。
DS18B20内部结构如图2所示,包括供电电路、64 b ROM、内部存储器和存储器控制逻辑4部分。64 b ROM中存储着每个DS18B20芯片独有的64位ROM ID码,这是系统用来识别DS18B20芯片的标志。其中最低8位是DS18B20的家族码:28H。中间48位是每片DS18B20独有的串行码。最高8位是用前56位计算得到的循环冗余校验码。
内部存储器由9 Byte SRAM和3 B E2PROM组成。SRAM中Byte0和Byte1是温度寄存器,用来存储采集到的温度值。Byte0的内容是温度的低8位,Byte1是温度的高8位。Byte2和 Byte3为高低温警报寄存器。Byte4为配置寄存器,用来设置器件温度采集精度。这3个字节中的值可以拷贝到E2PROM中,保证掉电后数据不会丢失,重新上电后E2PROM中的值将自动重载入SRAM中。Byte5,Byte6,Byte7保留为内部使用。Byte8存储CRC码。
DS18B20有2种供电方式:寄电方式和外部供电方式。寄电方式非常适用于需要远程温度测量和空间受限的场合。当工作于这种方式时,管脚3必须接地。总线处于高电平时DS18B20通过DQ管脚从1-Wire网络上窃取能量并存储一部分电荷到寄电电容中,总线处于低电平时释放寄电电容中的电荷给DS18B20供电。在寄电方式中寄电电容中存储的电荷能满足DS18B20大部分操作的要求,但是当执行温度转换和数据拷贝命令时操作电流提高到1.5 mA,这将导致内部弱上拉电阻上产生不可接受的压降,同时这个电流也高于寄电电容能够提供的电流,所以必须外接强上拉电路以满足这一类命令的要求。当处于外部供电方式下时则不需要外接强上拉电路,直接通过管脚3从外部供电。
在温度超过100 ℃条件时,处于寄电方式下的DS18B20可能不能保证正常通信,所以在某些特殊场合下使用外部供电方式比寄电方式更加可靠。
DS18B20是一种可编程的基于1-Wire 总线标准的数字式温度传感器,可以通过SRAM中的配置寄存器来选择测量分辨率,其上电默认值为12位精度,对应分辨率为0.062 5 ℃。其他可选择的精度包括11位、10位和9位,对应的分辨率分别为0.125 ℃,0.25 ℃,0.5℃。
DS18B20上电后处于空闲状态,可通过微处理器发送转换命令44H 来启动1次温度测量和A/D转换,并将结果存储在温度寄存器中,此后DS18B20返回空闲状态。如果DS18B20处于外部供电模式,微处理器可以发送“读时隙”来查看温度采集转换过程是否完毕,如果结束则应答为1,没结束则应答为0。如果DS18B20处于寄电方式下则不能使用该功能。DS18B20的温度数据值是以摄氏度为单位的。
1.2 DS2480B介绍及工作原理
1-Wire通信协议可以通过微处理器上的一个I/O引脚实现,但是要创建可靠的1-Wire网络,必须提供正确的时序和适当的输出电压摆率,如果1-Wire主机发送的时序不正确会导致与1-Wire从器件之间的通信间断或完全失败,并限制网络的长度。DS2480B是从串行接口到1-Wire网络协议转换的桥接器。使用这个桥接器和UART连接就能产生严格定时和电压摆率控制的1-Wire波形,并能减轻主机产生1-Wire 时序信号和对1-Wire 总线进行采样的负担。
DS2480B接收指令与数据,执行1-Wire操作,并将结果返回至主机。图3为1-Wire复位操作、写1/读数据操作、写0操作的时序图,这3种操作是1-Wire操作中必须具备的基本操作,几乎所有的其他1-Wire操作都可以由这3种操作构成。由于该设计工作在Flexible模式下,以下提供的参数都是Flexible模式下适用的参数。
1.2.1 复位/应答 时序
DS2480B接到主机复位命令后将总线拉低512 μs后释放总线,等待 2 μs(短路/中断采样)后检测总线上是否有短路或中断信号,如果没有则等待8 μs(应答采样)后检测总线上是否有应答脉冲,再等待512 μs(延迟)后向主机发送命令应答字。如果总线上有短路或中断信号则等待4 096 μs后再次检测总线。时序如图3所示。
1.2.2 写1 /读数据时序
DS2480B在写1/读数据时序中先将总线拉低8~15 μs(写1低),3~10 μs(数据采样)数据采样偏移后对总线采样并读从器件应答。再经过49 μs(等待高)1/读数据时序结束。时序图如图4所示。
1.2.3 写0 时序
DS2480B的写0时序中先将总线拉低57 μs(写0低)然后释放总线,3~10 μs后写0时序结束。如图5所示。
DS2480B可以被看作包含2个静态和多个动态的状态机。上电后DS2480B自动进入两个静态之一的命令模式。此时主机应向DS2480B发送1次复位命令,用来校准DS2480B内部的时序产生器,所有的1-Wire通信过程都必须以复位命令开始。此后DS2480B准备好接收及执行任何合法命令。在命令模式下微处理器可以改变1-Wire网络的通信速度、供电方式、改变1-Wire通信波形等。DS2480B从命令模式转换到下一个静态-数据模式后将从TXD管脚上收到的信息字节转换成相应的1-Wire通信波形并将从器件返回的应答字节通过RXD管脚返回给微处理器。也就是说对1-Wire从器件DS18B20的操作必须在数据模式下进行。
2 系统设计
系统设计包括硬件设计和软件设计2部分。
2.1 系统硬件设计
与DS2480B桥接器一起工作的UART应支持8位字长、无奇偶校验、9 600波特率(b/s)的通信方式。该系统采用Silicon公司生产的C8051F040作为主处理器,C8051F040有2个UART串口,且满足桥接器对UART的要求。温度采集转换芯片为Dallas公司生产的DS18B20。系统原理图如图6所示。
其中从C8051F040的UART到DS2480B需用1片QS3245进行3~5 V的电平转换。1-Wire总线上过多的噪声会影响1-Wire通信的正确性,为了滤除电路中的噪声保护DS2480B的1-Wire端口不受静电损伤DS2480B的1-W管脚外接RC滤波电路。在本设计中只涉及到基本DS2480B操作,在需要进行EPROM编程的设计中应串接2个DS9503。
2.2 系统软件设计
给出的1-Wire 总线驱动程序是结合图4所述电路,以C8051F040单片机为主控制器,使用内部时钟频率24.5 MHz编写而成,其中包括DS2480B复位子程序、DS2480B初始化子程序、总线复位子程序、温度采集子程序、温度值读取子程序。C8051F040系统内部有64 KB FLASH存储器可以用来存储程序代码。C代码设计调试工具为Silicon公司提供的单片机集成开发环境。
控制器上电后,对自身和DS2480B进行初始化并与DS2480B取得同步。由于DS2480B中没有晶振,它必须通过采样主机发送的字节来调节自身的时基。主控制器在低于9 600波特率条件下发送1次0字节可以产生1次复位信号。DS2480B复位后所有参数恢复到缺省状态,在该设计中1-Wire网络长度在10 m之内,属于小型长度,为了取得良好的性能,选择在“flexible speed”下进行标准速度通信。对DS2480B复位和初始化是进行正确1-Wire通信的前提,当网络中应答数据包长度或格式不正确时,也必须重新对DS2480B复位和初始化。
所有的1-Wire操作都是从复位1-Wire总线开始的。每次采集温度值和读取温度值操作前最好对总线进行1次复位操作,同时检测来自总线上的从器件的在线应答脉冲。驱动程序流程图如图7所示,部分程序代码如下所示:
#include <c8051f040.h>
#include "DS2480.h"
#include <stdio.h>
// MAIN Routine
main()
{
//.........disable watchdog timer.........
WDTCN = 0xde;
WDTCN = 0xad;
/........................................
UART_configure (); //UART配置
DS2480B_Rset();//DS2480B复位
init_ds2480();//DS2480B初始化
while(1)
{
wire_reset(); //1-Wire总线复位
tmp_turn(); //温度值采集
wire_reset(); //1-Wire总线复位
tmp_read(ch1,ch2,ch3,ch4,ch5,ch6,ch7,ch8); //读取温度值
}
}
//........................................
void DS2480B_Rset(void)
{
//change baute to 4800
out_uart(0x00);//在4 800波特率下主控制器向DS2480B
//发送0字节产生一次复位信号
delay(2);//延迟2 ms
//change baute to 9600
}
//........................................
void init_ds2480(void)
{
{
out_uart(0xc1); //发送总线复位命令
delay(2); //延迟2 ms
//设置1-Wire参数,为flexible模式下的1-Wire信号整形
out_uart(0x17);
while(get_uart()!=0x16);
out_uart(0x45);
while(get_uart()!=0x44);
out_uart(0x5b);
while(get_uart()!=0x5a);
out_uart(0x0f);
while(get_uart()!=0x00);
out_uart(0x91);
while(get_uart()!=0x93);
}
//..............................
void wire_reset(void)
{
out_uart(0xe3);
//切换到命令模式
delay(2);
//延迟2 ms
out_uart(0xc5);
//发送总线复位命令
while(get_es0()!=0xcd);//应答不正确则继续等待
}
//........................................
void tmp_turn()
{
out_uart(0xe1);//切换到数据模式
delay(2);//延迟2 ms
out_uart(0xcc);//发送SKIP ROM命令,寻址总线上所有从器件
while(get_uart()!=0xcc);
out_uart(0x44);//发送CONVERT T命令,令从器件采集温度值
while(get_uart()!=0x44);
out_uart(0xff);//发送“读时隙”,检查温度采集操作是否结束
delay(2);//延迟2 ms
while(get_uart()!=0xff)//没结束则等待至结束
}
//........................................
void tmp_read(ch1,ch2,ch3,ch4,ch5,ch6,ch7,ch8)
unsigned char ch1,ch2,ch3,ch4,ch5,ch6,ch7,ch8;
{
out_uart(0xe1);//切换到数据模式
delay(2);//延迟2 ms
out_uart(0x55);//发送MATCH ROM命令
while(get_uart()!=0x55);
out_uart(ch1); //发送要读取温度值的DS18B20的64位ROM ID号
while(get_uart()!=ch1);
out_uart(ch2);
while(get_uart()!=ch2);
out_uart(ch3);
while(get_uart()!=ch3);
out_uart(ch4);
while(get_uart()!=ch4);
out_uart(ch5);
while(get_uart()!=ch5);
out_uart(ch6);
while(get_uart()!=ch6);
out_uart(ch7);
while(get_uart()!=ch7);
out_uart(ch8);
while(get_uart()!=ch8);
out_uart(0xbe);//发送读暂存器命令
while(get_uart()!=0xbe);
out_uart(0xff);//读暂存器Byte0
cc1=get_uart();
out_uart(0xff);//读暂存器Byte1
cc2=get_uart();
cc1=(((cc1>>4)&0x0f) | ((cc2<<4)&0xf0));
}
3 结 语
介绍一种1-Wire总线嵌入式测温系统,并给出了硬件电路及部分驱动代码。该系统具有设计简单,扩展方便,占用主控制器资源少,软件控制方便易于实现自动化测试等特点,并成功应用于工程实践中。在设计成本、费用和复杂度方面相对于CAN,RS 485等总线有着无可比拟的优势,更适合小型工控系统使用,在今后的工业应用领域中必将有着更为广阔的空间。
参 考 文 献
[1]张彦兵,刘永前,李义强.1-Wire总线驱动电路设计.传感技术学报,2006,19(4):1 020-1 024.
[2]Dallas Semiconductor Maxim.DS18B20 Programmble Resolution 1-Wire Digital Thermometer.
[3]Dallas Semiconducor Maxim.DS2480B Serial 1-Wire Line Driver with Load Sensor.2005.
[4]Dallas Semiconductor Maxim.应用笔记192 DS2480B串行接口1-Wire线驱动器的使用.2005.
[5]谭浩强.C程序设计.2版.北京:清华大学出版社,2002.
[6]张培仁.MCS-51单片机原理与应用.北京:清华大学出版社,2003.
[7]谭立勇,李哲英.1-Wire技术概述.数据通信,2004(2):19-21.
[8]伍家满,虞礼贞,刘小燕,等.基于1-Wire接口的总线技术及其应用.南昌大学学报:工科版,2005,27(1):89-93,98.
[9]胡汉才.单片机原理及其接口技术.北京:清华大学出版社,2000.
[10]沈金龙.计算机通信网.西安:西安电子科技大学出版社,2003.
[11]刘金胜.局域网基础与建设.辽宁师专学报:自然科学版,2000,2(2):35-37.
作者简介 宋晓博 女,硕士研究生。研究方向为计算机应用。
柴 波 男,研究员、硕士研究生导师。主要从事嵌入式计算机的系统设计和应用研究工作。