0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

英创信息技术基于DS18B20测温系统解决思路

英创信息技术 来源:英创信息技术 作者:英创信息技术 2019-11-13 09:38 次阅读

英创嵌入式主板以其优异的稳定性、独特的设计及方便使用等优点,在嵌入式领域占有一席之地。在工业现场,经常有监测环境温度的需求,本方案应用DS18B20为温度采集芯片,与英创嵌入式主板的GPIO相连,就可以组成完整的测温系统。由于DS18B20每条总线上可以最多接8个测温点,那么英创嵌入式主板至少可以接64个测温点。
DS18B20数字温度计是DALLAS公司生产的1-Wire即单总线器件,具有线路简单,体积小的特点。实际应用中不需要外部任何元器件即可实现测温,测量温度范围在-55°C到+125°C之间,数字温度计的分辨率用户可以从9位到12位选择;并且内部有温度上、下限告警设置,使用非常方便。
TO-92封装的DS18B20的引脚排列见图1,其引脚功能描述见表1。

表1 DS18B20详细引脚功能描述:

序号

名称

引脚功能描述

1

GND

信号

2

DQ

数据输入/输出引脚。开漏单总线接口引脚
当被用着在寄生电源下,也可以向器件提供电

3

VDD

可选的VDD引脚。当工作于寄生电源时,此引脚必须接地

DS18B20的使用方法

由于DS18B20采用的是1-Wire总线协议方式,即在一根数据线实现数据的双向传输,而对嵌入式主板来说,硬件上并不支持单总线协议,因此,我们必须采用GPIO的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。在本示例中,只需把管脚2接英创嵌入式主板的GPIO,管脚3接5V电源,管脚1接地,就可以搭建起测试环境,如图二所示。如果需要测试多点温度,可以把多个DS18B20并起。

由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将嵌入式主板作为主设备,单总线器件作为从设备。每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件送回数据,在进行写命令后,主机需要启动读时序完成数据接收。数据和命令的传输都是低位在先。

下面是18B20的时序图,根据时序的要求,改变GPIO的电平,可以完成18B20的操作。

DS18B20复位时序

根据以上DS18B20的时序,初始化的函数如下:

Init18b20()

{

char flag;

OutBit(1);

Delayus(1);

OutBit(0);

Delayus(600); // 复位信号480—960us

OutBit(1);

Delayus(60); // 等待15-60us

if(ReadBit()) // 检查存在电平,如果为低,说明18B20正确复位

{

printf(‘init fail’);

return false; // detect 1820 fail!

}

else

{

Sleep(1);

OutBit(1);

return true; // detect 1820 success!

}

}

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

DS18B20的写时间隙

当主机把数据线从逻辑高电平拉到逻辑低电平的时候,写时间隙开始。有两种写时间隙:写1时间隙和写0时间隙。所有写时间隙必须最少持续60us,包括两个写周期间至少1us的恢复时间。

I/O线电平变低后,DS18B20在一个15us到60us的窗口内对I/O线采样。如果线上是高电平,就是写1,如果线上是低电平,就是写0。如图所示。

void DS18B20::WriteByte(uchar wr)

{

uchar i;

OutBit(1);

Delayus(1);

for (i=0;i《8;i++) // 写8bit

{

OutBit(0) ; // 总线拉低,写间隙开始

Delayus(10); // 延时 2-12us

OutBit(wr&0x01) ; // 写数据到总线

Delayus(30); // 在15us-60us之间采用

OutBit(1); // 释放总线

wr 》》= 1;

Delayus(2);

}

Sleep(1); // 字节之间最好间隔的稍微长一点

}

DS18B20的读时间隙

当从DS18B20读取数据时,主机生成读时间隙。当主机把数据线从高电平拉到低电平时,读时间隙开始,数据线必须保持至少1us;从DS8B20输出的数据在读时间隙的下降沿出现后15us内有效。对于DS18B20的读时隙是从主机把总线拉低之后,在15微秒之内就得释放单总线,以让DS18B20把数据传输到单总线上。DS18B20在完成一个读时序过程,至少要60us才能完成。

根据以上的读时序图,读字节函数如下:

UCHAR DS18B20::ReadByte()

{

uchar i,u=0;

OutBit(1);

Delayus(1);

for(i=0;i《8;i++) // 读一字节

{

OutBit(0) ; // 总线拉低,读间隙开始

Delayus(2);

OutBit(1) ; // 拉高总线

Delayus(4); // 在1-14us之内读取总线数据

u 》》= 1;

if(ReadBit()==1) u |= 0x80;

Delayus(60); // 读取数据周期至少60us

OutBit(1) ;

}

return(u);

}

在读温度之前,要先启动温度转换,如果采用寄生电源供电,温度转换的时间应该大于500毫秒。对于一条总线的多个18B20来说,启动转换不需要匹配18B20的ROM地址。

void DS18B20::StartConvert()

{

Init18b20 ();

WriteByte(0xcc); // 跳过ROM

WriteByte(0x44); // 启动转换命令

}

