《DS18B20数字温度传感器》由会员分享,可在线阅读,更多相关《DS18B20数字温度传感器(6页珍藏版)》请在金锄头文库上搜索。
1、DS18B20 温度传感器DS18B20,常用的温度传感器,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。面对着扁平的那一面,左负右正,一旦接反就会立刻发热,有可能烧毁!同时,接反也是导致该传感器总是显示85的原因。引脚封装 TO-92 封装1 接地 接地2 数字 信号输入输出,一线输出:源极开路3 电源 可选电源管脚。见寄生功率一节细节方面。电源必须接地,为行动中,寄生虫功率模式。DS18B20 数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874等等。主要根据应用场合的不同而改变其外观。封装后的
2、DS18B20 可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。、 独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。 、测温范围 55+125,固有测温误差注意,不是分辨率,这里之前是错误的 1。、支持多点组网功能,多个DS18B20 可以并联在唯一的三线上,最多只能并联8 个,实现多点测温,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定。、工作电源: 3.05.5V/DC
3、 可以数据线寄生电源 、在使用中不需要任何外围元件、 测量结果以 912 位数字量方式串行传送 、不锈钢保护管直径 6 、适用于 DN1525, DN40DN250各种介质工业管道和狭小空间设备测温、 标准安装螺纹 M10X1, M12X1.5, G1/2”任选 、PVC 电缆直接出线或德式球型接线盒出线,便于与其它电器设备连接。应用范围1 该产品适用于冷冻库,粮仓,储罐,电讯机房,电力机房,电缆线槽等测温和控制领域2 轴瓦,缸体,纺机,空调,等狭小空间工业设备测温和控制。3 汽车空调、冰箱、冷柜、以及中低温干燥箱等。4 供热/制冷管道热量计量,中央空调分户热能计量和工业领域测温和控制学习文档
4、 仅供参考主要组成部分 DS18B20 的。DS18B20 内部结构主要由四部分组成:64 位光刻 ROM、温度传感器、非挥发的温度报警触发器 TH 和 TL、配置寄存器。该装置信号线高的时候,内部电容器 储存能量通由 1 线通信线路给片子供电,而且在低电平期间为片子供电直至下一个高电平的到来重新充电。 DS18B20 的电源也可以从外部 3V-5 .5V的电压得到。DS18B20 采用一线通信接口。因为一线通信接口,必须在先完成 ROM 设定,否则记忆和控制功能将无法使用。主要首先提供以下功能命令之一: 1 读 ROM, 2 ROM 匹配, 3 搜索 ROM, 4 跳过 ROM, 5 报警检
5、查。这些指令操作作用在没有一个器件的 64 位光刻 ROM 序列号,可以在挂在一线上多个器件选定某一个器件,同时,总线也可以知道总线上挂有有多少,什么样的设备。假设指令成功地使 DS18B20 完成温度测量, 数据存储在 DS18B20 的存储器。一个控制功能指挥指示 DS18B20 的演出测温。 测量结果将被放置在 DS18B20 内存中,并可以让阅读发出记忆功能的指挥,阅读内容的片上存储器。温度报警触发器TH 和 TL 都有一字节EEPROM 的数据。 如果 DS18B20 不使用报警检查指令, 这些寄存器可作为一般的用户记忆用途。在片上还载有配置字节以理想的解决温度数字转换。写 TH,T
6、L 指令以及配置字节利用一个记忆功能的指令完成。通过缓存器读寄存器。所有数据的读,写都是从最低位开始。存储器DS18B20 的存储器包括高速暂存器 RAM 和可电擦除 RAM,可电擦除 RAM 又包括温度触发器 TH 和 TL,以及一个配置寄存器。存储器能完整确实定一线端口的通讯,数字开始用写寄存器的命令写进寄存器, 接着也可以用读寄存器的命令来确认这些数字。 当确认以后就可以用复制寄存器的命令来将这些数字转移到可电擦除RAM 中。 当修改过寄存器中的数时,这个过程能确保数字的完整性。高速暂存器 RAM 是由 8 个字节的存储器组成; 。 用读寄存器的命令能读出第九个字节,这个字节是对前面的八
7、个字节进行校验。DS18B20 外部电源的连接方式DS18B20 可以使用外部电源VDD,也可以使用内部的寄生电源。当VDD 端口接3.0V5.5V 的电压时是使用外部电源; 当 VDD 端口接地时使用了内部的寄生电源。 无论是内部寄生电源还是外部供电,I/O 口线要接 5K 左右的上拉电阻。温度的读取DS18B20 在出厂时以配置为 12 位,读取温度时共读取 16 位,前 5 个位为符号位,当前 5 位为 1 时,读取的温度为负数;当前 5 位为 0 时,读取的温度为正数。 温度为正时读取方法为:将16 进制数转换成 10 进制即可。温度为负时读取方法为:将16 进制取反后加 1,再转换成
8、 10 进制即可。例:0550H = +85 度,FC90H = -55 度。DS18B20 的初始化1 先将数据线置高电平“1”。2 延时该时间要求的不是很严格,但是尽可能的短一点3 数据线拉到低电平“0”。4 延时 750 微秒该时间的时间范围可以从480 到 960 微秒 。5 数据线拉到高电平“1”。6 延时等待如果初始化成功则在15 到 60 微妙时间之内产生一个由DS18B20 所返回的低电平“0”。据该状态可以来确定它的存在,但是应注意不能无限的进行等待,不然会使程序进入死循环,所以要进行超时控制。学习文档 仅供参考7 假设 CPU 读到了数据线上的低电平“0”后,还要做延时,其
9、延时的时间从发出的高电平算起第 5步的时间算起最少要 480 微秒。8 将数据线再次拉高到高电平“1”后结束。DS18B20 的写操作1 数据线先置低电平“0”。2 延时确定的时间为15 微秒。3 按从低位到高位的顺序发送字节一次只发送一位 。4 延时时间为 45 微秒。5 将数据线拉到高电平。6 重复上1到6的操作直到所有的字节全部发送完为止。7 最后将数据线拉高。DS18B20 的读操作1将数据线拉高“1”。2延时 2 微秒。3将数据线拉低“0”。4延时 3 微秒。5将数据线拉高“1”。6延时 5 微秒。7读数据线的状态得到1 个状态位,并进行数据处理。8延时 60 微秒。读取温度程序代码
10、段#includereg51.h#included1820.hint t;uint num;uchar dat; /读写数据变量uchar a=0;uchar b=0;float tep=0; /读一个温度时的温度转换中间间uchar data tempbuf4=0;/温度字型显示中间变量/*函数名称:delay(uint num)返回值:无参数:uint num 延时数据值作用:延时*/void delay(uint num)while(num-);学习文档 仅供参考/*函数名称:void Init_DS18B20(void)返回值:无参数:无作用:初始化18B20*/void Init_D
11、S18B20(void)char x=0;DQ=1;delay(10);/稍作延时DQ=0;delay(80);/延时480us 540usDQ=1; /拉高总线 15-60usdelay(20);x=DQ;/读总线状态 为 0 复位成功,为 1 则不成功delay(30);DQ=1;/释放总线/*函数名称:uchar ReadOneChar(void)返回值:uchar dat参数: 无作用:读取 1820 一个字节*/uchar ReadOneChar(void)uchar i;uchar dat=0;for(i=0;i=1;DQ=1;/给脉冲if(DQ) dat|=0x80;/读 1 /
12、 读 0 右移处理delay(8);/15us内读完一个数return(dat);/*函数名称:void WriteOneChar(uchar dat)返回值:无参数: uchar dat作用:向 1820 写一个字节学习文档 仅供参考*/*写 DS18B20*/写 0 60us 读完,写 1 30us 内读完void WriteOneChar(uchar dat)uchar i=0;for(i=0;i=1;delay(8);/*函数名称:int ReadOneTemperature(void)返回值:int t参数: 无作用:读温度值*/int ReadOneTemperature(void
13、) /*读取温度值*/ 每次读写均要先复位Init_DS18B20();WriteOneChar(0xcc);/发跳过 ROM 命令WriteOneChar(0x44);/发读开始转换命令Init_DS18B20();WriteOneChar(0xcc);/发跳过 ROM 命令WriteOneChar(0xbe);/读寄存器,共九字节,前两字节为转换值a=ReadOneChar(); /a存低字节b=ReadOneChar(); /b存高字节t=b;t=8;/高字节转换为 10 进制t=t|a;tep=t*0.0625;/转换精度为 0.0625/LSBt=tep*10+0.5;/保留 1 位小数并四舍五入*后面除 10 复原正确温度值return(t);/*函数名称:uint Temperaturepro(void)返回值:void参数: void作用:温度处理*/学习文档 仅供参考void Temperaturepro(void)int temp;temp=ReadOneTemperature();tempbuf3=temp/1000; /百位tempbuf2=temp/100%10;/十位tempbuf1=temp%100/10; /个位tempbuf0=temp%10; /小数学习文档 仅供参考