温度传感器DS18B20使用

  因为一个项目用到了DS18B20温度传感器,刚开始使用之处,第一次对单线传感器进行控制,毫无经验,也是碰了一头灰,摔了一些坑。总结一下使用心得。

   DS18B20是单线数字化温度传感器。温度采集的控制接口为1位,通过该位可进行温度数据的读取,以及9~12位分辨率的设置,对应的精度为0.5°C ~0.01625°C。

  下面是初始化的时序图。


初始化DS18B20模块,首先通过拉低模块配置信号dq,拉低时间大于480us,完成DS18B20的初始化,检测到DS18B20反馈的存在脉冲之后,开始配置DS18B20。

由于我在使用过程中是单独对一个18B20片子进行操作,因此跳过rom序列的查找功能。整体操作流程如下:

 1) 通过模块配置信号dq写入CC命令,跳过DS18B20的rom匹配,由于此应用中一根dq配置线只接了一个DS18B20温度转换器,不需查找匹配rom序列。

 2)通过模块配置信号dq写入44命令,启动温度转换。

 3)系统采用DS18B20默认的12位精度,温度转换所需时间最大750ms,因此通过状态机等待750ms,等待转换完毕。

 4)通过模块配置信号dq写入BE命令,读取DS18B20中暂存寄存器内的温度数据。

 5) 暂存寄存器值送入CRC校验模块,检测CRC校验模块反馈标志,若CRC校验正确,则更新温度数据,否则,不更新温度数据。

其中注意:

   检测反馈回来的存在脉冲,可采取多次采集,3取2的方式滤波,滤掉毛刺或虚假信号。

 写时间片注意:

    1、dq输出低电平保持79us,然后dq输出高阻状态2us;(dq被拉低的79us状态,完成写0的操作);

    2、dq输出低电平保持9us,然后dq输出高阻状态73us;(释放总线的同时,18b20通过上拉电阻拉高dq总线,完成写1的操作)。

读时间片:

  拉低dq总线5us,然后释放dq总线5us,读取18b20反馈到dq总线上的温度数据;


严格按照DS18B20时序(可适当放宽时序,不过要注意在正确区间取数)进行读写操作以及流程控制。



猜你喜欢

转载自blog.csdn.net/xiaoxiao_rabbit/article/details/78463070