DS18B20 是美国DALLAS 半导体公司继DS1820之后最新推出的一种改进型智能温度传感器。与传统的热敏电阻相比,他能够直接读出被测温度并且可根据实际要求通过简单的编程实现9~12 位的数字值读数方式。可以分别在93.75 ms 和750 ms 内完成9 位和12 位的数字量,并且从DS18B20 读出的信息或写入DS18B20 的信息仅需要一根口线(单线接口) 读写,温度变换功率来源于数据总线,总线本身也可以向所挂接的DS18B20供电,而无需额外电源。因而使用DS18B20 可使系统结构更趋简单,可靠性更高。他在测温精度、转换给用户时间、传输距离、分辨率等方面较DS1820 有了很大的改进,带来了更方便的使用和更令人满意的效果。
DS18B20测温工作原理:
温度传感器DS18B20中,低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1,高温度系数晶振随温度变化其震荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入,图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲后进行计数,进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定。
每次测量前,首先将-55 ℃所对应的基数分别置入减法计数器1和温度寄存器中,减法计数器1和温度寄存器被预置在-55 ℃所对应的一个基数值。减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图2中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直至温度寄存器值达到被测温度值,这就是DS18B20的测温原理。
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测量温度电路图
上图是MC430F14板上的DS18B20电路图
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温控系统
STM32F103CB微处理器模块是整个温控系统的核心模块,主要功能是实时处理数字温度传感器DS18B20采集到的温度信息,并将得到的温度信息值与模糊PID控制器设定控制输出曲线进行实时对比得出需要输出的控制信号量;产生输出控制PWM波信号和通过232通讯传输给上位机实时监控显示。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)