0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

采用DS18B20和AT89C51设计高精度的多路温度监测系统与进行仿真调试

电子设计 来源:郭婷 作者:电子设计 2018-11-29 08:11 次阅读

引言

在实时温度监控系统中,如大棚温度监控、冷库测温、智能建筑温度控制等系统中,经常需要进行多路温度的采集和检测。快速、可靠地采集到高精度温度数据可为控制系统的工作提供可靠的依据。传统上,温度测量方法多以热敏电阻、热电偶等为温度敏感元件,但都存在可靠性差、精度低、需A/D转换以及线路复杂等的缺点。

本文提出采用美国Dallas 公司生产的单总线数字温度传感器DS18B20和AT89C51单片机构成高精度的多路温度监测系统,在单片机的控制下巡回监测多路温度,高低温度超限报警,并可实现与上位机通讯等功能。

1 DS18B20 简介

DSl8B20是Dallas公司推出的1-Wire式单总线智能数字温度传感器。与传统的热敏电阻相比,它能够直接读出被测温度,温度测量范围为-55~125 ℃;可通过编程实现9~12位的转换精度,对应的可分辨温度分别为0.5 ℃,0.25 ℃,0.125 ℃和0.062 5 ℃,可满足高精度设计要求;在9位分辨率时最多在93.75 ms内把温度转换为数字,12位分辨率时最多在750 ms内把温度值转换为数字;电源供电范围3.0~5.5 V;读取或写入信息到DS18B20仅需要单总线接口(即将地址线、数据线、控制线合成一条信号线);测量结果直接输出数字温度信号,串行传送给CPU 同时可传送CRC 校验码,具有极强的抗干扰纠错能力;使用DS18B20可使系统结构简洁,可靠性更高。以上特性使得DSl8B20 非常适用于构建高精度的多路温度采集与检测系统。

2 硬件电路设计

系统原理框图如图1 所示,系统由多片DS18B20、AT89C51单片机、LED 驱动显示电路、温度上下限设定电路、报警提示电路、串行通信接口时钟电路、复位电路等构成。

采用DS18B20和AT89C51设计高精度的多路温度监测系统与进行仿真调试

系统采用8 片DS18B20 构成温度采集电路,8 片DS18B20采用单总线与并行输入相结合的方式接至单片机的P1口。单片机巡回采集各路DS18B20送来的温度信息后,通过软件设计算法,将处理后的温度信息及相应的温度路数通过LED 数码管显示出来,各路温度值的上下限可通过P3.2~P3.4独立式键盘进行设定。若某路超过温度设定的上下限将进行通过P3.5或P3.6进行报警提示。此外,可通过串行口RS 232 模块将各路温度数据送上位机处理。系统采用Proteus仿真软件设计的仿真电路如图2所示,此时LED显示的是第3路温度值。

2.1 测温电路设计

采用8 片DS18B20 组成多路测温电路。DS18B20内部均有一个全球惟一的64位产品序列号,单片机通过序列号可对一条总线上的多路DS18B20进行控制,读取其温度。但DS18B20仅由单总线采集多路温度数据时,软件设计算法复杂,读取速度慢,无法适用于实时性要求高的测温场合。特别是当单总线上挂接的DS18B20传感器个数大于8个时,采用寄生电源供电方式亦存在总线驱动能力不足等问题[3].为此,本设计采用“单总线结构+并行I/O 口输入”相结合的方式,实时巡回采集多路DS18B20的温度信息。具体做法是:硬件上将8片DS18B20的单总线分别连到单片机的并行P1口引脚,同时各片DS18B20的电源端采用外部电源供电方式,且每个单总线另接一个4.7 kΩ的上拉电阻到5 V电源以保证达到足够的工作电流;软件上读取多路温度与读取单路温度的操作类似,不需读取读出所用DS18B20的序列号,而只需通过参数传递来循环读取各路温度数据(软件设计中介绍)。

2.2 键盘与LED显示电路设计

LED显示电路设计:P0口输出显示代码经74LS245驱动后接到8 位LED 数码管的段选线,P2 口输出接到LED的位选线。正常情况下,8位LED数码管用于循环显示通道号及该通道的温度值。

键盘输入设计:采用独立式键盘P3.2~P3.4用来修改温度报警的上限与下限值。系统默认的温度报警上限为50 ℃,下限为-10 ℃。系统上电后,LED数码管将先后显示温度报警上/下限值。若按P3.2 键报警值加1;若按P3.3键报警值减1;P3.4为确定键,用于保存修改值。

此外,当系统检测到当前通道温度值超过设定的上、下限时,将通过P3.6,P3.7进行闪光报警提示。

2.3 串行通信设计

检测系统可通过串行口与上位机进行通信,向上位机传送温度值及相应的通道号。实物中通过RS 232串行接口与上位机连接,上位机的控制界面由VB 6.0 编写。当运行Proteus软件时,可以从虚拟终端看到上位机接收到的8个通道的温度数据及相应的通道号。

