电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

(完整版)DS18B20的工作原理及应用VIP免费

(完整版)DS18B20的工作原理及应用_第1页
1/26
(完整版)DS18B20的工作原理及应用_第2页
2/26
(完整版)DS18B20的工作原理及应用_第3页
3/26
11.DS18B20的工作原理①DS18B20数字温度传感器概述DS18B20数字温度传感器是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。DS18B20产品的特点只要求一个端口即可实现通信。在DS18B20中的每个器件上都有独一无二的序列号。实际应用中不需要外部任何元器件即可实现测温。测量温度范围在-55.C到+125.C之间。数字温度计的分辨率用户可以从9位到12位选择。内部有温度上、下限告警设置。TO-92封装的DS18B20的引脚排列见右图,其引脚功能描述见表序号名称引脚功能描述1GND地信号2DQ数字输入输出引脚,开漏单总线接口引脚,当使用寄生电源时,可向电源提供电源3VDD可选择的VDD引脚,当工作于寄生电源时,该引脚必须接地表3-2DS18B20详细引脚功能描述②DS18B20的内部结构DS18B20的内部框图下图所示,DS18B20的内部有64位的ROM单元,和9字节的暂存器单元。64位ROM存储器件独一无二的序列号。暂存器包含两字节(0和1字节)的温度寄存器,用于存储温度传感器的数字输出。暂存器还提供一字节的上线警报触发(TH)和下线警报触发(TL)寄存器(2和3字节),和一字节的配置寄存器(4字节),使用者可以通过配置寄存器来设置温度转换的精度。暂存器的5、6和7字节器件内部保留使用。第八字节含有循环冗余码(CRC)。使用寄生电源时,DS18B20不需额外的供电电源;当总线为高电平时,功率由单总线上的上拉电阻通过DQ引脚提供;高电平总线信号同时也向内部电容CPP充电,CPP在总线低电平时为器件供电。(字节5~8就不用看了)。2图为暂存器A.温度寄存器(0和1字节)DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S为符号位。这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。DS18B20的温度操作是使用16位,也就是说分辨率是0.0625。BIT15~BIT11是符号位,为了就是表示转换的值是正数还是负数。█要求出正数的十进制值,必须将读取到的LSB字节,MSB字节进行整合处理,然后乘以0.0625即可。Eg:假设从,字节0读取到0xD0赋值于Temp1,而字节1读取到0x07赋值于Temp2,然后求出十进制值。unsignedintTemp1,Temp2,Temperature;Temp1=0xD0;//低八位Temp2=0x07;//高八位Temperature=((Temp2<<8)|Temp1)*0.0625;//又或者3Temperature=(Temp1+Temp2*256)*0.0625;//Temperature=125█在这里我们遇见了一个问题,就是如何求出负数的值呢?很遗憾的,单片机不像人脑那样会心算,我们必须判断BIT11~15是否是1,然后人为置一负数标志。Eg.假设从,字节0读取到0x90赋值于Temp1,而字节1读取到0xFC赋值于Temp2,然后求出该值是不是负数,和转换成十进制值。unsignedintTemp1,Temp2,Temperature;unsignedcharMinus_Flag=0;Temp1=0x90;//低八位Temp2=0xFC;//高八位//Temperature=(Temp1+Temp2*256)*0.0625;//Temperature=64656//很明显不是我们想要的答案if(Temp2&0xFC)//判断符号位是否为1{Minus_Flag=1;//负数标志置一Temperature=((Temp2<<8)|Temp1)//高八位第八位进行整合Temperature=((~Temperature)+1);//求反,补一Temperature*=0.0625;//求出十进制}//Temperature=55;else{Minus_Flag=0;Temperature=((Temp2<<8)|Temp1)*0.0625;}█如果我要求出小数点的值的话,那么我应该这样做。Eg:假设从,字节0读取到0xA2赋值于Temp1,而字节1读取到0x00赋值于Temp2,然后求出十进制值,要求连同小数点也求出。unsignedintTemp1,Temp2,Temperature;Temp1=0x90;//低八位Temp2=0xFC;//高八位//实际值为10.125//Temperature=((Temp2<<8)|Temp1)*0.0625;//10,无小数点Temperature=((Temp2<<8)|Temp1)*(0.0625*10);//101,一位小数点//Temperature=((Temp2<<8)|Temp1)*(0.0625*100);//1012,二位小数点█如以上的例题...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

(完整版)DS18B20的工作原理及应用

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部