人人范文网 范文大全

基于18B20温度传感器论文

发布时间:2020-03-03 05:52:54 来源:范文大全 收藏本文 下载本文 手机版

基于单片机18B20的温度计设计

摘要:文章主要介绍有关18B20温度传感器的应用及有关注意事项,经典接线原理图。 1.引言:

温度传感器的种类众多,在应用与高精度、高可靠性的场合时DALLAS(达拉斯)公司生产的DS18B20温度传感器当仁不让。超小的体积,超低的硬件开消,抗干扰能力强,精度高,附加功能强,使得DS18B20更受欢迎。对于我们普通的电子爱好者来说,DS18B20的优势更是我们学习单片机技术和开发温度相关的小产品的不二选择。了解其工作原理和应用可以拓宽您对单片机开发的思路。

2.DS18B20的主要特征:  * 全数字温度转换及输出。  * 先进的单总线数据通信。  * 最高12位分辨率,精度可达土0.5摄氏度。  * 12位分辨率时的最大工作周期为750毫秒。  * 可选择寄生工作方式。  * 检测温度范围为–55°C ~+125°C (–67°F ~+257°F)  * 内置EEPROM,限温报警功能。  * 64位光刻ROM,内置产品序列号,方便多机挂接。  * 多样封装形式,适应不同硬件系统。 3.DS18B20引脚功能:

•GND 电压地 •DQ 单数据总线 •VDD 电源电压

4.DS18B20工作原理及应用:

DS18B20的温度检测与数字数据输出全集成于一个芯片之上,从而抗干扰力更强。其一个工作周期可分为两个部分,即温度检测和数据处理。在讲解其工作流程之前我们有必要了解18B20的内部存储器资源。18B20共有三种形态的存储器资源,它们分别是:

ROM 只读存储器,用于存放DS18B20ID编码,其前8位是单线系列编码(DS18B20的编码是19H),后面48位是芯片唯一的序列号,最后8位是以上56的位的CRC码(冗余校验)。数据在出产时设置不由用户更改。DS18B20共64位ROM。

5.控制器对18B20操作流程:

1、复位:首先我们必须对DS18B20芯片进行复位,复位就是由控制器(单片机)给DS18B20单总线至少480uS的低电平信号。当18B20接到此复位信号后则会在15~60uS后回发一个芯片的存在脉冲。

2、存在脉冲:在复位电平结束之后,控制器应该将数据单总线拉高,以便于在15~60uS后接收存在脉冲,存在脉冲为一个60~240uS的低电平信号。至此,通信双方已经达成了基本的协议,接下来将会是控制器与18B20间的数据通信。如果复位低电平的时间不足或是单总线的电路断路都不会接到存在脉冲,在设计时要注意意外情况的处理。

3、控制器发送ROM指令:双方打完了招呼之后最要将进行交流了,ROM指令共有5条,每一个工作周期只能发一条,ROM指令分别是读ROM数据、指

定匹配芯片、跳跃ROM、芯片搜索、报警芯片搜索。ROM指令为8位长度,功能是对片内的64位光刻ROM进行操作。其主要目的是为了分辨一条总线上挂接的多个器件并作处理。诚然,单总线上可以同时挂接多个器件,并通过每个器件上所独有的ID号来区别,一般只挂接单个18B20芯片时可以跳过ROM指令(注意:此处指的跳过ROM指令并非不发送ROM指令,而是用特有的一条“跳过指令”)。ROM指令在下文有详细的介绍。

4、控制器发送存储器操作指令:在ROM指令发送给18B20之后,紧接着(不间断)就是发送存储器操作指令了。操作指令同样为8位,共6条,存储器操作指令分别是写RAM数据、读RAM数据、将RAM数据复制到EEPROM、温度转换、将EEPROM中的报警值复制到RAM、工作方式切换。存储器操作指令的功能是命令18B20作什么样的工作,是芯片控制的关键。

5、执行或数据读写:一个存储器操作指令结束后则将进行指令执行或数据的读写,这个操作要视存储器操作指令而定。如执行温度转换指令则控制器(单片机)必须等待18B20执行其指令,一般转换时间为500uS。如执行数据读写指令则需要严格遵循18B20的读写时序来操作。数据的读写方法将有下文有详细介绍。 6.DS28B20芯片ROM指令表

Read ROM(读ROM)[33H] (方括号中的为16进制的命令字) Match ROM(指定匹配芯片)[55H] Skip ROM(跳跃ROM指令)[CCH] Search ROM(搜索芯片)[F0H] Alarm Search(报警芯片搜索)[ECH] 7.DS28B20芯片存储器操作指令表:

Write Scratchpad (向RAM中写数据)[4EH] Read Scratchpad (从RAM中读数据)[BEH] Copy Scratchpad (将RAM数据复制到EEPROM中)[48H] Convert T(温度转换)[44H] Recall EEPROM(将EEPROM中的报警值复制到RAM)[B8H] Read Power Supply(工作方式切换)[B4H] 8.写程序注意事项

DS18B20复位及应答关系

每一次通信之前必须进行复位,复位的时间、等待时间、回应时间应严格按时序编程。

