DS18B20温度传感器学习

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
if (SysTick_Config(720000)) //配置 点滴时钟的频率 {
while (1); }
while (1) {
delay(100); //延时 1 秒钟 temp_18B20data=get18B20data();//获取温度值 if(tempS==0) //判断温度值的正负
temper[0]='‐'; else
TL=read18B20byte(); // LSB 连续读,先读去地位再读取高位数据 TH=read18B20byte(); // MSB 第三步 温度数据的处理,提取符号位和数据位 数据的格式如下图,读取的两个字节中,高字节的二进制中的前面 5 位是符号位,如果测 得的温度大于 0,这 5 位为 0,只要将测到的数值乘于 0.0625 即可得到实际温度;如果温度小 于 0,这 5 位为 1,测到的数值需要取反加 1 再乘于 0.0625 即可得到实际温度。所以程序中当 高字节大于 7(0000 0111)时,符号位为负,否则为正。最后返回算出的温度值。
if(TH>7) //高 5 位为 符号位,只有高 5 位全为 0 时才为正号 {
TH=~TH; TL=~TL; tempS=0;//温度为负 } else tempS=1;//温度为正
tem=TH; //获得高八位 tem<<=8; tem+=TL;//获得低八位 tem=(float)tem*0.625;//转换 return tem; //返回温度值 } 第一步,开始温度转换,这里用到了 DS18B20 的指令 0xcc 和 0x44。这些指令在 DS18B20 的芯片手册中都有,如下图(更多详细资料请查阅手册):
DS18B20 内部寄存器映射如下图所示:
下面开始代码的编写,我们这里直接分析 main()函数,功能就是获取温度值,然后每秒钟 通过串口打印 1 次温度值。实现代码如下:
int main(void) {
RCC_Configuration(); //配置时钟 GPIO_Configuration();//配置 GPIO 口,也配置了串口所用的 GPIO 口 USART_Configuration();//配置串口通讯的参数
下面把程序烧录到开发板,每秒钟会通过串口打印实时温度值,现象如下:
Байду номын сангаас
if(TH>7) //高 5 位为 符号位,只有高 5 位全为 0 时才为正号 { TH=~TH; TL=~TL; tempS=0;//温度为负 } else tempS=1;//温度为正
tem=TH; //获得高八位 tem<<=8; tem+=TL;//获得低八位 tem=(float)tem*0.625;//转换 return tem; //返回温度值 这里的 1s 计时使用的是 SysTick 中断,中断处理函数为 TimingDelay_Decrement();
DS18B20 测温系统具有测温系统简单、测温精度高、连接方便、占用口线少等优点。DS18B20 默认为单总线 12 位(二进制)温度读数。内部有 64 位唯一的 ID 编码。工作电压从 3.0~5.5V。 测量温度范围从‐55℃~125℃。最高±0.0625℃分辩率。 有两种实现读取温度的方式: 1、DS18B20 寄生电源供电方式电路
这里我们主要讲温度获取函数 get18B20data(),代码如下: //从 ds18b20 得到温度值 //精度:0.1C //返回值:温度值 (‐550~1250) short get18B20data(void) {
u8 TL,TH;
short tem;
start18B20 (); // ds18B20 start convert res18B20 (); //复位 18B20 check18B20 ();//检测 18B20 的存在 write18B20byte (0xcc);// 忽略 64 位 ROM 地址,直接向 DS18B20 发温度变换命令 write18B20byte (0xbe);// 读内部 RAM 中 9 字节的内容 的指令 TL=read18B20byte(); // LSB 连续读,先读去地位再读取高位数据 TH=read18B20byte(); // MSB
在寄生电源供电方式下,DS18B20 从单线信号线上汲取能量:在信号线 DQ 处于高电平期 间把能量储存在内部电容里,在信号线处于低电平期间消耗电容上的电能工作,直到高电平到 来再给寄生电源(电容)充电。
独特的寄生电源方式有三个好处: 1)进行远距离测温时,无需本地电源 2)可以在没有常规电源的条件下读取 ROM 3)电路更加简洁,仅用一根 I/O 口实现测温
外部电源供电方式是 DS18B20 最佳的工作方式,工作稳定可靠,抗干扰能力强,而且电路 也比较简单,可以开发出稳定可靠的多点温度监控系统。 DS18B20 使用中注意事项
DS18B20 虽然具有测温系统简单、测温精度高、连接方便、占用口线少等优点,但在实际 应用中也应注意以下几方面的问题:
较小的硬件开销需要相对复杂的软件进行补偿,由于 DS18B20 与微处理器间采用串行数据 传送,因此,在对 DS18B20 进行读写编程时,必须严格的保证读写时序,否则将无法读取测温 结果。在使用 PL/M、C 等高级语言进行系统程序设计时,对 DS18B20 操作部分最好采用汇编语
这种方式对供电电压要求比较高 必须在5v 不然会造成很大的误差,DS18B20 的VDD 引脚 必须接地,只适合简单的单点采集。可靠性难以保证,不能用电池供电。一般不建议采用。
2、DS18B20 的外部电源供电方式
在外部电源供电方式下,DS18B20 工作电源由 VDD 引脚接入,此时 I/O 线不需要强上拉, 不存在电源电流不足的问题,可以保证转换精度,同时在总线上理论可以挂接任意多个 DS18B20 传感器,组成多点测温系统。注意:在外部供电的方式下,DS18B20 的 GND 引脚不能悬空,否 则不能转换温度,读取的温度总是 85℃。
言实现。 在 DS18B20 的有关资料中均未提及单总线上所挂 DS18B20 数量问题,容易使人误认为可以
挂任意多个 DS18B20,在实际应用中并非如此。当单总线上所挂 DS18B20 超过 8 个时,就需要 解决微处理器的总线驱动问题,这一点在进行多点测温系统设计时要加以注意。
连接 DS18B20 的总线电缆是有长度限制的。试验中,当采用普通信号电缆传输长度超过 50m 时,读取的测温数据将发生错误。当将总线电缆改为双绞线带屏蔽电缆时,正常通讯距离可达 150m,当采用每米绞合次数更多的双绞线带屏蔽电缆时,正常通讯距离进一步加长。这种情况 主要是由总线分布电容使信号波形产生畸变造成的。因此,在用 DS18B20 进行长距离测温系统 设计时要充分考虑总线分布电容和阻抗匹配问题。
temper[0]='+';
temper[1]=temp_18B20data/100+0x30; temper[2]=(temp_18B20data%100)/10+0x30; temper[3]='.'; temper[4]=temp_18B20data%10+0x30; printf("\n\r 当前温度:"); printf(temper); //打印 温度值 printf("\n\r"); } }
开始温度转换的函数如下: //开始温度转换 void start18B20 (void)// ds18B20 start convert {
res18B20(); check18B20 (); write18B20byte (0xcc);// 忽略 64 位 ROM 地址,直接向 DS18B20 发温度变换命令 write18B20byte (0x44);// 启动 DS18B20 进行温度转换,12 位转换时最长为 750ms(9 位 为 93.75ms)。结果存入内部 9 字节 RAM 中。 }
第二步 进行温度数据的读取。先发送读取命令,然后进行温度数据的读取 res18B20 (); //复位 18B20 check18B20 ();//检测 18B20 的存在 write18B20byte (0xcc);// 忽略 64 位 ROM 地址,直接向 DS18B20 发温度变换命令 write18B20byte (0xbe);// 读内部 RAM 中 9 字节的内容 的指令
在 DS18B20 测温程序设计中,向 DS18B20 发出温度转换命令后,程序总要等待 DS18B20 的 返回信号,一旦某个 DS18B20 接触不好或断线,当程序读该 DS18B20 时,将没有返回信号,程 序进入死循环。这一点在进行 DS18B20 硬件连接和软件设计时也要给予一定的重视。
测温电缆线建议采用屏蔽 4 芯双绞线,其中一对线接地线与信号线,另一组接 VCC 和地线, 屏蔽层在源端单点接地
第十四节 DS18B20 温度传感器读取温度的学习
首先我们看一下科星 F107 开发板关于 DS18B20 的硬件原理图:
如上图所示,MCU 通过 PD7 引脚连接 DS18B20 的 DQ(数字信号输入/输出端)进行指令和 数据的交互,所以我们需要配置 PD7 这个 GPIO 口。
下面我们讲一下 DS18B20 的使用(更加详细的资料,请查阅 DS18B20 的芯片手册)
相关文档
最新文档