STM32制作DS18B20 温度传感器解析
DS18B20的工作原理
DS18B20的工作原理DS18B20是一种数字温度传感器,广泛应用于各种温度测量场景。
它采用单总线接口,能够通过一条数据线同时进行数据传输和供电,具有高精度、可靠性强、体积小等优点。
本文将详细介绍DS18B20的工作原理。
DS18B20传感器由温度传感器、数字转换器和总线接口电路组成。
温度传感器采用了先进的温度传感技术,能够测量范围为-55℃至+125℃的温度,并且具有±0.5℃的测量精度。
数字转换器负责将温度传感器测量到的摹拟信号转换为数字信号,以便进行数据处理和传输。
总线接口电路则负责与主控设备进行通信,通过单总线接口实现数据传输和供电。
DS18B20的工作原理如下:1. 初始化:主控设备向DS18B20发送初始化命令,使其进入工作状态。
初始化命令包括发送复位脉冲和读取设备序列号等操作。
2. 温度转换:DS18B20在工作状态下会周期性地进行温度转换。
主控设备发送温度转换命令后,DS18B20会测量环境温度,并将测量结果转换为数字信号。
3. 数据传输:DS18B20的数据传输采用单总线接口方式。
主控设备通过控制总线电平的变化来实现数据的读取和写入。
读取温度数据时,主控设备发送读取命令,DS18B20将温度数据以序列的方式通过总线发送给主控设备。
4. 温度计算:主控设备接收到DS18B20发送的温度数据后,需要进行温度计算才干得到实际的温度值。
DS18B20采用12位分辨率的温度转换,温度数据以二进制补码形式表示。
主控设备根据DS18B20的工作模式和分辨率,将温度数据转换为实际温度值。
5. 供电方式:DS18B20通过单总线接口进行供电,主控设备向总线提供所需的电源电压。
DS18B20内部有一个供电电路,能够将总线上的电能转换为所需的工作电压。
DS18B20的工作原理简单清晰,具有较高的精度和可靠性,适合于各种温度测量场景。
它可以广泛应用于家电、工业自动化、气象监测等领域,为温度监测提供了一种简单有效的解决方案。
DS18B20的工作原理
DS18B20的工作原理DS18B20是一种数字温度传感器,可以通过一根单线串行总线与微处理器或者其他设备进行通信。
它采用了数字温度传感技术,可以准确地测量环境温度,并将温度数据以数字形式传输给主设备。
DS18B20的工作原理如下:1. 温度测量原理:DS18B20使用了一个精确的温度传感器,该传感器基于温度对半导体材料电阻值的影响。
在DS18B20中,温度传感器是由一对金属电极和一个细丝电阻器组成的。
当温度升高时,电阻值增加,反之亦然。
通过测量电阻值的变化,可以确定环境温度。
2. 单线串行总线通信:DS18B20通过单线串行总线与主设备通信,这意味着只需要一根数据线就可以实现数据传输。
通信过程中,主设备发送指令给DS18B20,DS18B20将温度数据以数字形式传输回主设备。
这种通信方式简化了硬件连接,降低了成本。
3. 温度转换和精度:DS18B20将温度数据转换为数字形式,并以12位精度表示。
它可以测量的温度范围为-55℃至+125℃,精度为±0.5℃。
DS18B20还具有可编程的分辨率功能,可以选择9位、10位、11位或者12位的温度分辨率。
4. 供电和工作模式:DS18B20可以通过总线路线提供供电,也可以通过外部电源提供供电。
它还具有多种工作模式,包括连续转换模式和温度警报模式。
在连续转换模式下,DS18B20可以周期性地测量温度并发送数据。
在温度警报模式下,DS18B20可以设置上下限温度阈值,当温度超过或者低于设定阈值时,会触发警报信号。
总结:DS18B20是一种数字温度传感器,采用了数字温度传感技术。
它通过测量温度对半导体材料电阻值的影响来测量环境温度,并将温度数据以数字形式传输给主设备。
DS18B20具有单线串行总线通信、温度转换和精度、供电和工作模式等特点。
它在许多领域中被广泛应用,如气象监测、工业自动化、家用电器等。
其高精度和简单的硬件连接使其成为一种理想的温度传感器。
stm32--温度传感器DS18B20使用
void Delay_us(u32 Nus)
{
SysTick->LOAD=Nus*9;
//时间加载
SysTick->CTRL|=0x01;
//开始倒数
while(!(SysTick->CTRL&(1<<16))); //等待时间到达
SysTick->CTRL=0X00000000;
//关闭计数器
SysTick->VAL=0X00000000;
//清空计数器
}
unsigned char ResetDS18B20(void) { unsigned char resport; SetDQ(); Delay_us(50);
ResetDQ(); Delay_us(500); //500us (该时间的时间范围可以从480到960微秒) SetDQ(); Delay_us(40); //40us //resport = GetDQ(); while(GetDQ()); Delay_us(500); //500us SetDQ(); return resport; }
void DS18B20WriteByte(unsigned char Dat) { unsigned char i; for(i=8;i>0;i--) {
ResetDQ(); //在15u内送数到数据线上,DS18B20在15-60u读数 Delay_us(5); //5us if(Dat & 0x01) SetDQ(); else ResetDQ(); Delay_us(65); //65us SetDQ(); Delay_us(2); //连续两位间应大于1us Dat >>= 1; } }
ds18b20工作原理
ds18b20工作原理
DS18B20是一种数字温度传感器,它基于One-Wire总线协议进行通信。
其工作原理是利用温度对半导体器件电阻值的变化进行测量。
在DS18B20内部,有一个温度传感器、一个模数转换器和一个存储器。
在测量过程中,DS18B20内部的温度传感器会不断感知环境温度,并将温度转换为数字信号。
然后,模数转换器将数字信号转换成相应的数字代码,代表温度值。
这些数字代码通过One-Wire总线协议被传送给主控设备(如微控制器或电脑)进行处理。
DS18B20的One-Wire总线协议是一种串行通信协议,它使用单根数据线进行数据传输。
通信过程中,主控设备产生一个复位脉冲,然后从DS18B20传感器接收到ROM编号(唯一标识符)以便进行身份验证。
接下来,主控设备发送命令给传感器,比如读取温度值。
DS18B20会将温度值的数字代码通过数据线传输给主控设备,主控设备解析代码并将其转换为实际温度值。
DS18B20还具有一定的存储能力,在开启存储功能后,它可以将温度值存储在内部的存储器中。
这样,即使主控设备没有及时读取温度值,DS18B20也能够保存最新的温度数据。
总的来说,DS18B20通过测量半导体器件电阻值的变化来获取环境温度,并通过One-Wire总线协议将温度值传输给主控设备。
它的工作原理简单而可靠,在许多应用中被广泛使用。
STM32 实验22 DS18B20实验
} //从 DS18B20 读取一个位
//返回值:1/0
u8 DS18B20_Read_Bit(void)
// read one bit
{
u8 data;
DS18B20_IO_OUT();//SET PA0 OUTPUT
DS18B20_DQ_OUT=0;
delay_us(2);
DS18B20_DQ_OUT=1;
DS18B20_IO_OUT(); //SET PA0 OUTPUT DS18B20_DQ_OUT=0; //拉低 DQ delay_us(750); //拉低 750us DS18B20_DQ_OUT=1; //DQ=1 delay_us(15); //15US } //等待 DS18B20 的回应 //返回 1:未检测到 DS18B20 的存在 //返回 0:存在 u8 DS18B20_Check(void) { u8 retry=0; DS18B20_IO_IN();//SET PA0 INPUT while (DS18B20_DQ_IN&&retry<200) {
DS18B20 的介绍就到这里,更详细的介绍,请大家参考 DS18B20 的技术手册。
3.22.2 硬件设计
由于开发板上标准配置是没有 DS18B20 这个传感器的,只有接口,所以大家需要自己焊接 一个 DS18B20 上去。
本节实验功能简介:开机的时候先检测是否有 DS18B20 存在,如果没有,则提示错误。 只有在检测到 DS18B20 之后才开始读取温度并显示在 LCD 上,如果发现了 DS18B20,则程 序每隔 200ms 左右读取一次数据,并把温度显示在 LCD 上。同样我们也是用 LED0 来指示程 序正在运行。
ds18b20程序设计傻瓜式讲解
ds18b20程序设计傻瓜式讲解
DS18B20 是一款数字温度传感器,可以直接读出被测温度,并采用 9 位数字量串行输出。
下面是一个简单的 DS18B20 程序设计讲解:
1. 初始化
在 DS18B20 通信过程中,首先需要初始化数据线,即将其置为高电平。
在初始化时,需要持续至少 480 微秒的高电平。
2. 跳过 ROM
在 DS18B20 中,每个传感器都有一个唯一的 ROM 序列号,可以通过跳过ROM 操作来避免对 ROM 进行操作。
具体操作是先发出一个低电平,然后持续至少 60 微秒的高电平。
3. 发送命令
在跳过 ROM 后,需要向传感器发送命令。
常用的命令有温度转换命令和读取温度命令。
温度转换命令是 0x44,读取温度命令是 0xBE。
4. 读取数据
在发送命令后,需要等待传感器响应。
传感器响应的标志是数据线上的低电平。
在低电平持续约 60-240 微秒后,数据线将变为高电平,此时可以开始读取数据。
每次读取一位数据后,需要将数据线置为低电平,等待传感器响应。
5. 数据解析
DS18B20 的数据由 9 位数字量组成,其中最高位是符号位。
如果最高位为0,则表示温度为正数;如果最高位为 1,则表示温度为负数。
其余 8 位为温度值,可以通过一定的计算公式将其转换为实际温度值。
以上就是 DS18B20 的程序设计流程。
需要注意的是,在实际应用中,还需要考虑数据传输的校验、错误处理等问题。
ds18b20温度传感器工作原理
ds18b20温度传感器工作原理DS18B20温度传感器是一种数字温度传感器,它可以实现远距离测温,并且具有高精度和可靠性。
它的工作原理主要是基于热敏电阻的温度测量原理,结合数字信号输出和单总线通信技术,使得其在各种工业和消费电子产品中得到了广泛的应用。
DS18B20温度传感器采用了微型封装技术,其外形小巧,安装方便,适用于各种恶劣环境。
其工作原理主要包括三个方面,温度测量原理、数字信号输出和单总线通信。
首先,DS18B20温度传感器的温度测量原理是基于热敏电阻的特性。
当温度发生变化时,热敏电阻的电阻值也会相应发生变化。
DS18B20内部集成了一个精密的模拟-数字转换器(ADC),可以将热敏电阻的电阻值转换为数字信号输出。
通过这种方式,DS18B20可以实现对温度的准确测量。
其次,DS18B20温度传感器通过数字信号输出来实现温度数据的传输。
它采用了1-Wire总线协议,通过一根数据线即可实现数据的传输和通信。
这种设计使得DS18B20在布线和连接方面更加简单和灵活。
最后,DS18B20温度传感器通过单总线通信来与主控设备进行数据交互。
它采用了独特的ROM存储器结构,每个传感器都有一个唯一的64位串行号码,可以通过这个号码来对传感器进行寻址和识别。
同时,DS18B20还具有多点测量、多传感器串联等特性,可以实现对多个传感器的同时管理和控制。
总的来说,DS18B20温度传感器的工作原理基于热敏电阻的温度测量原理,结合数字信号输出和单总线通信技术,实现了远距离、高精度、可靠性的温度测量和数据传输。
它在工业控制、环境监测、家用电器等领域都有着广泛的应用前景。
希望通过本文的介绍,能够更好地理解DS18B20温度传感器的工作原理和特性,为相关领域的应用提供参考和指导。
ds18b20温度传感器工作原理
ds18b20温度传感器工作原理
DS18B20温度传感器是一种数字温度传感器,它基于热电效
应来测量温度。
该传感器由一个精密的温度传感器和一个数字转换器组成。
以下是DS18B20温度传感器的工作原理:
1. 热电效应:DS18B20温度传感器利用热电效应来测量温度。
当两个不同材料的接触点形成温度梯度时,就会产生电动势。
传感器中的温度传感器部分采用的材料对温度变化非常敏感,因此产生的电动势可以反映出温度的变化。
2. 温度传感器:DS18B20温度传感器中的温度传感器部分是
由一个特殊的材料制成的。
该材料具有温度敏感性,当温度变化时,该材料会产生电动势。
这个电动势可以通过传感器的引脚进行读取和转换。
3. 数字转换器:DS18B20温度传感器具有内置的数字转换器。
这个数字转换器可以将从温度传感器获得的电压信号转换为数字信号。
数字信号可以直接读取和处理,而无需进行模拟信号转换。
4. 串行总线通信:DS18B20温度传感器通过一种称为One-
Wire总线的串行通信协议与主控制器进行通信。
传感器和主
控制器之间只需使用单一的数据线进行通信,使得传感器的连接变得简单方便。
总结起来,DS18B20温度传感器工作原理是利用热电效应测
量温度,并通过温度传感器和数字转换器来转换和读取温度信号。
该传感器通过One-Wire总线与主控制器进行通信。
51单片机DS18B20温度传感器原理及实验
51单片机DS18B20温度传感器原理及实验一、引言温度传感器是一种常用的传感器器件,它的作用是将物体的温度变化转换为电信号输出,以实现温度的监测和控制。
DS18B20是一种数字温度传感器,采用数字信号输出,具有体积小、精度高、线性度好等特点,被广泛应用于各种温度控制系统中。
本文将介绍DS18B20的工作原理及实验方法。
二、DS18B20的工作原理DS18B20是一种基于一线传输协议的数字温度传感器,其工作原理如下:1.接口电路:DS18B20具有三个引脚,分别是VDD、DQ和GND。
其中,VDD是供电引脚,DQ是数据引脚,GND是地引脚。
2.传感器原理:DS18B20内部包含一个温度传感器和一个数字转换器。
温度传感器采用热敏电阻的原理,通过测量热敏电阻的电阻值来反映物体的温度变化。
数字转换器将传感器测得的电阻值转换为数字信号输出。
三、实验流程以下是使用51单片机对DS18B20温度传感器进行实验的详细流程:1.硬件准备:-将DS18B20的VDD引脚连接到单片机的VCC引脚,DQ引脚连接到单片机的任意IO引脚,GND引脚连接到单片机的GND引脚。
-确保DS18B20的供电电压和单片机的工作电压一致。
2.初始化:-在程序中定义DS18B20的DQ引脚所对应的单片机的IO引脚。
-初始化DS18B20,即发送初始化指令给DS18B20。
3.温度转换:-发送温度转换指令给DS18B20,DS18B20开始测量温度。
-等待一定的延时,确保DS18B20完成温度转换。
4.读取温度:-发送读取温度指令给DS18B20,DS18B20将温度的原始数据发送给单片机。
-单片机通过计算将原始数据转换为温度值。
-温度值可以通过串口或LCD等方式进行显示。
5.循环实验:-以上步骤需要不断重复,以便实时监测温度的变化。
四、总结DS18B20温度传感器是一种常用的数字温度传感器,具有精度高、体积小、线性度好等特点,适用于各种温度控制系统。
18b20在stm32上驱动并附18b20详细资料[1]
光刻 rom 中的 64 位序列号是出厂前被光刻好的,它可以看作是该 ds18b20 的地址序列码。64 位光刻 rom 的排列是:开始 8 位(地址: 28h )是产品类 型标号,接着的 48 位是该 ds18b20 自身的序列号,并且每个 ds18b20 的序 列号都不相同,因此它可以看作是该 ds18b20 的地址序列码;最后 8 位则是 前面 56 位的循环冗余校验码( crc=x8+x5+x4+1 )。由于每一个 ds18b20 的 rom 数据都各不相同,因此微控制器就可以通过单总线对多个 ds18b20 进行寻 址,从而实现一根总线上挂接多个 ds18b20 的目的。
配置寄存器
配置寄存器是配置不同的位数来确定温度和数字的转化。
TM
R1
RO
1
1
1
1
1
低五位一直都是"1",TM 是测试模式位,用于设置 DS18B20 在工作模式还是 在测试模式。在 DS18B20 出厂时该位被设置为 0,用 户不要去改动。R1 和 R0 用来设置分辨率(DS18B20 出厂时被设置为 12 位)
二、DS18B20 结构.............................................................................................. 4 1.DS18B20 芯片封装结构:........................................................................... 4 2.DS18B20 内部结构: ................................................................................. 5
DS18B20温度传感器详解带c程序
00A2H
+0.5
0000 0000 0000 000
0000H
-0.5
1111 1111 1111 1000
FFF8H
-10.125
1111 1111 0110 1110
FF5EH
-25.0625
1111 1110 0110 1111
FF6FH
-55 执行序列与介绍 3.1 执行序列
duan=1; switch(i) {
case 0: if(zf==0) P1=numfh[zf];
else if(bai!=0) P1=numd[bai]; else if(shi!=0) P1=numd[shi]; else P1=numdg[ge]; break;
case 1: if(zf==0&&shi!=0) P1=numd[shi];
表 3.2 DS18B20 温度/数字对应关系表
温度(℃)
输出的二进制码
对应的十六进制码
+125
0000 0111 1101 0000
07D0H
+85
0000 0101 0101 0000
0550H
+25.0625
0000 0001 1001 0001
0191H
+10.125
0000 0000 1010 0010
uchar x,y; for(x=z;x>0;x--)
for(y=110;y>0;y--); } /******************15us 延时函数****************/ void delay(uint z) {
while(z--); } /******************初始化 DS18B20 函数****************/ void reset_ds18b20() {
ds18b20详解及程序
最近都在学习和写单片机的程序, 今天有空又模仿DS18B20温度测量显示实验写了一个与DS18B20基于单总线通信的程序.DS18B20 数字温度传感器(参考:智能温度传感器DS18B20的原理与应用)是DALLAS 公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。
因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计。
DS18B20 产品的特点: (1)、只要求一个I/O 口即可实现通信。
(2)、在DS18B20 中的每个器件上都有独一无二的序列号。
(3)、实际应用中不需要外部任何元器件即可实现测温。
(4)、测量温度范围在-55 到+125℃之间; 在-10 ~ +85℃范围内误差为±5℃; (5)、数字温度计的分辨率用户可以从9 位到12 位选择。
将12位的温度值转换为数字量所需时间不超过750ms;(6)、内部有温度上、下限告警设置。
DS18B20引脚分布图DS18B20 详细引脚功能描述:1、GND 地信号;2、DQ数据输入出引脚。
开漏单总线接口引脚。
当被用在寄生电源下,此引脚可以向器件提供电源;漏极开路, 常太下高电平. 通常要求外接一个约5kΩ的上拉电阻.3、VDD可选择的VDD 引脚。
电压范围:3~5.5V; 当工作于寄生电源时,此引脚必须接地。
DS18B20存储器结构图暂存储器的头两个字节为测得温度信息的低位和高位字节;第3, 4字节是TH和TL的易失性拷贝, 在每次电复位时都会被刷新;第5字节是配置寄存器的易失性拷贝, 同样在电复位时被刷新;第9字节是前面8个字节的CRC检验值.配置寄存器的命令内容如下:MSBLSBR0和R1是温度值分辨率位, 按下表进行配置.默认出厂设置是R1R0 = 11, 即12位.温度值分辨率配置表4种分辨率对应的温度分辨率为0.5℃, 0.25℃, 0.125℃, 0.0625℃(即最低一位代表的温度值)12位分辨率时的两个温度字节的具体格式如下:低字节:高字节:其中高字节前5位都是符号位S, 若分辨率低于12位时, 相应地使最低为0, 如: 当分辨率为10位时, 低字节为:, 高字节不变....一些温度与转换后输出的数字参照如下:由上表可看出, 当输出是负温度时, 使用补码表示, 方便计算机运算(若是用C语言, 直接将结果赋值给一个int变量即可).DS18B20 的使用方法:由于DS18B20 采用的是1-Wire 总线协议方式,即在一根数据线实现数据的双向传输,而对单片机来说,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。
DS18B20的工作原理
DS18B20的工作原理DS18B20是一种数字温度传感器,采用单总线接口进行通信。
它可以精确测量环境温度,并将温度值以数字形式传输给微控制器或其他设备。
DS18B20是一种广泛应用于工业自动化、家用电器、医疗设备等领域的温度传感器。
DS18B20的工作原理如下:1. 温度测量原理:DS18B20采用了基于半导体的温度测量原理。
它内部集成了温度传感器和模数转换器(ADC),可以将环境温度转换为数字信号。
DS18B20使用的是温度依赖的电阻器件,称为温度传感器。
当温度升高时,温度传感器的电阻值会发生变化,DS18B20利用这种变化来测量温度。
2. 单总线通信:DS18B20采用了单总线通信协议,即通过单根数据线进行数据传输。
这种通信方式简化了连接和控制的复杂性,只需使用一个引脚即可实现数据的传输和控制。
在单总线通信中,DS18B20作为从设备,由主控制器发出指令,DS18B20接收指令并返回温度数据。
3. 工作原理:DS18B20的工作原理可以分为三个步骤:初始化、温度转换和读取温度。
3.1 初始化:在通信开始前,主控制器需要发送初始化指令来识别和准备DS18B20。
初始化指令包括发送复位脉冲和读取DS18B20的存在脉冲。
复位脉冲使DS18B20进入准备接收指令的状态,存在脉冲用于检测DS18B20是否存在于总线上。
3.2 温度转换:初始化完成后,主控制器发送温度转换指令给DS18B20。
温度转换指令包括启动温度转换和等待转换完成。
DS18B20接收到指令后,开始测量环境温度,并将结果存储在内部寄存器中。
温度转换时间取决于DS18B20的分辨率设置,一般为750ms到12秒不等。
3.3 读取温度:温度转换完成后,主控制器发送读取温度指令给DS18B20。
DS18B20将温度值以数字形式传输给主控制器。
主控制器接收到温度数据后,可以进行进一步的处理和显示。
4. 分辨率设置:DS18B20支持多种温度分辨率设置,包括9位、10位、11位和12位。
ds18b20温度传感器工作原理
ds18b20温度传感器工作原理DS18B20温度传感器工作原理。
DS18B20温度传感器是一种数字式温度传感器,它具有高精度、数字输出、可编程分辨率和多路传感器等特点,因此在许多领域得到了广泛的应用。
那么,DS18B20温度传感器是如何工作的呢?接下来我们将详细介绍其工作原理。
首先,DS18B20温度传感器采用了数字信号输出,它内部集成了温度传感器和A/D转换器,并且具有唯一的64位ROM编码。
在工作时,DS18B20通过单总线接口与主控器相连,主控器向DS18B20发送指令,DS18B20将温度数据以数字信号的形式传输给主控器。
其次,DS18B20温度传感器采用了单总线通信协议,这意味着在同一总线上可以连接多个DS18B20传感器,每个传感器都有唯一的64位ROM编码,主控器可以通过ROM编码来识别和操作不同的传感器。
这种多路传感器的设计可以方便地实现对多个温度传感器的监测和控制。
此外,DS18B20温度传感器采用了数字式温度转换技术,它可以实现9至12位的可编程分辨率,因此可以满足不同应用对温度测量精度的要求。
在温度转换过程中,DS18B20会自动对温度进行采样和转换,并将转换后的数字信号传输给主控器,主控器可以通过计算和处理这些数字信号来获取温度值。
最后,DS18B20温度传感器内部集成了温度传感器和A/D转换器,温度传感器可以实时监测环境温度,并将温度转换为电压信号,A/D转换器将电压信号转换为数字信号输出。
这种集成设计可以减少外部元器件的使用,降低系统成本,提高系统稳定性和可靠性。
总的来说,DS18B20温度传感器通过数字信号输出、单总线通信、数字式温度转换和内部集成等技术实现了高精度、可编程分辨率和多路传感器的特点,其工作原理简单而有效,使其在各种温度测量和控制应用中得到了广泛的应用。
希望通过本文的介绍,能够让大家更加深入地了解DS18B20温度传感器的工作原理。
DS18B20的工作原理
DS18B20的工作原理DS18B20是一种数字温度传感器,采用了一种特殊的温度传感技术,微处理器驱动的温度变频。
它具有体积小、精度高、数字输出等优势,在许多应用领域得到了广泛的应用。
下面将详细介绍DS18B20的工作原理。
DS18B20传感器的核心部分是温度传感器芯片和数据线,它们通过一根三线的数据线来进行通信。
温度传感器芯片内部包含了一个温度传感器和一个ROM存储器,用来存储设备的唯一标识和一些配置信息。
在通信过程中,主机通过发送一系列命令和数据给传感器,传感器则返回温度数值和其他相关信息。
传感器的工作过程可以分为三个阶段:初始化、读取温度和休眠。
首先是初始化阶段。
主机会发送复位命令给传感器,使其进入初始化状态。
在初始化过程中,传感器会进行一些自检和配置操作,如检查电源电压是否正常、读取ROM存储器中的数据等。
如果初始化成功,传感器会发送一个存在应答信号给主机。
初始化完成后,主机可以开始读取温度。
主机发送读温度命令给传感器,传感器收到命令后会开始测量温度并将结果转换成数字信号。
传感器通过数据线将温度数值传输给主机。
传感器采用了一种特殊的变频技术,将温度数值转换为频率信号。
频率信号的周期和占空比与温度成正比。
主机通过计算频率信号的周期和占空比,可以得到温度的数值。
最后是休眠阶段。
传感器在完成温度读取后,会进入休眠状态以节省能量。
主机可以发送唤醒命令给传感器,使其从休眠状态中恢复。
DS18B20采用了一种基于时序的通信协议,通过数据线来传输命令和数据。
通信的过程非常简单,通过发送和接收不同的时序信号来实现不同的功能。
主机通过拉低数据线一定时间来发送数据,通过释放数据线来接收数据。
传感器根据主机发送的时序信号来判断主机的命令并进行相应的处理。
总结起来,DS18B20的工作原理是通过初始化、读取温度和休眠三个阶段来完成温度测量。
它采用了温度变频的技术,将温度转换为频率信号,通过数据线与主机进行通信。
stm32基于ds18b20的温度测量实例 实验原理
stm32基于ds18b20的温度测量实例实验原理
DS18B20是一款数字温度传感器,其测温范围为-55℃到+125℃,在-10℃到+85℃范围内误差为±°。
主机和从机通信使用单总线,即使用单线进行数据的发送和接收,在使用中不需要任何外围元件,独立芯片即可完成工作。
每个DS18B20都有独立唯一的64位-ID,此特性决定了它可以将任意多的DS18b20挂载到一根总线上,通过ROM搜索读取相应DS18B20的温度值。
单总线即只有一根数据线,系统中的数据交换,控制都由这根线完成。
One-Wire总线利用一根线实现双向通信,其协议对时序的要求较严格,如应答等时序都有明确的时间要求。
基本的时序包括复位及应答时序,写一位时序,读一位时序。
在复位及应答时序中,主器件发出复位信号后,要求从器件在规定的时间内送回应答信号;在位读和位写时序中,主器件要在规定的时间内读回或写出数据。
DS18B20的原理是基于以上这些特性的。
如果需要更详细的实验原理,可
以查阅相关资料或咨询专业人士获取帮助。
DS18B20的工作原理
DS18B20的工作原理DS18B20是一种数字温度传感器,具有高精度和数字输出的特点。
它采用1-Wire总线通信协议,可以方便地与微控制器进行通信。
本文将介绍DS18B20的工作原理,以帮助读者更好地理解这种传感器的工作方式。
一、DS18B20的基本结构1.1 DS18B20传感器由温度传感器、存储器和控制逻辑电路组成。
1.2 温度传感器部分采用模拟式温度传感器,能够将温度转换为电压信号。
1.3 存储器部分用于存储传感器的唯一标识号和温度数据。
二、DS18B20的工作原理2.1 当微控制器发送读取温度的命令时,DS18B20开始工作。
2.2 DS18B20将传感器测得的温度数据转换为数字信号,并通过1-Wire总线发送给微控制器。
2.3 微控制器接收到温度数据后,可以进行进一步的处理和显示。
三、DS18B20的精度和分辨率3.1 DS18B20具有高精度,温度测量精度可达±0.5°C。
3.2 DS18B20的分辨率可通过配置寄存器进行设置,最高可达12位。
3.3 高分辨率可以提供更精确的温度测量结果,但也会增加通信的时间。
四、DS18B20的应用领域4.1 DS18B20广泛应用于工业控制、电子设备和家用电器等领域。
4.2 在温度监控系统中,DS18B20可以实现对环境温度的实时监测和控制。
4.3 DS18B20还可以用于温度补偿、温度校准和温度报警功能。
五、DS18B20的优势和劣势5.1 DS18B20具有数字输出、高精度和简单的通信方式等优点。
5.2 DS18B20的缺点是对温度测量环境的要求较高,需要精确的供电和通信线路。
5.3 尽管存在一些局限性,但DS18B20仍然是一种性能稳定、可靠性高的温度传感器。
总结:DS18B20是一种高精度、数字输出的温度传感器,采用1-Wire总线通信协议。
通过本文的介绍,读者可以更好地了解DS18B20的工作原理和应用领域,为实际应用提供参考。
37. DS18B20温度传感器实验
普中STM32开发板带您进入ARM世界
DS18B20 的典型温度读取过程为:复位→发 SKIP ROM 命令( 0XCC )→发开始转换命令( 0X44)→延时→复位→发送 SKIP ROM 命令( 0XCC)→发读存储器命令( 0XBE)→连续读出两个字节数据(即温度)→ 结束。
数据线供电 2、独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线
即可实现微处理器与DS18B20的双向通讯。 3、DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,
实现组网多点测温。 4、DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集
成在形如一 只三极管的集成电路内。 5、温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃。
普中STM32开发板带您进入ARM世界
3.硬件电路
本实验使用到硬件资源如下: (1)D1指示灯 (2)串口1 (3)DS18B20温度传感器
D1指示灯、串口1电路在前面章节都介绍过,这里就不多说,DS18B20 温度传感器模块电路如图。
普中STM32开发板带您进入ARM世界
4.编写DS18B20温度控制程序
普中stm32开发板带您进入arm世界ds18b20外观实物如图普中stm32开发板带您进入arm世界ds18b20内部结构如图ds18b20温度传感器的内部存储器包括一个高速的暂存器ram和一个非易失性的可电擦除的eeprom后者存放高温度和低温度触发器thtl和配置寄存器
普中STM32开发板带您进入ARM世界
DS18B20温度传感器(基于STM32)
#include "stm32f10x.h"
#include "stdio.h"
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
/* TIM IT enable */
// TIM_ITConfig(TIM2, TIM_IT_CC1 , ENABLE);
/* TIM2 enable counter */
// TIM_Cmd(TIM1, ENABLE);
//TIM_Cmd(TIM2, ENABLE);
printf(" ok");
#include "platform_config.h"
#include "misc.h"
#include "DS18b20.h"
#include "Systick_Delay.h"
/** @addtogroup StdPeriph_Examples
* @{
*/
unsigned char sign , interger ;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
STM32制作DS18B20-温度传感器
折腾了一晚上,才把DS18B20的驱动移植到STM32上来。
以前在51上使用过单个和多个连接的DS18B20,有现成的程序了,以为很快就能弄好,结果还是被卡住了,下面说下几个关键点吧:首先是延时的问题,STM32上若用软件延时的话不太好算时间,所以要么用定时器要么用SysTick这个定时器来完成延时的计算。
相比之下用SysTick来的简单方便点。
接着是STM32 IO脚的配置问题,因为51是双向的IO,所以作为输入输出都比较方便。
STM32的IO是准双向的IO,网上查了下资料,说将STM32的IO配置成开漏输出,然后外接上拉即可实现双向IO。
于是我也按规定做了,但调了老半天都不成功,是因为DS18B20没有响应的信号。
在烦躁之际只有试下将接DQ的IO分别拉低和拉高看能不能读入正确的信号。
结果果然是读入数据不对,原来我将IO配成开漏输出后相当然的以为读数据是用GPIO_ReadOutputDataBit(),这正是问题所在,后来将读入的函数改为GPIO_ReadInputDataBit()就OK了。
现在温度是现实出来了,但跟我家里那台德胜收音机上显示的温度相差2度,都不知道是哪个准了,改天再找个温度计验证下。
下面引用一段DS18B20的时序描述,写的很详细:DS18B20的控制流程根据DS18B20的通信协议,DS18B20只能作为从机,而单片机系统作为主机,单片机控制DS18B20完成一次温度转换必须经过3个步骤:复位、发送ROM指令、发送RAM指令。
每次对DS18B20的操作都要进行以上三个步骤。
复位过程为:单片机将数据线拉低至少480uS,然后释放数据线,等待15-60uS让DS18B20接收信号,DS18B20接收到信号后,会把数据线拉低60-240uS,主机检测到数据线被拉低后标识复位成功;发送ROM指令:ROM指令表示主机对系统上所接的全部DS18B20进行寻址,以确定对那一个DS18B20进行操作,或者是读取某个DS18B20的ROM序列号。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
折腾了一晚上,才把DS18B20的驱动移植到STM32上来。
以前在51上使用过单个和多个连接的DS18B20,有现成的程序了,以为很快就能弄好,结果还是被卡住了,下面说下几个关键点吧:首先是延时的问题,STM32上若用软件延时的话不太好算时间,所以要么用定时器要么用SysTick这个定时器来完成延时的计算。
相比之下用SysTick来的简单方便点。
接着是STM32 IO脚的配置问题,因为51是双向的IO,所以作为输入输出都比较方便。
STM32的IO是准双向的IO,网上查了下资料,说将STM32的IO配置成开漏输出,然后外接上拉即可实现双向IO。
于是我也按规定做了,但调了老半天都不成功,是因为DS18B20没有响应的信号。
在烦躁之际只有试下将接DQ的IO分别拉低和拉高看能不能读入正确的信号。
结果果然是读入数据不对,原来我将IO配成开漏输出后相当然的以为读数据是用GPIO_ReadOutputDataBit(),这正是问题所在,后来将读入的函数改为GPIO_ReadInputDataBit()就OK 了。
现在温度是现实出来了,但跟我家里那台德胜收音机上显示的温度相差2度,都不知道是哪个准了,改天再找个温度计验证下。
下面引用一段DS18B20的时序描述,写的很详细:DS18B20的控制流程根据DS18B20的通信协议,DS18B20只能作为从机,而单片机系统作为主机,单片机控制DS18B20完成一次温度转换必须经过3个步骤:复位、发送ROM指令、发送RAM指令。
每次对DS18B20的操作都要进行以上三个步骤。
复位过程为:单片机将数据线拉低至少480uS,然后释放数据线,等待15-60uS让DS18B20接收信号,DS18B20接收到信号后,会把数据线拉低60-240uS,主机检测到数据线被拉低后标识复位成功;发送ROM指令:ROM指令表示主机对系统上所接的全部DS18B20进行寻址,以确定对那一个DS18B20进行操作,或者是读取某个DS18B20的ROM序列号。
发送RAM指令:RAM指令用于单片机对DS18B20内部RAM进行操作,如读取寄存器的值,或者设置寄存器的值。
具体的RAM和RAM指令请查阅DS18B20的数据手册。
下面简单介绍:1、ROM操作命令:DS18B20采用一线通信接口。
因为一线通信接口,必须在先完成ROM设定,否则记忆和控制功能将无法使用。
一旦总线检测到从属器件的存在,它便可以发出器件ROM操作指令,所有ROM操作指令均为8位长度,主要提供以下功能命令:1 )读ROM(指令码0X33H):当总线上只有一个节点(器件)时,读此节点的64位序列号。
如果总线上存在多于一个的节点,则此指令不能使用。
2 )ROM匹配(指令码0X55H):此命令后跟64位的ROM序列号,总线上只有与此序列号相同的DS18B20才会做出反应;该指令用于选中某个DS18B20,然后对该DS18B20进行读写操作。
3 )搜索ROM(指令码0XF0H):用于确定接在总线上DS18B20的个数和识别所有的64位ROM序列号。
当系统开始工作,总线主机可能不知道总线上的器件个数或者不知道其64位ROM序列号,搜索命令用于识别所有连接于总线上的64位ROM序列号。
4 )跳过ROM(指令码0XCCH):此指令只适合于总线上只有一个节点;该命令通过允许总线主机不提供64位ROM序列号而直接访问RAM,以节省操作时间。
5 )报警检查(指令码0XECH):此指令与搜索ROM指令基本相同,差别在于只有温度超过设定的上限或者下限值的DS18B20才会作出响应。
只要DS18B20一上电,告警条件就保持在设置状态,直到另一次温度测量显示出非告警值,或者改变TH或TL的设置使得测量值再一次位于允许的范围之内。
储存在EEPROM内的触发器用于告警。
2、RAM指令DS18B20有六条RAM命令:1)温度转换(指令码0X44H):启动DS18B20进行温度转换,结果存入内部RAM。
2)读暂存器(指令码0XBEH):读暂存器9个字节内容,此指令从RAM 的第1个字节(字节0)开始读取,直到九个字节(字节8,CRC值)被读出为止。
如果不需要读出所有字节的内容,那么主机可以在任何时候发出复位信号以中止读操作。
3)写暂存器(指令码0X4EH):将上下限温度报警值和配置数据写入到RAM的2、3、4字节,此命令后跟需要些入到这三个字节的数据。
4)复制暂存器(指令码0X48H):把暂存器的2、3、4字节复制到EEPROM 中,用以掉电保存。
5)重新调E2RAM(指令码0XB8H):把EEROM中的温度上下限及配置字节恢复到RAM的2、3、4字节,用以上电后恢复以前保存的报警值及配置字节。
6)读电源供电方式(指令码0XB4H):启动DS18B20发送电源供电方式的信号给主CPU。
对于在此命令送至DS18B20后所发出的第一次读出数据的时间片,器件都会给出其电源方式的信号。
“0”表示寄生电源供电。
“1”表示外部电源供电。
下面是结合实际测试总结出来的DS18B20的操作流程:1、DS18B20的初始化(1)先将数据线置高电平“1”。
(2)延时(该时间要求的不是很严格,但是尽可能的短一点)。
(3)数据线拉到低电平“0”。
(4)延时490微秒(该时间的时间范围可以从480到960微秒)。
(5)数据线拉到高电平“1”。
(6)延时等待(如果初始化成功则在15到60毫秒时间之内产生一个由DS18B20所返回的低电平“0”。
据该状态可以来确定它的存在,但是应注意不能无限的进行等待,不然会使程序进入死循环,所以要进行超时控制)。
(7)若CPU读到了数据线上的低电平“0”后,还要做延时,其延时的时间从发出的高电平算起(第(5)步的时间算起)最少要480微秒。
(8)将数据线再次拉高到高电平“1”后结束。
2、DS18B20的写操作(1)数据线先置低电平“0”。
(2)延时确定的时间为2(小于15)微秒。
(3)按从低位到高位的顺序发送字节(一次只发送一位)。
(4)延时时间为62(大于60)微秒。
(5)将数据线拉到高电平,延时2(小于15)微秒。
(6)重复上(1)到(6)的操作直到所有的字节全部发送完为止。
(7)最后将数据线拉高。
3、 DS18B20的读操作(1)将数据线拉高“1”。
(2)延时2微秒。
(3)将数据线拉低“0”。
(4)延时2(小于15)微秒。
(5)将数据线拉高“1”,同时端口应为输入状态。
(6)延时4(小于15)微秒。
(7)读数据线的状态得到1个状态位,并进行数据处理。
(8)延时62(大于60)微秒。
顺便把程序也贴上来吧,给大家参考下。
使用的方法:只要调用一次 ds18b20_start() 来初始化DS18B20,然后每次读温度时直接调用 ds18b20_read()就可以了。
如ds18b20_start();while(1){for(i=1000000;i>0;i--);val = ds18b20_read();}[cpp]view plaincopy1//========================================================23// DS18B20.C By ligh45//========================================================67#include "STM32Lib//stm32f10x.h"8#include "DS18B20.h"9101112#define EnableINT()13#define DisableINT()1415#define DS_PORT GPIOA16#define DS_DQIO GPIO_Pin_117#define DS_RCC_PORT RCC_APB2Periph_GPIOA18#define DS_PRECISION 0x7f //精度配置寄存器 1f=9位; 3f=10位; 5f=11位; 7f=12位; 19#define DS_AlarmTH 0x6420#define DS_AlarmTL 0x8a21#define DS_CONVERT_TICK 10002223#define ResetDQ() GPIO_ResetBits(DS_PORT,DS_DQIO)24#define SetDQ() GPIO_SetBits(DS_PORT,DS_DQIO)25#define GetDQ() GPIO_ReadInputDataBit(DS_PORT,DS_DQIO)262728static unsigned charTempX_TAB[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};293031void Delay_us(u32 Nus)32{33 SysTick->LOAD=Nus*9; //时间加载34 SysTick->CTRL|=0x01; //开始倒数35while(!(SysTick->CTRL&(1<<16))); //等待时间到达36 SysTick->CTRL=0X00000000; //关闭计数器37 SysTick->VAL=0X00000000; //清空计数器38}39404142unsigned char ResetDS18B20(void)43{44 unsigned char resport;45 SetDQ();46 Delay_us(50);4748 ResetDQ();49 Delay_us(500); //500us (该时间的时间范围可以从480到960微秒)50 SetDQ();51 Delay_us(40); //40us52 //resport = GetDQ();53while(GetDQ());54 Delay_us(500); //500us55 SetDQ();56return resport;57}5859void DS18B20WriteByte(unsigned char Dat)60{61 unsigned char i;62for(i=8;i>0;i--)63 {64 ResetDQ(); //在15u内送数到数据线上,DS18B20在15-60u读数65 Delay_us(5); //5us66if(Dat & 0x01)67 SetDQ();68else69 ResetDQ();70 Delay_us(65); //65us71 SetDQ();72 Delay_us(2); //连续两位间应大于1us73 Dat >>= 1;74 }75}767778unsigned char DS18B20ReadByte(void)79{80 unsigned char i,Dat;81 SetDQ();82 Delay_us(5);83for(i=8;i>0;i--)84 {85 Dat >>= 1;86 ResetDQ(); //从读时序开始到采样信号线必须在15u内,且采样尽量安排在15u的最后87 Delay_us(5); //5us88 SetDQ();89 Delay_us(5); //5us90if(GetDQ())91 Dat|=0x80;92else93 Dat&=0x7f;94 Delay_us(65); //65us95 SetDQ();96 }97return Dat;98}99100101void ReadRom(unsigned char *Read_Addr)102{103 unsigned char i;104105 DS18B20WriteByte(ReadROM);106107for(i=8;i>0;i--)108 {109 *Read_Addr=DS18B20ReadByte();110 Read_Addr++;111 }112}113114115void DS18B20Init(unsigned char Precision,unsigned char AlarmTH,unsigned char AlarmTL)116{117 DisableINT();118 ResetDS18B20();119 DS18B20WriteByte(SkipROM);120 DS18B20WriteByte(WriteScratchpad);121 DS18B20WriteByte(AlarmTL);122 DS18B20WriteByte(AlarmTH);123 DS18B20WriteByte(Precision);124125 ResetDS18B20();126 DS18B20WriteByte(SkipROM);127 DS18B20WriteByte(CopyScratchpad);128 EnableINT();129130while(!GetDQ()); //等待复制完成 ///////////131}132133134void DS18B20StartConvert(void)135{136 DisableINT();137 ResetDS18B20();138 DS18B20WriteByte(SkipROM);139 DS18B20WriteByte(StartConvert);140 EnableINT();141}142143void DS18B20_Configuration(void)144{145 GPIO_InitTypeDef GPIO_InitStructure;146147 RCC_APB2PeriphClockCmd(DS_RCC_PORT, ENABLE);148149 GPIO_InitStructure.GPIO_Pin = DS_DQIO;150 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; //开漏输出151 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //2M时钟速度152 GPIO_Init(DS_PORT, &GPIO_InitStructure);153}154155156void ds18b20_start(void)157{158 DS18B20_Configuration();159 DS18B20Init(DS_PRECISION, DS_AlarmTH, DS_AlarmTL);160 DS18B20StartConvert();161}162163164unsigned short ds18b20_read(void)165{166 unsigned char TemperatureL,TemperatureH;167 unsigned int Temperature;168169 DisableINT();170 ResetDS18B20();171 DS18B20WriteByte(SkipROM);172 DS18B20WriteByte(ReadScratchpad);173 TemperatureL=DS18B20ReadByte();174 TemperatureH=DS18B20ReadByte();175 ResetDS18B20();176 EnableINT();177178if(TemperatureH & 0x80)179 {180 TemperatureH=(~TemperatureH) | 0x08;181 TemperatureL=~TemperatureL+1;182if(TemperatureL==0)183 TemperatureH+=1;184 }185186 TemperatureH=(TemperatureH<<4)+((TemperatureL&0xf0)>>4); 187 TemperatureL=TempX_TAB[TemperatureL&0x0f];188189 //bit0-bit7为小数位,bit8-bit14为整数位,bit15为正负位190 Temperature=TemperatureH;191 Temperature=(Temperature<<8) | TemperatureL;192193 DS18B20StartConvert();194195return Temperature;196}197198199200201202//============================================203204// DS18B20.H205206//============================================207208#ifndef __DS18B20_H209#define __DS18B20_H210211#define SkipROM 0xCC //跳过ROM212#define SearchROM 0xF0 //搜索ROM213#define ReadROM 0x33 //读ROM214#define MatchROM 0x55 //匹配ROM215#define AlarmROM 0xEC //告警ROM216217#define StartConvert 0x44 //开始温度转换,在温度转换期间总线上输出0,转换结束后输出1218#define ReadScratchpad 0xBE //读暂存器的9个字节219#define WriteScratchpad 0x4E //写暂存器的温度告警TH和TL220#define CopyScratchpad 0x48 //将暂存器的温度告警复制到EEPROM,在复制期间总线上输出0,复制完后输出1221#define RecallEEPROM 0xB8 //将EEPROM的温度告警复制到暂存器中,复制期间输出0,复制完成后输出1222#define ReadPower 0xB4 //读电源的供电方式:0为寄生电源供电;1为外部电源供电223224225void ds18b20_start(void);226unsigned short ds18b20_read(void);227228229#endif。