DS18B20读写时间隙:

DS18B20的数据读写是通过时间隙处理位和命令字来确认信息交换的。 写时间隙:

写时间隙分为写“0”和写“1”,时序如图7。在写数据时间隙的前15uS总线需要是被控制器拉置低电平,而后则将是芯片对总线数据的采样时间,采样时间在15~60uS,采样时间内如果控制器将总线拉高则表示写“1”,如果控制器将总线拉低则表示写“0”。每一位的发送都应该有一个至少15uS的低电平起始位,随后的数据“0”或“1”应该在45uS内完成。整个位的发送时间应该保持在60~120uS,否则不能保证通信的正常。 读时间隙:

读时间隙时控制时的采样时间应该更加的精确才行,读时间隙时也是必须先由主机产生至少1uS的低电平,表示读时间的起始。随后在总线被释放后的15uS

中DS18B20会发送内部数据位,这时控制如果发现总线为高电平表示读出“1”,如果总线为低电平则表示读出数据“0”。每一位的读取之前都由控制器加一个起始信号。注意:必须在读间隙开始的15uS内读取数据位才可以保证通信的正确。 在通信时是以8位“0”或“1”为一个字节,字节的读或写是从高位开始的,即A7到A0.字节的读写顺序也是如图2自上而下的。

9.接线原理图:

本原理图采用四位数码管显示,低于100度时,首位不显示示例27.5,低于10度时示例为9.0,低于零度时示例为-3.7。

结束语:基于DS18B20温度测量温度准确,接线简单,易于控制,加以扩展可以应用到各种温度控制和监控场合。

参考文献:

DALLAS(达拉斯)公司生产的DS18B20温度传感器文献

程序:

#include

#define uchar unsigned char #define uint unsigned int

sbit sda=P1^7; sbit dian=P0^7;//小数点显示 uint tem;

uchar h; uchar code tabw[4]={0xf7,0xfb,0xfd,0xfe};//位选 uchar code tabs[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};//数码管数据

//

0

4 5 6

8 9

- uchar code ditab[16]= {0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09}; //查表显示小数位 ,1/16=0.0625,即当读出数据为3时,3*0.0625=0.1875,读出数据为3时对应1,查表显示1,为4时显2 uchar data temp[2]={0};//高位数据与低位数据暂存 uchar data display[5]={0};//显示缓存

void delay(uchar t)//t为1时延时小于5us { while(t--); } void delay1()//4us {} void delays(uchar m)//1ms { uchar i,j; for(i=0;i

for(j=0;j

while(x)

{

sda=1;

sda=0;

delay(50);//延时500us以上

sda=1;

delay(5);//等待15us-60us

x=sda;

}

delay(45);

x=~sda; }

sda=1; } void write_s(uchar temp)//写入一个字节 { uchar i; for(i=0;i

sda=1;

sda=0;

delay1();

sda=temp&0x01;

delay(6);

temp=temp/2; } sda=1; delay(1); } uchar read_s()//读出一个字节的数据 { uchar m=0,i; for(i=0;i

sda=1;

m>>=1;

sda=0;

delay1();

sda=1;

delay1();

if(sda)

m=m|0x80;

delay(6); } sda=1; return m; } uint read_1820()//读出温度 { reset(); delay(200); write_s(0xcc);//发送命令

write_s(0x44);//发送转换命令

reset(); delay(1); write_s(0xcc);

write_s(0xbe); temp[0]=read_s(); temp[1]=read_s(); tem=temp[1]; tem

P0=tabs[display[i]];

P1=tabw[i];

delays(7);

if(i==1)

dian=0;

P1=tabw[i];

delays(2); } } void convert_t(uint tem)//温度转换{ uchar n=0; if(tem>6348) {

tem=65536-tem;

n=1; } display[4]=tem&0x0f; display[0]=ditab[display[4]];

display[4]=tem>>4;

display[3]=display[4]/100;

display[1]=display[4]%100;

display[2]=display[1]/10;

display[1]=display[1]%10; if(!display[3]) {

display[3]=0x0a; } if(!display[2])

display[2]=0x0a; if(n)

// 取百位数据暂存

// 取后两位数据暂存// 取十位数据暂存

{

n=0;

display[3]=0x0b; } } void main() { delay(0); delay(0); delay(0); P0=0xff; P1=0xff; for(h=0;h

{

display[h]=0; } reset(); write_s(0xcc); write_s(0x44); for(h=0;h

scan_led(); while(1) {

convert_t(read_1820());//读出并处理

scan_led();//显示温度

} }

单片机温度传感器论文_图文.

半导体温度传感器

温度传感器课程设计

温度传感器试验论文程序清单

温度传感器工作原理

光纤温度传感器 毕业论文

航空机载温度传感器振动特性分析论文

基于NRF2401的无线温度传感器的设计论文

CMOS集成温度传感器设计

数字温度传感器的应用

基于18B20温度传感器论文
《基于18B20温度传感器论文.doc》
将本文的Word文档下载到电脑,方便编辑。
推荐度:
点击下载文档
点击下载本文文档