温度传感器DS18B20
- 格式:ppt
- 大小:165.00 KB
- 文档页数:18


DS18B20温度传感器实验
TEMP1 EQU 5AH ;符号位和百位公用的存放单元
TEMP2 EQU 5BH ;十位存放单元
TEMP3 EQU 5CH ;个位存放单元
TEMP4 EQU 5DH ;
TEMP5 EQU 5EH
TEMP6 EQU 5FH ;数据临时存放单元
TEMP7 EQU 60H
TEMP8 EQU 61H
ORG 0000H
AJMP MAIN
ORG 0020H
MAIN:
MOV SP,#70H
LCALL INT ;调用DS18B20初始化函数
MAIN1:
LCALL GET_TEMP ;调用温度转换函数
LCALL CHULI ;调用温度计算函数
LCALL DISP ;调用温度显示函数
AJMP MAIN1 ;循环
INT:
L0: SETB P3.7 ;先释放DQ总线
MOV R2,#250 ;给R2赋延时初值,同时可让DQ保持高电平2us
L1:
CLR P3.7 ;给DQ一个复位低电平
DJNZ R2,L1 ;保持低电平的时间至少为480us
SETB P3.7 ;再次拉高DQ释放总线
MOV R2,#25
L2:
DJNZ R2,L2 ;保持15us-60us
CLR C
ORL C,P3.7 ;判断是否收到低脉冲
JC L0
Pt100温度传感器和DS18B20传感器
pt100是铂热电阻,它的阻值会随着温度的变化而改变。PT后的100即表示它在0℃时阻值为100欧姆,在100℃时它的阻值约为138.5欧姆。
它的工作原理:当PT100在0摄氏度的时候他的阻值为100欧姆,它的阻值会随着温度上升而成近似匀速的增长。但他们之间的关系并不是简单的正比的关系,而更应该趋近于一条抛物线。
铂电阻的阻值随温度的变化而变化的计算公式:
-200
0≤t<850℃ Rt=R0(1+At+Bt2) (2)
Rt为t℃时的电阻值,R0为0℃时的阻值。公式中的A,B,系数为实验测定。这里给出标准的
DIN IEC751系数:A=3.9083E-3、 B=-5.775E-7、 C=-4.183E-12
根据韦达公式求得阻值大于等于100欧姆的Rt -〉t的换算公式:
0≤t<850℃ t=(sqrt((A*R0)^2-4*B*R0*(R0-Rt))-A*R0)/2/B/R0
PT100温度感测器是一种以白金(Pt)作成的电阻式温度检测器,属于正电阻系数,其电阻和温度变化的关系式如下:R=Ro(1+αT) 其中α=0.00392,Ro为100Ω(在0℃的电阻值),T为摄氏温度因此白金作成的电阻式温度检测器,又称为PT100。
1:Vo=2.55mA ×100(1+0.00392T)=0.255+T/1000 。
2:量测Vo时,不可分出任何电流,否则测量值会不准。电路分析由于一般电源供应较多零件之后,电源是带杂讯的,因此我们使用齐纳二极体作为稳压零件,由于7.2V齐纳二极体的作用,使得1K电阻和5K可变电阻之电压和为6.5V,靠5K可变电阻的调整可决定电晶体的射(集极)极电流,而我们须将集极电流调为2.55mA,使得量测电压V如箭头所示为0.255+T/1000。其后的非反向放大器,输入电阻几乎无限大,同时又放大10倍,使得运算放大器输出为2.55+T/100。6V齐纳二极体的作用如7.2V齐纳二极体的作用,我们利用它调出2.55V,因此电压追随器的输出电压V1亦为2.55V。其后差动放大器之输出为Vo=10(V2-V1)=10(2.55+T/100-2.55)=T/10,如果当前室温为25℃,则输出电压为2.5V。
温度传感器:
DS18B20是DALLAS公司生产的一线式数字温度传感器,具有3引脚TO-92小体积封装形式;温度测量范围为-55℃~+125℃,可编程为9位~12位A/D转换精度,测温分辨率可达0.0625℃,被测温度用符号扩展的16位数字量方式串行输出;其工作电源既可在远端引入,也可采用寄生电源方式产生;多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。以上特点使DS18B20非常适用于远距离多点温度检测系统。
2 DS18B20的内部结构
DS18B20内部结构如图1所示,主要由4部分组成:64位ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18B20的管脚排列如图2所示,DQ为数字信号输入/输出端;GND为电源地;VDD为外接供电电源输入端(在寄生电源接线方式时接地,见图4)。
ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码,每个DS18B20的64位序列号均不相同。64位ROM的排的循环冗余校验码(CRC=X8+X5+X4+1)。ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。
图1 DS18B20的内部结构
图2DS18B20的管脚排列
DS18B20中的温度传感器完成对温度的测量,用16位符号扩展的二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S为符号位。例如+125℃的数字输出为07D0H,+25.0625℃的数字输出为0191H,-25.0625℃的数字输出为FF6FH,-55℃的数字输出为FC90H。
温度值高字节
高低温报警触发器TH和TL、配置寄存器均由一个字节的EEPROM组成,使用一个存储器功能命令可对TH、TL或配置寄存器写入。其中配置寄存器的格式如下:
#include"reg51.h"
#define uchar unsigned char
#define uint unsigned int
sbit DQ=P1^4; //ds18b20与单片机连接口
sbit RS=P2^0;
sbit RW=P2^1;
sbit EN=P1^2;
unsigned char code str1[]={"temperature: "};
unsigned char code str2[]={" "};
uchar data disdata[5];
uint tvalue; //温度值
uchar tflag; //温度正负标志
/*************************lcd1602程序**************************/
void delay1ms(unsigned int ms) //延时1毫秒
{
unsigned int i,j; for(i=0;i
for(j=0;j<100;j++);
}
void wr_com(unsigned char com) //写指令//
{
delay1ms(1);
RS=0;
RW=0;
EN=0;
P0=com;
delay1ms(1);
EN=1;
delay1ms(1);
EN=0;
}
void wr_dat(unsigned char dat) //写数据//
{
delay1ms(1);;
RS=1;
RW=0; EN=0;
P0=dat;
delay1ms(1);
EN=1;
delay1ms(1);
EN=0;
}
void lcd_init() //初始化设置//