注册名:

密码:

个人注册

企业注册

商务申请

商务管理平台

企业管理平台

个人管理平台

我的工控博客

中国工控网www.chinakong.com

首页 | 新闻中心 | 工控论坛 | 经验视点 | 工控商务 | 电气手册 | 工控博客 | 招聘求职 | 网上调查 | 企业中心 | 供求信息 | 资料中心 | 工控书店

所在位置:工控论坛 -- 工控机论坛 -- 工控机论坛(非专题) -- 结构与配置

中国工控网搜索:

 登陆:密码:  注册  密码

搜索:

工控机论坛(非专题)分类  

全部论题

结构与配置

数据 I/O

编程与维护

应用方案

发表人:emtronix 发表时间:2010/12/8 23:53:00  

 

 本栏论题: 基于DS18B20测温系统解决方案  [1263]

    英创嵌入式主板以其优异的稳定性、独特的设计及方便使用等优点,在嵌入式领域占有一席之地。在工业现场,经常有监测环境温度的需求,本方案应用DS18B20为温度采集芯片,与英创嵌入式主板的GPIO相连,就可以组成完整的测温系统。由于DS18B20每条总线上可以最多接8个测温点,那么英创嵌入式主板至少可以接64个测温点。
    DS18B20数字温度计是DALLAS公司生产的1-Wire即单总线器件,具有线路简单,体积小的特点。实际应用中不需要外部任何元器件即可实现测温,测量温度范围在-55°C到+125°C之间,数字温度计的分辨率用户可以从9位到12位选择;并且内部有温度上、下限告警设置,使用非常方便。
   
    TO-92封装的DS18B20的引脚排列见图1,其引脚功能描述见表1。
   
   
   
    图1 DS18B20管脚示意图
   
    表1 DS18B20详细引脚功能描述:
   
   
    序号
   
    名称
   
    引脚功能描述
   
    1 GND 地信号
    2 DQ 数据输入/输出引脚。开漏单总线接口引脚。
   
    当被用着在寄生电源下,也可以向器件提供电源。
   
    3 VDD 可选的VDD引脚。当工作于寄生电源时,此引脚必须接地。
   
   
    DS18B20的使用方法
   
    由于DS18B20采用的是1-Wire总线协议方式,即在一根数据线实现数据的双向传输,而对嵌入式主板来说,硬件上并不支持单总线协议,因此,我们必须采用GPIO的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。在本示例中,只需把管脚2接英创嵌入式主板的GPIO,管脚3接5V电源,管脚1接地,就可以搭建起测试环境,如图二所示。如果需要测试多点温度,可以把多个DS18B20并起。
   
   
   
    图2 嵌入式主板与DS18B20连接示意图 由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将嵌入式主板作为主设备,单总线器件作为从设备。每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件送回数据,在进行写命令后,主机需要启动读时序完成数据接收。数据和命令的传输都是低位在先。
   
    下面是18B20的时序图,根据时序的要求,改变GPIO的电平,可以完成18B20的操作。
   
    DS18B20复位时序
   
   
   
    图3 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。如图所示。
   
   
   
    图4 DS18B20写时序图 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才能完成。
   
   
   
    图5 DS18B20读时序图 根据以上的读时序图,读字节函数如下:
   
    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; //得到温度值
   
    }
   
    源程序请参考光盘源码。
   
   

如果要回复本栏论题,请首先中国工控网www.chinakong.com

·如果你已经是中国工控网www.chinakong.com成员,请直接登录。

·如果你还不是中国工控网www.chinakong.com成员,请首先注册,注册为免费!

注册名:

密  码:

           注册中国工控网www.chinakong.com
           忘记密码

关闭该窗口

关于我们     免责声明     服务项目     广告联系     友情链接     联系方式     意见反馈     设为首页     加入收藏

 ©2023-2025 中国工控网(www.chinakong.com) 版权所有 豫ICP备17046657号

管理员信箱:chinakong98@163.com  服务热线:13525974529

洛阳博德工控自动化技术有限公司

中国    洛阳