您当前的位置:钢材 > 型钢 > 市场分析

ds18b20温度传感器测体温,ky028数字温度传感器模块

2024-03-24 18:11:22 来源:头条 作者: chanong
分享到
关注德勤钢铁网在线:
  • 扫描二维码

    关注√

    德勤钢铁网微信

在线咨询:
  • 扫描或点击关注德勤钢铁网在线客服

温度测量是制造商项目中最常见的功能需求之一。您还可以制作自己的温度计并将其放在卧室或汽车中,这样您就可以随时了解周围的温度。通过添加其他辅助模块和控制器,可以实现远程测温和控温。所有这些的基础是小型温度传感器芯片,最常见的是DS18B20 数字温度传感器。

DS18B20是常用的数字温度传感器,输出数字信号,具有体积小、硬件开销低、抗干扰能力强、精度高等特点。接线简单,包装后也可在各种场合使用。 DS18B20引脚定义:

DQ为数字信号输入输出端,GND为电源地,VDD为外部电源输入端(寄生电源接线方式接地)。 DS18B20的主要特点:

它具有较宽的适应电压范围:3.0 至5.5 V,并且可以在寄生电源模式下通过数据线供电。独特的单线接口模式,DS18B20与微处理器连接时仅需一根端口线,微处理器与DS18B20之间双向通信,DS18B20支持多点网络功能,只需3根线即可将多个DS18B20并联,实现多点测温网络内,温度测量范围-55C至+125C、-10至+85C,精度0.5C,可编程分辨率为9至12位,兼容可分解温度0.5、0.25 、0.125、0.0625。可进行9位分辨率测量,93.75ms内将温度转换为数值,12位分辨率下,最长750ms内将温度值转换为数值,测量结果原样输出更快,数字温度信号发送至CPU通过“单线总线”,同时串行传输CRC校验码,具有很强的抗干扰和纠错能力负电压特性:如果电源极性不同,芯片会即使电源接反也不会被热烧坏,但不工作属于正常现象。 DS18B20内部结构:

如图所示,DS18B20的内部结构主要由四部分组成。 64 位光刻ROM、温度传感器、非易失性温度报警触发器TH 和TL 以及配置寄存器。

DS18B20内部结构

DS18B20工作原理:

DS18B20测温原理图

DS18B20的读/写时序和温度测量原理与DS1820相同,但由于分辨率的不同,获得的温度值的位数不同,并且温度转换时的延迟时间从2减少秒到750 毫秒。 DS18B20的温度测量原理如图所示。图中低温度系数晶振的振荡频率几乎不受温度影响,产生固定频率的脉冲信号,送至减法计数器1 。高温度系数晶振的振荡频率随温度变化,这当然是变化的,但产生的信号作为减法计数器2的脉冲输入,计数门也隐藏在图中。DS18B20对低温度系数振荡器产生的时钟脉冲进行计数,完成温度测量。

计数门的开启时间由高温度系数振荡器决定,每次测量前,首先将-55对应的基数分别存入减法计数器1和温度寄存器中。预设为基值-A,对应于55C。

减法计数器1减去低温度系数晶体振荡器产生的脉冲信号,当减法计数器1的设定值达到0时,温度寄存器的值加1,减法计数器1的设定值变为0。减法计数器1,继续对低温度系数晶振产生的脉冲信号进行计数,如此循环,直到减法计数器2达到0,停止累加温度寄存器值,此时温度寄存器即为测量到的温度。

图中的斜率累加器用于补偿和校正温度测量过程的非线性,其输出用于修改减法计数器的预设值,除非计数门关闭,否则重复上述过程。这就是DS18B20的温度测量原理,直到温度寄存器的值达到测量的温度值。

另外,DS18B20的单线通信功能是分时完成的,因此有严格的时隙概念,使得读写时序非常重要。系统对DS18B20的各种操作都必须按照协议进行。操作协议为DS18B20初始化(复位脉冲发送)ROM功能命令发送存储器操作命令发送数据处理。各种操作的时序图与DS1820时序图相同。

说了这么多,如果您仍然感到困惑也没关系。因为不需要理解得那么清楚。通常,传感器集成模块可以直接在应用过程中使用。具有更方便的接口和更可靠的性能。简单来说,就是在传感器上加了一个上拉电阻和一个指示灯。

