5787|4

190

帖子

0

TA的资源

五彩晶圆(初级)

楼主
 

第14/15原创:事无巨细,单总线器件DS18B20 [复制链接]

事无巨细,单总线温度传感器DS18B20
终于来到最后一关,温度传感器DS18B20。
首先要知道什么是单总线:
目前常用的微机与外设之间进行数据传输的串行总线主要有I2C总线、SPI总线和SCI总线。其中I2C总线以同步串行2线方式进行通信(一条时钟线,一条数据线),SPI总线则以同步串行3线方式进行通信(一条时钟线,一条数据输入线,一条数据输出线),而SCI总线是以异步方式进行通信(一条数据输入线,一条数据输出线)的。这些总线至少需要两条或两条以上的信号线。近年来,美国的达拉斯半导体公司(DALLASSEMICONDUCTOR)推出了一项特有的单总线(1-Wire Bus)技术。该技术与上述总线不同,它采用单根信号线,既可传输时钟,又能传输数据,而且数据传输是双向的,因而这种单总线技术具有线路简单,硬件开销少,成本低廉,便于总线扩展和维护等优点。
  单总线适用于单主机系统,能够控制一个或多个从机设备。主机可以是微控制器,从机可以是单总线器件,它们之间的数据交换只通过一条信号线。当只有一个从机设备时,系统可按单节点系统操作;当有多个从机设备时,系统则按多节点系统操作。
DS18B20,是DALLAS公司设计的世界上第一片“单总线的温度传感器”。
单总线的特点使其体积更小,使用成本更为低廉,可以简单的组建多点温度检测网络。
1、 DS18B20的温度测试精度高,可以程序设定9~12位的分辨率,精度为±0.5°C;
2、 同时DS18B20抗干扰能力强,适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等;
3、 DS18B20支持,3V~5.5V的电压范围,使系统设计更灵活、方便;
4、 DS18B20可用户定义的非易失性温度报警设置;
DS18B20的内部结构:
DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。
64位光刻ROM里存储了该片DS18B20独一无二的身份序列号,每一片DS18B20的身份序列号都不一样。这意味着在一根总线上挂载多个DS18B20器件时,身份序列号可以用以识别出不同的DS18B20。
温度传感器可以测量实际温度。
报警触发器里面可以写入希望发生报警信号的温度值。
配置寄存器可以配置DS18B20的测量精度。
以下是几个寄存器详情:
温度数据存储器:

我们看到,因为DS18B20的转换精度最大可以达到12位,所以前面5位是符号位,剩下的是数据位;
配置寄存器:

这个寄存器只有两个有效位:R1和R2,下图说明的很清楚,注意默认位12bit的精度:

64bit ROM:

可以看出,最高八位是8 bit的CRC校验码;接下来的48位是身份序列号,最后八位是器件系列码。
其实以上各种寄存器里,除了温度数据存储器,其他的寄存器是不必须要了解的,即便我们不了解,也足以使用DS18B20测试出当前温度。
现在我们进入DS18B20的实际操作,在此要先对各位说明的是,如果你的开发板是在一根总线上串接了一个以上的DS18B20,无论如何请先把其中一个拆掉。原因是:在一根总线上挂载多个DS18B20,就需要我们使用身份序列号识别不同的器件。如何得到这个序列号呢?要靠编写程序来读,读序列号之时总线上只能有一个DS18B20。但是在此笔者为了降低难度,只使用一个DS18B20讲述本实验。所以无论你是要做多个DS18B20还是单个,你都需要经过“总线上只有一个DS18B20的情况”。
我们先来看DS18B20的起始时序:
  
主机总线发送一复位脉冲(最短为 480us 的低电平信号)接着释放总线并进入接收状态。DSl8B20在检测到总线的上升沿之后等待15-60us接着DS18B20发出存在脉冲(低电平 持续 60-240 us) 如图中灰色粗线所示。
所以要产生起始信号,则:将DQ拉成低电平保持最少480us,然后释放总线(设置为IO输入方向),延时15~60us,之后的60~240us之内检测DQ是否为低电平,再延时500us保持起始时序完整。
我们再来看DS18B20的四个时序,单总线的时序很简单,分别是:“写0”“写1”“读0”“读1”(对应下图的上左、上右、下左、下右):

