DS-18B20 数字温度传感器介绍_第1页
DS-18B20 数字温度传感器介绍_第2页
DS-18B20 数字温度传感器介绍_第3页
DS-18B20 数字温度传感器介绍_第4页
DS-18B20 数字温度传感器介绍_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

DS 18B20 数字温度传感器介绍 应用介绍 DALLAS 最新单线数字温度传感器 DS18B20 简介新的 一线器件 体积更小 适用电压 更宽 更经济 Dallas 半导体公司的数字化温度传感器 DS1820 是世界上第一片支持 一 线总线 接口的温度传感器 一线总线独特而且经济的特点 使用户可轻松地组建传感器 网络 为测量系统的构建引入全新概念 DS18B20 DS1822 一线总线 数字化温度传 感器 同 DS1820 一样 DS18B20 也 支持 一线总线 接口 测量温度范围为 55 C 125 C 在 10 85 C 范围内 精度为 0 5 C DS1822 的精度较差为 2 C 现 场温度直接以 一线总线 的数字方式传输 大大提高了系统的抗干扰性 适合于恶劣环 境的现场温度测量 如 环境控制 设备或过程控制 测温类消费电子产品等 与前一代 产品不同 新的产品支持 3V 5 5V 的电压范围 使系统设计更灵活 方便 而且新一代产 品更便宜 体积更小 DS18B20 DS1822 的特性 DS18B20 可以程序设定 9 12 位的分 辨率 精度为 0 5 C 可选更小的封装方式 更宽的电压适用范围 分辨率设定 及用 户设定的报警温度存储在 EEPROM 中 掉电后依然保存 DS18B20 的性能是新一代产品 中最好的 性能价格比也非常出色 DS1822 与 DS18B20 软件兼容 是 DS18B20 的简化 版本 省略了存储用户定义报警温度 分辨率参数的 EEPROM 精度降低为 2 C 适用 于对性能要求不高 成本控制严格的应用 是经济型产品 继 一线总线 的早期产品后 DS1820 开辟了温度传感器技术的新概念 DS18B20 和 DS1822 使电压 特性及封装有更多 的选择 让我们可以构建适合自己的经济的测温系统 DS18B20 的内部结构 DS18B20 内部结构主要由四部分组成 64 位光刻 ROM 温度传感器 非挥发的温度 报警触发器 TH 和 TL 配置寄存器 DS18B20 的管脚排列如下 DQ 为数字信号输入 输出端 GND 为电源地 VDD 为外接供电电源输入端 在寄生 电源接线方式时接地 光刻 ROM 中的 64 位序列号是出厂前被光刻好的 它可以看作是该 DS18B20 的地址 序列码 64 位光刻 ROM 的排列是 开始 8 位 28H 是产品类型标号 接着的 48 位是该 DS18B20 自身的序列号 最后 8 位是前面 56 位的循环冗余校验码 CRC X8 X5 X4 1 光刻 ROM 的作用是使每一个 DS18B20 都各不相同 这样就可以实现一根总线上挂接多个 DS18B20 的目的 DS18B20 中的温度传感器可完成对温度的测量 以 12 位转化为例 用 16 位符号扩展 的二进制补码读数形式提供 以 0 0625 LSB 形式表达 其中 S 为符号位 这是 12 位转化后得到的 12 位数据 存储在 18B20 的两个 8 比特的 RAM 中 二进制 中的前面 5 位是符号位 如果测得的温度大于 0 这 5 位为 0 只要将测到的数值乘于 0 0625 即可得到实际温度 如果温度小于 0 这 5 位为 1 测到的数值需要取反加 1 再乘于 0 0625 即可得到实际温度 例如 125 的数字输出为 07D0H 25 0625 的数字输出为 0191H 25 0625 的数 字输出为 FF6FH 55 的数字输出为 FC90H DS18B20 温度传感器的存储器 DS18B20 温度传感器的内部存储器包括一个高速暂存 RAM 和一个非易失性的可电擦 除的 E2RAM 后者存放高温度和低温度触发器 TH TL 和结构寄存器 暂存存储器包含了 8 个连续字节 前两个字节是测得的温度信息 第一个字节的内容 是温度的低八位 第二个字节是温度的高八位 第三个和第四个字节是 TH TL 的易失性 拷贝 第五个字节是结构寄存器的易失性拷贝 这三个字节的内容在每一次上电复位时被 刷新 第六 七 八个字节用于内部计算 第九个字节是冗余检验字节 该字节各位的意义如下 TM R1 R0 1 1 1 1 1 低五位一直都是 1 TM 是测试模式位 用于设置 DS18B20 在工作模式还是在测试模式 在 DS18B20 出厂时该位被设置为 0 用户不要去改动 R1 和 R0 用来设置分辨率 如下表 所示 DS18B20 出厂时被设置为 12 位 分辨率设置表 R1 R0 分辨率 温度最大转换时间 0 0 9 位 93 75ms 0 1 10 位 187 5ms 1 0 11 位 375ms 1 1 12 位 750ms 根据 DS18B20 的通讯协议 主机控制 DS18B20 完成温度转换必须经过三个步骤 每 一次读写之前都要对 DS18B20 进行复位 复位成功后发送一条 ROM 指令 最后发送 RAM 指令 这样才能对 DS18B20 进行预定的操作 复位要求主 CPU 将数据线下拉 500 微 秒 然后释放 DS18B20 收到信号后等待 16 60 微秒左右 后发出 60 240 微秒的存在 低脉冲 主 CPU 收到此信号表示复位成功 DS1820 使用中注意事项 DS1820 虽然具有测温系统简单 测温精度高 连接方便 占用口线少等优点 但在实 际应用中也应注意以下几方面的问题 1 较小的硬件开销需要相对复杂的软件进行补偿 由于 DS1820 与微处理器间采用串 行数据传送 因此 在对 DS1820 进行读写编程时 必须严格的保证读写时序 否则将无 法读取测温结果 在使用 PL M C 等高级语言进行系统程序设计时 对 DS1820 操作部分 最好采用汇编语言实现 2 在 DS1820 的有关资料中均未提及单总线上所挂 DS1820 数量问题 容易使人误认 为可以挂任意多个 DS1820 在实际应用中并非如此 当单总线上所挂 DS1820 超过 8 个时 就需要解决微处理器的总线驱动问题 这一点在进行多点测温系统设计时要加以注意 3 连接 DS1820 的总线电缆是有长度限制的 试验中 当采用普通信号电缆传输长度 超过 50m 时 读取的测温数据将发生错误 当将总线电缆改为双绞线带屏蔽电缆时 正常 通讯距离可达 150m 当采用每米绞合次数更多的双绞线带屏蔽电缆时 正常通讯距离进一 步加长 这种情况主要是由总线分布电容使信号波形产生畸变造成的 因此 在用 DS1820 进行长距离测温系统设计时要充分考虑总线分布电容和阻抗匹配问题 4 在 DS1820 测温程序设计中 向 DS1820 发出温度转换命令后 程序总要等待 DS1820 的返回信号 一旦某个 DS1820 接触不好或断线 当程序读该 DS1820 时 将没有 返回信号 程序进入死循环 这一点在进行 DS1820 硬件连接和软件设计时也要给予一定 的重视 测温电缆线建议采用屏蔽 4 芯双绞线 其中一对线接地线与信号线 另一组接 VCC 和地线 屏蔽层在源端单点接地 点击这里可以下载到 DS18B20 的原厂英文资料 这是我们用网站提供的 AT89C51 实验开发板做的温度测量试验 DS18B20 的正电 源就是红线接 5 伏 兰线接地 棕色线接 P2 2 注意 四位拨码开关的第 3 位不能处于 ON 的位置 否则实验无法成功 5V 和信号线之间有一个 4 7K 的上拉电阻 硬件就这 么简单 网友可以加 15 元向我邮购 DS18B20 测温电缆 可以直接插在实验板上 就能使 用 ds18b20 模块 DS18B20 是美国 DALLAS 半导体公司生产的可组网的一线式数字温度传感器 由于 DS18B20 是在一根 I O 线上读写数据 因此 对读写的数据位有着严格的时序要求 DS18B20 有严格的通信协议来保证各位数据传输的正确性和完整性 该协议定义了几种信 号的时序 初始化时序 读时序 写时序 所有时序都是将主机作为主设备 单总线器件 作为从设备 而每一次命令和数据的传输都是从主机主动启动写时序开始 如果要求单总 线器件回送数据 在进行写命令后 主机需启动读时序完成数据接收 数据和命令的传输 都是低位在先 以下是常见的 DS18B20 的测温程序 其正确性笔者已经通过仿真实验和实 际电路验证过 在程序设计时 只要将 ds18b20 c 和主程序放在同一个工程中 且在主程序中包含头文件 ds18b20 h 即可 DS18B20 头文件 ds18b20 h ifndef DS18B20 H define DS18B20 H void delay 18B20 unsigned int i Init DS18B20 void ReadOneChar void WriteOneChar unsigned char dat ReadTemperature void endif 测温 C 程序 ds18b20 c include sbit DQ P1 0 定义通信端口 unsigned char sign void delay 18B20 unsigned int i while i 初始化函数 Init DS18B20 void unsigned char x 0 DQ 1 DQ 复位 delay 18B20 8 稍做延时 DQ 0 单片机将 DQ 拉低 delay 18B20 80 精确延时 大于 480us DQ 1 拉高总线 delay 18B20 14 x DQ 稍做延时后 如果 x 0 则初始化成功 x 1 则初始化失败 delay 18B20 20 读一个字节 ReadOneChar void unsigned char i 0 unsigned char dat 0 for i 8 i 0 i DQ 0 给脉冲信号 dat 1 DQ 1 给脉冲信号 if DQ dat 0 x80 delay 18B20 4 return dat 写一个字节 WriteOneChar unsigned char dat unsigned char i 0 for i 8 i 0 i DQ 0 DQ dat delay 18B20 5 DQ 1 dat 1 读取温度 ReadTemperature void unsigned char a 0 unsigned char b 0 unsigned int t 0 temp 0 Init DS18B20 WriteOneChar 0 xCC 跳过读序号列号的操作 WriteOneChar 0 xBE 读取温度寄存器等 共可读 9 个寄存器 前两个就是温度 delay 18B20 100 a ReadOneChar b ReadOneChar Init DS18B20 WriteOneChar 0 xCC 跳过读序号列号的操作 WriteOneChar 0 x44 启动温度转换 传感器返回值除 16 得实际温度值 为了得到 2 位小数位 先乘 100 再除 16 考虑整型数据长度 技巧处理后先乘 25 再除 4 除 4 用右移实现 temp b if temp 0 xf0 sign 0 x40 a a b b else sign 0 x3f b b t b 256 a 25 4 return sign t 网上程序 就算是用软件的方式提高精度也只是虚拟的温度 18B20 精度就是 0 0625 度 符合你的要 求了 下面是我写的程序 有兴趣你可以参考一下 带报警设置 include define uchar unsigned char define uint unsigned int uchar code table 0 xc0 0 xf9 0 xa4 0 xb0 0 1 2 3 共阳 0 x99 0 x92 0 x82 0 xf8 4 5 6 7 0 x80 0 x90 0 x88 0 x83 8 9 A B 0 xc6 0 xa1 0 x86 0 x8e C D E F 0 xbf 0 xff sbit w1 P0 0 sbit w2 P0 1 sbit w3 P0 2 sbit w4 P0 3 sbit w5 P0 4 sbit w6 P0 5 sbit w7 P0 6 sbit w8 P0 7 sbit DQ P3 7 定义 18B20 数据线 sbit beep P3 6 sbit beep P3 0 bit sflag 正负标志位 uchar timecount 中断次数变量 uchar readdata 2 保存温度数值数组 uchar ROM 8 uchar ICROM 2 8 uchar temperature 2 2 读两个 18B20 存放温度数组 uchar test test0 test1 保存温度数值中间变量 uchar yi er san shi wu liu qi ba 定义数码管显示数变量 数码管扫描程序 delayms uint t uchar tt for t 0 t for tt 50 tt 0 tt void display uchar yi uchar er uchar san uchar shi uchar wu uchar liu uchar qi uchar ba w8 1 2 table yi delayms 5 w8 0 delayms 1 w7 1 2 table er delayms 5 w7 0 delayms 1 w6 1 2 table san delayms 5 w6 0 delayms 1 w5 1 2 table shi delayms 5 w5 0 delayms 1 w4 1 2 table wu delayms 5 w4 0 delayms 1 w3 1 2 table liu delayms 5 w3 0 delayms 1 w2 1 2 table qi delayms 5 w2 0 delayms 1 w1 1 2 table ba delayms 5 w1 0 delayms 1 18B20 程序 void delay18b20 uint i for i 0 i reset void 复位 18B20 uchar x 0 DQ 1 delay18b20 8 DQ 0 delay18b20 80 DQ 1 delay18b20 14 x DQ delay18b20 20 void writebyte 18b20 uchar command 写字节到 18B20 uchar i 0 for i 8 i 0 i DQ 0 DQ command delay18b20 5 DQ 1 command command 1 uchar readbyte 18b20 从 18b20 读出字节 uchar i 0 uchar temp 0 for i 8 i 0 i DQ 0 temp 1 DQ 1 if DQ temp 0 x80 delay18b20 5 return temp uchar readROM 读 18B20 的 ROM uchar i reset writebyte 18b20 0 x33 for i 0 i 8 i ROM readbyte 18b20 return ROM uchar writeROM 匹配 ROM 并读出温度存到 temperature 2 2 数组 uchar i j for j 0 j 2 j reset writebyte 18b20 0 x55 for i 0 i255 如果低八位的值转为原码后大于 11111111 255 向高八位进 1 readdata 1 test0 readdata 0 test1 readdata 1 test readdata 1 256 readdata 0 16 把高位与低位的值转成 10 进制 test0 test0 取小数位 低四位 switch test0 判断小数位的值 也可以用取表方式 精确度为 0 0625 度 case 0 x00 liu 0 qi 6 break case 0 x01 liu 1 qi 2 break case 0 x02 liu 1 qi 8 break case 0 x03 liu 2 qi 5 break case 0 x04 liu 3 qi 1 break case 0 x05 liu 3 qi 7 break case 0 x06 liu 4 qi 3 break case 0 x07 liu 5 qi 0 break case 0 x08 liu 5 qi 6 break case 0 x09 liu 6 qi 2 break case 0 x0a liu 6 qi 8 break case 0 x0b liu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论