ds1820温度传感器 Arduino教程┃五分钟全面了解DS18B20模拟防水温度传感器「图文」
Arduino教程┃五分钟全面了解DS18B20模拟防水温度传感器「图文」
前言
防水温度传感器是一个模拟输入模块,它的型号为:DS18B20(中间有详细视频讲解)。
图1:DS18B20模拟防水温度传感器
一、课前准备
学习本节课请准备Arduino UNO主板1块、扩展板1块、防水温度传感器1个、USB方口数据线1根、Mixly(米思齐,V0.998)。
图2:课前需要准备的物品及编程软件
二、模拟防水温度传感器简介
DS18B20防水温度传感器支持“单总线”接口(1-Wire),测量温度范围为-55~125,在-10~85范围内,精度为±0.5。现场温度直接以“单总线”的数字方式传输,大大提高了系统的抗干扰性,适合于恶劣环境的现场温度测量。在Arduino中,它需要连接一个上拉电阻才能使用。
图3 终端传感器适配器
终端传感器适配器的出现就是为了解决刚说的上拉电阻问题,它分别在A&B、A&C之间增加了一个10k电阻,这样当传感器必须有上拉或下拉电阻时,就不需要再连接一个附加电阻,提供简单和稳定的连接。简单的说就是,这个终端提供了一个更容易的方法来连接开关或任何需要上拉/下拉电阻的模块到类似于Arduino UNO主板这样的微控制器。
三、模拟防水温度传感器外形尺寸
温度传感器
钢管:6*50mm
引线长度:1m
终端传感器适配器
终端传感器适配器:
尺寸:22x34mm
螺丝安装孔:两个M3
四、模拟防水温度传感器电气特性
输入电压:3-5.5V DC(直流电源)
感温范围:-55℃~+125℃(引线最高只能承受85度左右)
转换精度:9位~12位A/D
五、模拟防水温度传感器接口说明
把防水温度传感器连接到 终端传感器适配器
请注意颜色区分
黑色 负极 连接 C
红色 正极 连接 B
黄色 数字信号 连接 A
再把 终端传感器 连接到扩展板2号数字管脚或A2号模拟管脚(这个传感器很特殊)。
这个传感器很特殊,数字、模拟都可以获取温度值
黑色 负极 连接 G
红色 正极 连接 V
绿色 信号 连接 S
注意:正负极不能反接,会烧坏传感器。
六、获取模拟防水温度传感器返回值
由于AS-Block只有LM35温度传感器,没有集成DS18B20模块,再加上这个传感器的代码比较复制,所以本节课,我们只使用米思齐来调试。具体获取方法请点击观看视频:温度传感器视频介绍。
七、模拟防水温度传感器使用注意事项
DS1820虽然具有测温系统简单、测温精度高、连接方便、占用口线少等优点,但在实际应用中也应注意以下几方面的问题:
1) 较小的硬件开销需要相对复杂的软件进行补偿,由于DS1820与微处理器间采用串行数据传送,因此,在对DS1820进行读写编程时,必须严格的保证读写时序,否则将无法读取测温结果。在使用PL/M、C等高级语言进行系统程序设计时,对DS1820操作部分最好采用汇编语言实现。
2) 在DS1820的有关资料中均未提及单总线上所挂DS1820数量问题,容易使人误认为可以挂任意多个DS1820,在实际应用中并非如此。当单总线上所挂DS1820超过8个时,就需要解决微处理器的总线驱动问题,这一点在进行多点测温系统设计时要加以注意。
3) 连接DS1820的总线电缆是有长度限制的。试验中,当采用普通信号电缆传输长度超过50m时,读取的测温数据将发生错误。当将总线电缆改为双绞线带屏蔽电缆时,正常通讯距离可达150m,当采用每米绞合次数更多的双绞线带屏蔽电缆时,正常通讯距离进一步加长。这种情况主要是由总线分布电容使信号波形产生畸变造成的。因此,在用DS1820进行长距离测温系统设计时要充分考虑总线分布电容和阻抗匹配问题。
4) 在DS1820测温程序设计中,向DS1820发出温度转换命令后,程序总要等待DS1820的返回信号,一旦某个DS1820接触不好或断线,当程序读该DS1820时,将没有返回信号,程序进入死循环。这一点在进行DS1820硬件连接和软件设计时也要给予一定的重视。
测温电缆线建议采用屏蔽4芯双绞线,其中一对线接地线与信号线,另一组接VCC和地线,屏蔽层在源端单点接地。
八、模拟防水温度传感器知识拓展
1、onewire(单总线)onewire(单总线)是DALLAS公司推出的外围串行扩展总线技术总线,顾名思义,它是采用一根信号线进行通信,既传输时钟信号又传输数据,而且能够进行双向通信,具有节省I/O口线、资源结构简单、成本低廉、便于总线扩展和维护等诸多优点。常用到单总线的器件,一般是稳定传感器、EEPROM、唯一序列号芯片等,如DS18B20、DS2431。
在使用单总线时,往往很少CPU会提供硬件单总线,几乎都是根据单总线标准的时序图,通过普通IO翻转模拟实现单总线。而在模式实现时序图的过程中,需要根据CPU时钟频率等条件进行时序时间计算,如果更换CPU后,需要重新计算时序时间,如果时序代码和器件外设控制代码集成在一起,则代码改动比较大。或者同一CPU需要模拟多根单总线时,传统的“复制”方式使得程序显得累赘,还增加ROM占用空间。因此,可以利用“函数指针”的方式,将时序部分抽象出来,达到“复用”代码的效果。
2、上拉电阻、下拉电阻在数字逻辑电路中,一个信号不是0,就是1。正是因为这样,数字电路的设计才简单,可靠。通常,用电压5v(或者接近5V)代表 on 开状态,代表高电平,对应状态 1。用电压0v (或者接近0v)代表off关状态,代表低电平,对应状态0。有些开发板是基于3,3V的,因此使用3.3V作为高电平。如果一个线路中的电压处于不确定的状态(例如一个引脚不和任何其它回路连通时),那我们就说它的电压是浮动的,他会随着时间不断变化,跳动,而且很容易受到外界环境的影响。处于这种不确定状态的电路会被随机解释为高或者低电平。这种现象也叫电子噪声。然而程序必须是严格准确的,所以电路的设计一定要避免线路电压处于浮动状态。我们可以使用上拉电阻或者下拉电阻将电路的电压在任何时候都保持在确定的状态下,这就是上拉电阻和下拉电阻的作用。
下拉电阻作用:将一个未知的电平拉低到稳定的低电平状态。
上拉电阻作用:将一个未知的电平拉高到稳定的高电平状态。
九、结束语
初始化工作室重点关注“乐高、Scratch、Arduino的学习与创意以及STEAM教育的实施 ”,如果需要更多相关课程,请“关注 ”我,谢谢。
详解单总线及其应用
单总线适用于单主机系统,能够控制一个或多个从机设备。主机可以是微控制器,从机可以是单总线器件,它们之间的数据交换只通过一条信号线。当只有一个从机设备时,系统可按单节点系统操作;当有多个从设备时,系统则按多节点系统操作。图12-1所示是单总线多节点系统。
图12-1 单总线多节点系统示意图
单总线硬件结构
顾名思义,单总线即只有一根数据线,系统中的数据交换、控制都由这根线完成。设备(主机或从机)通过一个漏极开路或三态端口连至该数据线,以允许设备在不发送数据时能够释放总线,而让其他设备使用总线,其内部等效电路如图12-2所示。
图12-2 单总线硬件接口示意图
单总线要求外接一个约5k的上拉电阻:这样,单总线的闲置状态为高电平。不管什么原因,如果传输过程需要暂时挂起,且要求传输过程还能够继续的话,则总线必须处于空闲状态。位传输之间的恢复时间没有限制,只要总线在恢复期间处于空闲状态(高电平)。如果总线保持低电平超过480μs,总线上的所有器件将复位。另外,在寄生方式供电时,为了保证单总线器件在某些工作状态下(如温度转换期间、EEPROM写入等)具有足够的电源电流,必须在总线上提供强上拉(如图中所示的MOSFET(metal-oxide semiconductor field-effect transistor,金属氧化物半导体场效应晶体管))。
单总线通信原理
主机和从机之间的通信可通过3个步骤完成,分别为初始化1-wire器件、识别1-wire器件和交换数据。由于单总线是主从结构,只有主机呼叫从机时,从机才能应答,因此主机访问1-wire器件都必须严格遵循单总线命令序列,即初始化、ROM命令和功能命令。如果出现序列混乱,1-wire器件将不响应主机(搜索ROM命令、报警搜索命令除外)。
(1)初始化
基于单总线上的所有传输过程都是以初始化开始的,初始化过程由主机发出的复位脉冲和从机响应的应答脉冲组成。应答脉冲使主机知道,总线上有从机设备,且准备就绪。
(2)ROM命令
在主机检测到应答脉冲后,就可以发出ROM命令。这些命令与各个从机设备的唯一64 位ROM代码相关,允许主机在单总线上连接多个从机设备时,指定操作某个从机设备。
这些命令还允许主机能够检测到总线上有多少个从机设备以及其设备类型,或者有没有设备处于报警状态。从机设备一般支持5种ROM命令(实际情况与具体型号有关)每种命令长度为8位,如表12-1所示。主机在发出功能命令之前,必须送出合适的ROM命令。
表12-1 ROM命令说明
(3)功能命令
在主机发出ROM命令后,接着就可以发出某个功能命令。功能命令则根据具体1-wire器件所支持的功能来确定。
单总线的信号方式
所有的单总线器件要求采用严格的通信协议,以保证数据的完整性。该协议定义了几种信号类型:复位脉冲、应答脉冲、写0、写1、读0和读1。所有这些信号,除了应答脉冲以外,都由主机发出同步信号。并且发送所有的命令和数据都是字节的低位在前,这一点与多数串行通信格式不同(多数为字节的高位在前)。
(1)初始化序列——复位和应答脉冲
单总线上的所有通信都是以初始化序列开始,包括:主机发出的复位脉冲及从机的应答脉冲,如图12-3所示。当从机发出响应主机的应答脉冲时,即向主机表明它处于总线上,且工作准备就绪。在主机初始化过程,主机通过拉低单总线至少480μs,以产生(Tx)复位脉冲。接着主机释放总线,并进入接收模式(Rx)。当总线被释放后,5k上拉电阻将单总线拉高。在单总线器件检测到上升沿后,延时15~60μs,接着通过拉低总线60~240μs,以产生应答脉冲。
图12-3 复位和应答脉冲
提示
黑色实线代表系统主机拉低总线,黑色虚线代表上拉电阻将总线拉高。
(2)读/写时隙
在写时隙期间,主机向单总线器件写入数据;而在读时隙期间,主机读入来自从机的数据。在每一个时隙,总线只能传输一位数据。
① 写时隙
存在两种写时隙:“写1”和“写0”。主机采用写1时隙向从机写入1,而采用写0时隙向从机写入0。所有写时隙至少需要60μs,且在两次独立的写时隙之间至少需要1μs的恢复时间。两种写时隙均起始于主机拉低总线(如图12-4所示)。产生写1时隙的方式:主机在拉低总线后,接着必须在15μs之内释放总线,由5k上拉电阻将总线拉至高电平;而产生写0时隙的方式;在主机拉低总线后,只需在整个时隙期间保持低电平即可(至少60μs)。
在写时隙起始后15~60μs期间,单总线器件采样总线电平状态。如果在此期间采样为高电平,则逻辑1被写入该器件;如果为0,则写入逻辑0。
图12-4 单总线通信协议中写时隙时序图
② 读时隙
单总线器件仅在主机发出读时隙时,才向主机传输数据,所以,在主机发出读数据命令后,必须马上产生读时隙,以便从机能够传输数据。所有读时隙至少需要60μs,且在两次独立的读时隙之间至少需要1μs的恢复时间。每个读时隙都由主机发起,至少拉低总线1μs(如图12-5所示)。在主机发起读时隙之后,单总线器件才开始在总线上发送0或1。若从机发送1,则保持总线为高电平;若发送0,则拉低总线。当发送0时,从机在该时隙结束后释放总线,由上拉电阻将总线拉回至空闲高电平状态。从机发出的数据在起始时隙之后,保持有效时间15μs,因而,主机在读时隙期间必须释放总线,并且在时隙起始后的15μs之内采样总线状态。
图12-5 单总线通信协议中读时隙时序图
单总线器件
通常把挂在单总线上的器件称之为单总线器件,单总线器件内一般都具有控制、收发、存储等电路。为了区分不同的单总线器件,厂家生产单总线器件时都要烧录一个64位的二进制ROM代码,以标志其ID号。目前,单总线器件主要有数字温度传感器(如DS18B20)、A/D转换器(如DS2450)、门标、身份识别器(如DS1990A)、单总线控制器(如DS1WM)等。
12.1.2 单总线器件DS18B20
(一)DS18B20性能特点
图12-6 DS18B20引脚图
DS18B20是DALLAS公司继DS1820之后最新推出的一种改进型智能温度传感器。与传统的热敏电阻相比,他能够直接读出被测温度并且可根据实际要求通过简单的编程实现9~12位的数字值读取。可分别在93.75 ms和750 ms内完成9位和12位的温度数字量转换,从DS18B20读出信息或写入信息仅需要一根数据线。读写温度、变换功率可来源于数据总线,总线本身也可以向所挂接的DS18B20供电,而无需额外电源。因而使用DS18B20可使系统结构更趋简单,可靠性更高。
DS18B20的引脚如图12-6所示。
(1)GND为电源端;
(2)DQ为数字信号输入输出端;
(3)V DD 为外接供电电源输入端(在寄生电源接线方式时接地)。
(二)DS18B20的内部结构及主要功能部件
DS18B20的总体结构如图12-7所示,由64位光刻ROM及串行接口、高低温度传感器、高低温触发器、配置寄存器、8位CRC发生器、电源检测和寄生电容等各部分组成。
(1)64位ROM
64位光刻ROM是出厂前被光刻好的,它由8位产品系列号,48位产品序号和8位CRC编码组成,DS18B20的产品系列号均为28H,每个器件的48位产品序号各不相同,利用产品序号可以识别一线上的挂载的不同DS18B20器件。
图12-7 DS18B20内部结构框图
(2)配置寄存器
配置寄存器用于设置DS18B20的转换精度,配置寄存器的各位如表12-2所示。
表12-2 DS18B20配置寄存器
低5位一直为1;TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式,在出厂时该位被设置为0,用户不要去改动;R1和R2决定温度转换的精度位数。
DS18B20的温度转换时间与温度转换的精度位数(即温度转换的分辨率)相关,当温度转换的分辨率越高,转换需要的时间越长,其关系如表12-3所示。
表12-3 温度分辨率和最大转换时间关系表
(3)高温触发器TH和低温触发器TL
高温触发器TH中存在最高温度报警下限,低温触发器TL中存在最低温度报警下限,用户可通过软件写入。
(4)温度传感器
DS18B20中的温度传感器可完成对温度的测量,温度值用16位符号扩展的二进制补码读数形式提供,以0.0625℃/B形式表达,其中S为符号位,在12位转化情况下温度高低字节存放形式如表12-4所示。
表12-4 DS18B20温度的高低字节存放
二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625才能得到实际温度。
在12位分辨率下温度-数字量输出的关系表如表12-5所示。
表12-5 温度-数据关系表
DS18B20完成温度转换后,就把测得的温度值与RAM中的TH、TL字节内容作比较。若值高于TH或低于TL,则将该器件的报警标志位置位,并对主机发出报警搜索命令作出响应。
(三)DSl8B20工作过程
DSl8B20工作过程中的协议如下:
1. 初始化
单总线上的所有处理均从初始化开始;
2. ROM操作命令
总线主机检测到DSl8B20的存在便可以发出ROM操作命令,ROM操作命令如表12-6所示。
表12-6 DS18B20的ROM操作命令
3. 存储器操作命令
在执行ROM操作命令后执行存储器操作命令,存储器操作命令如表12-7所示。
表12-7 DS18B20的存储器操作命令
应用实例:8051单片机与DS18B20构成的测温系统
由DS18B20开发的一线式温度传感器具有接口简单、测量精度高等优点,广泛的应用到工业、仪器仪表、医疗电器等各个领域。
这里我们模仿一线式温度计的工作原理,以8051单片机(假设系统外接的是12MHz的晶振,即机器周期为1us)作为控制芯片,来读取DS18B20的温度值,并通过2位数码管显示被测对象的温度值。系统的结构如图12-8所示。
图12-8 8051单片机与DS18B20测温系统框图
程序设计说明:
1. 定义存放读取温度的变量TEMPER_L、TEMPER_H以及转换后的温度值变量TEMPER_NUM;定义单片机的P3.7口作为与DS18B20的数据通信口。定义位变量flag为判断DS18B20是否存在的标志。
2. 主程序通过循环调用读取温度程序、温度转换程序和数码管显示程序实现温度读取、转换和显示等功能。
3. 获取温度程序uint ReadTemperature(void),通过调用INIT_1820判断是否与DS18B20联络上。若联络上,接下来按照一定的时序发送命令,通过READ_18200程序读取温度值的高八位和低八位分别存放到TEMPER_H和TEMPER_L单元中。
4. 温度转换程序为void TemperConvert(void),显示程序为Display(void)。
C51源程序如下:
相关问答
因特尔的CPU G1620 G2030 G3220 G 1820 G2030 3220 这6款CPU...赛扬G1620-赛扬G1820-奔腾G2030-奔腾G3220-I33220(是I3吗)有用(0)回复2550526806G1字头的是赛扬芯片,性能最低,intel系数字越大,性能越好。G...
买标致408后悔了吗?买了标致408后悔了吗?无聊的问题,花钱这个过程不就是为了找快乐的吗?自己真金白银的“血汗钱”都花出去了还后悔?那人生该有无聊与遗憾啊!就算买错了也要“...
法国有哪些汽车品牌?DS很受法国政要欢迎,被誉为“总统座驾”。从戴高乐到奥朗德,DS是法国总统的不二之选。布加迪,拥有100多年历史的法国跑车品牌。说到奢侈品,大家肯定会想到来...