基于DS18B20的温度测量系统 您所在的位置:网站首页 LED使用环境温度 基于DS18B20的温度测量系统

基于DS18B20的温度测量系统

2023-07-02 14:44| 来源: 网络整理| 查看: 265

我一直相信:走过的路,看过的风景,最终会成就你的人生,融入你的灵魂,决定你的格局。最好的人生,是带着伤口,却依然勇敢前行的,时间终究可以把一切融化成最美好最温暖的样子。

好的进入正题~~~

目录 设计要求设计方案系统原理图系统工作原理系统框图系统硬件设计系统软件设计 Proteus仿真系统中调试问题及解决方案系统应用与改进系统应用系统不足 心得PS

设计要求

查阅相关资料,了解单总线和I2C总线的协议规范以及DS18B20(用作温度传感器)和7SEG-MPX6-CA(LED数码管显示温度数值)的相关知识后,设计一温度监控系统,编写程序并调试通过,可连续测量显示温度值并提供报警功能以及相应后续的加热和降温工作,设计指标如下: 1.温度测量范围:-55°C ~125°C,测量精度±0.0625°C; 2.用LED数码管通过按键设置交换显示测量的温度值(一位符号,三位整数,两位小数)和设置的上下限(一位符号,三位整数); 3.可通过按键设置报警上限以及下限,并通过两个LED指示灯指示报警状态,以及两种状态下相应的继电器进行工作。

设计方案

本设计主要是以单片机与数字温度传感器DS18B20相结合的方法来实现对温度的采集,其中AT89C51芯片为控制核心,温度传感器DS18B20的节点通过单总线与单片机相连。该系统包括单片机最小系统、传感器电路、报警电路、LED数码管显示电路、继电器工作电路、电源电路六大部分组成,实时监控温度的变化后通过LED数码管来显示温度的数值,扩展功能为可以通过按键设置上下限报警值,一般情况下,电路正常显示绿灯,若温度超出所设定的上限值时,报警器开始报警,并且继电器电扇开始工作进行降温,同时电扇电路部分的工作指示灯亮起;若温度低于所设定的下限值,相应的电阻丝开始加热,同时加热部分的工作指示灯也亮起,从而可以远程实现对整个温度系统的管理与控制。

设计内容包括两部分,一是对系统硬件部分的设计,包括温度采集电路和显示电路,二是系统软件部分的设计,通过C语言编写程序实现温度的采集与显示。同时借助于Proteus软件来实现系统电路的设计与仿真。这种温度测量系统的优点体现在成本低廉、性价比高、测量精度高、性能稳定等。

本设计采用AT89C51芯片作为控制核心,它具有如下特点: (1)兼容MCS51指令系统; (2)4K字节可编程FLASH存储器,128×8位内部RAM; (3)32可编程I/O线,两个16位定时器/计数器; (4)全静态工作:0Hz-24MHz; (5)5个中断源,可编程串行通道; (6)低功耗的闲置和掉电模式,片内振荡器和时钟电路。 本设计采用数字温度传感器DS18B20作为测为测温元件,它具有如下特点: (1)只要求一个端口即可实现通信; (2)在DS18B20中的每个器件上都有独一无二的序列号; (3)实际应用中不需要外部任何元器件即可实现测温; (4)测量温度范围在一55℃到+125℃之间,可满足满足指标要求; (5)数字温度计的分辨率用户可以从9位到12位选择; (6)内部有温度上、下限告警设置,可用于报警设计。

本设计采用LED数码管(7SEG-MPX6-CA)作为温度显示元件,它具有如下特点: (1)共阳数码管共阳端直接接电源,不需要上拉电阻,则亮度较高; (2)若用共阴数码管,单片机上电和复位后所有的I/O口都是高电位,即当单片机上电后,电流经过数码管的位流向共阴至地,数码管就会亮,耗电大,不节能,需要每次编程序时把位控制端赋予低电平,则显得麻烦。

系统原理图

在这里插入图片描述

系统工作原理 系统框图

在这里插入图片描述

系统硬件设计

(1)DS18B20数字温度传感器 在这里插入图片描述 DALLAS最新单线数字温度传感器DS18B20是一种新型的“一线器件”,其体积更小、更适用于多种场合,且适用电压更宽、更经济。DALLAS半导体公司的数字化温度传感器DS18B20是世界上第一片支持“一线总线”接口的温度传感器。温度测量范围为-55℃—+125℃,可编程,有9位—12位的转换精度,测温分辨率可达0.0625℃,分辨率设定参数以及用户设定的报警温度存储在EEPROM中,掉电后依然保存。被测温度用符号扩展的16位数字量方式串行输出,其工作电源既可以在远端引入,也可以采用寄生电源方式产生。多个DS18B20可以并联到3根或2根线上,CP只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。因此用它来组成一个测温系统,具有线路简单,在一根通信线上可以挂很多这样的数字温度计,十分方便。