3 软件设计

3.1 软件总体设计

如图3所示。

采用DS18B20和AT89C51设计高精度的多路温度监测系统与进行仿真调试

系统上电复位后,程序主要包括:

(1)系统初始化设置。

(2)按键处理子程序:LED 数码管显示上限报警温度值并闪烁,若10 s中之内有按键输入修改温度值,则进行键盘操作直至修改完成,并保存温度上限值;若10 s之内无按键输入或按P3.4“确定”键,则保存上限温度;接着显示下限报警温度值并闪烁,重复上述操作后保存下限报警温度值。

(3)温度报警值设置子程序:实现将8 路的报警温度写入DS18B20中,流程图详见图4所示。

(4)读取温度子程序:在对显示路数初始化后,进行温度值读取,这是软件设计的关键,下面将单独介绍。

(5)温度报警处理:读取某路DS18B20温度值及报警上下限值后,进行比较,若超出范围则启动定时器0,驱动上/下限报警提示单元。

(6)显示当前通道温度子程序:取得当前通道号后,根据读取的2 字节温度值(温度暂存器格式参考DS18B20技术手册),判断其符号位并分别读取其整数部分和小数部分,通过运算后保存到显示缓冲区,进行动态显示,并刷新显示若干时间。

(7)上位机通信子程序:每采集一路温度数据,通过RS 232 串口,将其通道号、温度值发送给上位机,完成相应通道的温度数据采集处理。

(8)循环修改:修改通道号,进行下一路温度数据采集,直至8路温度处理完成,如此循环往复。

3.2 读取温度子程序设计

采用DS18B20进行单路测量时,可直接与单片机相连,不需读取读出器件的64 位产品序列号。当采用DS18B20进行多路测温时,在初始化操作后,通常的做法是需要在线逐个地搜索64 位ROM 编码以确认各个DS18B20所在位置,并需对ROM编码进行冗余校验,算法设计复杂。且等待多路搜索是否完成需要消耗大量的时间,使程序执行的效率和系统实时性受到了影响。

本设计采用“单总线结构+并行I/O口输入”结合的方式巡回读取多路温度。DS18B20作为单总线芯片,进行信息交换时有严格的读/写时序要求。读取温度子程序流程如图5所示。首先通过参数传递将通道号传给读取温度子程序,接着对DS18B20进行初始化,然后直接执行跳过ROM命令(CCH),即不读取64位ROM编码而直接向DS18B20发出功能命令,节约了时间。之后,再向DS18B20发送温度转换命令(44H),DS18B20启动温度采样与A/D 转换,并将转换数据存储在暂存器中。

然后再次初始化DS18B20,并在再一次跳过ROM 命令后,执行单片机读暂存器命令(BEH),根据传递参数确定的通道号,可将通道号对应的DS18B20高速暂存存储器的9个字节数据读入单片机中,其中第0,1字节分别是温度值低位(LS byte)和高位(MS byte),第2,3 字节分别是高温限值(TH)和低温限值(TL),从而完成某通道DS18B20的温度采集。

3.3 软件设计流程

软件设计流程如图4,图5所示。

采用DS18B20和AT89C51设计高精度的多路温度监测系统与进行仿真调试

4 Keil C51 与Proteus 联合仿真

软件采用C语言编程,在Keil C51集成开发环境下将编写的程序进行编译、调试[6],并生成目标文件(XX.hex)。

同时利用嵌入式仿真软件Proteus绘制出电路仿真原理图,CPU 选择AT89C51.双击AT89C51,在出现的对话框中的“Program file”加入已生成的XX.hex文件,并进行仿真调试,调试成功则可以修改温度报警值,及在正常运行时看到循环显示所采集到的温度值、通道号,仿真效果图如图6所示。

5 结语

本设计以Proteus 仿真软件作为开发工具,以AT89C51单片机作为控制核心,使用DS18B20芯片作为温度传感器,加上适当的外围电路,组成了多路温度巡回监测系统。与传统温度传感器相比,可直接输出数字信号而不必考虑A/D转换问题,抗干扰能力与可靠性大大提升。同时,采用单总线与多路并行输入相结合的方法,克服了DS18B20传统上采用单总线结构时所存在的问题,实现多路温度实时读取、巡回监测、与上位机通信等功能,且系统具有结构简洁、精度高、适应性强、维护方便等优点,在多路温度采集与监测领域中有很好的实用价值。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6032

    文章

    44521

    浏览量

    633129
  • 温度传感器
    +关注

    关注

    48

    文章

    2917

    浏览量

    155892
  • 测试系统
    +关注

    关注

    6

    文章

    810

    浏览量

    62075