其中:
1、黑色粗线表示主机(AVR)将总线拉低;
2、灰色粗线表示DS18B20将总线拉低;
3、细线表示上拉电阻将总线拉高;
4、斜线表示无效的时间,就是没有任何操作起作用;
5、灰色方块表示器件(主机或者从机采样总线上的数据的时间),
6、还有黑色和灰色的混合线(左下图)表示主机和从机同时将总线拉低。
单总线协议对时序有非常严格的要求,精确到微秒,在此希望大家细心:
“写“时序:原文:“The DS18B20 samples the DQ line in a window of 15 µs to 60 µs after the DQ line falls.If the line is high, a Write 1 occurs.If the line is low, a Write 0 occurs。”
翻译过来便是:DS18B20会在DQ线(数据线)保持低电平之后的15us到60us之间采样DQ线,若为高则表示“写1”,若为低则表示“写0”。
所以我们如果要“写0”:则需要把DQ线保持低电平至少60us(笔者用了65us),然后将DQ设置为高阻态,让外部上拉电阻将DQ拉成高电平;
如果要“写1”,则需要把DQ线置为低电平(至少大于1us小于15us),然后设置DQ为高阻态,让外部上拉电阻将DQ拉成高电平,DS18B20会在此后的45~60us之内采样到这个“写1”的高电平;
“读”时序原文:
A read time slot is initiated when the host pulls the data line from a logic high level to logic low level.The data line must remain at a low logic level for a minimum of 1 µs; output data from the DS18B20 is valid for 15 µs after the falling edge of the read time slot. The host therefore must stop driving the DQ pin low in order to read its state 15 µs from the start of the read slot. By the end of the read time slot, the DQ pin will pull back high via the external pullup resistor. All read time slots must be a minimum of 60 µs in duration with a minimum of a 1-µs recovery time between individual read slots.
翻译过来便是:当将DQ线从高电平拉至低电平时,便开始了读时序。DQ线必须保持低电平最少1us,从DS18B20输出的数据再DQ下降沿之后的15us之内都有效。所以在此15us期间主机不能将DQ线拉低。再读时序的最后,DQ线会被外部上拉电阻拉高。所有的读时序至少要维持60us的时间,并且每两次“读”之间至少要有1us的间隔。
所以“读时序”:我们只需要将DQ从搞拉成低电平至少1us(笔者用2us),然后将DQ设置为上拉电阻拉高,然后在下降沿之后的15us之内将DQ线上的电平读出。在此建议在15us的后半阶段读。
以上就是DS18B20的读写时序,注意无论字节的读写,都是从最低位开始的。下面是DS18B20的控制字,笔者只列出足以让单个DS18B20正常工作的:
跳过ROM检测【0xcc】:此命令可以省去DS18B20内部ROM序列的匹配检测,在使用单个DS18B20器件时可以使用,节省时间。
温度变换【0x44】:此命令可以使DS18B20开始转换温度,按照精度在适当时间内完成转换。
温度数据读取【0xBE】:此命令写入后,DS18B20会输出内部温度数据暂存器的数据,这就是我们需要的温度测量数据。
所以我们要DS18B20转换温度并读出这个温度,遵循以下流程即可:
“复位——写0xcc(跳过匹配ROM)——写0x44(转换温度)——复位——写0xbe(读取温度)”,剩下的就是温度的显示问题了。
以下是源程序:
main.rar (1.76 KB, 下载次数: 118)
依旧是注意:
★ 注意释放数据线便是把IO设置为高阻态,利用外部上拉拉高;
★ 注意不同的转换精度要有不同的转换时间,这段时间内总线最好不做任何操作,这关系到这个试验的成败;
★ 在检测起始信号函数中,即便DS18B20发出存在信号了,也要调用延时使得起始信号时序完整。
★ 每一个时序都有最短或者最长时间要求,要严格控制时间。
★ 建议在读时序中,将主机读的操作放在限定时间内的后半阶段,以保证数据稳定
★ 因为单总线协议对时间有严格要求,所以确保你的AVR熔丝设置和GCC MakeFile设置一致,并尽量使用较准确的外部晶振。
希望能给有需要的朋友一点帮助。
此帖出自单片机论坛

最新回复

写的够详细,那天去库里还看见不少18B20尸体呢   详情 回复 发表于 2011-1-29 09:13

赞赏

1

查看全部赞赏

点赞 关注
 

回复
举报

6366

帖子

4918

TA的资源

版主

沙发
 
很详细啊,不错
此帖出自单片机论坛
 
 

回复

4996

帖子

19

TA的资源

裸片初长成(初级)

板凳
 
支持一下,写的不错啊!!!
此帖出自单片机论坛
 
个人签名我的博客
 
 

回复

978

帖子

0

TA的资源

一粒金砂(高级)

4
 

回复 楼主 losingamong 的帖子

原来你早就做过了,竟然没有发现,可以节约不少时间
此帖出自单片机论坛
 
 
 

回复

2735

帖子

0

TA的资源

一粒金砂(中级)

5
 
写的够详细,那天去库里还看见不少18B20尸体呢
此帖出自单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表