DS18B20功能特点 (1)采用单总线的接口方式 与微处理器连接时仅需要一条口线即可实现微处理器与 DS18B20 的双向通讯。单总线具有经济性好,抗干扰能力强,适合于恶劣环境的现场温度测量。 (2)测量温度范围较宽,测量精度较高。 DS18B20 的测量范围为 -55 ℃ ~+ 125 ℃ ; 在初始设置的 -5℃~+ 20°C的工作范围内,精度可达到 ± 0.0625°C 。 (3)在使用中不需要任何外围元件。 (4)支持多点组网功能,多个DS18B20可以并联在惟一的单线上,实现多点测温。 (5)供电方式灵活DS18B20可以通过内部寄生电路从数据线上获取电源。因此,当数据线上的时序满足一定的要求时,可以不接外部电源,从而使系统结构更趋简单,可靠性更高。 (6)测量参数可配置DS18B20的测量分辨率可通过程序设定 9~12 位,可编辑数据为9~12位,转换12位温度时间为750ms(最大)。 (7)用户可自设定报警上下限温度,报警搜索命令可识别和寻址哪个器件的温度超出预定值。 (8)掉电保护功能DS18B20内部含有EEPROM,在系统掉电以后,它仍可保存分辨率及报警温度的设定值。

DS18B20工作原理 低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在一55℃所对应的一个基数值。计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。

DS18B20内部结构 在这里插入图片描述 主要包括:寄生电源,温度传感器,64位ROM和单总线接口,存放中间数据的高速暂存器RAM,用于存储用户设定温度上下限值的TH和TL触发器,存储与控制逻辑,8位循环元余校验码(CRC)发生器等7部分。 (1)64位ROM 64位序列号,可以看作是该DS18B20的地址序列码,其作用是使每个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。 在这里插入图片描述 8位CRC:是单总线系列器件的编码,DS18B20定义为28H。 48位序列号:是一个唯一的序列号。 8位系列码:由CRC产生器生产,作为ROM中的前56位编码的校验码(CRC=X8+X5+X4+1)。 (2)高速暂存器 高速暂存存储器由9个字节组成,分为温度的低八位数据0、温度的高8位数据1、高温阈值2、低温阈值3、配置寄存器4、保留5、保留6、保留7和CRC校验8。器件断电时,EEPROM寄存器中的数据保留,上电后,EEPROM数据被重新加载到相应的寄存器位置,也可以使用命令随时将数据从EEPROM重新加载到暂存器中。 在这里插入图片描述 (2)温度寄存器 在这里插入图片描述 温度寄存器由两个字节组成,分为低8位和高8位,一共16位。其中第0位到第3位,存储的是温度值的小数部分,第4位到第10位存储的是温度值的整数部分,第11位到第15位为符号位。全0表示是正温度,全1表示是负温度。表格中的数值,如果相应的位为1,表示存在;如果相应的位为0,表示不存在。 (3)TH和TL报警寄存器 在这里插入图片描述 TH和TL寄存器存储温度报警触发值,符号位S表示值是正还是负,对于正数,S=0;对于负数,S=1。DS18B20执行温度转换后,将温度值与用户定义的两个报警触发值进行比较,由于TH和TL是8位寄存器,因此在比较TH和TL时只使用温度寄存器的第1位到第4位,如果被测温度低于或等于TL值,或高于或等于TH值,则在DS18B20内部存在报警条件,并设置报警标志。主设备可以通过发出一个[EC]命令来检查总线上所有DS18B20的报警标志状态。TH和TL寄存器是非易失性的(EEPROM),当设备断电时,它们将保留数据。可以通过内存部分暂存器的字节2和字节3访问TH和TL。 (5)配置寄存器 在这里插入图片描述在这里插入图片描述 (6)温度与数据的关系 在这里插入图片描述 若温度是一个负温度,则要将读到的数据减一再取反。

DS18B20温度的读取 DS18B20在出厂时以配置为12位,读取温度时共读取16位,所以把后11位的2进制转化为10进制后在乘以0.0625便为所测的温度,还需要判断正负。前5个数字为符号位,当前5位为1时,读取的温度为负数;当前5位为0时,读取的温度为正数。

