DS18B20温度计课程设计完整版.docx
《DS18B20温度计课程设计完整版.docx》由会员分享,可在线阅读,更多相关《DS18B20温度计课程设计完整版.docx(48页珍藏版)》请在冰豆网上搜索。
![DS18B20温度计课程设计完整版.docx](https://file1.bdocx.com/fileroot1/2023-7/12/c861aaad-cf2d-414f-969e-046ab01a7250/c861aaad-cf2d-414f-969e-046ab01a72501.gif)
DS18B20温度计课程设计完整版
1前言
自动控制领域中,温度检测与控制占有很重要的地位。
温度检测在工农业生产、科研和在人们的生活中得到广泛的运用。
目前,温度传感器正从模拟式向数字集成式方向飞速发出,单片机也是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好更方便的设施就需要从单片机技术入手,一切向着数字化、智能化方向发展。
本文就是基于此目的介绍基于单片机和数字温度传感器的温度计设计。
1.1设计背景
随着现代信息技术的飞速发展和传统工业改造的逐步实现,能够独立工作的温度检测与显示系统应用于诸多领域。
传统的温度检测以热敏电阻为温度敏感元件。
热敏电阻的成本低,需要外加信号处理电路,而且可靠性相对较差,测温准确度低,检测系统也有一定的误差。
与传统的温度计相比,这次设计的是基于DS18B20的数字温度计,它具有读数方便,测温范围广,测温精确,数字显示,适用范围宽等特点。
1.2设计目标
在本设计中选用AT89C52型单片机作为主控制器件,采用DS18B20数字温度传感器作为测温元件,通过8位共阳极LED数码显示管并行传送数据,实现温度显示。
本设计的内容主要分为三部分,一是系统硬件设计,包括温度采集电路和显示电路;二是对系统软件部分的设计,应用C语言实现温度的采集与显示;三是通过与设定温度比较,不在此范围内时实现报警功能。
通过DS18B20直接读取被测温度值,送入单片机进行数据处理,之后进行输出显示,最终完成了数字温度计的总体设计。
其系统构成简单,信号采集效果好,数据处理速度快,便于实际检测使用。
1.3实施计划
首先查阅相关资料确定其方向对整个设计有整体的规划、构思。
然后选择三种方案,简述其实现原理,分别对三种方案进行论证比较,确定一种方案。
紧接着对选定方案进行单元模块设计、软件设计、系统总体调试、系统功能指标分析验证。
最后得出结论,完成报告。
2总体方案设计
通过查阅大量相关技术资料,并结合自己的实际知识,我们主要提出了三种技术方案来实现系统功能。
下面我首先对这三种方案的实现原理分别进行说明,并分析比较它们的特点,然后再选择方案并阐述我选择方案的原因。
2.1方案比较
我设计了三种方案:
方案一基于热敏电阻的温度计设计;方案二为基于SHT71的数字温度计设计;方案三是基于DS18B20的数字温度计设计。
2.1.1方案一基于热敏电阻的温度计设计
方案一主要由温度传感器、A/D转换电路、单片机控制电路、数码显示电路组成。
采用合肥三晶电子有限公司生产的SJMFE-347-103F型热敏电阻。
采集的模拟温度值输入A/D转换电路,A/D转换采用LM331型U/f变换器来实现。
U/f变换器把电压信号转换为频率信号。
由热敏电阻的电阻温度特性表可以求出每个温度点所对应的UIN,再由公式FOUT=256*UIN计算出每个温度点所对应的输出频率,进而由单片机处理显示被测量的温度值。
温度信号处理由于热敏电阻是非线性的器件,所以温度与频率输出成非线性,需要补偿温度。
单片机利用查表法实现温度补偿。
所谓查表法是把事先计算或测量的数据按一定的顺序排列成表格的形式,固化在单片机内。
只要测量出LM331的频率值,就可以通过查表法准确的得出环境的温度值。
再交由单片机驱动数码管显示温度。
这样就实现了温度的采集与显示。
2.1.2方案二基于SHT71的数字温度计设计
方案二主要由数字温度传感器、单片机控制电路、数码显示电路组成。
SHT71将温度传感器、信号放大调理、A/D转换、I2C总线接口全部集成于一个芯片上。
SHT11先利用传感器产生温度信号;经放大送至A/D转换器进行模数转换、校准和纠错;由2线接口将信号送至微控制器;再利用微控制器完成相对湿度的非线性补偿和温度补偿。
SHT71测量过程包括4个部分:
启动传输、发送测量命令、等待测量完成和读取测量数据。
在启动传输时序之后,微控制器可以向SHT71发送命令,SHT71则通过在数据传输的第8个SCK时钟周期下降沿之后,将DATA拉低来表示正确接收到命令,并第9个SCK时钟周期的下降沿之后释放DATA线(即恢复高电平),SHT71则通过拉低DATA表示测量结束,并且把测量结果存储在内部的存储器内,然后自动进入空闲状态,等微控制器执行完其他任务后再来读取。
测量数据读取前,微控制器先重新启动SCK,接着2字节的测量数据和1字节的CRC校验将由SHT71传送给微控制器。
2字节的测量数据是从高字节的高位开始传送,并以CRC校验字节的确认为表示通信结束。
微控制器需要通过拉低DATA来确认接收的每个字节,若不使用CRC校验位则微控制器可以在接收完测量数据的最低位后保持DATA为高电平来终止通信。
单片机只需将读取传输的数据通过驱动数码管显示即可。
2.1.3方案三基于DS18B20的数字温度计设计
方案三主要也由数字温度传感器、单片机控制电路、数码显示电路组成。
DS18B20测量温度采用了特有的温度测量技术。
它是通过计数时钟周期来实现的。
低温度系数振荡器输出的时钟信号通过由高温度系数振荡器产生的门周期而被计数。
计数器被预置在与-55℃相对应的一个基权值。
如果计数器在高温度系数振荡周期结束前计数到零,表示测量的温度值高于-55℃,被预置在-55℃的温度寄存器的值就增加1℃,然后重复这个过程,直到高温度系数振荡周期结为止这时温度寄存器中的值就是被测温度值,这个值以16位形式存放在便笺式存贮器中,此温度值可由主机通过发存贮器读命令而读出,读取时低位在前,高位在后。
斜率累加器用于补偿温度振荡器的抛物线特性。
读出的二进制数可以直接转换为十进制由单片机驱动数码管显示输出。
2.2方案论证
方案一:
热敏电阻温度传感器的特点是自身的电阻值随温度而变化。
热敏电阻是利用半导体材料制成的敏感组件,通常所有的热敏电阻温度传感器都是具有负温度系数的热敏电阻,它的电阻率受温度的影响很大,而且随温度的升高而减小。
其优点是灵敏度高,体积小,寿命长,工作稳定,易于实现远距离测量;缺点是互换性差,非线性严重。
它的测量范围一般为-10~+300℃,也可做到-200~+10℃,甚至可用于+300~+1200℃环境中作测温用。
热敏电阻器温度计的精度可以达到0.1℃,感温时间可少至10s以下。
方案二:
SHT7I是瑞士Senson公司生产的具有二线串行接口的单片全校准数字式新型相对湿度和温度传感器,可用来测量相对湿度、温度和露点等参数,具有数字式输出、免调试、免标定、免外围电路及全互换的特点该传感器将CMOS芯片技术与传感器技术结合起来,发挥出强大的优势互补作用。
由于SHT71是I2C总线结构的串行数据传送,它只需要DATA和SCK两根线完成数据的传送过程。
因此,我们在进行程序设计的时候,也得按着I2C协议来对SHT71芯片数据访问。
对于STC89C52单片机本身没有I2C硬件资源,所以必须用软件来模拟I2C协议过程。
一般使用单片机通用I/O口线来虚拟I2C总线,并利用P1.0来虚拟数据线DATA,利用P1.1口线来虚拟时钟线,并在DATA端接入一只4.7kΩ的上拉电阻,同时,在VDD及GND端接入一只0.1μF的去耦电容。
温度测量范围:
-40~+123.8℃;温度测量精度:
±0.4℃@25℃;响应时间:
<4s;低功耗(typ.30µW)。
SHT71是一种全新的基于智能传感器设计理念的新型传感器,该传感器将温度传感器、信号调理、数字变换、串行数字通信接口、数字校准全部集成到一个高集成度、体积极小的芯片当中,实现了温度传感器的数字式输出、且免调试、免标定、免外围电路。
极大方便了温度传感器在测控领域的应用,因而该传感器在数字式温湿度测控领域有着广泛的应用前景
方案三:
DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。
温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃;可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温,典型的转换时间为200ms;用户可以设定温度的上下限;独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
DS1820具有测温系统简单、测温精度高、连接方便、占用口线少等优点,所以在测量领域得到广泛的运用。
2.3方案选择
现代传感器在原理和结构上千差万别,如何根据具体的测量目的、测量对象以及测控环境合理地选择传感器,是单片机测控系统首先要解决的问题。
当传感器选定后,与之相配套的测控电路也就可以确定了。
测控结果的成败,在很大程度上取决于传感器的选择是否合理。
作为单片机控制系统的前向通道的关键部件,在选择传感器时应考虑以下几个方面的:
①根据测控对象与测控环境确定传感器的类型;②灵敏度的选择,通常情况下,在传感器的线性范围内,希望传感器的灵敏度越高越好;③频率响应特性,频率响应特性决定了被测量的频率范围,频率响应好,可测信号的频率范围就越宽;④线性范围,线性范围越宽,其量程越大,并且能保证一定的精度;⑤稳定性,稳定性是指其性能保持不变化的能力;⑥精度的选择,传感器的精度越高,其价格越贵,因此传感器的精度只是满足整个测控系统的精度要求就可以了,不必选得过高。
方案的选择即是传感器的选择。
对比三种方案可以得知,方案一是采用模拟式温度传感器,方案二和方案三都采用数字式温度传感器。
模拟式温度传感器输出的是随温度变化的模拟量信号。
其特点是输出响应速度较快和MPU接口复杂。
热敏电阻精度低,灵敏度高,价格最低。
数字式温度传感器输出的是随温度变化的数字量,更直观,与模拟输出相比,它输出速度响应较慢,但容易与MPU接口。
能输出温度数据及相关的温度控制量;能以最简方式构成高性价比、多功能的智能化温度控制系统;能在硬件的基础上通过软件编程来实现测试功能。
所以数字式温度传感器才是今后发展的方向。
而SHT71与DS18B20相比,前者精度较高,转换速度较快,但性价比不高,单片价格在一百左右,DS18B20相对而言价格较低在十块左右。
考虑到我们设计的目的和要求不是很精密严格。
所以我们选择方案三以DS18B20数字温度传感器进行后续设计。
3硬件设计
本节主要介绍系统中单片机STC89C52外围电路重要模块的功能和电路原理图分析。
并对电路中的核心器件进行必要的说明。
3.1单元模块设计
3.1.1时钟和复位电路
图3.1晶振电路图3.2复位电路
单片机STC89C52使用的时钟电路比较简单,我们采用的是晶体振荡器产生时钟源。
XTAL1(X1)为反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2(X2)是来自反向振荡器的输出,分别接到单片机的19脚和18脚。
为了方便使用其他晶振,所以我们使用插座来安装晶振,其电路原理图如图3.1所示。
单片机复位电路的设计如图3.2所示。
该复位电路采用手动复位与上电复位相结合的方式。
当按下按键S22时,VCC通过R22电阻给复位输入端口一个高电平,实现复位功能,即手动复位这样就不用在重起单片机电源。
上电复位就是VCC通过电阻R2和电容C构成回路,该回路是一个对电容C充电和放电的电路,所以复位端口得到一个周期性变化的电压值,并且有一定时间的电压值高于CPU复位电压,实现上电复位功能。
3.1.2报警电路
图3.3报警电路
报警电路用一个三极管驱动一只蜂鸣器组成,驱动信号由芯片的管脚IN1T控制。
当显示的温度不在设定的温度范围内,即不在TL与TH之间则驱动蜂鸣器发声报警,其电路如图3.3所示。
3.1.3数码显示电路
图3.4数码显示电路
数码显示电路主要作用是用来显示实际的环境温度值。
通过单片机控制实现数码管动态显示,即温度值实时刷新。
实际的电路中我们采用静态驱动,这样程序电路都比较简单,显示亮度也高,但占用的I/O口比较多。
动态驱动需要增加译码驱动,增加了硬件的复杂性。
P0口驱动连接数码管的位码,即选通8个数码管;P2口驱动连接数码管的段码,即输出要显示的温度值。
选通数码管是通过P0口接上拉电阻再接三极管9012。
由于9012是PNP型三极管,所以单片机选通某个片选时就给对应的三极管一个低电平,此时三极管处于饱和区,饱和导通就相当于开关开路;反之高电平处于截止区,截止可以当作开关断开。
在数码管动态显示中,只要扫描的时间足够快,虽然在一个时刻只有一位数码管发光,但却可以看到8位数码管“同时”显示的效果。
电路原理图如图3.4所示。
3.1.4电源电路
图3.55V电源电路
电源电路主要是为系统提供电源,因为单片机STC89C52需要供电5V,而外围电路可以用5V电源。
电路可以由电源变压器T、电桥U、电容C以及芯片7805组成。
电源是由电源变压器T降压后送入电桥U整流再经C滤波,然后由CW7805稳定后提供给电路工作。
由于我们需要在通过计算机下载程序,而USB输出电压也刚好是5V,所以我们为了方便采用USB供电。
原理图如图3.5所示。
3.1.5按键电路
图3.6按键电路
按键电路具体电路如图3.7所示。
在本次设计中,我们只用到三个按键,分别为S18,S19,S20,由于S21用的是单片机P3.3口,而P3.3口是按键和蜂鸣器的复用口,为了简便,我们没有用到此按键。
S18按键为调整键,此按键按下一次,则为调整上限值,按下两次则为调整下限值,按下三次则将设定的上限值和下限值写入到传感器中,并恢复到正常测温模式。
S19为递增按键,当按下此键时,上限值或下限值增加1,S20为递减键,按下此键,上限值或下限值减少1。
3.1.6串口通信电路
图3.7串行通信电路
Max232是由德州仪器公司(TI)推出的一款兼容RS232标准的芯片。
该器件包含2个驱动器、2个接收器和一个电压发生器电路提供TIA/EIA-232-F电平。
该器件符合TIA/EIA-232-F标准,每一个接收器将TIA/EIA-232-F电平转换成5-VTTL/CMOS电平。
每一个发送器将TTL/CMOS电平转换成TIA/EIA-232-F电平。
TTL/CMOS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DB9插头;DB9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT输出。
3.2核心器件介绍
3.2.1单片机STC89C52介绍
单片机STC89C52RC是8位高性能MCU,超低功耗:
掉电模式下典型功耗<0.1LLA,空闲模式下典型功耗2mA.正常工作模式下典型功耗47mA具有8kF1ash存储器、512kBRAM、2kE2pROM、降低EMI功能、ISP(在系统可编程)功能单片机内部的看门狗电路经过特殊处理.是真正的看门狗.可放心省去外部看门狗缺省为关闭.打开后无法关闭,单倍速和双倍速可反复设置。
单片机STC89C52和各个模块的接口主要是对STC89C52的I/O口进行约束,规定其为输出还是输入,输入主要是按键电路部分和时钟,输出则为报警和显示部分,其I/O分配如下图3.8所示。
图3.8单片机STC89C52I/O接口电路
3.2.2DS18B20介绍
DS18B20是DALLAS公司生产的一线式传感器,具有3引脚TO-92小体积封装形式;温度测量范围为-55摄氏度到+125摄氏度,可编程为9到12位A/D转换精度,测温分辨率可达0.0625摄氏度,被侧温度用符号扩展的16位数字量方式串行输出;其工作电源既可在远端引入,也可采用寄生电源方式产生。
CPU只需一根端口线就能与诸多DS18B20通信,占用问处理器的端口较少,可节省大量的引线和逻辑电路。
DS18B20主要由四部分组成:
64位光刻ROM、温度传感器、非挥发的温度报警触发器TH个TL、配置寄存器。
DS18B20中的温度传感器可完成对温度的测量,用16位符号扩展的二进制补码读数形式提供,以0.0625摄氏度/LSB形式表达,其中S为符号位。
例如+125摄氏度的数字输出为07DOH,+25.0625摄氏度的数字输出为0191H,-25.0625摄氏度的数字输出为FF6FH,-55摄氏度的数字输出为FC90H.
DS18B20采用一线通信接口。
因为一线通信接口,必须在先完成ROM设定,否则记忆和控制功能将无法使用。
主要首先提供以下功能命令之一:
⑴读ROM指令0X33,⑵ROM匹配指令0X55,⑶搜索ROM指令0XF0,⑷跳过ROM指令0XCC,⑸报警检查指令0XEC。
这些指令操作作用在没有一个器件的64位光刻ROM序列号。
图3.9DS18B20的两种封装形式
图3.10DS18B20内部结构图
4软件设计
软件设计关键在于DS18B20的使用。
DS18B20属于单线式器件,它在一根数据线上实现数据的双向传输,这就需要一定的协议,来对读写数据提出严格的时序要求,而STC89C52单片机并不支持单线传输,因此必须采用软件的方法来模拟单线的协议时序。
DS18B20有严格的通信协议来保证各为数据传输的正确性和完整性。
主机操作单线器件DS18B20必须遵循一定的顺序。
系统的主程序主要通过初始化,键盘扫描,获取温度,显示温度,报警等子程序实现。
通过一个循环设置,使系统不断地进行对温度的检测。
下图为本系统主程序的设计流程,各个模块的设计见下文。
软件设计具体程序见附录四。
图4.1主程序设计流程图
4.1温度采集模块
温度采集包括初始化DS18B20子程序;读DS18B20子程序;写DS18B20子程序;获得温度子程序。
DS18B20初始化需要这几个过程先将数据线置高电平“1”,延时10us;再将数据线拉到低电平“0”延时500us;然后再数据线拉到高电平“1”,高电平保持60us,判断DS18B20是否发出低电平信号,跟据该状态可以来确定它的存在,但是应注意不能无限的进行等待,不然会使程序进入死循环,所以要进行超时控制;若CPU读到了数据线上的低电平“0”后,根据时序要求还要做延时,其延时的时间从发出的高电平算起最少要480us时间;最后将数据线再次拉高到高电平“1”后结束。
需要注意的是每次采集温度的时候都需要初始化。
DS18B20发出高电平初始化成功,返回flag=1表示DS18B20初始化成功。
读DS18B20也需要几个流程:
先将数据线拉高“1”延时2us时间;再将数据线拉低“0”延时10us;然后将数据线拉高“1”延时8us读取1位数据,读取1位数据后延时50us时间;最后通过读取1位右移1位循环进行分别读出8位即一个字节的数据。
程序中我们把读取的第一字节存templ中,读取的第二字节存temph中。
如果需要读出设定的TH和TL值用于报警,这时也需将数据读出。
我们把读取的第3字节存tempth即TH的值;把读取的第4个字节存temptl即TL的值。
由于读出的数据时二进制数显示的时候是十进制。
所以必须将读出的数据进行处理。
先判断符号位将temph的高5位与0xf8相与就可以知道正负。
若为负值f=1,将templ和temph取反。
转换的时候我们将小数部分和整数部分分别转换,小数部分templ与0x0f相与后的值乘以625就是小数部分的值,需要注意的是小数部分的值是用整数形式表示的;整数部分temph左移四位和templ右移四位合并为一个字节就是整数部分的值。
获得温度就是在前面操作的基础上调用。
先初始化DS18B20,发出跳过ROM匹配命令;再向DS18B20发温度转换命令显示温度,等待AD转换,发跳过ROM匹配命令;最后发出读温度命令将读出的温度数据保存到tempint和tempdf处为显示做准备。
下面两个框图为温度采集流程图和读温度两个主要的流程图。
图4.2温度采集流程图
温度显示模块主要包括显示温度子程序和延迟子程序。
显示温度即把读出的温度传递过来分别显示。
我们是将数码分为各个位动态扫描显示。
读温度程序中将小数部分和整数部分的值分别存放在tempint和tempdf中,符号位存放在f中。
由于是分各个位显示,所以必须对数进行取模运算,C语言提供了整除和求余数运算,两者相结合就可以取出各个位的模。
由于我们是用数码管显示,第一位显示符号位,f=0表示正温度用“0”表示,f=1表示负温度用“-”表示,“-”值可以用0xbf送到数码管显示。
第四个数码管需要显示小数位,我们采用查表的方法将要显示的带小数的数模放在ledmap1中,需要显示的时候再调用;一般数模放在ledmap中。
显示的时候采用循环的方式进行,先判断符号位显示在第一个数码管,之后分别为百位、十位、个位、个分位、十分位、百分位和千分位。
先送位码再送段码,每一位显示完后延迟2us时间。
在数码管动态显示中,由于扫描的时间足够快,虽然在一个时刻只有一位数码管发光,却可以看到8位数码管“同时”显示的效果。
下图为温度显示流程框图。
图4.3温度显示流程图
4.2温度设定模块
温度设定模块主要由按键程序和显示程序构成。
按键扫描电路扫描调整键S18是否按下,检测到按键按下时,延时1ms,再次检测按键是否按下,若检测到按下,才确定此按键,本设计中每个按键设计都运用了防抖动功能,避免抖动产生的误差。
当检测到按键S18按下一次时,显示为设定的上限值,此时S19和S20分别递增键和递减键,在上限或下限没超过125℃时,每次检测到按下时则上限值增加或减少1,并将bb标志位置1。
当S18被按下两次时,显示为设定的下限值,此时S19和S20分别递增键和递减键,每次检测到按下时则下限值增加或减少1,并将bb标志位置2。
当S18被第三次按下时,bb标志位置3,此时恢复到正常的测温模式,并将设定的上限值和下限值写入到传感器中。
显示程序显示设定值的变化,当bb为0时,显示测量到的温度的值,当bb为1时,显示上限值,并随S19,S20按键按下的时上限值的变化而变化,当bb为2是,显示下限值,并随S19,S20按键按下时下限值的变化而变化。
4.3报警模块
报警模块主要由由单片机输出电平来驱动蜂鸣器构成。
当所测温度超过设定的上限(TH值)或下限温度(TL值)时置beepflag=1,表示温度值越界。
在调用报警子程序时先判断beepflag的值,若为1则在蜂鸣器端口输出低电平信号beep=0,蜂鸣器报警,延时1000us,蜂鸣器报警持续,再产生一个高电平信号beep=1,蜂鸣器停止报警,循环此过程,则蜂鸣器间隙性报警。
在蜂鸣器报警的同时,DS18B20处于正常测温状态,并用数码管显示出来,并不断闪烁。
5系统整合调试
调试方法:
写好一段程序后不能急于上机调试,而是先进行逻辑分析、可行性分析。
用KeilμVision2软件进行调试,不能出现错误,警告可以有,只要不影响生成HEX文件即可。
理解其实现的功能,预想程序应该出现的结果。
先进行软件仿真,出现错误马上修改,不断进行。
先一个模块一个模块的仿真,准确后再连线总体仿真。
仿真完后出现预期的效果后再下载程序到硬件进行验证,往往还有问题,还得