工作电压:3V~5.5v 温度测量范围:-55~+125(误差2)、-10~+85(误差2) 电路板尺寸:21mm*10mmDS18B20 数字温度传感器模块

DS18B20 数字温度传感器模块原理图

接下来,使用Arduino驱动DS18B20模块,并使用串口显示DS18B20测量的温度。硬件设备:

Arduino控制器x 1DS18B20数字温度传感器模块x 1 USB数据线x 1 接线:连接电路非常简单,只需连接模块的电源线和地线,并将模块的数据总线DO连接到数字端即可。连接Arduino的12针,是的,USB数据。

Arduino接线图

步骤如下:先附上流程图。

DS18B20程序流程图

按照上面的流程图使用单总线库。使用OneWire 完成编程。

#include OneWire ds(12); //连接arduino12引脚void setup(void){ Serial.begin(9600);}void Loop(void) { byte i; byte Present=0; byte type_s; byte data[12] ; byte addr[8]; float 摄氏温度、华氏温度; if ( !ds.search(addr)) { Serial.println('没有更多地址。'); Serial.println(); ds.reset_search(); Late (250 ) ; return; } Serial.print('ROM='); for( i=0; i 8; i++) { Serial.write(' '); Serial.print(addr, HEX); } if (OneWire:crc8 (addr , 7) !=addr[7]) { Serial.println('CRC is invalid!'); return; } Serial.println(); //第一个ROM 字节位于芯片开关(addr[0] ) 指示的位置{ case0x10: Serial.println(' Chip=DS18S20'); //或更旧的DS1820 type_s=1; Break; case0x28: Serial.println(' Chip=DS18B20'); type_s=0; Break; case0x22: Serial.println( ' Chip=DS1822'); type_s=0; break; default: Serial.println('该设备不是DS18x20 系列设备。'); return; } ds.reset(); ds.select(addr); ds.write (0x44 , 1); //开始转换,最后打开寄生电源。 Late(1000); //750ms 可能就足够了,但也可能不够//可能在这里运行ds.depower(),但它将在重置时处理。present=ds.reset(); ds.select(addr); ds.write(0xBE); //读取暂存器Serial.print(' Data='); Serial.print(present,HEX); Serial.print ( ' ') for ( i=0; i 9; i++) { //需要9 个字节data=ds.read(); Serial.print(data, HEX); Serial.print(' '); } Serial . print(' CRC='); Serial.print(OneWire:crc8(data, 8), HEX); Serial.println(); //将数据转换为实际温度unsigned int raw=(data[1] 8) | data [ 0 ]; if (type_s) { raw=raw 3; //默认为9 位分辨率if (data[7]==0x10) { //剩余计数提供完整的12 位分辨率raw=( raw0xFFF0) + 12 - data [ 6]; } } else { byte cfg=(data[4]0x60); if (cfg==0x00) raw=raw 3; //9 位分辨率,93.75 ms else if (cfg==0x20) raw=raw 2 ; //10 位分辨率,187.5 ms else if (cfg==0x40) raw=raw 1; //11 位分辨率,375 ms //默认为12 位分辨率,750 转换时间(以毫秒为单位) }摄氏度=(float)raw/16.0; 华氏度=摄氏度* 1.8 + 32.0; Serial.print(' 温度='); Serial.print(摄氏度); Serial.print(' 摄氏度, ') ; Serial.print(华氏度) ; Serial.println('Fahrenheit');} 程序还是很复杂,但是有一个更简单的方法。使用DS18B20 库DallasTemperature。

#include #include //定义连接到Arduino IO 号12 的DS18B20 数据端口#define ONE_WIRE_BUS 12 //最初连接到单总线的单总线设备OneWire oneWire(ONE_WIRE_BUS);DallasTemperaturesensors(oneWire); void setup( void) { //设置串口通信的波特率Serial.begin(9600); Serial.println('达拉斯温度IC控制库演示'); //初始库sensors.begin();}void loop(void ){ Serial .print ('请求温度.');sensors.requestTemperatures(); //发送命令获取温度Serial.println('DONE'); Serial.print('设备1 的温度(索引0) is: '); Serial .println(sensors.getTempCByIndex(0)); }这不是很简单吗,连接上数码管、液晶屏或者其他显示温度的显示设备就可以完成仪表的创建了。