DS18B20初始化 在这里插入图片描述 主机首先发出一个最少480微秒的低电平脉冲,然后释放总线变为高电平,并在随后的480微秒时间内对总线进行检测,如果有低电平出现说明总线上有器件已做出应答。若无低电平出现一直都是高电平说明总线上无器件应答。 作为从器件的DS18B20在一上电后就一直检测总线上是否有至少480微秒的低电平出现,如果有,在总线转为高电平后等待15-60微秒后将总线电平拉低60-240微秒做出响应存在脉冲,告诉主机本器件已做好准备。若没有检测到就一直在检测等待。 步骤体现如下: ① 先将数据线置高电平“1”。 ② 延时(该时间要求的不是很严格,但是尽可能的短一点)。 ③ 数据线拉到低电平“0”。 ④ 延时750微秒(该时间的时间范围可以从480到960微秒)。 ⑤ 数据线拉到高电平“1”。 ⑥ 延时等待(如果初始化成功则在15到60毫秒时间之内产生一个由 DS18B20所返回的低电平“0”。据该状态可以来确定它的存在,但是应注意不能无限的进行等待,不然会使程序进入死循环,所以要进行超时控制。 ⑦ 若CPU读到了数据线上的低电平“0”后,还要做延时,其延时的时间从 发出的高电平算起(第(5)步的时间算起)最少要480微秒。 ⑧ 将数据线再次拉高到高电平“1”后结束。

DS18B20写操作 在这里插入图片描述 写周期最少为60微秒,最长不超过120微秒。若主机想写0,则把总线拉低电平最少60微秒直至写周期结束。若主机想写1,则一开始主机先把总线拉低1微秒表示写周期开始,1微秒后就释放总线为高电平,一直到写周期结束。作为从机的DS18B20则在检测到总线被拉低后等待15微秒然后从15微秒到45微秒开始对总线采样,在采样期内总线为高电平则为1,若采样期内总线为低电平则为0。 步骤体现如下: ① 1.数据线先置低电平“0”。 ② 2.延时确定的时间为15微秒。 ③ 3.按从低位到高位的顺序发送字节(一次只发送一位)。 ④ 延时时间为45微秒。 ⑤ 将数据线拉到高电平。 ⑥ 重复上①到⑤的操作直到所有的字节全部发送完为止。 ⑦ 最后将数据线拉高。

DS18B20读操作 在这里插入图片描述 对于读数据操作时序也分为读0时序和读1时序两个过程。读时序是从主机把单总线拉低之后,在1微秒之后就得释放单总线为高电平,以让DS18B20把数据传输到单总线上。DS18B20在检测到总线被拉低1微秒后,便开始送出数据,若是要送出0就把总线拉为低电平直到读周期结束。若要送出1则释放总线为高电平。主机在一开始拉低总线1微秒后释放总线,然后在包括前面的拉低总线电平1微秒在内的15微秒时间内完成对总线进行采样检测,采样期内总线为低电平则确认为0。采样期内总线为高电平则确认为1。完成一个读时序过程,至少需要60us才能完成。 步骤体现如下: ① 将数据线拉高“1”。 ② 延时2微秒。 ③ 将数据线拉低“0”。 ④ 延时15微秒。 ⑤ 将数据线拉高“1”。 ⑥ 延时15微秒。 ⑦ 读数据线的状态得到1个状态位,并进行数据处理。 ⑧ 延时30微秒。

DS18B20的ROM操作命令 主要用于选定在单总线上的DS18B20,分为5个命令 ① 读出ROM,代码为33H,用于读出DS18B20的序列号,即64位激光ROM代码。 ② 匹配ROM,代码为55H,用于识别(或选中)某一特定的DS18B20进行操作。 ③ 搜索ROM,代码为F0H,用于确定总线上的节点数以及所有节点的序列号。 ④ 跳过ROM,代码为CCH,当总线仅有一个DS18B20时,不需要匹配 。 ⑤ 报警搜索,代码为ECH,主要用于鉴别和定位系统中超出程序设定的报警温度界限的节点。

考虑到DS18B20单线通信功能是分时完成的,有严格的时序概念,系统对DS18B20 的各种操作必须按协议进行。根据DS18B20的协议规定,微控制器控制DS18B20完成温度的转换必须经过以下 3个步骤: ① 每次读写前对DS18B20进行复位初始化。复位要求主CPU将数据线下拉 500us ,然后释放, DS18B20收到信号后等待 16us~60us 左右,然后发出60us~240us 的存在低脉冲,主 CPU 收到此信号后表示复位成功。 ② 发送一条 ROM 指令。 ③ 发送存储器指令。

(2)AT89C51主控芯片 在这里插入图片描述 主控制芯片选择AT89C51,把那些作为控制应用所必需的基本内容都集成在一个尺寸有限的集成电路芯片上,若按功能划分,它由如下功能部件组成,即微处理器(CPU)、数据存储器(RAM)、程序存储器(ROM)、I/O口线、定时器/计数器、中断系统及特殊功能寄存器。它们都是通过片内单一总线连接而成,其基本结构依旧是微处理器(CPU)加上外围芯片的传统结构模式。但对各种功能部件的控制是采用特殊功能寄存器的集中控制方式,以实现不同的功能,同时AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。

(3)7SEG-MPX6-CA数码管 在这里插入图片描述 下图是共阳数码管编码表图。 在这里插入图片描述 其中123456是位码输入,abcdefg和dp则是数码管的段码输入。若在管脚标示为1的地方供5V.在管脚abcdefg输入1001111,最左边数码管的就会显示1。

(4)键盘 温度的设置采用按键来实现,通过按键修改温度的上限值和下限值。按键采用独立式键盘,分别接单片机的P1.0、P1.1和P1.2引脚上,其与单片机的连接如下图所示。先按一次控制键进入设置模式,然后每按上调或下调键一次,设定温度值增1或减1,再按一次控制键代表设定完毕即退出。 在这里插入图片描述 (5)继电器工作模块

降温模块 在这里插入图片描述 当温度高于按键设置的温度上限值时,需要进行降温,此时继电器工作,电扇开始工作,同时电扇的工作指示灯亮。加热模块 在这里插入图片描述 当温度低于按键设置的温度下限值时,需要进行加热,此时继电器工作,电阻丝开始工作,同时电扇的工作指示灯亮。 系统软件设计

整个系统的功能是由硬件电路配合软件来实现的,当硬件基本定型后,软件的功能也就基本确定下来。从软件的功能不同可分为两大类:一是监控软件(主程序),它是整个控制系统的核心,专门用来协调各执行模块之间的关系。二是执行软件(子程序),它是用来完成各种实质性的功能如测量、计算、显示、通讯等。每一个执行软件也就是一个小的功能执行模块。这里将各执行模块一一列出,并为每一个执行模块进行功能定义和接口定义。各执行模块规划好后,接着规划监控程序。首先根据系统的总体功能选择一种最合适的监控程序结构,然后根据实时性的要求,合理地安排监控软件和各执行模块之间的调度关系。主程序的主要功能是负责温度的实时显示、读出并处理DS18B20测量的当前温度值同时与按键设定的值进行相比后报警以及报警后相对应的操作,其程序流程见下图所示: 在这里插入图片描述

读出温度子程序 读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。其程序流程图如下图所示: 在这里插入图片描述温度转换命令子程序 温度转换命令子程序主要是发温度转换开始命令,当采用12位分辨率时转换时间约为480us,在本程序设计中采用程序延时法等待转换的完成。温度转换命令子程序流程图如下图所示: 在这里插入图片描述计算温度子程序 计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,其程序流程图如下图所示: 在这里插入图片描述显示温度子程序 流程图如下图所示: 在这里插入图片描述键盘扫描子程序 按键采用3个按键,分别表示控制键、加1键和减1键,键盘子程序流程图如下图所示: 在这里插入图片描述 Proteus仿真 系统正常显示时 在这里插入图片描述设置温度上限值 在这里插入图片描述设置温度下限值 在这里插入图片描述温度值高于上限时 在这里插入图片描述温度值低于下限时 在这里插入图片描述 系统中调试问题及解决方案

问题1:使用仿真软件进行画电路图以及调试过程中,发现按键与LED数码管不能按预期效果显示。 解决1:详细对照管脚连接发现,数码管与主控芯片连接时,由于连接线过多,高低电平设置时出现错乱,重新连线,可以正常运行。

问题2:关于DS18B20的使用,起初只能实现正数的温度,无法做到负温度的测量。 解决2:起初时联系计算机中二进制的原码与补码的关系,对负温度加1后取反,但总是出错,后来参考中国电子网上的一些资料,进行减1后取反即可。

问题3:起初LCD只能显示一位小数即精度只可以达到0.1℃,且出现温度测量精度不够的问题。 解决3:考虑到问题三,要想取到小数点后两位,则需在程序中将设定值设置为显示值的100倍,后通过取余、相除的方法取到小数点后的两位数值;同时在反复实践后发现应使电源电压保持在5V左右,若电源电压过低,会使所测得的温度精度降低。

问题4:初次调试时,出现温度输出显示总是85℃。 解决4:因DS18B20从测温结束到将温度值转换成数字量需要一定的转换时间,这点必须保证,不然会出现转换错误的现象。

问题5:首先在最开始运行时,可能由于线路的不稳定,导致LED数码管有时会黑屏,没有示数,经过检查,可成功显示实时温度。 解决5:进一步分析程序,通过修改温度系数,达到使LED数码管的精度为DS18B20的最小分辨率±0.0625℃(但因实践中数码管只有两位小数,则大致精度体现为±0.06℃左右)。

系统应用与改进

正如我们所知,温度是一个和人们生活环境密切相关物理量,是最基本的环境参数,也是在其他研究、生产、科研、生活中需要测量和控制的物理量。如太阳能热水器、电力、石油、农业大棚经常需要对环境温度进行检测,并根据实际的要求对温度进行远程控制。例如,许多太阳能热水器中,需要通过温度检测来控制其水泵运作;在农业大棚中,通过温度检测来判断是否合适农作物种植与生长。

系统应用

本设计的温度监测域报警系统就可以应用在温室大棚内,温室大棚要求温度保持在某范围内,这个范围温度是动植物生长的最佳环境温度,因此必须对动植物生长的环境温度进行监测和控制,使其适合动植物的生长,以提高产量和质量。本系统能够实现对温室大棚温度的自动监控,可以通过按键输入设定温度等控制指令,并且使温室温度保持在设定值的范围内,完成监控系统的工作。

该温度控制器能够实时监测温室大棚的温度,精度达到0.0625℃;可以设定农作物生长的理想温度,根据当前温度与设定温度之间的差别,加热器或者风扇将自动启动,直至达到设定温度停止工作。经改进后,该系统可以广泛地应用在养殖大棚等场所的温度控制,保证农作物理想的生长温度,提高产量。

系统不足

本设计虽然能够对温度进行实时监测,设定作物的理想生长温度,以及根绝当前温度与理想温度的差别,用加热器或风扇分别进行处理,但无法做到使温度因后续操作而自动达到设定温度,需要人工手动调节,即目前此应用不适用于无人检测的情况下,若需要进一步推广则需要进一步改进。

心得

对于此次设计,采用了DS18B20数字温度传感器以AT89C51单片机主控芯片,实现温度测量以及报警系统和报警后相应继电器工作的设计,并在Proteus上完成了仿真。在完成的过程中,加深了对Keil以及Proteus操作流程的掌握,同时为了实现温度的测量,对DS18B20数字温度传感器以及LED数码管有了深入的了解和应用。

通过老师上课提供的资料以及自己在网上查阅的相关资料,进行对比挑选,最终因性价比等原因确定了DS18B20数字温度传感器来作为温度测量元件。之后需要将测得的温度实时显现出来,又选择了LED数码管作为显示器,加深了对数码管这个元件的掌握,达到了系统指标的要求,有了很大的收获。

在实现系统功能的过程中,是利用C语言编写的单片机程序,从而对C语言有了更进一步的应用实践,在编写程序之间需要搭好框架,之后在框架之内添砖加瓦,完成函数内容,实现系统功能。在编写程序中,体会有二,一是因平时使用Python以及Java这种封装好函数功能的程序语言,导致对于c语言这种基础语言中的一些语法以及实现代码的方法没有很好的掌握,所以平时还需要进一步的应用与实践;二是编写代码时,头文件以及变量的定义需要慎之又慎,对于语法使用,语句字母、符号等的编写都需要小心,避免调试的时间浪费。

在实现系统的同时,自己对于查找资料、研究角度入手、应用实践等方面有了进一步的提高,通过思考与实践达成了设计要求以及自己的设计方案,也感觉收获很多;与此同时,自己在单片机的实践应用这方面还需要进一步的加强学习,元件的使用还需要更加熟练的掌握。

PS

上面是关于单片机的一个小项目,考虑较简单,没有进行深入的研究,但还是学习到了一定知识,于是在这里记录下实施进展中的一些问题、解决方案和心得体会等。 这里记录只为证明曾经走过~ 当然以上若有解释不恰当之处,还请指出,希望多进行交流,从而make progress together! 至于代码若需要可在下方留言。 其他不多说了,加油冲鸭! 在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有