DS1820及其高精度温度测量的实现.docx
- 文档编号:30756955
- 上传时间:2023-08-20
- 格式:DOCX
- 页数:10
- 大小:20.86KB
DS1820及其高精度温度测量的实现.docx
《DS1820及其高精度温度测量的实现.docx》由会员分享,可在线阅读,更多相关《DS1820及其高精度温度测量的实现.docx(10页珍藏版)》请在冰豆网上搜索。
DS1820及其高精度温度测量的实现
DS1820及其高精度温度测量的实现
作者:
admin文章来源:
本站原创点击数:
2489更新时间:
2006-1-1
摘要:
结合数字温度传感器DS1820在水轮发电机组轴瓦温度测量中的应用经验,提出了用DS1820实现轴瓦温度高精度、高可靠性测量的可行性方案。
关键词:
数字温度传感器DS1820高精度温度测量
在传统的模拟信号远距离温度测量系统中,需要很好的解决引线误差补偿问题、多点测量切换误差问题和放大电路零点漂移误差问题等技术问题,才能够达到较高的测量精度。
我们在为某水电站开发水轮发电机组轴瓦温度实时监测系统时,为了克服上面提到的三个问题,采用了新型数字温度传感器DS1820,在对其测温原理进行详细分析的基础上,提出了提高DS1820测量精度的方法,使DS1820的测量精度由0.5℃提高到0.1℃以上,取得了良好的测温效果。
1DS1820简介
DS1820是美国DALLAS半导体公司生产的可组网数字式温度传感器,在其内部使用了在板(ON-B0ARD专利技术。
全部传感元件及转换电路集成在形如一只三极管的集成电路内。
与其它温度传感器相比,DS1820具有以下特性:
(1独特的单线接口方式,DS1820在与微处理器连接时仅需要一条口线即可实现微处理器与DS1820的双向通讯。
2DS1820支持多点组网功能,多个DS1820可以并联在唯一的三线上,实现多点测温。
(3DS1820在使用中不需要任何外围元件。
(4温范围-55℃~+125℃,固有测温分辨率0.5℃。
(5测量结果以9位数字量方式串行传送。
DS1820内部结构框图如图1所示。
DS1820测温原理如图2所示。
图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。
高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。
计数器1和温度寄存器被预置在-55℃所对应的一个基数值。
计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。
图2中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。
在正常测温情况下,DS1820的测温分辩率为0.5℃以9位数据格式表示,其中最低有效位(LSB由比较器进行0.25℃比较,当计数器1中的余值转化成温度后低于0.25℃时,清除温度寄存器的最低位(LSB,当计数器1中的余值转化成温度后高于0.25℃,置位温度寄存器的最低位(LSB,如-25.5℃对应的9位数据格式如下:
2提高DS1820测温精度的途径
2.1DS1820高精度测温的理论依据
DS1820正常使用时的测温分辨率为0.5℃,这对于水轮发电机组轴瓦温度监测来讲略显不足,在对DS1820测温原理详细分析的基础上,我们采取直接读取DS1820内部暂存寄存器的方法,将DS1820的测温分辨率提高到0.1℃~0.01℃.
DS1820内部暂存寄存器的分布如表1所示,其中第7字节存放的是当温度寄存器停止增值时计数器1的计数剩余值,第8字节存放的是每
度所对应的计数值,这样,我们就可以通过下面的方法获得高分辨率的温度测量结果。
首先用DS1820提供的读暂存寄存器指令(BEH读出以0.5℃为分辨率的温度测量结果,然后切去测量结果中的最低有效位(LSB,得到所测实际温度整数部分T整数,然后再用BEH指令读取计数器1的计数剩余值M剩余和每度计数值M每度,考虑到DS1820测量温度的整数部分以0.25℃、0.75℃为进位界限的关系,实际温度T实际可用下式计算得到:
T实际=(T整数-0.25℃+(M每度-M剩余/M每度
2.2测量数据比较
表2为采用直接读取测温结果方法和采用计算方法得到的测温数据比较,通过比较可以看出,计算方法在DS1820测温中不仅是可行的,也可以大大的提高DS1820的测温分辨率。
3DS1820使用中注意事项
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硬件连接和软件设计时也要给予一定的重视。
参考文献
1何立民.单片机应用技术选编(1~6.北京:
北京航空航天大学出版社,1997
2D.斯托尔.工业抗干扰的理论与实践.北京:
国防工业出版社,1985
3DallasSemiconductordatabooks.DallasSemiconductorCorporation1995
附录:
利用AT89C2051单片机与DS18B20和两个数码管显示温度(51汇编
;这是关于DS18B20的读写程序,数据脚P3.4,晶振12MHZ
;温度传感器18B20汇编程序,采用器件默认的12位转化,最大转化时间750微秒
;可以将检测到的温度直接显示到连接到AT89C2051的两个数码管上
;显示温度00到99度,很准确哦~~无需校正!
ORG0000H
;单片机内存分配申明!
TEMPER_LEQU29H;用于保存读出温度的低8位
TEMPER_HEQU28H;用于保存读出温度的高8位
FLAG1EQU38H;是否检测到DS18B20标志位
A_BITEQU20H;数码管个位数存放内存位置
B_BITEQU21H;数码管十位数存放内存位置
MAIN:
LCALLGET_TEMPER;调用读温度子程序
;显示范围00到99度,显示精度为1度
;因为12位转化时每一位的精度为0.0625度,我们不要求显示小数所以可以抛弃29H的低4位;将28H中的低4位移入29H中的高4位,这样获得一个新字节,这个字节就是实际测量获得的温度;这个转化温度的方法非常简洁,无需乘于0.0625系数
MOVA,29H
MOVC,40;将28H中的最低位移入C
RRCA
MOVC,41H
RRCA
MOVC,42H
RRCA
MOVC,43H
RRCA
MOV29H,A
LCALLDISPLAY;调用数码管显示子程序
AJMPMAIN
;这是DS18B20复位初始化子程序
INIT_1820:
SETBP3.4
NOP
CLRP3.4
;主机发出延时537微秒的复位低脉冲
MOVR1,#3
TSR1:
MOVR0,#107
DJNZR0,$
DJNZR1,TSR1
SETBP3.4;然后拉高数据线
NOP
NOP
NOP
MOVR0,#25H
TSR2:
JNBP3.4,TSR3;等待DS18B20回应
DJNZR0,TSR2;延时
LJMPTSR4
TSR3:
SETBFLAG1;置标志位,表示DS1820存在
LJMPTSR5
TSR4:
CLRFLAG1;清标志位,表示DS1820不存在
LJMPTSR7
TSR5:
MOVR0,#117
TSR6:
DJNZR0,TSR6;时序要求延时一段时间
TSR7:
SETBP3.4
RET
;读出转换后的温度值
GET_TEMPER:
SETBP3.4
LCALLINIT_1820;先复位DS18B20
JBFLAG1,TSS2
RET;判断DS1820是否存在?
若DS18B20不存在则返回
TSS2:
MOVA,#0CCH;跳过ROM匹配
LCALLWRITE_1820
MOVA,#44H;发出温度转换命令
LCALLWRITE_1820
;这里通过调用显示子程序实现延时一段时间,等待AD转换结束,12位的话750微秒LCALLDISPLAY
LCALLINIT_1820;准备读温度前先复位
MOVA,#0CCH;跳过ROM匹配
LCALLWRITE_1820
MOVA,#0BEH;发出读温度命令
LCALLWRITE_1820
LCALLREAD_18200;将读出的温度数据保存到35H/36H
RET
;写DS18B20的子程序(有具体的时序要求
WRITE_1820:
MOVR2,#8;一共8位数据
CLRC
WR1:
CLRP3.4
MOVR3,#6
DJNZR3,$
RRCA
MOVP3.4,C
MOVR3,#23
DJNZR3,$
SETBP3.4
NOP
DJNZR2,WR1
SETBP3.4
RET
;读DS18B20的程序,从DS18B20中读出两个字节的温度数据
READ_18200:
MOVR4,#2;将温度高位和低位从DS18B20中读出
MOVR1,#29H;低位存入29H(TEMPER_L,高位存入28H(TEMPER_HRE00:
MOVR2,#8;数据一共有8位
RE01:
CLRC
SETBP3.4
NOP
NOP
CLRP3.4
NOP
NOP
NOP
SETBP3.4
MOVR3,#9
RE10:
DJNZR3,RE10
MOVC,P3.4
MOVR3,#23
RE20:
DJNZR3,RE20
RRCA
DJNZR2,RE01
MOV@R1,A
DECR1
DJNZR4,RE00
RET
;显示子程序
DISPLAY:
MOVA,29H;将29H中的十六进制数转换成10进制MOVB,#10;10进制/10=10进制
DIVAB
MOVB_BIT,A;十位在a
MOVA_BIT,B;个位在b
MOVDPTR,#NUMTAB;指定查表启始地址
MOVR0,#4
DPL1:
MOVR1,#250;显示1000次
DPLOP:
MOVA,A_BIT;取个位数
MOVCA,@A+DPTR;查个位数的7段代码
MOVP1,A;送出个位的7段代码
CLRP3.7;开个位显示
ACALLD1MS;显示1ms
SETBP3.7
MOVA,B_BIT;取十位数
MOVCA,@A+DPTR;查十位数的7段代码
MOVP1,A;送出十位的7段代码
CLRP3.5;开十位显示
ACALLD1MS;显示1ms
SETBP3.5
DJNZR1,DPLOP;250次没完循环
DJNZR0,DPL1;4个250次没完循环
RET
;1MS延时(按12MHZ算
D1MS:
MOVR7,#80
DJNZR7,$
RET
;7段数码管0~9数字的共阳显示代码
NUMTAB:
DB081H,0CFH,092H,086H,0CCH,0A4H,0A0H,08FH,080H,084HEND
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DS1820 及其 高精度 温度 测量 实现