责任编辑:德勤钢铁网 标签:

热门搜索

相关文章

广告
德勤钢铁网 |市场分析

ds18b20温度传感器测体温,ky028数字温度传感器模块

chanong

|

温度测量是制造商项目中最常见的功能需求之一。您还可以制作自己的温度计并将其放在卧室或汽车中,这样您就可以随时了解周围的温度。通过添加其他辅助模块和控制器,可以实现远程测温和控温。所有这些的基础是小型温度传感器芯片,最常见的是DS18B20 数字温度传感器。

DS18B20是常用的数字温度传感器,输出数字信号,具有体积小、硬件开销低、抗干扰能力强、精度高等特点。接线简单,包装后也可在各种场合使用。 DS18B20引脚定义:

DQ为数字信号输入输出端,GND为电源地,VDD为外部电源输入端(寄生电源接线方式接地)。 DS18B20的主要特点:

它具有较宽的适应电压范围:3.0 至5.5 V,并且可以在寄生电源模式下通过数据线供电。独特的单线接口模式,DS18B20与微处理器连接时仅需一根端口线,微处理器与DS18B20之间双向通信,DS18B20支持多点网络功能,只需3根线即可将多个DS18B20并联,实现多点测温网络内,温度测量范围-55C至+125C、-10至+85C,精度0.5C,可编程分辨率为9至12位,兼容可分解温度0.5、0.25 、0.125、0.0625。可进行9位分辨率测量,93.75ms内将温度转换为数值,12位分辨率下,最长750ms内将温度值转换为数值,测量结果原样输出更快,数字温度信号发送至CPU通过“单线总线”,同时串行传输CRC校验码,具有很强的抗干扰和纠错能力负电压特性:如果电源极性不同,芯片会即使电源接反也不会被热烧坏,但不工作属于正常现象。 DS18B20内部结构:

如图所示,DS18B20的内部结构主要由四部分组成。 64 位光刻ROM、温度传感器、非易失性温度报警触发器TH 和TL 以及配置寄存器。

DS18B20内部结构

DS18B20工作原理:

DS18B20测温原理图

DS18B20的读/写时序和温度测量原理与DS1820相同,但由于分辨率的不同,获得的温度值的位数不同,并且温度转换时的延迟时间从2减少秒到750 毫秒。 DS18B20的温度测量原理如图所示。图中低温度系数晶振的振荡频率几乎不受温度影响,产生固定频率的脉冲信号,送至减法计数器1 。高温度系数晶振的振荡频率随温度变化,这当然是变化的,但产生的信号作为减法计数器2的脉冲输入,计数门也隐藏在图中。DS18B20对低温度系数振荡器产生的时钟脉冲进行计数,完成温度测量。

计数门的开启时间由高温度系数振荡器决定,每次测量前,首先将-55对应的基数分别存入减法计数器1和温度寄存器中。预设为基值-A,对应于55C。

减法计数器1减去低温度系数晶体振荡器产生的脉冲信号,当减法计数器1的设定值达到0时,温度寄存器的值加1,减法计数器1的设定值变为0。减法计数器1,继续对低温度系数晶振产生的脉冲信号进行计数,如此循环,直到减法计数器2达到0,停止累加温度寄存器值,此时温度寄存器即为测量到的温度。

图中的斜率累加器用于补偿和校正温度测量过程的非线性,其输出用于修改减法计数器的预设值,除非计数门关闭,否则重复上述过程。这就是DS18B20的温度测量原理,直到温度寄存器的值达到测量的温度值。

另外,DS18B20的单线通信功能是分时完成的,因此有严格的时隙概念,使得读写时序非常重要。系统对DS18B20的各种操作都必须按照协议进行。操作协议为DS18B20初始化(复位脉冲发送)ROM功能命令发送存储器操作命令发送数据处理。各种操作的时序图与DS1820时序图相同。

说了这么多,如果您仍然感到困惑也没关系。因为不需要理解得那么清楚。通常,传感器集成模块可以直接在应用过程中使用。具有更方便的接口和更可靠的性能。简单来说,就是在传感器上加了一个上拉电阻和一个指示灯。

