ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:899.29KB ,
资源ID:10390539      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-10390539.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于DS18B20的温度报警器设计讲解.docx)为本站会员(b****3)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

基于DS18B20的温度报警器设计讲解.docx

1、基于DS18B20的温度报警器设计讲解江苏信息职业技术学院毕业设计论文基于DS18B20的温度报警器设计 系 电子信息工程系 专业 电子信息工程技术 姓名 康志凌 班级 电子信息122 学号 * 指导教师 徐敏 N 职称 讲师 设计时间 2014.10.082015.04.08 摘要本设计以AT89C51单片机为核心,设计了一个温度测量报警系统,可以方便的实现温度采集和显示。它使用起来相当方便,具有精度高、量程宽、灵敏度高、体积小、功耗低等优点,适合于我们日常生活和工农业中的温度测量及报警。本设计由AT89C51单片机、DS18B20温度传感器和LED显示器组成,可以直观的显示测量的温度。本设

2、计运行过程中,如果外界温度低于-20或高于70,系统将出发蜂鸣器,产生报警声音,且对应的LED同步闪烁。关键词:AT89C51,DS18B20,传感器,温度报警器第1章 引言 温度是一个十分重要的物理量,对他的测量与控制有着十分重要的意义。随着现代化工农业技术的发展及人民对生活环境要求的提高,人民也迫切需要监测和控制温度.在人类的生活环境中,温度扮演着极其重要的角色。无论你生活在哪里,从事什么工作,无时无刻不在跟温度打着交道。子18世纪工业革命以来,工业发展对是否能掌握温度有着绝对的联系。在冶金、钢铁、石化、水泥、玻璃、医药等等行业,可以说几乎80%的工业部门都不得不靠路这温度的因素。信息科学

3、和航空工业的飞速发展给人们生活甚至国家安全带来了巨大的飞跃。我的实习单位是航天八五一一研究所,在我工作期间深刻感觉到温度对焊接工艺的重要性,往往只是高了或低了一二摄氏度,就有可能将电缆或芯片报废掉,造成严重的损失。我们也在重要的位置上放置了一个温度测量报警器由此可见温度对我们工作生活的重要性,温度传感器以及温度报警器就显得格外重要。第2章 方案设计本设计主要元件有AT89C51、DS18B20、数码管等,其中由AT89C51作为控制器,DS18B20测量温度,再通过74LS245把AT89C51单片机芯片所处理和转化的数据传输到数码管中。当DS18B20感知到温度达到高于70或低于-20临界值

4、时相应的LED闪烁,同时蜂鸣器发出报警声。晶振是正弦波震荡电路,供本设计数字电路整形后作时钟源。复位电路的作用是把电路恢复到起始状态。本设计的温度报警器电路的总体框图如图2.1所示。图2.1 温度报警器电路的总体框架第3章 DS18B20简介DS18B20是美国DALLAS半导体公司继DS1820之后最新推出的一种改进型智能温度传感器。与传统的热敏电阻相比,他能够直接读出被测温度并且可根据实际要求通过简单的编程实现912位的数字值读数方式。可以分别在93.75 ms和750 ms内完成9位和12位的数字量,并且从DS18B20读出的信息或写入DS18B20的信息仅需要一根口线(单线接口)读写,

5、温度变换功率来源于数据总线,总线本身也可以向所挂接的DS18B20供电,而无需额外电源。因而使用DS18B20可使系统结构更趋简单,可靠性更高。他在测温精度、转换时间、传输距离、分辨率等方面较DS1820有了很大的改进,给用户带来了更方便的使用和更令人满意的效果。 3.1 DS18B20性能指标 (1)独特的单线接口方式:DS18B20与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。 (2)在使用中不需要任何外围元件。 (3)可用数据线供电,电压范围:+3.0 +5.5 V。 (4)测温范围:-55 +125 。固有测温分辨率为0.5 。 (5)通过编程可实现912位

6、的数字读数方式。 (6)用户可自设定非易失性的报警上下限值。 (7)支持多点组网功能,多个DS18B20可以并联在惟一的三线上,实现多点测温。 (8)负压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。3.2 DS18B20的封装及内部结构DS18B20的封装如图3.1所示。图3.1 DS18B20的封装DS18B20引脚功能:1、 GND为电源地2、 DQ为数字信号输入/输出端3、VDD为外接供电电源输入端(在寄生电源接线方式时地) DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。 3.3 DS18B20工作原

