DS18b20温度传感器如何测量温度?( *** 作方法和电路)

DS18b20温度传感器如何测量温度?( *** 作方法和电路),第1张

  DS18B20 是美国DALLAS 半导体公司继DS1820之后最新推出的一种改进型智能温度传感器。与传统的热敏电阻相比,他能够直接读出被测温度并且可根据实际要求通过简单的编程实现9~12 位的数字值读数方式。可以分别在93.75 ms 和750 ms 内完成9 位和12 位的数字量,并且从DS18B20 读出的信息或写入DS18B20 的信息仅需要一根口线(单线接口) 读写,温度变换功率来源于数据总线,总线本身也可以向所挂接的DS18B20供电,而无需额外电源。因而使用DS18B20 可使系统结构更趋简单,可靠性更高。他在测温精度、转换给用户时间、传输距离、分辨率等方面较DS1820 有了很大的改进,带来了更方便的使用和更令人满意的效果。

DS18b20温度传感器如何测量温度?( *** 作方法和电路),DS18b20温度传感器如何测量温度?,第2张

  DS18B20测温工作原理:

  温度传感器DS18B20中,低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1,高温度系数晶振随温度变化其震荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入,图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲后进行计数,进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定。

  每次测量前,首先将-55 ℃所对应的基数分别置入减法计数器1和温度寄存器中,减法计数器1和温度寄存器被预置在-55 ℃所对应的一个基数值。减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图2中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直至温度寄存器值达到被测温度值,这就是DS18B20的测温原理。

