基于单片机和DS18B20的温度采集系统.docx

上传人:b****6 文档编号:6155765 上传时间:2023-01-04 格式:DOCX 页数:14 大小:65.18KB
下载 相关 举报
基于单片机和DS18B20的温度采集系统.docx_第1页
第1页 / 共14页
基于单片机和DS18B20的温度采集系统.docx_第2页
第2页 / 共14页
基于单片机和DS18B20的温度采集系统.docx_第3页
第3页 / 共14页
基于单片机和DS18B20的温度采集系统.docx_第4页
第4页 / 共14页
基于单片机和DS18B20的温度采集系统.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

基于单片机和DS18B20的温度采集系统.docx

《基于单片机和DS18B20的温度采集系统.docx》由会员分享,可在线阅读,更多相关《基于单片机和DS18B20的温度采集系统.docx(14页珍藏版)》请在冰豆网上搜索。

基于单片机和DS18B20的温度采集系统.docx

基于单片机和DS18B20的温度采集系统

目录

第1章概述……...………………………………………………………….2

第2章测温器件原理和特性………………...……………………….….3

2.1DS18B20工作原理…………………………………………………3

2.2DS18B20特性…………………………………………………….4

第3章硬件电路设计……...…………...………………...……………….5

3.1测温电路的原理…………...……………………………………….5

3.2部分接口电路原理与设计…………...………….....………..…......5

3.3测温电路总体的电路设计………...….………...………………….7

第4章软件电路设计…………...…......……………………..….………8

4.1程序主要部分………………………………………………………….8

4.2完整的程序……………………………………………………………..9

第5章安装与调试………...………...………..……….………..…….......9

5.1电路参数的选取与安装……...…………...…………………...….....9

5.2调试…………...……….…...…………………………..……….....….9

第6章总结………...………….....……………..…………………...…........10

参考文献……….....…………...………………….........…………………..…11

附录1硬件系统电路…………..…..…………...………………...…………..12

附录2完整的程序………..……………...……...………………………….13

第1章概述

DS18B20是美国DALLAS半导体公司继DS1820之后最新推出的一种改进型智能温度传感器。

与传统的热敏电阻相比,他能够直接读出被测温度并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。

可以分别在93.75ms和750ms内完成9位和12位的数字量,并且从DS18B20读出的信息或写入DS18B20的信息仅需要一根口线(单线接口)读写,温度变换功率来源于数据总线,总线本身也可以向所挂接的DS18B20供电,而无需额外电源。

因而使用DS18B20可使系统结构更趋简单,可靠性更高。

他在测温精度、转换时间、传输距离、分辨率等方面较DS1820有了很大的改进,给用户带来了更方便的使用和更令人满意的效果。

21世纪是电子的世纪,电子产业带来的革命成为世界争相发展高新技术产业的亮点。

预计2008年世界电子行业将形成50万亿美元的产值。

电子产品已经深入到各个领域甚至进入到平常百姓家里。

随着电子技术的发展,数字温度计的种类可谓五花八门,最近一种简易数字温度计的出现马上风靡大江南北,深受消费者青睐。

它外形小巧便携式设计,可放在任何地方。

该产品已经投放市场,很快轰动神州大地,消费者争相购买,很多家庭也纷纷在各自家门外挂起了这样的智能温度计,具有非常大的市场前景。

 

第2章测温器件原理和特性

2.1DS18B20工作原理

DS18B20的测温原理如图2.1所示,图中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1,高温度系数晶振随温度变化其震荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入,图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲后进行计数,进而完成温度测量。

计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55℃所对应的基数分别置入减法计数器1和温度寄存器中,减法计数器1和温度寄存器被预置在-55℃所对应的一个基数值。

减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度,这就是DS18B20的测温原理。

图2.1温度测量电路原理图

另外,由于DS18B20单线通信功能是分时完成的,他有严格的时隙概念,因此读写时序很重要。

系统对DS18B20的各种操作必须按协议进行。

操作协议为:

