(南京师范大学电气与电子工程学院 210042)
摘要 DS18B20是美国DALLAS半导体公司生产的1-WIRE数字温度传感器,本文详细介绍它的主要技术性能及在单点温控系统中的应用。 关键词 DS18B20 单片机 1-WIRE 温度传感器
一 概述
智能温度传感器DS18B20将温度传感器、A/D传感器、寄存器、接口电路集成在一个芯片中。可实现直接数字化输出、测试及控制功能强、传输距离远、抗干扰能力强、微型化、微功耗、易于配微控制器(MCU)或微型计算机进行数据处理及温度控制。在很多智能化的温度传感器中,大多使用同步串行总线技术,如 (Philips)、SMBus(Intel) 、SPI(Motorola)、 Microwire/Plus(NSC)等串行总线协议,而DS18B20采用的是1-WIRE总线协议。1-WIRE是DALLAS公司的一项专有技术,它采用一根信号线实现信号的双向传输,具有接口简单,节省I/O口线,便于扩展和维护等优点。下面介绍其在单点温控系统中的应用。 本系统主要应用1-WIRE集成数字温度传感器DS18B20实时检测管道温度,并根据按键设定的温度值,由单片机AT89C2051通过步进电机去控制阀位,实现温度控制输出。其中: MAX7219为美信公司的8位LED串行显示驱动芯片;P1.0、P1.1、P1.2、P1.3接步进电机驱动电路,对应步进电机的A、B、C、D相。 下面详细介绍DS18B20及其与单片机的接口。
二.DS18B20及其与单片机的接口
1.DS18B20的引脚及内部结构
下面为DS18B20采用3脚PR-35封装的引脚及内部结构方块图。 DS18B20的测温范围为-55℃— +125℃,在-10℃—+85℃范围内,可确保测量误差不超过±0.5℃;并且转换精度可编程控制。 芯片出厂时为默认12位转换精度。DS18B20工作在9位、10位、11位、和12位模式时的温度分辨力依次为0.5℃、0.25℃、0.125℃、0.0625℃。当DS18B20 接收到温度转换命令(44H)后,开始转换,转换完成后的温度以16位带符号扩展的二进制补码形式,存储在scratchpad RAM中的第0,1字节。在执行读scratchpad RAM命令(0BEH)后,可将这两字节的温度值通过单总线传给主CPU,高字节的符号位代表温度值为正还是为负。 单总线要求外接一个约5K的上拉电阻;这样不管什么原因,如果传输过程中需要暂时挂起,且要求传输过程还能继续的话,则总线在恢复时间处于空闲状态(高电平)。
2.程序命令时序
典型的总线命令序列如下: 第一步: 初始化 第二步: ROM命令(跟随需要交换的数据) 第三步: 功能命令 (跟随需要交换的数据) 每次访问单总线器件,必须严格遵守这个命令序列,如果出现序列混乱,则一线器件不会响应单片机。 基于一线上的所有传输过程都时以初始化开始的,初始化过程由单片机发出的复位脉冲和DS18B20的响应的应答脉冲组成。应答脉冲使单片机知道,总线上有1-WIRE设备,且准备就绪。系统中CPU采用6MHz晶振,DQ端为P3.3。 RESET子程序 RESET:CLR P3.3 ;拉低总线至少480us,否则在温度较高时会无法完成复位。 MOV R2,#130 ;在调试过程中发现延时520uS,测温值可到110℃,达到 D1: DJNZ R2,D1 ;DS18B20的技术参数。 SETB P3.3 ;释放总线 MOV R2,#20 D4: DJNZ R2,D4 JB P3.3,D0 ;总线若为低,则复位成功;否则复位失败,返回。 MOV R2,#110 D2: DJNZ R2,D2 ;延时等待复位过程结束 RET 在单片机检测到应答(presence)脉冲后,就可以发ROM命令,命令长度为8位。该命令字要通过1-WIRE通信协议规定的严格的写时隙(Write time slots),逐位写到一线上,DS18B20会自动接收到这些命令,并准备响应相应的操作。本系统是单点使用,故只须用到SKIM ROM COMMAND(0CCH),这样单片机可以同时访问总线上的所有设备,而无须发出任何ROM代码信息。例如,单片机在发出SKIP ROM命令后跟随CONVENT T (功能 COMMAND) 即启动温度转换命令(44H),值得注意的是:若SKIP ROM 命令后跟的是READ SCRATCHPAD(0BEH)命令(包含其他读操作命令),则该系统只能用于单点系统,否则将由于多个节点都响应该命令而引起数据冲突。 在单片机发出ROM 命令后,接着就可以发送功能命令,然后DS18B20就开始执行命令,本单点应用系统中主要用到CONVENT T和READ SCRATCHPAD。在执行READ SCRATCHPAD命令时,单片机可以通过发送RESET脉冲在任何时候中断数据传输。
3.读、写时序
在对DS18B20进行ROM或功能命令字的写入及对其进行读出操作时,都要求按照严格的1-WIRE通信协议(时序),以保证数据的完整性。其中有写0、写1、读0和读1时序。在这些时序中,都由单片机发出同步信号。并且所有的命令字和数据在传输的过程中都是字节的LSb在前。这一点于基于其他总线协议的串行通信格式(比如SPI、 等)不同,它们通常是字节的MSb在前。 3.1 读时隙 DS18B20仅在单片机发送读时隙(READ SLOT)时才发送数据,所以单片机在发送READ SCRATCHPAD命令后必须立即产生读时隙。所有的读时隙都要至少保持60us,并且在两个读时隙间至少要有1us的恢复时间。单片机通过把总线拉低至少1us来做为一个读时隙的开始,DS18B20的输出数据在读时序下降沿过后15us内有效,所以在此期间单片机应释放总线,进入读数据状态以便读取数据,15us后一线总线被上拉电阻拉为高电平,程序延时等待读时隙结束。 读一字节子程序 出口条件:读出字节数据在A中 RE1W:MOV R6,#8 ;从1-Wire总线读出1字节数据的子程序 RE1:CLR P3.3 ;拉低总线,发出读时序 NOP SETB P3.3 ;释放总线,等待输入 MOV R4,#02H RE2:DJNZ R4,RE2 MOV C,P3.3 ;通过RRC A指令,从低位开始依次读入数据 RRC A MOV R5,#20 RE3:DJNZ R5,RE3 ;延时,等待读时隙结束 SETB P3.3 ;恢复时间 DJNZ R6,RE1 SETB P3.3 RET 3.2 写时隙 写时隙也有两种,写0和写1。主要用于单片机通过1-WIRE总线向DS18B20写入命令字。所有的写时隙也至少要保持60us,且在两个写周期之间至少要有1us的恢复时间。 单片机通过拉低一线总线至少1us来产生写时隙。当写1时,单片机拉低总线,然后必须在15us内释放总线,总线被上拉电阻拉高。当写0时,单片机拉低总线后,然后必须继续保持总线为低(至少60us)。DS18B20在单片机发出写时隙后的15—60us之间开始采样,在这期间内,若总线为高,则1被写入进DS18B20;若总线为低,则0被写入DS18B20。 写一字节子程序 入口条件 :写入的字节在A WR1W:MOV R3,#08H ;向1-Wire总线写入1字节数据的位数 W1: SETB P3.3 ;恢复时间 MOV R4,#02 RRC A ;通过RRC A指令依次向总线写入1字节的数据 CLR P3.3 ;拉低总线,发出写时隙 W2:DJNZ R4,W2 MOV P3.3,C MOV R4,#20 W3:DJNZ R4,W3 DJNZ R3,W1 SETB P3.3 RET
4.DS18B20的调试程序如下:
MAIN: LCALL RESET ;复位总线 STEP 1 MOV A,#0CCH ;发送skip ROM command LCALL WR1W ;调用WE1W(WRITE 1 WIRE)子程序 MOV A,#44H ;发CONVENT T命令字(44H)启动转换 LCALL WR1W 在启动转换后,单片机可通过发送读时隙,来判断温度转换是否结束.DS18B20会做出响应,发送0表示转换过程还在进行;发送1表示已经转换完毕.当然也可以根据DS18B20的典型转换时间,来调试出合适的延时程序.下面的CHA子程序,来查看是否转换完毕. CHA: CPL P3.3 NOP SETB P3.3 MOV R4,#02 M1:DJNZ R4,M1 CLR C ORL C,P3.3 MOV R5,#15 M2:DJNZ R5,M2 SETB P3.3 JNC CHA LCALL RESET MOV A,#0CCH ;发送SKIP ROM COMMAND LCALL WR1W MOV A,#0BEH ;发送READ SCRATHPAD COMMAND LCALL WR1W LCALL RE1W MOV 30H,A ;转换后的低位保存在30H单元 LCALL RE1W MOV 31H,A ;转换后的高位保存在31H单元 LCALL RESET ;调用RESET子程序以结束读取数据 MOV A,31H ;判断温度正负,并处理数据 JNB ACC.7,ZHENG ;符号位为零,表示为正.跳至ZHENG处理程序. CLR C ;负温度时,把读到的补码数变为原码 MOV A,30H SUBB A,#01H CPL A MOV 30H,A MOV A,31H SUBB A,#00 CPL A MOV 31H,A : SJMP GONG ;设置负标志位,或显示符号,可针对不同应用系统进行编写 ZHENG: : ;设置正标志位,或显示符号 GONG:MOV A,30H ;处理整数部分低字节数据 ANL A,#0F0H ;暂忽略低4位小数 ORL A,31H SWAP A MOV R0,A ;R0是CON_BCD(转换为非压缩BCD 码)子程序的数据入口 LCALL COV_BCD : ;32H、33H及34H单元中分别存放了转换后的非压缩BCD : ;码可供使用 MOV 20H,30H ;处理小数部分(即30H低4位)程序如下 MOV A,#00H JNB 00H,C1 ADD A,#06H C1:JNB 01H,C2 ADD A,#0CH C2:JNB 02H,C3 ADD A,#19H C3:JNB 03H,C4 ADD A,#32H C4:MOV R0,A LCALL COV_BCD ;考虑小数点后第二位数字四设五入的进位,精度0.05 CLR C ;本程序采用12位精度,DS18B20分辨力为0.0625 MOV A,34H ;本程序处理时可保证精度为0.05 SUBB A,#05H MOV A,33H JC YU ADD A,#01H YU: : ;A中为小数值,可编程放进相应的显示单元入口 RET COV_BCD: MOV R1,#32H ;转换为非压缩型BCD码子程序 MOV A,R0 ;设置程序入口 MOV B,#100 DIV AB MOV @R1,A ;百位暂存于32H单元 INC R1 MOV A,#10 XCH A,B DIV AB MOV @R1,A ;十位暂存于33H单元 INC R1 MOV @R1,B ;个位暂存于34单元 RET
参考文献 1.MAXIM 产品资料全集, 2002 2.智能化集成温度传感器原理及应用.沙占有主编.(M) 北京:机械工业出版社,2002 |