收藏 人收藏

    评论

    相关推荐

    at89c51ds18b20,数码管的温度控制

    at89c51ds18b20,数码管的温度控制。实现温度控制与报警
    发表于 05-09 00:42

    基于AT89C51DS18B20的最简温度测量系统

    与单片机沟通,完成温度采集和数据处理。DS18B20AT89C51结合实现最简温度检测系统,该系统
    发表于 10-25 17:11

    基于单总线数字温度传感器DS18B20的测温系统方案

    个字节的存储单元,高字节保存的值左移8位与低字节相加,便得DS18B20温度转换结果,读取温度转换值函数如下:  4 系统调试与运行结果  
    发表于 11-06 15:18

    基于AT89S51单片机和数字温度传感器DS18B20组成的多路温度检测系统

    AT89S51单片机作为控制器,可靠性高、体积小、价格低廉;采用DS18B20作为多路温度采集的传感器,电路简单、测量
    发表于 04-28 07:36

    基于AT89C51DS18B20的智能温度表课程设计资料分享

    本设计选用AT89C51作为整个控制系统的核心部分,通过DS18B20采集温度,通过三个按键:模式切换键、加键和减键。模式切换键可以切换正常显示,上限
    发表于 01-13 08:25

    基于ARM和DS18B20温度监测系统

    基于ARM和DS18B20温度监测系统使用SAMSUNG公司的32位ARM微控制器S3C2440作为数据采集单元, 数字
    发表于 11-03 11:21 339次下载

    DS18B20温度显示报警控制设计

    本文设计了一种基于AT89C51 单片机与DS18B20温度控制系统。该设计通过AT89S52 单片机驱动数字
    发表于 12-17 00:24 696次下载
    <b class='flag-5'>DS18B20</b><b class='flag-5'>温度</b>显示报警控制设计

    DS18B20简介及其多路温度监测系统的设计

    DS18B20采用单总线结构时温度数据读取慢、单总线驱动能力不足的问题,实现了多路温度实时快速读取和巡回
    发表于 11-29 11:14 13次下载
    <b class='flag-5'>DS18B20</b>简介及其<b class='flag-5'>多路</b><b class='flag-5'>温度</b><b class='flag-5'>监测</b><b class='flag-5'>系统</b>的设计

    DS18B20温控系统的合集包括:芯片介绍,设计资料,原理图和程序的概述

    基于DS18B20的温控系统的设计采用DS18B20芯片和四位共阳极LED数码管,还有主控芯片AT89C51。通过
    发表于 06-19 08:00 30次下载
    <b class='flag-5'>DS18B20</b>温控<b class='flag-5'>系统</b>的合集包括:芯片介绍,设计资料,原理图和程序的概述

    单片机测温系统AT89C51DS18B20温度传感器、LCD1602)

    单片机测温系统一、简介此系统主要由AT89C51DS18B20温度模块和LCD1602组成。大致的原理是
    发表于 11-20 14:36 25次下载
    单片机测温<b class='flag-5'>系统</b>(<b class='flag-5'>AT89C51</b>、<b class='flag-5'>DS18B20</b><b class='flag-5'>温度</b>传感器、LCD1602)

    51单片机多路测温报警系统AT89C51、多个DS18B20、LCD1602)

    51单片机多路测温报警系统AT89C51、多个DS18B20、LCD1602)一、简介** 此系统
    发表于 11-21 11:06 19次下载
    <b class='flag-5'>51</b>单片机<b class='flag-5'>多路</b>测温报警<b class='flag-5'>系统</b>(<b class='flag-5'>AT89C51</b>、多个<b class='flag-5'>DS18B20</b>、LCD1602)

    51单片机使用LCD1602显示DS18B20温度传感器温度

    的可以留言,看到回复)需要的元件:  AT89C51、LCD1602、DS18B20。电路原理图:主函数代码:#include <reg52.h>#include<DS18...
    发表于 11-23 17:21 67次下载
    <b class='flag-5'>51</b>单片机使用LCD1602显示<b class='flag-5'>DS18B20</b><b class='flag-5'>温度</b>传感器<b class='flag-5'>温度</b>

    基于AT89C51单片机用1602LCD与DS18B20设计的温度报警器

    基于AT89C51单片机用1602LCD与DS18B20设计的温度报警器Proteus仿真及程序
    发表于 05-05 10:00 10次下载

    基于AT89C51单片机用数码管与DS18B20设计温度报警器

    基于AT89C51单片机用数码管与DS18B20设计温度报警器Proteus仿真及程序
    发表于 05-04 15:31 35次下载

    基于51单片机DS18B20温度测量仿真设计

    运用所学单片机知识,完成温度信号的测量。要求如下:单片机系统选择使用AT89C51温度传感器采用DS1
    的头像 发表于 10-22 17:47 1616次阅读
    基于<b class='flag-5'>51</b>单片机<b class='flag-5'>DS18B20</b><b class='flag-5'>温度</b>测量<b class='flag-5'>仿真</b>设计