初始化DS18B20(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。

各种操作的时序图与DS1820相同,可参看文献[2]。

2.2DS18B20的特性

1.独特的单线接口方式:

DS18B20与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。

2.在使用中不需要任何外围元件。

3.可用数据线供电,电压范围:

+3.0~+5.5V。

4.测温范围:

-55~+125℃。

固有测温分辨率为0.5℃。

5.通过编程可实现9~12位的数字读数方式。

6.用户可自设定非易失性的报警上下限值。

7.支持多点组网功能,多个DS18B20可以并联在惟一的三线上,实现多点测温。

8.负压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常作。

 

第3章硬件电路设计

3.1测温电路的原理

如图3.1所示,模拟量的温度首先经过温度采集传感器即DS18B20,并在单片机的控制处理下,发送初始化命令,写入控制字,读出相应的转化数据,最后经过相应的处理送到显示系统上显示。

图3.1测温系统框图

3.2部分接口电路原理与设计

3.2.1DS18B20测温过程与电路设计

由于DS18B20采用的是单总线传输方式,即在一根数据线实现数据的双向传输,而对单片机来说,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。

该协议定义了几种信号的时序:

初始化时序(dsInit()实现)、读时序(readByte())、写时序(writeByte())。

所有时序都是将主机作为主设备,单总线器件作为从设备。

而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收,数据和命令的传输都是低位在先,进而完成对数据的采集。

电路设计可以参看图4.2关于DS18B20详细的引脚功能描述如下:

1、GND地信号;

2、DQ数据输入出引脚。

开漏单总线接口引脚。

当被用在寄生电源下,此引脚可以向器件提供电源;漏极开路,常态下高电平。

通常要求外接一个约5kΩ的上拉电阻。

3、VCC可选择的VCC引脚。

电压范围:

3~5.5V;当工作于寄生电源时,此引脚必须接地。

图3.2DS18B20接口电路

3.2.2单片机工作过程与电路设计

单片机是指一个集成在一块芯片上的完整计算机系统。

它具有一个完整计算机所需要的大部分部件:

CPU、内存、内部和外部总线系统。

同时集成诸如通讯接口、定时器,实时时钟等外围设备。

在内部ROM中载入程序既可以实现对其的操作控制。

我们使用了AT89S52这款单片机,它具有内部ROM空间大,工作速度快等优点,便于以后的升级扩展,具体的技术细节请参看技术手册。

现在主流的MCS-51单片机要想正常工作必须配备复位和时钟电路,复位脚必需在振荡器起振后至少保持两个机器周期复位电平。

也就是说,复位脚(RST)复位电平保持时间应包含VCC的建立时间、振荡器起振时间和至少两个机器周期时间。

本次设计采用最基本的上电复位电路,具体参数和连接请参看图3.3。

另外的时钟电路则为整个系统提供了系统的时基,主要有一个晶振来起振,另外两个电容可以增强时钟电路的稳定性,具体参数和连接图请参看图3.4。

图3.3单片机复位电路

图3.4单片机时钟电路

3.2.3液晶显示电路设计

为了保证连接的简单和方便我们使用了一款8×2的字符型LCD,具体型号为VT082A它具有体积小、接口简单、功率损耗低和使用寿命长等许多优点,在各种设计中得到了广泛的使用。

它的操作时序完全符合6800的8位并行接口时序。

具体的控制字可以参考手册,操作的时序如图3.5所示:

图3.5液晶接口时序

3.3测温电路总体的电路设计

经过以上论述我们以AT89S52单片机为例,电路采用正常供电方式,当DS18B20处于写存储器操作和温度A/D变换操作时,总线上须有强的上拉,上拉开启时间最大为10μs。

只要在数据线上加一个上拉电阻4.7kΩ,另外2个脚分别接电源和地即可。

显示部分并没有采用数码管,而是使用了8×2型字符LCD。

(硬件电路图见附录1)

 

第4章软件设计

4.1程序主要部分

程序主要部分如下:

详细完整的程序请参看附录。

voidDelay_Us(inti)//微秒延时程序

voidCheck_Bf(void)//LCD读忙函数

voidLcd_W(unsignedchardat,unsignedcharcd)//LCD写命令或数据函数

voidLcd_Init(void)//LCD初始化函数

voiddsInit()//DS18B20初始化函数

voiddsWait()//DS18B20等待函数

bitreadBit()//向DS18B20读取一位数据

unsignedcharreadByte()//读取一字节数据,通过调用readBit()来实现

voidwriteByte(unsignedchardat)//向DS18B20写入一字节数据

voidsendChangeCmd()//向DS18B20发送温度转换命令

intgetTmpValue()//获取当前温度值

voiddisplay(intv)//调用液晶显示函数

voidmain(void)//主函数

{

unsignedchari;

Lcd_Init();//调用液晶初始化函数

while

(1)//

{

sendChangeCmd();//启动温度转换

for(i=0;i<40;i++)

{

display(tempValue);//调用显示函数

}

tempValue=getTmpValue();//调用读取函数获取温度

4.2详细完整的程序请参看附录2。

第5章安装与调试

5.1电路参数的选取与安装

在确定了电路主要的器件之后,我们可以查阅参考文献确定具体的电路参数,具体如下:

单片机选择AT89S52一片,单片机的复位电路需要22uf电容和1K电阻各一,时钟电路需要12M晶振一个60pf电容两个,测温电路只需要一个DS18B20和一个4.7K的电阻即可,显示电路只要一快LCD就可以完成显示任务。

1.电路的组装是在单元电路设计,参数计算和元器件选择的基础上,对理论设计进行验收,并进行修改完善,直至达到设计要求为止。

电路的组装与调试分为单元电路和整机两步进行。

2.电路组装是按照所设计的电路图把元器件可靠的安装连接好,使电路实现正常工作。

在组装前应尽可能把元器件检测一遍,保证所有元器件都合格。

在电路组装时应注意以下原则:

3.所有集成电路的组装方向要一致,以有利于布线和查线。

4.导线的颜色应该符合一般的使用习惯。

5.元器件安排从左向右或从右向左,不应形成环路使信号的输入极与输出极靠近。

6.连线尽量做到横平竖直,连线不能跨接在元器件上。

信号线与电源线不能长距离并行。

合理的布置地线,低频电路要一点接地。

5.2调试

电路的调试是在电路组装后进行的。

首先对电路工作状态和相应的参数进行测量,然后根据性能要求对电路的某些参数进行修改或变更,使之达到设计要求。

把整机组装好后就可以写入程序以便进行调试。

程序全文请参考附录。

在调试的时候应该单独调试,先调试显示电路的LCD,这样可以方便以后的进一步调试,当LCD正常工作之后即可调试DS18B20,对其要加倍注意他的时序要求,注意程序的写法,按要求操作直到达到理想的结果。

第6章总结

在本次课程设计过程中,使用了广泛的参考如:

电路,数、模电子技术,单片机技术,自动检测技术,电路板设计,智能仪器的设计应用,传感器的使用等方面的资料。

使得在本次设计中,接线等方面比较合理,运行平稳,没有任何故障。

设计成功,LCD 的显示范围从-55到+125,并具有5位的显示位数,这样的精度在一般的温度测试仪器上是很难见到的,由于LCD的使用也减小了硬件电路焊接的繁杂,减少了出错的机会。

在一定的温度范围内,不考虑器件导致的误差的话,精度已经达到了0.003。

由于设备的欠缺,最后的温度标定没能够实现,所以LCD的显示结果有一定的误差,其显示温度比真实温度偏高了一点。

 

参考文献

 

[1]李玉峰,倪虹霞.《MCS-51系列单片机原理与接口技术》.人民邮电出版社2004-5

[2]何宏,龚威,田志宏.《单片机原理与接口技术》.国防工业出版社2006-1

[3]朱勇,吴周桥,乔宇锋,唐新东.《ProtelDxp范例入门与提高》.清华大学出版社2004-1

[4]凌玉华,刘连浩,杨进宝等.《单片机原理及应用系统设计》.中南大学出版社2006-5

[5]邹振春.《MCS-51系列单片机原理及接口技术》.机械工业出版社2006-8

[6]赵晓安,杨鹏,耿恒山.《MCS-51单片机原理及应用》.天津大学出版社2001-3

[7]Martin,K..《数字集成电路设计》(英文版)(DigitalIntegratedCircuitDesign(TheOxfordSeriesinElectricalandComputerEngineering).OxfordUniversityPress,电子工业出版社

[8]韩建国,廖俊必,[英国]GuiyunTian.《单片机原理及应用》(英文版).高等教育出版社

 

附录1:

硬件电路图

 

 

附录2完整的程序:

#include"REGX52.h"

#defineRWP1_0

#defineENP1_1

#defineRSP1_2

#defineDQP1_3

#defineLCD_PP2

inttempValue;

voidDelay_Us(inti)

{

while(i--);

}

voidCheck_Bf(void)

{

unsignedcharshuju;

do

{

RS=0;

RW=1;

EN=1;

shuju=LCD_P;

EN=0;

}

while((shuju>>7)&1);

Delay_Us(20);

}

voidLcd_W(unsignedchardat,unsignedcharcd)

{

Check_Bf();

RS=cd;//cd=0为指令,为1为数据

RW=0;

EN=1;

LCD_P=dat;

EN=0;//下降沿有效

}

voidLcd_Init(void)

{

Lcd_W(0x38,0);

Lcd_W(0x08,0);

Lcd_W(0x01,0);

Lcd_W(0x0f,0);

Lcd_W(0x06,0);

Lcd_W(0x80,0);

}

//通过DS18B20测试当前环境温度,并通过数码管显示当前温度值,目前显示范围:

-55~+125度

//延时函数,对于11.0592MHz时钟,例i=10,则大概延时10ms.

voiddelay(unsignedinti)

{

unsignedintj;

while(i--)

{

for(j=0;j<125;j++);

}

}

//初始化DS18B20

//让DS18B20一段相对长时间低电平,然后一段相对非常短时间高电平,即可启动

voiddsInit()

{

//对于11.0592MHz时钟,unsignedint型的i,作一个i++操作的时间大于为8us

unsignedinti;

DQ=0;

i=100;//拉低约800us,符合协议要求的480us以上

while(i>0)i--;

DQ=1;//产生一个上升沿,进入等待应答状态

i=4;

while(i>0)i--;

}

voiddsWait()

{

unsignedinti;

while(DQ);

while(~DQ);//检测到应答脉冲

i=4;

while(i>0)i--;

}

//向DS18B20读取一位数据

//读一位,让DS18B20一小周期低电平,然后两小周期高电平,

//之后DS18B20则会输出持续一段时间的一位数据

bitreadBit()

{

unsignedinti;

bitb;

DQ=0;

//写"1",将DQ拉低15us后,在15us~60us内将DQ拉高,即完成写1

if(b)

{

DQ=0;

i++;i++;//拉低约16us,符号要求15~60us内

DQ=1;

i=8;while(i>0)i--;//延时约64us,符合写时隙不低于60us要求

}

else//写"0",将DQ拉低60us~120us

{

DQ=0;

i=8;while(i>0)i--;//拉低约64us,符号要求

DQ=1;

i++;i++;//整个写0时隙过程已经超过60us,这里就不用像写1那样,再延时64us了

}

}

}

voidsendChangeCmd()//向DS18B20发送温度转换命令

{

dsInit();//初始化DS18B20,无论什么命令,首先都要发起初始化

dsWait();//等待DS18B20应答

delay

(1);//延时1ms,因为DS18B20会拉低DQ60~240us作为应答信号

writeByte(0xcc);//写入跳过序列号命令字SkipRom

writeByte(0x44);//写入温度转换命令字ConvertT

}

voidsendReadCmd()//向DS18B20发送读取数据命令

{

dsInit();

dsWait();

delay

(1);

writeByte(0xcc);//写入跳过序列号命令字SkipRom

writeByte(0xbe);//写入读取数据令字ReadScratchpad

}

intgetTmpValue()//获取当前温度值

{

unsignedinttmpvalue;

intvalue;//存放温度数值

floatt;

unsignedcharlow,high;

sendReadCmd();

//连续读取两个字节数据

low=readByte();

high=readByte();

//将高低两个字节合成一个整形变量

//计算机中对于负数是利用补码来表示的

//若是负值,读取出来的数值是用补码表示的,可直接赋值给int型的value

tmpvalue=high;

tmpvalue<<=8;

tmpvalue|=low;

value=tmpvalue;

//使用DS18B20的默认分辨率12位,精确度为0.0625度,即读回数据的最低位代表0.0625度

t=value*0.0625;

Lcd_W(datas[3]+30,1);

Lcd_W(datas[4]+30,1);

Lcd_W(0xdf,1);

Lcd_W('C',1);

}

voidmain(void)

{

unsignedchari;

Lcd_Init();

while

(1)

{

//启动温度转换

sendChangeCmd();

//显示5次

for(i=0;i<40;i++)

{

display(tempValue);

}

tempValue=getTmpValue();

}

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1