7、理及应用DS18B20的温度检测与数字数据输出全集成于一个芯片之上,从而抗干扰力更强。其一个工作周期可分为两个部分,即温度检测和数据处理。在讲解其工作流程之前我们有必要了解18B20的内部存储器资源。18B20共有三种形态的存储器资源,它们分别是:ROM 只读存储器,用于存放DS18B20ID编码,其前8位是单线系列编码(DS18B20的编码是19H),后面48位是芯片唯一的序列号,最后8位是以上56的位的CRC码(冗余校验)。数据在出产时设置不由用户更改。DS18B20共64位ROM。RAM 数据暂存器,用于内部计算和数据存取,数据在掉电后丢失,DS18B20共9个字节RAM,每个字节为8位

8、。第1、2个字节是温度转换后的数据值信息,第3、4个字节是用户EEPROM(常用于温度报警值储存)的镜像。在上电复位时其值将被刷新。第5个字节则是用户第3个EEPROM的镜像。第6、7、8个字节为计数寄存器,是为了让用户得到更高的温度分辨率而设计的,同样也是内部温度转换、计算的暂存单元。第9个字节为前8个字节的CRC码。EEPROM 非易失性记忆体,用于存放长期需要保存的数据,上下限温度报警值和校验数据,DS18B20共3位EEPROM,并在RAM都存在镜像,以方便用户操作。3.4 控制器对DS18B20操作流程1. 复位:首先我们必须对DS18B20芯片进行复位,复位就是由控制器(单片机)给

9、DS18B20单总线至少480uS的低电平信号。当18B20接到此复位信号后则会在1560uS后回发一个芯片的存在脉冲。2. 存在脉冲:在复位电平结束之后,控制器应该将数据单总线拉高,以便于在1560uS后接收存在脉冲,存在脉冲为一个60240uS的低电平信号。至此,通信双方已经达成了基本的协议,接下来将会是控制器与18B20间的数据通信。如果复位低电平的时间不足或是单总线的电路断路都不会接到存在脉冲,在设计时要注意意外情况的处理。3. 控制器发送ROM指令:双方打完了招呼之后最要将进行交流了,ROM指令共有5条,每一个工作周期只能发一条,ROM指令分别是读ROM数据、指定匹配芯片、跳跃ROM

10、、芯片搜索、报警芯片搜索。ROM指令为8位长度,功能是对片内的64位光刻ROM进行操作。其主要目的是为了分辨一条总线上挂接的多个器件并作处理。诚然,单总线上可以同时挂接多个器件,并通过每个器件上所独有的ID号来区别,一般只挂接单个18B20芯片时可以跳过ROM指令(注意:此处指的跳过ROM指令并非不发送ROM指令,而是用特有的一条“跳过指令”)。ROM指令在下文有详细的介绍。4. 控制器发送存储器操作指令:在ROM指令发送给18B20之后,紧接着(不间断)就是发送存储器操作指令了。操作指令同样为8位,共6条,存储器操作指令分别是写RAM数据、读RAM数据、将RAM数据复制到EEPROM、温度转

11、换、将EEPROM中的报警值复制到RAM、工作方式切换。存储器操作指令的功能是命令18B20作什么样的工作,是芯片控制的关键。5. 执行或数据读写:一个存储器操作指令结束后则将进行指令执行或数据的读写,这个操作要视存储器操作指令而定。如执行温度转换指令则控制器(单片机)必须等待18B20执行其指令,一般转换时间为500uS。如执行数据读写指令则需要严格遵循18B20的读写时序来操作。数据的读写方法将有下文有详细介绍。若要读出当前的温度数据我们需要执行两次工作周期,第一个周期为复位、跳过ROM指令、执行温度转换存储器操作指令、等待500uS温度转换时间。紧接着执行第二个周期为复位、跳过ROM指令

12、、执行读RAM的存储器操作指令、读数据(最多为9个字节,中途可停止,只读简单温度值则读前2个字节即可)。第4章 硬件电路设计温度报警器的电路设计如图4.1所示,控制器使用单片机AT89C51,温度传感器使用DS18B20,用数码管实现温度显示。本温度报警器大体分四个工作过程。首先,由DS18B20温度传感器芯片测量当前的温度,并将结果送入单片机中。其次,再通过单片机AT89C51芯片对送来的测量温度读数进行计算和转化,并将此结果送入数码管。然后,数码管显示温度数据。最后,若温度超标,则二极管发光和蜂鸣器响起。由图4.1可以看到本电路主要由DS18B20温度传感器芯片、数码管显示模块和AT89C

