DS18B20温度检测
简介
基于89C51单片机和DS18B20数字传感器设计的温度预警系统,使用LCD1602进行显示,可设置温度上下限并启动相应的人机功能。
简介:基于89C51单片机和DS18B20数字传感器设计的温度预警系统,使用LCD1602进行显示,可设置温度上下限并启动相应的人机功能。开源协议
:Public Domain
描述
一、设计摘要
系统的硬件部分包括ST89C52、DS18B20温度传感器和液晶屏。ST89C52单片机作为系统的核心,负责控制和处理温度数据,并根据设定的报警范围进行相应的处理。温度传感器用于测量环境温度,并将温度数据传输给单片机。液晶屏用于显示环境温度和其他相关信息。
二、总体设计框图
三、硬件电路组成
1.DS18B20
DS18B20的温度输出数据时在摄氏度下校准的;若是在华氏度下应用的话,可以用查表法或者常规的数据换算。温度数据以一个16位标志扩展二进制补码数的形式存储在温度寄存器中(详见图2)。符号标志位(S)温度的正负极性:正数则S=0,负数则S=1。如果DS18B20被定义为12位的转换精度,温度寄存器中的所有位都将包含有效数据。若为11位转换精度,则bit 0为未定义的。若为10位转换精度,则bit 1和bit 0为未定义的。 若为9位转换精度,则bit 2、bit 1和bit 0为未定义的。表格1为在12位转换精度下温度输出数据与相对应温度之间的关系表。
访问DS18B20的事件序列如下所示:
第一步:初始化
第二步:ROM命令(紧跟任何数据交换请求)
第三步:DS18B20功能命令(紧跟任何数据交换请求)
每次对DS18B20的访问都必须遵循这样的步骤来进行,如果这些步骤中的任何一个丢失或者没有执行,则DS18B20将不会响应。除了ROM搜索命令[F0h]和报警搜索命令[ECh]之外。当执行完这些ROM命令之后,主设备必须回到上述步骤中的第一步。
初始化
1-Wire总线上的所有事件都必须以初始化为开始。初始化序列由总线上的主设备发出的复位脉冲以及紧跟着从设备回应的存在脉冲构成。该回应脉冲让总线上的主设备知道在该总线上有从设备(例如DS18B20),并且已经准备好进行操作。
ROM命令
当总线上的主设备检测到了存在脉冲后,就可以执行ROM命令。这些命令是对每个设备独一无二的64位ROM编码进行操作的,当总线上连接有多个设备时,可以通过这些命令识别各个设备。这些命令同时也可以使主设备确定该总线上有多少个什么类型的设备或者有温度报警信号的设备。总共包含有5种ROM命令,每个命令的长度都是8 Bit。主设备在执行DS18B20功能命令之前必须先执行一个适当的ROM命令。
搜索ROM[F0h]
当系统上电初始化后,主设备必须识别该总线上所有的从设备的ROM编码,这样就可以使得主设备确定总线上的从设备的类型及数量。主设备学习ROM编码是一个清除的过程,则主设备要根据需要循环地发送搜索ROM[F0h]命令(搜索ROM命令跟随着数据交换)来确定总线上所有的从设备。如果仅有一个从设备在该总线上,更加简单的读取ROM命令(下一段落有详解)可以代替搜索ROM的过程。
读取ROM[33h]
该命令在总线上仅有一个从设备时才能使用。该命令使得总线上的主设备不需要搜索ROM命令过程就可以读取从设备的64位ROM编码。当总线上有超过一个从设备时,若再发送该命令,则当所有从设备都会回应时,将会引起数据冲突。
匹配ROM[55h]
该匹配ROM命令之后跟随发送64位的ROM编码使得总线上的主设备能够匹配特定的从设备。只有完全匹配该64位ROM编码的从设备才会响应总线上的主设备发出的功能命令;总线上的其他从设备将会等待下下一个复位脉冲。
跳过ROM[CCh]
主设备可以使用该命令来同时向总线上的所有从设备发送不要发送任何的ROM编码命令。例如,主设备通过向总线上所有的DS18B20发送跳过ROM命令后再发送温度转换[44h]命令,则所有设备将会同时执行温度转。
需要注意的是,当总线上仅有一个从设备时,读取暂存寄存器[BEh]命令后面可以跟随跳过ROM命令。在这种情况下,主设备可以读取从设备中的数据而不发送64位ROM编码。当总线上有多个从设备时,若在跳过ROM命令后再发送读取暂存寄存器命令,则所有的从设备将会同时开始传送数据而导致总线上的数据冲突。
警报搜索[ECh]
该命令的操作与跳过ROM命令基本相同,但是不同的是只有警报标志置位的从设备才会响应。该命令使得主设备确定在最近一次温度转换期间是否有DS18B20有温度报警。当所有的报警搜索命令循环执行后,总线上的主设备必须回到事件序列中的第一步(初始化)。
DS18B20功能命令
当总线上的主设备通过ROM命令确定了哪个DS18B20能够进行通信时,主设备可以向其中一个DS18B20发送功能命令。这些命令使得主设备可以向DS18B20的暂存寄存器写入或者读出数据,初始化温度转换及定义供电模式。DS18B20的功能命令在下面详细描述。
温度转换[44h]
该命令为初始化单次温度转换。温度转换完后,温度转换的数据存储在暂存寄存器的2个字节长度的温度寄存器中,之后DS18B20恢复到低功耗的闲置状态。如果该设备是采用的“寄生电源”供电模式,在该命令执行10uS(最大)后主设备在温度转换期间必须强制拉高数据线(“DS18B20的供电”章节所描述)。如果该设备是采用的外部供电模式,主设备在温度转换命令之后可以执行读取数据时序,若DS18B20正在进行温度转换则会响应0电平,温度转换完成则响应1电平。在“寄生电源”供电模式下,因为在整个温度转换期间总线都是强制拉高的状态,故不会有上述响应。
写入暂存寄存器[4Eh]
该命令使得主设备向DS18B20的暂存寄存器写入3个字节的数据。第一个字节的数据写入TH寄存器(暂存寄存器的 Byte 2),第二个字节的数据写入TL寄存器(Byte 3),第三个字节的数据写入配置寄存器(Byte 4)。所有的数据必须是以低位先发的原则。所有的三个字节的数据在写入之前主设备必须先对从设备复位,否则数据将会损坏。
读取暂存寄存器[BEh]
该命令使得主设备可以读取暂存寄存器中存储的值。数据从Byte 0的低位开始传送直到第9个字节(Byte 8 - CRC)读取完毕。主设备若只需要暂存寄存器中的部分数据,则可以在读取数据中通过复位来终止。
拷贝暂存寄存器[48h]
该命令为将暂存寄存器中的TH、TL及配置寄存器(Byte 2,Byte 3和Byte 4)的值拷贝至EEPROM中。如果该设备采用的“寄生电源”供电模式,在该命令发送后10us(最大)内主设备必须强制拉高1-Wire总线超过10ms。
召回EEPROM[B8h]
该命令将温度报警触发值(TH和TL)及配置寄存器的数据从EEPROM中召回至暂存寄存器中的Byte 2,Byte 3和Byte4中。主设备可以在召回EEPROM命令之后执行读取数据时序,若DS18B20正在进行召回EEPROM则会响应0电平,召回EEPROM完成则响应1电平。召回数据操作在上电初始化后会自动执行一次,所以设备在上电期间暂存寄存器中一直会有有效的数据。
1-Wire总线信号
DS18B20采用严谨的1-Wire总线通信协议来保证数据的完整性。该协议定义多个信号形式:复位脉冲,存在脉冲,写0,写1,读0,读1。主设备执行除了存在脉冲外的所有其他信号。
初始化程序—复位和存在脉冲
与DS18B20所有的通信都是由初始化序列开始的,该序列包括从主设备发出的复位脉冲及从DS18B20响应的存在脉冲组成。如图13所示。当DS18B20响应复位信号的存在脉冲后,则其向主设备表明其在该总线上,并且已经做好操作命令。
在初始化序列期间,总线上的主设备通过拉低1-Wire总线超过480us来发送(TX)复位脉冲。之后主设备释放总线而进入接收模式(RX)。当总线释放后,5kΩ左右的上拉电阻将1-Wire总线拉至高电平。当DS18B20检测到该上升边沿信号后,其等待15us至60us后通过将1-Wire总线拉低60us至240us来实现发送一个存在脉冲。
读/写时段
主设备通过写时段向DS18B20中写入数据,通过读时段从DS18B20中读取数据。1-Wire总线上每一个读写时段只能传送一个位的数据。
写时段
写时段有两种情况:“写1”时段和“写0”时段。主设备通过写1时段来向DS18B20中写入逻辑1以及通过写0时段来向DS18B20中写入逻辑0。每个写时段最小必须有60us的持续时间且独立的写时段间至少有1us的恢复时间。两个写时段都是由主设备通过将1-Wire总线拉低来进行初始化(详见图14)。
为了形成写1时段,在将1-Wire总线拉低后,主设备必须在15us之内释放总线。当总线释放后,5kΩ的上拉电阻将总线拉至高。为了形成写0时段,在将1-Wire总线拉低后,在整个时段期间主设备必须一直拉低总线(至少60us)。
在主设备初始化写时段后,DS18B20将会在15us至60us的时间窗口内对总线进行采样。如果总线在采样窗口期间是高电平,则逻辑1被写入DS18B20;若总线是低电平,则逻辑0被写入DS18B20。
读时段
仅在读时段期间DS18B20才能向主设备传送数据。因此,主设备在执行完读暂存寄存器[BEh]或读取供电模式[B4h]后,必须及时地生成读时段,这样DS18B20才能提供所需的数据。此外,主设备可以在执行完转换温度[44h]或拷贝EEPROM[B8h]命令后生成读时段,以便获得在“DS18B20功能命令”章节中提到的操作信息。
每个读时段最小必须有60us的持续时间且独立的写时段间至少有1us的恢复时间。读时段通过主设备将总线拉低超过1us再释放总线来实现初始化(见图14)。当主设备初始化完读时段后,DS18B20将会向总线发送0或者1。DS18B20通过将总线拉至高来发送逻辑1,将总线拉至低来发送逻辑0。当发送完0后,DS18B20将会释放总线,则通过上拉电阻该总线将会恢复到高电平的闲置状态。从DS18B20中输出的数据在初始化读时序后仅有15us的有效时间。因此,主设备在开始改读时段后的15us之内必须释放总线,并且对总线进行采样。
2.供电
电路采用USB-C供电方式,支持锂电池供电使用(锂电池电压不应低于3.5V,否则会造成电压过低,芯片无法正常工作)
电路切换采用P沟道MOS管,可实现外部供电和电池供电的无缝自动切换
3.LCD1602
连线图
初始化
读时序图
写时序图
4.人机交互
在出发报警后对应的高温和低温接口会输出一个CMOS高电平,可以通过外界继电器实现对高负载电路的控制。
评论