找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1862|回复: 0
收起左侧

多点温度测量

[复制链接]
ID:115657 发表于 2016-4-21 11:42 | 显示全部楼层 |阅读模式
基于DS18B20的单总线
多点测温系统
摘要:本文主要介绍了一个基于DS18B20单片机的测温系统,详细描述了传感器在单片机下的硬件连接,软件编程以及各模块系统流程进行了详尽分析,特别是数字温度传感DS18B20的数据采集过程。对各部分的电路也一一进行了介绍,该系统可以方便的实现实现温度采集和显示,它使用起来相当方便,具有精度高、量程宽、灵敏度高、体积小、功耗低等优点,适合于我们日常生活和工、农业生产中的温度测量,也可以当作温度处理模块嵌入其它系统中,作为其他主系统的辅助扩展。DS18B20AT89C51结合实现最简温度检测系统,该系统结构简单,抗干扰能力强,适合于恶劣环境下进行现场温度测量,有广泛的应用前景。
随着社会的进步和工业技术的发展,人们越来越重视温度因素,许多产品对温度范围要求严格,而目前市场上普遍存在的温度检测仪器大都是单点测量,同时有温度传递不及时、精度不够的缺点,不利于工业控制者根据温度变化及时作出决定。在这样的形式下,开发一种能够同时测量多点,并且实时性高、精度高,能够综合处理多点温度信息的测量系统就很有必要
关键词:DS18B20AT89c51,多点测温






















  DS18B20数据处理,通过for循环,依次发送一次序列号,匹配对应节点温度传感器,采集数据温度,转换成实际温度值,保存在数组中。不断循环,直至所有序列号发送完毕。
4.  主要代码:
a)  主程序代码:
void main()         
{
LCD_init();
LED1=0;
Show();
while(1)
{   
   keyscan();
   if(num==1)
   {   
         LCD_write_command(0x01);
       if(k>10)  k=k-10;
         k++;
       if(k>5)   k=1;
         num=0;
   }
   if(num==2)
   {
       LCD_write_command(0x01);
       if(k<10) k=k+10;
       if(k>15) k=10;   
       num=0;
   }
   if(k>0&&k<10)
    {
        Ent();
    }
   if(k==1)
    {
        ShowC1();
    }   
   if(k==2)
    {  
        ShowC2();
     }
   if(k==3)
    {
       ShowC3();
     }
   if(k==4)
    {
       ShowAl();
     }   
   if(k==5)
    {
       ShowAv();
     }
   if(k>10)
   {
        change_temp();
        read_temp();
   }
   if(k==11)
     {
        ShowChar1();        
          display_DS1();
     }
   if(k==12)
     {
        ShowChar2();        
          display_DS2();
     }
       if(k==13)
     {
        ShowChar3();        
          display_DS3();
     }
   if(k==14)
     {
         ShowCharAl();      
           display_DS1();
         delay(40);
         display_DS2();
         delay(40);
         display_DS3();
     }
   if(k==15)
     {
          ShowCharA();     
            display_DSA();
     }  
}         
}   
b)LCD初始化代码:
void LCD_init(void)
{
LCD_write_command(0x08);
LCD_write_command(0x38);
LCD_write_command(0x0c);
LCD_write_command(0x06);
LCD_write_command(0x01);
delay_n40us(100);
}
c)按键扫描代码:
    void keyscan()
{
   if(key1==0)
   {
       delay(10);
       if(key1==0)
       {
           num=1;
           while(!key1);
       }
   }
   if(key2==0)
   {
       delay(10);
       if(key2==0)
       {
           num=2;
           while(!key2);
       }
   }      
}

5.  程序占有资源:片内rom :56B  片外rom:0B  ram:2970B

七、     测试结果与数据分析:
  
  
  
T1
  
  
T2
  
  
T3
  
  
平均温度
  
  
温度计
  
  
误差
  
  
实验室
  
  26.8
  
  
26.7
  
  26.8
  
  
26.8
  
  
26.4
  
  
0.4
  
  
电子楼前
  
  
30.5   
  
  
30.5
  
  
30.5
  
  
30.5
  
  
30.6
  
  
-0.1
  
  
致远楼
  
  
29.3
  
  
29.3
  
  
29.5
  
  
29.4
  
  
29.4
  
  
0  
  
  
本部篮球场
  
  
29.5
  
  
29.5
  
  
29.5
  
  
2.95
  
  
29.2
  
  
0.3
  
  
怡远楼
  
  
30.0
  
  
30.0
  
  
30.1
  
  
30.0
  
  
29.2
  
  
0.8
  
  
电子楼一楼大厅
  
  
29.1
  
  
29.0
  
  
29.0
  
  
29.0
  
  
27.2
  
  1.8
  
表7—1  数据测试表
结论:
          1. 在一定误差范围内,各节点传感器的温度精度正常。

   2. 怡远楼和电子楼一楼大厅的数据误差超过实际传感器的精度

      0.5℃。
    3. 各节点温度显示稳定,不会出现个别节点的跳变情况。

误差分析:

   1. 市场长标准的数字温度计一般误差在1℃,DS18B20的误差在0.5

   ℃,因此实际测量的允许最大误差应该在1.5℃。

   2. 选取的温度计为食物温度计,与被测物接触面积较大,而DS18B20

   接触面积较小,测量本身存在读取误差。

八、     参考文献:
[1]LCD1602数据手册
[2]DS18B20数据手册
[3]郭天祥.51片机C语言教程.电子工业出版社.20091
[4]陈蕾.单片机原理与接口技术.机械工业出版社.20128
[5]潘勇.孟庆斌.基于DS18B20的多点温度测量系统设计.
  电子测量技术.200809

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表