目录
数字温度传感器(DS18B20)
DS18B20是一款常用的高精度的单总线数字温度测量芯片。具有体积小,硬件开销低,抗干扰能力强,精度高的特点。
传感器参数
测温范围为-55℃到+125℃,在-10℃到+85℃范围内误差为±0.4°。
返回16位二进制温度数值
主机和从机通信使用单总线,即使用单线进行数据的发送和接收
在使用中不需要任何外围元件,独立芯片即可完成工作。
掉电保护功能 DS18B20 内部含有 EEPROM ,通过配置寄存器可以设定数字转换精度和报警温度,在系统掉电以后,它仍可保存分辨率及报警温度的设定值。
每个DS18B20都有独立唯一的64位-ID,此特性决定了它可以将任意多的DS18b20挂载到一根总线上,通过ROM搜索读取相应DS18B20的温度值
宽电压供电,电压2.5V~5.5V
DS18B20是一种数字温度传感器,由Maxim Integrated公司生产。它是一种单总线接口设备,使用1-Wire通信协议,可以通过单个数据线连接到微处理器或其他设备上。DS18B20可以测量-55°C到+125°C范围内的温度,精确度为±0.5°C。DS18B20还具有可编程分辨率(9位到12位),以及可配置的警报和上电自检功能。由于其易于使用和广泛应用,DS18B20是许多温度测量应用的理想选择,包括家用电器、汽车、医疗设备、气象站等。
传感器引脚及原理图
DS18B20传感器的引脚及封装图如下:
DS18B20高速缓存器
高速暂存器由9个字节组成
字节0~1 是温度存储器,用来存储转换好的温度。第0个字节存储温度低8位,第一个字节存储温度高8位
字节2~3 是用户用来设置最高报警和最低报警值(TH和TL)。
字节4 是配置寄存器,用来配置转换精度,可以设置为9~12 位。
字节5~7 保留位。芯片内部使用
字节8 CRC校验位。是64位ROM中的前56位编码的校验码。由CRC发生器产生
关于DS18B20的编写程序
首先要检查驱动DS18B20是否存在
//检查DS18B20是否存在
u8 ds18b20_check(void)
{
u8 time_cnt = 0;
while(DS18B20_PORT==1) //等待DQ为低电平
{
Delay10us(1);
time_cnt++;
if(time_cnt >=20) //time_cnt >=20 表明指定时间内未到回应信号
{
return 1;
}
}
然后我们要进行一个对DS18B20设定
time_cnt=0;//清零时间计数
while(DS18B20_PORT==0)//等待DQ为低电平
{
Delay10us(1);
time_cnt++;
if(time_cnt >=20)
{
break;
}
}
if(time_cnt >=20) //等待DQ为高电平
{
return 1;
}
return 0;
}
然后要对DS18B20进行一个读取和读取循环
//从DS18B20读取一个字节
u8 ds18b20_read_byte(void)
{
u8 i=0;
u8 dat=0;//保存8个位的字节
for(i=0;i<8;i++)//循环8次,每次读取一位,且先读低位再读高位
{
u8 temp = ds18b20_read_bit();//把读取到的一个字节存到temp
dat = (temp<<7)|(dat>>1);//左移7位 右移1位 先左移,再右移,最后与
}
return dat;
}
//写一个字节到DS18B20
void ds18b20_write_byte(u8 dat)
{
u8 i;
for(i=0;i<8;i++)//循环8次,每次写一位,且先写低位再写高位
{
u8 temp = dat&0x01;//选择低位准备写入
dat=dat>>1;//将次高位移到低位
if(temp)
{
DS18B20_PORT=0;
_nop_();_nop_();
DS18B20_PORT=1;//维持高
Delay10us(6);
}
else
{
DS18B20_PORT=0;
Delay10us(6);
DS18B20_PORT=1;
_nop_();_nop_();
}
}
}
最后我们就只要初始化DS18B20的端口和检测DS的存在
//初始化DS18B20的IO口 DQ 同时检测DS的存在
u8 ds18b20_init(void)
{
ds18b20_reset();//拉低芯片
return ds18b20_check();//等待芯片回应
}
//从ds18b20得到温度值
float ds18b20_read_temperture(void)
{
float temp;
u8 dath=0;//高字节
u8 datl=0;//低字节
u16 value=0;//合并为16位数据
ds18b20_reset();//发送复位信号
ds18b20_check();//等待芯片回应信号
ds18b20_write_byte(0xcc);//跳过芯片寻址
ds18b20_write_byte(0x44);//跳过芯片寻址
ds18b20_reset();//发送复位信号
ds18b20_check();//等待芯片回应信号
ds18b20_write_byte(0xcc);//跳过芯片寻址
ds18b20_write_byte(0xbe);//读取温度指令
datl=ds18b20_read_byte();//读低字节
dath=ds18b20_read_byte();//读高字节
value=(dath<<8)+datl;//合并为16位数据
if((value&0xf800)==0xf800)//判断符号位,负温度
{
value=(~value)+1; //数据取反再加1
temp=value*(-0.0625);//乘以精度
}
else //正温度
{
temp=value*0.0625;
}
return temp;
}
总结
以下是DS18B20的主要特点:
-
数字接口:DS18B20使用数字接口进行通信,使其易于与微控制器和其他数字电路集成。
-
高精度:该传感器提供高精度温度测量,精度为±0.5℃(-10℃至+85℃范围内),并可以提供更高的精度。
-
低功耗:DS18B20具有低功耗特性,在待机模式下只需使用1微安的电流,因此非常适合用于低功耗应用。
-
多点连接:传感器可以通过单个总线连接多个DS18B20传感器,从而实现多点测量。
-
高可靠性:DS18B20传感器具有高度可靠性和长寿命,可在极端温度和环境条件下工作。
-
通过该项目的实现,了解掌握了DS18B20的使用方法和特点