在读指定的18B20时,就要先发匹配命令,再发ROM序列号,具体请参考下面的程序:

void DS18B20::TemperatuerResult(char id)

{

uchar i;

Init18b20 ();

WriteByte(0x55); // 匹配ROM地址

for(i=0;i《8;i++) // 发18B20地址码

{

WriteByte(b20rom[id][i]);

}

WriteByte(0xbe); // 发读温度命令

read_bytes(2); // 前2个字节为温度值

temp=temp_buff[1]&0x0f; // 去掉符号位

temp=temp《《8;

temp=temp+temp_buff[0];

Temperature=temp*0.0625; // 得到温度值

}


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6064

    浏览量

    34614
收藏 人收藏

    评论

    相关推荐

    基于LPC2292 和DS18B20测温节点设计The Des ign of Temperature measure node B

    设计方案和软件的设计思路, 给出了主要驱动程序代码。测温节点的实现方法具有一定的通用性。关键词:LPC2292; DS18B20; 测温Abstract:The paper intro
    发表于 10-19 14:52

    测试测量技术社区-- 基于CC2430和DS18B20的无线测温系统设计 ...

    测试测量技术社区-- 基于CC2430和DS18B20的无线测温系统设计 -通用测量
    发表于 08-12 23:12

    测试测量技术社区-- 基于CC2430和DS18B20的无线测温系统设计 ...

    测试测量技术社区-- 基于CC2430和DS18B20的无线测温系统设计 -通用测量
    发表于 08-12 23:13

    DS18B20测温系统设计

    谁那有DS18B20测温系统设计帮忙发过来吧,时间紧迫,老师催着交,最好有原理图和仿真的原件
    发表于 12-04 13:14

    DS18B20多点测温方法探讨

    、功耗低、性能高、抗干扰能力强、使用简单等优点。其独特的单总线技术使用户可轻松地组建传感器网络,特别适合于构成多点温度测控系统。每个DS18B20 都有一个唯一的64 位ROM 序列号,通过查询此序列号
    发表于 11-02 16:10

    DS18B20在温度检测系统中的应用

      摘要:该论文结合实际使用经验,完成了DS18B20数字温度传感器在基于单片机的温度检测系统中的应用。本设计有效的提高了控制系统的实时性改善了温度测量的自动化程度,具有较高的实用价值。该系统
    发表于 11-06 15:09

    基于单总线数字温度传感器DS18B20测温系统方案

      摘要:设计了一种基于单总线数字温度传感器DS18B20测温系统,给出了DS18B20传感器特性和控制命令及时序,在Proteus环境下进行了
    发表于 11-06 15:18

    DS18B20的相关资料分享

    测温元件相比,它是一种新型的体积小、适用电压宽、与微处理器接口简单的数字化温度传感器。特点1、适应电压范围更宽,电压范围:3.0~5.5V,在寄生电源方式下可由数据线供电。2、独特的单线接口方式,DS18B20 在与微处理器连接时仅需要一条口线即可实现微处理器与
    发表于 11-18 06:31

    DS18B20的特点是什么

    范围为 -55 ℃ ~+ 125 ℃ ; 在 -10~+ 85°C 范围内,精度为 ± 0.5°C 。(3)持多点组网功能 多个 DS18B20 可以并联在惟一的单线上,实现多点测温。(4)测量参数可配置 DS18B20 的测量
    发表于 01-10 06:25

    DS18B20模块说明

    DS18B20模块说明:1DS18B20是由 DALLAS 半导体公司推出的一种的“单总线”接口的温度传感器。与传统的热敏电阻等测温元件相比,它是一
    发表于 01-17 08:48

    请问DS18B20测温C程序怎么写?

    DS18B20测温C程序怎么写?
    发表于 11-07 07:20

    一种新型多点测温系统的设计(基于DS18B20设计的多点测温

    一种新型多点测温系统的设计(基于DS18B20设计的多点测温系统) 介绍DS18B20的基本特
    发表于 10-15 23:50 1911次阅读
    一种新型多点<b class='flag-5'>测温</b><b class='flag-5'>系统</b>的设计(基于<b class='flag-5'>DS18B20</b>设计的多点<b class='flag-5'>测温</b>

    基于DS18B20测温系统设计

    针对单线总线数字温度传感器 DS18B20 的工作特性,本文对基于DS18B20测温系统进行了硬件和软件的设计。仿真实验结果表明,该测温
    发表于 07-22 16:13 552次下载
    基于<b class='flag-5'>DS18B20</b><b class='flag-5'>测温</b><b class='flag-5'>系统</b>设计

    DS18B20 构成测温系统

    用一片 DS18B20 构成测温系统,测量的温度精度达到 0.1 度,测量的温度的范围在-20度到+50度之间,用4位数码管显示出来。
    发表于 10-12 11:46 0次下载

    DS18B20构成测温系统

    学习单片机电路图的很好的资料——DS18B20 构成测温系统
    发表于 11-03 15:15 0次下载