DS18b20温度传感器如何测量温度?( *** 作方法和电路),DS18b20温度传感器如何测量温度?,第3张

  DS18B20的核心功能是直接温度-数字测量。其温度转换可由用户自定义为9、10、11、12位精度分别为0.5℃、0.25℃、0.125℃、0.0625℃分辨率。值得注意的是,上电默认为12位转换精度。DS18B20上电后工作在低功耗闲置状态下。主设备必须向DS18B20发送温度转换命令[44h]才能开始温度转换。温度转换后,温度转换的值将会保存在暂存存储器的温度寄存器中,并且DS18B20将会恢复到闲置状态。如果DS18B20是由外部供电,当发送完温度转换命令[44h]后,主设备可以执行“读数据时序”。若此时温度转换正在进行DS18B20将会响应“0”,若温度转换完成则会响应“1”。如果DS18B20是由“寄生电源”供电,该响应的技术将不能使用,因为在整个温度转换期间,总线必须强制拉高。

  DS18B20的温度输出数据时在摄氏度下校准的;若是在华氏度下应用的话,可以用查表法或者常规的数据换算。温度数据以一个16位标志扩展二进制补码数的形式存储在温度寄存器中(详见图2)。符号标志位(S )温度的正负极性:正数则S=0,负数则S=1。如果DS18B20被定义为12位的转换精度,温度寄存器中的所有位都将包含有效数据。若为11位转换精度,则bit 0为未。

  DS18B20工作过程

  DS18B20控制方法(DS18B20有六条控制命令):

  温度转换 44H 启动DS18B20进行温度转换

  读暂存器 BEH 读暂存器9位二进制数字

  写暂存器 4EH 将数据写入暂存器的TH、TL字节

  复制暂存器 48H 把暂存器的TH、TL字节写到E2RAM

  重新调E2RAM B8H 把E2RAM中的TH、TL字节写到暂存器TH、TL字节

  读电源供电方式 B4H 启动DS18B20发送电源供电方式的信号给主CPU

  Void delay_18B20(us)

  {

  While(us--);

  }

  1. 初始化

  (1) 先将数据线置高电平“1”。

  (2) 延时(该时间要求的不是很严格,但是尽可能的短一点)

  (3) 数据线拉到低电平“0”。

  (4) 延时750微秒(该时间的时间范围可以从480到960微秒)。

  (5) 数据线拉到高电平“1”。

  (6) 延时等待(如果初始化成功则在15到60微妙时间之内产生一个由DS18B20所返回的低电平“0”。据该状态可以来确定它的存在,但是应注意不能无限的进行等待,不然会使程序进入死循环,所以要进行超时控制)。

  (7) 若CPU读到了数据线上的低电平“0”后,还要做延时,其延时的时间从发出的高电平算起(第(5)步的时间算起)最少要480微秒。

  (8) 将数据线再次拉高到高电平“1”后结束。

  void ds1820rset() //ds1820复位

  {

  DQ = 1; //DQ复位

  delay_18B20(4); //延时

  DQ = 0; //DQ拉低

  delay_18B20(100); //精确延时大于480us

  DQ = 1; //拉高

  delay_18B20(40);

  }

  2. 写数据 *** 作

  (1) 数据线先置低电平“0”。

  (2) 延时确定的时间为15微秒。

  (3) 按从高位到低位的顺序发送字节(一次只发送一位)。D7到D0的次序

  (4) 延时时间为45微秒。

  (5) 将数据线拉到高电平。

  (6) 重复上(1)到(6)的 *** 作直到所有的字节全部发送完为止。

  (7) 最后将数据线拉高。

  void ds1820wrdata(uchar wdata) /*写数据*/

  {

  unsigned char I,temp=0x00;

  for (i=8;i》0;i--)

  { DQ=0;

  delay_18B20(15)

  temp=1《《i-1;

  DQ=wdata&temp;

  delay_18B20(45);

  DQ=1;

  }

  }

  3. 读数据 *** 作

  (1)将数据线拉高“1”。

  (2)延时2微秒。

  (3)将数据线拉低“0”。

  (4)延时3微秒。

  (5)将数据线拉高“1”。

  (6)延时5微秒。

  (7)读数据线的状态得到1个状态位,并进行数据处理。

  (8)延时60微秒。

  读一位二进制数

  bit ds_read_bit(void)

  {

  bit dat;

  DQ=0;

  delay_18B20(2);

  DQ=1;

  delay_18B20(3);

  dat=DQ;

  delay_18B20(100);

  return(dat);

  }

  读一个字节,8位二进制数

  uchar ds1820readdata() //读数据

  {

  unsiged char i,j,value=0;

  for(i=0;i《8;i++)

  {

  j=ds_read_bit();

  value |=j《《7-i;

  }

  return(value);

  }

DS18b20测量温度电路

DS18b20温度传感器如何测量温度?( *** 作方法和电路),DS18b20温度传感器如何测量温度?( *** 作方法和电路),第4张
 

  上图是MC430F14板上的DS18B20电路图

DS18b20温度传感器如何测量温度?( *** 作方法和电路),DS18b20温度传感器如何测量温度?( *** 作方法和电路),第5张

  DS18B20应用电路 Ds1820_Bus = 0; //产生下降沿,进入写时序(15us内送上数据)

  Ds1820_Bus = data_1820&0x01; //从低位开始送数

  Delay_X15us(3);//延时45us,保证18b20采样到数据

  Ds1820_Bus = 1; //拉高电平完成送数

  Delay_X15us(1);//连续送数要间隔至少1us(这里15us)

  data_1820》》=1;//移位

基于STM32F103CB的DS18B20温控系统

DS18b20温度传感器如何测量温度?( *** 作方法和电路),基于STM32F103CB的DS18B20温控系统,第6张

  STM32F103CB微处理器模块是整个温控系统的核心模块,主要功能是实时处理数字温度传感器DS18B20采集到的温度信息,并将得到的温度信息值与模糊PID控制器设定控制输出曲线进行实时对比得出需要输出的控制信号量;产生输出控制PWM波信号和通过232通讯传输给上位机实时监控显示。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2594835.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-09
下一篇 2022-08-09

发表评论

登录后才能评论

评论列表(0条)

保存