13、51单片机芯片组成。其中,DS18B20温度传感器芯片采用“一线制”与单片机相连,它独立的完成温度测量以及将测量结过传送到单片机的工作。图4.1 温度报警器电路设计原理图4.1 AT89C51AT89C51是一种带4K字节FLASH存储器(FPEROMFlash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中

14、,ATMEL的AT89C51是一种高效微控制器。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。引脚排列如图4.2所示 。图4.2 AT89C51引脚排列在本设计中,AT89C51起到控制器的作用。当DS18B20温度传感器芯片测量当前的温度后,把结果送入AT89C51单片机中。然后,通过AT89C51单片机芯片对送来的测量温度读数进行计算和转换,井将此结果送入数码管模块。4.2 晶振电路 晶振电路是给单片机提供时钟信号的。其中,连接在晶振旁的两个电容叫做负荷电容,一般单片机的晶振工作于并联谐振状态,也可以理解为谐振电容的一部分。晶振电路的原理图如图4.3所示。图4.3

15、 晶振电路的原理图它是根据晶振厂家提供的晶振要求负载电容选值的,换句话说,晶振的频率就是在它提供的负载电容下测得的,能最大限度的保证频率值的误差,也能保证温漂等误差。两个电容的取值都是相同的,或者说相差不大,如果相差太大,容易造成谐振的不平衡,容易造成停振或者干脆不起振。本设计中,负荷电容的值是22PF。4.3 复位电路复位电路的作用就是把电路恢复到起始状态。就像计算器的清零按钮的作用一样,当你进行完了一个题目的计算后肯定是要清零的是吧!或者你输入错误,计算失误时都 要进行清零操作。以便回到原始状态,重新进行计算。和计算器清零按钮有所不同的是,复位电路启动的手段有所不同。一是在给电路通电时马上

16、进行复位操作;二是在必要时可以由手动操作;三是根据程序或者电路运行的需要自动地进行。篡位电路都 是比较简单的大都是只有电阻和电容组合就可以办到了。复位电路的原理图如图4.4所示。4.4 报警电路在本设计中,温度报警器的报警温度设为高:70,低:-20,当DS18B20感知到温度达到此临界值时相应的LED闪烁,同时蜂鸣器会发出报警声。报警电路的原理图如图4.5所示。图4.5 报警电路的原理图4.5 74LS24574LS245是我们常用的芯片,用来驱动led或者其他的设备,它是8路同相三态双向总线收发器,可双向传输数据。其封装与引脚如图4.6所示。图4.6 74LS245的封装与引脚74LS24

17、5还具有双向三态功能,既可以输出,也可以输入数据。当8051单片机的P0口总线负载达到或超过P0最大负载能力时,必须接入74LS245等总线驱动器。 当片选端/CE低电平有效时,DIR=“0”,信号由 B 向 A 传输;(接收)DIR=“1”,信号由 A 向 B 传输;(发送)当CE为高电平时,A、B均为高阻态。由于P2口始终输出地址的高8位,接口时74LS245的三态控制端1G和2G接地,P2口与驱动器输入线对应相连。P0口与74LS245输入端相连,E端接地,保证数据线畅通。8051的/RD和/PSEN相与后接DIR,使得RD且PSEN有效时,74LS245输入(P0.1D1),其它时间处

18、于输出(P0.1D1)。 在设计中,它主要起到了把AT89C51单片机芯片所处理和转化的数据传输到数码管中。4.6 显示电路显示电路中的数码管是8位的,有16个引脚。通过AT89C51芯片对送来的测量温度读数进行计算和转化,并将此结果送入数码管中,由数码管来显示,通过数码管可以清楚的看到DS18B20所测得的温度。数码管的封装图如图4.7所示。图4.7 数码管的封装图第5章 软件设计5.1 主程序模块 主程序需要设置初始值和DS18B20的温度报警值,之后读取温度值,将该温度与所设置的温度比较。如果该温度在所设温度的范围之内,则程序从头开始运行。如果该温度在所设温度的范围之外,则报警器报警。主

19、程序流程图如图5.1所示。图 5.1 主程序流程图5.2 程序说明具体的程序代码及其说明(见注释语句)如下。/-/说明:本例将报警温度设为高:70,低:-20,当DS18B20感知到温度达/ 到次临界值时相应的LED闪烁,同时系统发出报警声。/-#include #include #define uchar unsigned char#define uint unsigned intsbit DQ = P36;sbit BEEP = P37;sbit HI_LED = P14;sbit LO_LED = P15;/共阴数码管段码及空白显示uchar code DSY_CODE = 0x3F,0

20、x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00 ;/温度小数位对照表uchar code df_Table = 0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9 ;/-/报警温度上下限,为进行正负数比较,此处设为char类型/取值范围为-128+127,DS18B20支持范围为-50+125/-char Alarm_Temp_HL2 = 70,-20;uchar CurrentT = 0; /当前读取的温度整数部分uchar Temp_Value = 0x00,0x00; /从DS18B20读取的温度值uchar Display_

21、Digit = 0,0,0,0; /待显示的各温度数位bit HI_Alarm = 0,LO_Alarm = 0; /高低温报警标志bit DS18B20_IS_OK = 1; /传感器正常标志uint Time0_Count = 0; /定时器延时累加/-/延时/-void Delay(uint x) while( -x );/-/初始化DS18B20/-uchar Init_DS18B20() uchar status; DQ = 1;Delay(8); DQ = 0;Delay(90); DQ = 1;Delay(8); status = DQ; Delay(100); DQ = 1;

22、return status;/-/读一字节/-uchar ReadOneByte() uchar i, dat = 0; DQ = 1; _nop_(); for (i = 0; i = 1; DQ = 1; _nop_();_nop_(); if(DQ) dat | = 0x80;Delay(30); DQ = 1; return dat;/-/写一字节/-void WriteOneByte(uchar dat) uchar i; for (i = 0; i =1; /-/读取温度值/-void Read_Temperature() if( Init_DS18B20() = 1) /DS18

23、B20故障 DS18B20_IS_OK = 0; else WriteOneByte(0xCC); /跳过序列号 WriteOneByte(0x44); /启动温度转换 Init_DS18B20(); WriteOneByte(0xCC); /跳过序列号 WriteOneByte(0xBE); /读取温度寄存器 Temp_Value0 = ReadOneByte(); /温度低8位 Temp_Value1 = ReadOneByte(); /温度高8位 Alarm_Temp_HL0 = ReadOneByte(); /报警温度TH Alarm_Temp_HL1 = ReadOneByte();

24、 /报警温度TL DS18B20_IS_OK = 1; /-/设置DS18B20温度报警值/-void Set_Alarm_Temp_Value() Init_DS18B20(); WriteOneByte(0xCC); /跳过序列号 WriteOneByte(0x4E); /将设定的温度报警器值写入DS18B20 WriteOneByte(Alarm_Temp_HL0); /写TH WriteOneByte(Alarm_Temp_HL1); /写TL WriteOneByte(0x7F); /12位精度 Init_DS18B20(); WriteOneByte(0xCC); /跳过序列号 W

25、riteOneByte(0x48); /温度报警值存入DS18B20/-/在数码管上显示温度/-void Display_Temperature() uchar i; uchar t = 150; /延时值 uchar ng = 0, np = 0; /负数标识及负号显示位置 char Signed_Current_Temp; /注意类型为char/如果为负数则反取加1,并设置负号标识及负号显示位置 if ( (Temp_Value1 & 0xF8) = 0xF8) Temp_Value1 = Temp_Value1; Temp_Value0 = Temp_Value0 + 1; if (Te

26、mp_Value0 = 0x00) Temp_Value1+; ng = 1; np = 0xFD; /默认负号显示在左边第2位 /查表得到温度小数部分 Display_Digit0 = df_Table Temp_Value0 & 0x0F ;/获取温度整数部分(无符号) CurrentT = (Temp_Value0 & 0xF0)4) | (Temp_Value1 & 0x07)= Alarm_Temp_HL0 ? 1 : 0; LO_Alarm = Signed_Current_Temp = Alarm_Temp_HL1 ? 1 : 0;/将整数部分分解为三位待显示数字 Display_Digit3 = CurrentT / 100; Display_Digi

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2