【mcuclub】温度传感器DS18B20 |
您所在的位置:网站首页 › 温度传感器仿真电路图 › 【mcuclub】温度传感器DS18B20 |
1、实物图
2、原理图
VCC:外接供电电源输入端。 DQ: 数字信号输入/输出端。 GND:电源地线 为什么接上拉电阻: 因为DS18B20的数据口是漏极开路,如果不接上拉电阻,则只能输出低电平和高阻态,不能输出高电平,因此需要外接上拉电阻,否则无法输出1。DS18B20的工作电流约为1mA,VCC一般为5V,则电阻R=5V/1mA=5KΩ。一般3.3k~10k都可以。 3、简介DS18B20数字温度计是DALLAS公司生产的单总线器件,独特的单总线通信协议,简化了分布式温度传感应用,无需外部元件,可用数据总线供电,电压范围为3 ~5.5 V,无需备用电源,测量温度范围为-55℃~+125℃。在-10℃至+85℃范围内精度为±0.5℃。应用领域包括恒温控制、工业系统、消费电子产品温度计、或任何热敏感系统。 4、测温原理
DS18B20的内部测温电路框图如上图所示,图中低温度系数振荡器的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1,高温度系数振荡器随温度变化其振荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入。图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数,进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55℃所对应的基数分别置入减法计数器1和温度寄存器中,减法计数器1和温度寄存器被预置在-55℃所对应的一个基数值。减法计数器1对低温度系数振荡器产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数振荡器产生的脉冲信号进行计数,如此循环直到减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直至温度寄存器值达到被测温度值,这就是DS18B20的测温原理。 5、内部结构
DS18B20内部结构如上图所示,主要由4部分组成:64位ROM、温度灵敏元件、非挥发的温度报警触发器TH和TL、配置寄存器。由上图可见,DS18B20只有一个数据输入输出口,属于单总线专用芯片之一。DS18B20工作时被测温度值直接以“单总线”的数字方式传输,大大提高了系统的抗干扰能力。其内部采用在线温度测量技术,测量范围为-55~125℃,在-10~85℃时,精度为±0.5℃。每个DS18B20在出厂时都已具有唯一的64位序列号,因此一条总线上可以同时挂接多个DS18B20,而不会出现混乱现象。另外用户还可自设定非易失性温度报警上下限值TH和TL(掉电后依然保存)。DS18B20在完成温度变换后,所测温度值将自动与存储在TH和TL内的触发值相比较,如果测温结果高于TH或低于TL, DS18B20内部的报警标志就会被置位,表示温度值超出了测量范围,同时还有报警搜索命令识别出温度超限的DS18B20。 6、温度读取与计算DS18B20采用16位补码的形式来存储温度数据,温度是摄氏度。当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第0和第1个字节。 高字节的五个S为符号位,温度为正值时S=0,温度为负值时S=1,剩下的11位为温度数据位,对于12位分辨率,所有位全部有效,对于11位分辨率,位0(bit0)无定义,对于10位分辨率,位0和位1无定义,对于9位分辨率,位0,位1,和位2无定义 对应的温度计算: 当五个符号位S=0时,温度为正值,直接将后面的11位二进制转换为十进制,再乘以0.0625(12位分辨率),就可以得到温度值;当五个符号位S=1时,温度为负值,先将后面的11位二进制补码变为原码(符号位不变,数值位取反后加1),再计算十进制值。再乘以0.0625(12位分辨率),就可以得到温度值; 例如: +125℃的数字输出07D0(00000111 11010000) 转换成10进制是2000,对应摄氏度:0.0625x2000=125℃ -55℃的数字输出为 FC90。 首先取反,然后+1,转换成原码为:11111011 01101111 数值位转换成10进制是870,对应摄氏度:-0.0625x870=-55℃ 7、工作步骤DS18B20的工作步骤可以分为三步: 初始化DS18B20执行ROM指令执行DS18B20功能指令其中第二步执行ROM指令,也就是访问每个DS18B20,搜索64位序列号,读取匹配的序列号值,然后匹配对应的DS18B20,如果我们仅仅使用单个DS18B20,可以直接跳过ROM指令。而跳过ROM指令的字节是0xCC。 ①初始化DS18B20任何器件想要使用,首先就是需要初始化,对于DS18B20单总线设备,首先初始化单总线为高电平,然后总线开始也需要检测这条总线上是否存在DS18B20这个器件。如果这条总线上存在DS18B20,总线会根据时序要求返回一个低电平脉冲,如果不存在的话,也就不会返回脉冲,即总线保持为高电平。 初始化具体时序步骤如下: 单片机拉低总线至少480us,产生复位脉冲,然后释放总线(拉高电平)。 这时DS8B20检测到请求之后,会拉低信号,大约60~240us表示应答。 DS8B20拉低电平的60~240us之间,单片机读取总线的电平,如果是低电平,那么表示初始化成功 DS18B20拉低电平60~240us之后,会释放总线。
代码如下: void Ds18b20_Init(void) { bit q; DS18B20_DQ = 1; //把总线拉高 Ds18b20_Delay(10); DS18B20_DQ = 0; //给复位脉冲 Ds18b20_Delay(80); DS18B20_DQ = 1; //把总线拉高,等待 Ds18b20_Delay(10); q = DS18B20_DQ; //读取ds18b20初始化信号 Ds18b20_Delay(20); DS18B20_DQ = 1; //把总线拉高,释放总线 } ②写时序总线控制器通过控制单总线高低电平持续时间从而把逻辑1或0写进DS18B20中,每次只传输1位数据。 单片机想要给DS18B20写入一个0时,需要将单片机引脚拉低,保持低电平时间要在60~120us之间,然后释放总线。 单片机想要给DS18B20写入一个1时,需要将单片机引脚拉低,拉低时间需要大于1us,然后在15us内拉高总线。 在写时序起始后15μs到60μs期间,DS18B20处于采样单总线电平状态。如果在此期间总线为高电平,则向DS18B20写入1;如果总线为低电平,则向DSl8B20写入0。 注意:2次写周期之间至少间隔1us
代码如下: void Ds18b20_Write(uchar dat) { uchar i; for(i=0; i uchar i,value; for(i=0; i |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |