1、目 录中文摘要3关键词31实现功能说明32设计思路分析32.1关于温度传感器DS18B2032.2单线技术43硬件电路设计43.1主要器件43.2电路原理图74软件设计84.1DS18B20的单线协议和命令84.2程序流程104.3程序说明115总结14参考文献14基于DS18B20的数字温度计设计摘要单片机已经在测控领域中获得了广泛的应用,它除了可以测量电信号以外,还可以用于温度、湿度等非电信号的测量,能独立工作的单片机温度监测、温度控制系统已经广泛应用于很多领域。关键词 单片机 温度计 温度1 实例说明单片机的接口信号是数字电信号,要想用单片机获取温度这类非电信号的信息,毫无疑问,必须使用
2、温度传感器。温度传感器的作用是将温度信息转换为电流或电压输出,如果转换后的电流或电压输出是模拟信号,那么还必须进行 A/D 转换,以满足单片机接口的需要。传统的温度检测大多以热敏电阻为温度传感器,但热敏电阻的可靠性差、测量温度准确率低,而且必须经过专门的接口电路转换成数字信号后才能由单片机进行处理。本例将采用一种数字温度传感器来实现基于51单片机的数字温度设计,此传感器芯片的使用时本例软、硬件设计的重点。2 设计思路分析设计51单片机数字温度计系统时,需要考虑下面3个方面的内容。l 选择合适的温度传感器芯片。显然,本例中的核心器件是单片机和温度传感器,单片机采用常用的51单片机即可,而温度传感
3、器的选择则需慎重。l 单片机很温度传感器的接口电路设计。l 控制温度出传感器实现温度信息采集及数据传输软件设计。2.1 温度传感器DS18B20经过综合考虑,本例选用美国达拉斯公司的单线数字温度传感器芯片DS18B20作为温度传感器。与传统的热敏电阻有所不同,DS18B20克直接将被测温度转化成船行数字信号,以供单片机处理,它还具有微型化、低功耗、高性能、抗干扰强等优点。通过编程,DS18B20可以实现9-12位温度读数。信息经过单线借口送入DS18B20或从DS18B20送出,因此从微处理器到DS18B20仅需连接一条信号线和地线。读、写和执行温度变换所需的电源可以由数据线本身提供,而不需要
4、外部电源。每片DS18B20在出厂时都没有唯一的产品序列号,此序列号存放在他的内部ROM中,微处理器通过简单的协议就能识别这些序列号,因此多个DS18B20可以挂接于同一条单线总线上,这允许在许多不同的地方放置温度传感器,特别适合于构成温度测控系统。总而言之,DS18B20具有以下特点。l 采用单线技术,与单片机通信只需一个引脚;l 通过识别芯片各自唯一的产品序列号从而实现单线多挂接,简化了分布式温度检测的应用;l 实际应用中不需要外部任何元器件即可实现测温;l 可通过数据线供电,电压范围3-5.5V;l 不需要备份电源;l 测量范围为-55- +125。C,在-10- +85。C范围内误差为
5、0、5。C;l 数字温度计的分辨率用户可以从9位到12位选择,可配置实现9-12位的温度读数;l 将12位的温度值转换为数字所需时间不超过750MS;l 用户定义的、非易失性的温度告警设置,用户可自行设定告警的上下限温度;l 告警寻找命令可以识别和寻址那些温度超出预设高警界限的器件。2.2 单线技术目前常用的微机和外设之间数据传输的串行总线由I2C总线、SPI总线等,其中I2C总线采用同步串行两线方式,而SPI总线采用同步串行三线方式。这两种总线需要至少两根或两根以上的信号线。美国达拉斯半导体公司推出了一项特有的单线技术。该技术与上述总线不同,它采用单根信号线,既可传输时钟,又能传输数据,而且
6、数据传输是双向的,因此这种单线技术具有线路简单、硬件开销少、成本低廉、便于扩展的优点。单线技术适用于单主机系统,单主机能够控制一个或多个从机设备。主机可以视为控制器,从机可以是单线器件,它们之间的数据交换、控制都由这根线完成。主机或从机通过一个漏极开路获三态端口连至该数据线,以允许设备再不发送数据时能够释放该线,而让其他设备使用。单线通常要求外接一个约5k的上拉电阻,这样,当该线闲置时,其状态为高电平。主机和从机之间的通信主要分为3个步骤:初始化单线器件、识别单线器件和单线数据传输。由于只有一根线通信,所以它们必须是严格的主从结构,只有主机呼叫从机,从机才能应答,主机访问每个单线器件都必须严格
7、遵循单线命令序列,即遵守上述3个步骤地顺序,如果命令序列混乱,单线器件将不会响应逐级。所有的单线器件都要遵循严格的协议,以保证数据的完整性。1-wire协议有复位脉冲、应答脉冲、写0、写1、读0、读1这几种信号类型组成。这些信号中,除了应答脉冲,其他均由主机发起,并且所有命令和数据都是字节的低位在前。3 硬件电路设计本例的核心器件是单片机和单线数字温度传感器,单线器件和单片机的接口只需一根信号线,所以本例的硬件电路十分简单。本例略去了将采集到的温度值通过数码管显示的电路。3.1 主要器件 单片机选用Atmel公司常用的单片机芯片AT89C52,它完全可以满足本例中采集、控制和数据处理的需要。
8、温度传感器选用达拉斯公司的单线数字温度传感芯片DS18B20,其引脚分布如图。 引脚功能说明如下。NC(1、2、6、6、7、8脚):空引脚,悬空不使用。VDD(3脚):可选电源脚,店员电压范围3-5、5V。当工作于寄生电源时,此引脚必须接地。DQ(4脚):数据输入/输出脚。漏极开路,常态下高电平。DS18B20内部有4个主要部件:64位激光ROM、温度传感器、非易失性温度告警触发器和配置寄生器。每个DS18B20都有一个唯一的64位ROM编码,它存放在64位激光ROM中。代码的前8位是单线产品系列编码,接着的48位是唯一的产品序列号,最后8位是前面56位编码的CRC校验值,如图所示。 64位激
9、光ROM内容8位CRC校演码48位产品序列号8位产品系列编码MSB LSB MSB LSB MSB LSBCRX的等效多项式函数:CRC=X8+X5+X4+164位激光ROM中的8位CRC值即由此多项式函数产生。主机可以通过“读ROM命令”读取64位ROM的前56位,然后也按此多项式函数计算出CRC的值,并把它与读出的存放DS18B20激光ROM内的CRC值进行比较,从而决定ROM的数据是否已被主机正确接受。CRC值的比较和是否继续操作都由主机来决定。DS18B20的存储器结构如图。中间结果暂存RAM 字节温度值低位字节0温度值高位字节1TH/用户使用字节12TL/用户使用字节23配置字节4保
10、留字节5保留字节6保留字节7CPC字节8非易失性电可擦除RAMTH/用户使用字节1TH/用户使用字节2配置字节 存储器由一个中间结果暂存RAM和一个非易失性电可擦除(E2)RAM组成,后者存储高、低温触发器THTL和配置寄存器。暂存存储器有助于在单线通信时确保数据的完整性,数据首先写入暂存存储器,在那里,它可以被读出效验,效验之后再将数据传送到非易失性E2RAM中。这一过程确保了修改存储器时数据的完整性。暂存存储器的头2个字结为测得温度信息的低位和高位字节;第3、4字节食TH和TL的易失性拷贝,在每一次上电复位时都会被刷新;第5个字节是配置寄存器的易失性拷贝,在上电复位时也会被刷新;接着的3字
11、节为内部计算使用;第9个字节为前面所由8个字节的CRC校验值。暂存器的第5字节是配置寄存器,可以通过相应的写命令进行配置,其内容如下。0R1R011111MSB LSB其中,R0和R1时温度值分辨率位,可按下表进行配置。 温度值分辨率配置表R1R0分辨率最大转换时间009位9375ms(tconv/8)0110位187.50ms(tconv/4)1011位375ms(tconv/2)1112位750ms(conv)DS18B20的核心功能部件是他的数字温度传感器,如上所述,它的分辨率可配置为9、10、11或12位,出厂默认设置是12位分辨率,他们对应的温度值分辨率分别为0、5。C、0、25。C
12、、0、125。C何0、0625。C。温度信息的低位、高位字节内容中还包括了符号位S和而今滞销书部分,具体形式如下。低位字节:232221202-12-22-32-4MSB LSB高位字节:SSSSS262524MSB LSB这是12位分辨率的情况,如果配置为低的分辨率,则其中五意义位为0。实测温度和数字输出的对应关系如表所示。 温度值分辨率配置表温度数字输出(二进制)数字输出(十六进制)+125.C0000 0111 1101 000007D0H+85.C0000 0101 0101 00000550H+25.0625.C0000 0001 1001 00000191H+10.125.C000
13、0 0000 1010 001000A2h+0.5.C0000 0000 0000 10000008H0.C0000 0000 0000 00000000H-0.5.C1111 1111 1111 1000FFF8H-10.125.C1111 1111 0101 1110FF5EH-25.0625.C1111 1110 0110 1111FF6FH-55.C1111 1100 1001 0000FC90H再DS18B20完成温度变换之后,温度值与村处在TH和TL内的告警出发值相比较。由于这些是8位寄存器,所以9-12位在比较时忽略。TH和TL的最高位直接对应16位温度计存器的符号位。如果温度测
14、量的结果高于TH和TL,那么器件内告警标志将置位,每次温度测量都会更新此标志。只要告警标志置位,DS18B20就将响应告警搜索命令,这也就允许但献上多个DS18B20同时进行温度测量,即使某处温度越限,也可以识别出正在发告警的器件。3.2电路原理图及说明U1为单片机AT89C52,它的P0和P2口数码管电路连接,以控制温度的数字显示。P3、7和DS18B20的引脚DQ连接,作为单一数据线。单片机的工作时钟频率为11.0592MHz,这决定了指令的运行时间,在软件设计中将根据此时间编写各种延时程序。U2即为温度传感芯片DS18B20,本例中只使用了一个单线器件,R2为单线DQ的上拉电阻。DS18
15、B20有两种供电方式:寄生电源和外部电源。寄生电源简单说起来就是器件从单线数据线中“窃取”电源,在信号线为高电平的时间周期内,把能量储存在内部的电容器中,在单信号线为低电平的时间期内断开此电源,直到信号线变为高电平,重新接上寄生电源为止。寄生电源有2个优点。l 可实现远程温度检测而无需本地电源;l 没有正常电源的条件下也可以读ROM。为了使DS18B20能完成准确的温度变幻,当温度变换发生时,DQ线上必须提供足够的功率。因为DS18B20的工作电流高达1.5Ma,4.7k得上拉电阻将使得DQ线没有足够的驱动能力。如果有多个DS18B20挂接,而且同时变换时,这一问题将变得更为突出。解决的方法是
16、在发生温度变换时,再DQ线上提供强得上拉,比如用MOSFET管把DQ线直接拉到电源。当使用寄生电源方式时,VDD引脚必须连接到地。DS18B20得另一种供电方式是将VDD引脚接外部电源。这种方法的优点是在DQ线上不要求强的上拉。总线上的主机的温度变换期间不需要以知识DQ线保持高电平,这就允许在变换时间内其它数据在单线上传颂。而且,在单线上可以放置多个DS18B20。如果他们都使用外部电源,那么通过发起“跳过ROM”命令,接着执行“温度变换”命令就可以同时完成各自的温度变换。注意,采用外部电源这种方式时,GND引脚不可悬空。本例虽然只使用了一片DS18B20,但由于不存在远程温度测量的考虑,所以
17、为了简单起见,仍然采用外部供电的方式,如图。测温电缆建议采用屏蔽4芯双绞线,其中一对接地线与信号线,另一对界VCC和地线。屏蔽层再源端点接地。4 软件设计软件设计是本文的重点和难点。其中的关键在于对DS18B20得使用。DS18B20时1-wire单线器件,它在一根数据线上实现数据的双向传输,这就需要一定得的写以来对读写数据提出严格的实时序要求,而AT89C52单片机并不支持单线传输。因此,必须采用软件的方法来模拟单线协议时序。4.1 DS18B20得单线协议和命令DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。主机操作单线器件DS18B20必须遵循下面的顺序。l 初始化单线
18、总线上的所有操作均从初始化开始。初始化过程如下:主机通过拉低单线480以上,产生复位脉冲,然后释放该线,进入Rx接受模式。主机释放总线时,会产生一个上升沿,单线器件DS18B20检测到该上升沿后,延时15-60,通过拉低总线60-240来产生应答脉冲。主机接收到从机得应答脉冲后,说明有单线器件在线。l ROM操作命令一旦总线主机检测到应答脉冲,便可以发起ROM操作命令。共有5位ROM操作命令,如图。 ROM操作命令命令类型命令字节功能说明Read Rom(读ROM)33H此命令读取激光ROM中的64为,只能用于总线上单个DS18B20其间的情况,多挂接则会发生数据冲突Match Rom(匹配R
19、OM)55H此命令后跟64位ROM序列号,寻址多挂接总线上对应DS18B20,只有序列号完全匹配的DS18B20才能响应后面的内存操作,其他不匹配的将等待复位脉冲,次命令可用于单挂接或多挂接总线Skip Rom(跳过ROM)CCH此命令用于但挂接总线时,可以无需提供64位ROM序列号机可运行内存操作命令。如果总线上挂接多个DS18B20,并且在此命令后执行读命令Search ROM(搜索ROM)F0H主机调用此命令,通过一个排除法过程,可以识别出总线上所有的ROM序列号Alarm Search(告警搜索)ECH此命令流程和Search Rom命令,但是DS18B20只有在最近的一次温度测量时满
20、足了告警触发条件,才会响应此命令 内存操作命令命令类型命令字节功能说明WriteScratchpad(写暂存器)4EH此命令次写暂存其中地址2-地址4的3个字节在发起复位脉冲之前,3个字节都必须要写Read Scratchpad(读暂存器)BEH此命令读取暂存储器内容,从字节0一直读取到字节8,主机可以随时发起复位脉冲已停止此操作Copy Scratchpad(副职暂存器)48H此命令将暂存器中内容复制进E2RAM以便将温度告警触发字节存入非易失性内存。如果在命令后主机产生读时隙,那么只要器件在进行复制就会输出0,复制完成后,再输入1Convert T(温度转换)44H此命令开始温度转换操作,
21、如果在此命令后主机产生读时隙,那么只要器件在进行温度转换就会输出0,转换完成后,再输入1Recall E2(重调E2存储器)B8H将存储在E2RAM中温度告警触发值和配置寄存器值重新拷贝到暂存器中,此重调操作在DS18B20加电时自动产生Read Power Supply(读供电方式)B4H主机发起此命令后的每个读数据时隙内,DS18B20挥发信号通知他的供电方式:0为寄生电源方式,1为外部供电方式l 数据处理DS18B20要求有严格的时序来保证数据的完整性。在单线DQ上,存在复位脉冲、写:“0”、写“1”、读“0”、读“1”几种信号类型。其中,除了应答脉冲之外,均由主机产生。复位和应答麦冲在
22、前文中已经介绍,这里不再阐述,而数据位的读和写则是通过使用度和写时隙实现的。首先来看写时隙,当主机将数据线从高电平拉至低电平时,产生写时隙,有两种类型的写时隙:写“1”和写“0”。所有写时隙必须在60vs以上,各个写时隙之间必须保证最短1得恢复时间。DS18B20在DQ线变低后的15-60vs的窗口对DQ线进行采样,如果为高电平,就写“1”;如果为低电平,就写“0”。对于主机产生写“1”时隙的情况,数据线必须先被拉低,然后释放,再写时隙开始后的15vs,允许DQ线拉至高电平,对于主机产生写“0”时隙的情况,DQ线必须被拉至低电平且至少保持低点评60vs。再来看读时隙,当主机从DS18B20读数
23、据时,把数据线从高电平拉至低电平,产生读时隙。数据线DQ必须保持低电平至少1vs,来自DS18B20得输出数据在读时隙下降沿之后15vs内有效。因此,在此15vs内,主机必须停止将DQ引脚至低。在读时隙结束时,DQ引脚将通过外部上拉电阻拉回至高电平。所有的读时隙最短必须持续60vs,各个读时隙之间必须保持最短1vs的恢复时间。所有的读写时隙至少需要60vs,且每个独立的时隙之间至少需要1vs的恢复时间。在写时隙中,主机将在拉低总线15vs内释放总线,并向DS18B20写“1”。若主机拉低总线后能保持至少60vs的低电平,则向单总线器件写“0”。 DS18B20仅在主机发出读时隙时才向主机传输数
24、据,所以,当主机向DS18B20发出读数据命令后,必须马上产生读时隙,以便DS18B20能传输数据。4.2程序流程单片机实现温度转换读取温度数值的流程图,如图4.3 程序说明#include DigThermo.h/* 延时t毫秒 */void delay(uint t)uint i;while(t-)/* 对于11.0592M时钟,约延时1ms */for (i=0;i0)i-;DQ = 1;/ 产生上升沿i = 4;while (i0)i-;/* 等待应答脉冲 */void RxWait(void)uint i;while(DQ);while(DQ);/ 检测到应答脉冲 i = 4;whi
25、le (i0)i-;/* 读取数据的一位,满足读时隙要求 */ bit RdBit(void)uint i;bit b;DQ = 0;i+;DQ = 1;i+;i+;/ 延时15us以上,读时隙下降沿后15us,DS18B20输出数据才有效b = DQ;i = 8;while(i0) i-;return (b);/* 读取数据的一个字节 */uchar RdByte(void)uchar i,j,b;b = 0;for (i=1;i=8;i+)j = RdBit();b = (j1);return(b);/* 写数据的一个字节,满足写1和写0的时隙要求 */void WrByte(uchar
26、b)uint i;uchar j;bit btmp;for(j=1;j1;/ 取下一位(由低位向高位)if (btmp)/* 写1 */DQ = 0;i+;i+;/ 延时,使得15us以内拉高DQ = 1;i = 8;while(i0) i-;/ 整个写1时隙不低于60us else/* 写0 */DQ = 0;i = 8;while(i0) i-;/ 保持低在60us到120us之间DQ = 1;i+;i+;/* 启动温度转换 */void convert(void)TxReset();/ 产生复位脉冲,初始化DS18B20RxWait();/ 等待DS18B20给出应答脉冲delay(1)
27、;/ 延时WrByte(0xcc);/ skip rom 命令WrByte(0x44);/ convert T 命令/* 读取温度值 */void RdTemp(void)TxReset();/ 产生复位脉冲,初始化DS18B20 RxWait();/ 等待DS18B20给出应答脉冲delay(1);/ 延时WrByte(0xcc);/ skip rom 命令WrByte(0xbe);/ read scratchpad 命令tplsb = RdByte();/ 温度值低位字节(其中低4位为二进制的“小数”部分)tpmsb = RdByte();/ 高位值高位字节(其中高5位为符号位)/* 主程序,读取的温度值最终存放在tplsb和tpmsb变量中。 tplsb其中低4位为二进制的“小数”部分;tpmsb其中高 5位为符号位。真正通过数码管输出时,需要进行到十进 制有符号实数(包括小数部分)的转换。 */void main(void)dodelay(1);/ 延时1msconvert();/ 启动温度转换,需要750msdelay(1000);/ 延时1sRdTemp();/ 读取温度while(1);5 总结数据采集处理时51单片机的常用领域,除了电信号以外,单片机还可以利用传感器实现对非电信号的采集。参考文献51单片机C语言程序设计实例 戴佳 戴卫恒16