基于单片机的高精度温度测量系统设计
作者:何宗虎, 张德祥, 张玲君 来源:《现代电子技术》2011年第09期
摘 要:提出采用单总线数字式温度传感器DS18B20 和单片机组成的新型高精度温度测量仪的设计。介绍了温度传感器DS18B20的结构、特点和工作原理,设计了DS18B20和AT89S52单片机的温度测量系统硬件电路和软件编程,主要包括温度采集、温度显示及报警控制等功能。整个系统具有结构简单,测量精度高,传输距离远,抗干扰能力强,温度读取方便和造价低等一系列优点,适用于生产生活及科学研究中对温度的测量,应用前景十分广阔。 关键词:温度测量; 单片机; DS18B20; 数码管显示 中图分类号:TN876-34 文献标识码:A
文章编号:1004-373X(2011)09-0130-03
Design of High-accuracy Temperature Detecting System Based on Single Chip Microcomputer HE Zong-hu, ZHANG De-xiang, ZHANG Ling-jun
(Institute of Electrical Engineering and Automation, Anhui University, Hefei 230039, China) Abstract: A new high-accuracy temperature detecting system based on single-bus digital temperature sensor DS18B20 and single chip microcomputer (SCM) is proposed. In this paper, the structure, characteristics and working principle of temperature sensor DS18B20 is introduced.
Hardware circuit and software programming (including temperature acquisition, temperature display and alarm control functions) of the temperature measurement system are designed based on DS18B20 and AT89S52 SCM. The whole system has a series of advantages of simple structure, high detection accuracy, long transmission distance, strong anti-interference ability, easy to read temperature and low cost. It has a bright application future in daily life and scientific research for temperature measurement. Keywords: temperature measurement; SCM; DS18B20; nixie display 0 引 言
温度是工业生产过程和实验过程中比较重要的一个参数,精确的温度测量和及时的显示温度是很重要的。目前温度测量系统种类繁多,功能参差不齐。单片机具有体积小,价格便宜,通用性和灵活性强的特点,利用单片机设计温度测量系统,既可以满足功能要求,又经济实惠。数字温度测量传感器DS18B20是单一总线的高精度测量器件,它克服了以前模拟式传感
龙源期刊网 http://www.qikan.com.cn
器与微机接口时需要的A/D转换器及其他复杂外围电路的缺点[1]。本文就是运用单片机及其接口和集成单总线温度传感器DS18B20构建一个高精度的温度测量和显示系统,并且通过开关进行温度上限的设置,如果温度超过设定值就会报警或进行相应的控制命令。设计的电路简单,易于实现,而且还具有一定的扩展功能,可以扩展成多点采集和更复杂的功能。 1 系统硬件设计
整个系统主要由主控中心(单片机) 、温度传感器DS18B20、数码管显示及开关控制等功能模块组成[2-3]。可以通过开关调节报警温度的上限,既可以使上限增加,也可以使上限减小,这样就可以用于不同场合了,系统的框图如图1所示。 图1 系统硬件结构框图 1.1 温度传感器DS18B20
DS18B20是美国Dallas半导体公司生产的数字式温度传感器,提供9位温度读数,指示温度[4-5]。温度信息通过单线接口送入DS18B20或者从DS18B20送出,所以从处理器到DS18B20仅需连接一条线。读、写和完成温度变换所需的电源可以由数据本身提供,而不需要外部电源。这使得DS18B20与单片机接口变得很简单,克服了模拟式传感器与微机接口时需要的A/D转换及其他复杂外围电路的缺点,而且它具有结构简单、成本低、体积小、抗干扰能力强、使用简单等优点。最重要的是DS18B20的ROM中存有其芯片的惟一标识码,即任意两个DS18B20的标识码是不同的,特别适合与微处理芯片构成多点温度测量控制系统。DS18B20是DS1820的改进型,分辨率为9~12位可编程控制,由其寄存器R0,R1的两位状态决定。测量范围从-55~+125 ℃,增量值为0.5 ℃。
DS18B20在内部以时钟周期个数计数来测量温度,并且提供0.5 ℃的分辨率。温度读数以16位、符号扩展的二进制补码读数形式提供。需要注意的是在DS18B20中温度以1/2 ℃LSB(最低有效位) 形式表示时,产生以下9位格式: MSB LSB 1 11100110 1.2 键盘控制设计
系统工作前先由用户自己设定一个两位温度值作为报警值,打开电源,单片机复位初始化,闭合开关中断程序,按复位开关,每按一次报警值就会在初始化的基础上加1 ℃,数码管显示设定值[6-8]。用户进行核对查看显示的数字值是否与设置值一样,然后打开开关进行周围温度测量值传输。由于报警值可以由用户自己设定,故系统能适应各种不同温度的环境。
龙源期刊网 http://www.qikan.com.cn
1.3 其他的部分
系统主要采用的是7段共阳极数码管显示测量的温度值,由发光二极管和蜂鸣器进行报警。如果测的温度值高于设定值1 ℃,报警系统就会报警(发光二极管点亮,蜂鸣器鸣响)。这样可以从声音和视觉上收到系统的警报。 1.4 系统的电路原理图
系统的电路原理图如图2所示。 图2 系统电路原理图 2 软件设计
系统开始工作时,首先进行I/O口初始化、报警值初始化,然后判断开关是否闭合,由用户自己在原报警值的基础上更改,确定后由单片机控制软件发出温度读取指令,通过数字温度传感器DS18B20采集当前温度值,转换后经过单总线传输给单片机,单片机经过处理由数码管显示,如果超出设置的报警值1 ℃,系统就会报警(发光二极管点亮、蜂鸣器鸣响) [9-10]。系统的软件部分主要是由中断子程序、读写DB18B20程序、显示程序和报警系统四部分组成,主程序流程图如图3所示。 图3 主程序流程图 设计的部分程序如下: #include #include #include
sbit DQ = P3^2;//定义DS18B20的数据口 sbit SET=P3^3;//定义报警值的控制开关 unsigned char TAP[10]= //共阳极,不带点
{0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,}; unsigned char TAP2[10]=//共阳极,带点
{0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,};
龙源期刊网 http://www.qikan.com.cn
//定义一个存放转换后温度值的数组,温度值为字符型(ASCII码),小数点后保留2位 unsigned char str[10]; //延时子程序,延时(10*D+3)us void delay_10us(unsigned char D) {unsigned char i; for (i=0;i
{_nop_();//空操作,一个指令周期 _nop_(); } }
//DS18B20初始化 void INIT(void) {DQ = 0;
delay_10us(50); //等待500 μs DQ = 1;//释放18B20数据线。 delay_10us(9); //等待90 μs while (!DQ);//等待18B20准备好 }
//读DS18B20的程序 unsigned char READ(void) {unsigned char i; unsigned char D = 0;
龙源期刊网 http://www.qikan.com.cn
for (i=0;i
{D=D>>1; //先读数据低位 DQ = 0; _nop_ ();
DQ = 1; //释放18B20数据线 for (j=1;j {_nop_(); }
if(DQ) D += 0x80; //如果数据线上是″1″,D最高位为″1″,否则为″0″ delay_10us (6); }
return D;//返回值为D,即读出的一个字节数据。 }
//写DS18B20的程序 void WRITE(unsigned char D) {unsigned char i; for (i=0;i {DQ = 0;
if (D & 0x01) DQ = 1; elseDQ = 0; delay_10us(8); DQ = 1;
D = D >> 1;//右移一位,准备写下一位
龙源期刊网 http://www.qikan.com.cn
} }
//显示程序(str数组内元素是ASCII码,所以要减去48) void display(void) {unsigned char i; unsigned char j=100; while(j--) { for (i=0;i
{ P0 = TAP [str[0]-48]; P2 = 0x1; } for (i=0;i
{ P0 = TAP2[str[1]-48]; P2 = 0x2; } for (i=0;i
{P0 = TAP[str[3]-48]; P2 = 0x4; } for(i=0;i
{P0 = TAP[str[4]-48];
龙源期刊网 http://www.qikan.com.cn
P2 = 0x8; } } } //主程序 void main()
{unsigned char warning=30; unsigned char TMP_H = 0; unsigned char TMP_L = 0; shortTMP= 0; //短整型数据 float TMP_F = 0; //浮点型数据
P1_0=0; //开机时测试温度超限警报LED灯 while(1) {
while(!SET) //报警值确定 {
delay_10us(5); while(!SET) {
if(P1_0==0) warning+=1;//增加上限 else if(P1_1==0) warning+=1;//减小上限 elsewarning+=0;
龙源期刊网 http://www.qikan.com.cn
str[0]=warning/10+48; str[1]=warning%10+48; str[3]=48; str[4]=48; display(); delay_10us(5); } }
INIT(); //初始化DS18B20 WRITE(0xCC);//跳过ROM配置 WRITE(0x44);//开始转换温度
display(); //默认至少等待750 ms,用于温度转换 INIT();//初始化DS18B20 WRITE(0xCC);//跳过ROM配置 WRITE(0xBE);//准备读取温度值 TMP_L=READ(); //读取温度值的低8位 TMP_H=READ(); //读取温度值的高4位 TMP=TMP_H; TMP=(TMP
TMP_F=TMP * 0.0625;//计算温度值
sprintf(str,″%.2f″,TMP_F);//将浮点数转换成字符型,存入str数组 if(TMP_F>=warning)P1_0=0; //如果温度值大于等于报警值,报警
龙源期刊网 http://www.qikan.com.cn
else P1_0=1; } } 3 结 语
基于C51系列单片机和DS18B20数字温度传感器的温度测量系统结构简单、成本低、操作方便,比较好推广,而且也可以根据情况进行扩展,比如进行多点采集等。 参考文献
[1]刘卫民.集成温度传感器DS1820原理及应用[J].黑龙江科技信息,2008(21):52. [2]杨伟伟.浅谈基于单片机的温度测控系统设计[J].信息与电脑:理论版,2010(2):50-51.
[3]何锡才.传感器及其应用电路[M].北京:电子工业出版社,2002.
[4]李虹,温秀梅,高振天.基于MSP430单片机和DS18B20的小型测温系统[J].微计算机信息,2006,22(2):137-138.
[5]檀永,陈小平.基于DS1620的温度变送器设计[J].江苏电器,2006(4):4-6,10. [6]张立科.单片机典型外围器件及应用实例[M].北京:人民邮电出版社,2006. [7]邬杨波.一种基于VHDL的7段LED数码管显示控制器[J].机电工程,2008,25(7):51-54.
[8]马臣岗, 孟立凡.基于单总线式无线温度采集系统设计[J].电子设计工程,2010(3):31-33.
[9]刘瑞新.单片机原理及应用教程[M].北京:机械工业出版社,2003.
[10]张义和,王敏男,许宏昌.例说51单片机[M].北京:人民邮电出版社,2008. 2011年5月1日第34卷第9期现代电子技术Modern Electronics TechniqueMay 2011Vol.34 No.9
注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文
因篇幅问题不能全部显示,请点此查看更多更全内容