工作电压:3V~5.5v 温度测量范围:-55~+125(误差2)、-10~+85(误差2) 电路板尺寸:21mm*10mmDS18B20 数字温度传感器模块

DS18B20 数字温度传感器模块原理图

接下来,使用Arduino驱动DS18B20模块,并使用串口显示DS18B20测量的温度。硬件设备:

Arduino控制器x 1DS18B20数字温度传感器模块x 1 USB数据线x 1 接线:连接电路非常简单,只需连接模块的电源线和地线,并将模块的数据总线DO连接到数字端即可。连接Arduino的12针,是的,USB数据。

Arduino接线图

步骤如下:先附上流程图。

DS18B20程序流程图

按照上面的流程图使用单总线库。使用OneWire 完成编程。

#include OneWire ds(12); //连接arduino12引脚void setup(void){ Serial.begin(9600);}void Loop(void) { byte i; byte Present=0; byte type_s; byte data[12] ; byte addr[8]; float 摄氏温度、华氏温度; if ( !ds.search(addr)) { Serial.println('没有更多地址。'); Serial.println(); ds.reset_search(); Late (250 ) ; return; } Serial.print('ROM='); for( i=0; i 8; i++) { Serial.write(' '); Serial.print(addr, HEX); } if (OneWire:crc8 (addr , 7) !=addr[7]) { Serial.println('CRC is invalid!'); return; } Serial.println(); //第一个ROM 字节位于芯片开关(addr[0] ) 指示的位置{ case0x10: Serial.println(' Chip=DS18S20'); //或更旧的DS1820 type_s=1; Break; case0x28: Serial.println(' Chip=DS18B20'); type_s=0; Break; case0x22: Serial.println( ' Chip=DS1822'); type_s=0; break; default: Serial.println('该设备不是DS18x20 系列设备。'); return; } ds.reset(); ds.select(addr); ds.write (0x44 , 1); //开始转换,最后打开寄生电源。 Late(1000); //750ms 可能就足够了,但也可能不够//可能在这里运行ds.depower(),但它将在重置时处理。present=ds.reset(); ds.select(addr); ds.write(0xBE); //读取暂存器Serial.print(' Data='); Serial.print(present,HEX); Serial.print ( ' ') for ( i=0; i 9; i++) { //需要9 个字节data=ds.read(); Serial.print(data, HEX); Serial.print(' '); } Serial . print(' CRC='); Serial.print(OneWire:crc8(data, 8), HEX); Serial.println(); //将数据转换为实际温度unsigned int raw=(data[1] 8) | data [ 0 ]; if (type_s) { raw=raw 3; //默认为9 位分辨率if (data[7]==0x10) { //剩余计数提供完整的12 位分辨率raw=( raw0xFFF0) + 12 - data [ 6]; } } else { byte cfg=(data[4]0x60); if (cfg==0x00) raw=raw 3; //9 位分辨率,93.75 ms else if (cfg==0x20) raw=raw 2 ; //10 位分辨率,187.5 ms else if (cfg==0x40) raw=raw 1; //11 位分辨率,375 ms //默认为12 位分辨率,750 转换时间(以毫秒为单位) }摄氏度=(float)raw/16.0; 华氏度=摄氏度* 1.8 + 32.0; Serial.print(' 温度='); Serial.print(摄氏度); Serial.print(' 摄氏度, ') ; Serial.print(华氏度) ; Serial.println('Fahrenheit');} 程序还是很复杂,但是有一个更简单的方法。使用DS18B20 库DallasTemperature。

#include #include //定义连接到Arduino IO 号12 的DS18B20 数据端口#define ONE_WIRE_BUS 12 //最初连接到单总线的单总线设备OneWire oneWire(ONE_WIRE_BUS);DallasTemperaturesensors(oneWire); void setup( void) { //设置串口通信的波特率Serial.begin(9600); Serial.println('达拉斯温度IC控制库演示'); //初始库sensors.begin();}void loop(void ){ Serial .print ('请求温度.');sensors.requestTemperatures(); //发送命令获取温度Serial.println('DONE'); Serial.print('设备1 的温度(索引0) is: '); Serial .println(sensors.getTempCByIndex(0)); }这不是很简单吗,连接上数码管、液晶屏或者其他显示温度的显示设备就可以完成仪表的创建了。


市场分析