TECHNOLO GY REVIEW 技术纵横
paper @mesnet. com. cn (投稿专用) 2010 年第 7 期 Microcontrollers & Embedded Systems 17
温度传感器 DS18B20 在 Proteus 中的仿真※
陈芳 ,江和
(福州大学 , 福州 350108)
摘要 : 详细介绍单总线温度传感器 DS18B20 的工作原理、通信
协议
离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载
和使用
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
;给出测温程序流程 ,以及 DS18B20 在
Proteus 中硬件仿真的具体实现方法 ,并对该仿真结果与实验结果进行了比较。
关键词 : Proteus ; DS18B20 ; 单总线 ; 测温
中图分类号 : TN911. 72 文献标识码 : A
Simulation of Temperature Sensor DS18B20 in Proteus ※
Chen Fang , Jiang He
( Fuzhou University ,Fuzhou 350108 , China)
Abstract : The paper int roduces the working principle , communication protocol and usage of 12wire digital t hermometer DS18B20. The
software process of temperature reading and the Proteus simulation are given. Comparison between simulation result s and experimental
result s are shown.
Key words : Proteus ; DS18B20 ; 12wire bus ; temperature measurement
引 言
目前 ,微机与外设之间进行数据的串行总线主要有
I2 C总线、SPI 总线和 SCI 总线。其中 , I2 C 总线以同步串
行 2 线方式进行通信 (1 条时钟线和 1 条数据线) ,SPI 总
线以同步串行 3 线方式进行通信 (1 条时钟线、1 条数据输
入线和 1 条数据输出线) ,而 SCI 总线则是以异步方式进
行通信的(1 条数据输入线和 1 条数据输出线) 。这些总
线至少需要 2 条信号线及地线。Dallas 公司推出的单总
线技术用单根信号线及地线 ,既传输时钟又传输数据 ,而
且数据的传输时双向的 ,具有线路简单、硬件开销少、成本
低、便于总线扩展和维护等优点[1 ] 。
DS18B20 是典型的单总线数字式温度传感器 ,工作电
压为 3~5 V ,测量温度范围为 - 55~ + 125 ℃,可根据实
际需要通过软件设置选择 9~12 位分辨率 ;用户设置的报
警温度存储在芯片内部 EEPROM 中 ,可掉电保持 ;每个
芯片都有全球唯一的编码 ,用户可以通过其特有的序列号
查询其温度 ,因此理论上一条总线上可连接无数个该测温
元件。单总线通常要求外接一个约 4. 7 kΩ的上拉电阻 ,
保证总线闲置时其状态为高电平。
1 Proteus 中 DS18B20 仿真图的设计
1. 1 Proteus 简介
Proteus 是英国 Labcenter Elect ronics 公司研发的
EDA 工具软件。它是能进行模拟
电路
模拟电路李宁答案12数字电路仿真实验电路与电子学第1章单片机复位电路图组合逻辑电路课后答案
、数字电路、模/ 数
混合电路、RS232 动态仿真、I2 C 调试器、SPI 调试器、键盘
和 LCD、L ED 系统的设计与仿真的平台。Proteus 具备原
理图设计、电路
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
与仿真、PCB 设计功能 ,可以通过调入
程序的编译结果. hex 或. cof 文件来调试单片机程序 ,还
可直接嵌入到 Microchip 公司的单片机调试软件 MPLAB
IDE 中 ,进行程序的调试和仿真。
Proteus 的特色是能实现单片机与外设的混合电路系
统、软件系统的设计和仿真。在仿真过程中 ,用户可以用
鼠标单击开关、键盘、电位计、可调电阻等外设设备 ,使单
片机系统根据输入信号做出相应的响应 ,并将响应处理结
果根据所编制的软件在 LCD、L ED 等显示器件上显示 ,整
个过程与硬件仿真器调试过程相似。因此 ,在缺乏硬件的
情况下 ,这是款非常实用的仿真软件 ,其仿真的原理图经
验证后可直接应用到现实中。Proteus 还提供虚拟示波
器、逻辑分析仪、信号发生器和 I2 C、SPI 调试器等多种虚
拟终端 ,方便用户仿真调试。
1. 2 DS18B20 仿真的实现
目前 ,国内采用单片机作控制系统中的微处理器时
多选择 PIC、51 系列或 Freescale 系列单片机。PIC 单片
机具有外围电路简单、功耗低、外围资源丰富等优点。本
系统 选 用 PIC 系 列 单 片 机 PIC16 F877A 作 为 控 制
芯片 [ 2 ] 。
技术纵横 TECHNOLO GY REVIEW
18 2010 年第 7 期 adv @mesnet. com. cn(广告专用)
Proteus 仿真图设计的第一步就是拾取仿真所需要的
元器件 ,单击图 1 所示界面预览窗口下面的 P 按钮 ,弹出
Pick Devices (元器件拾取) 对话框。然后 ,在 Keywords 文
本框内分别输入 DS18B20、L M041L ( 4 行 ×16 字符型
LCD) 、PIC16F877A、RES(电阻) 。在检索出来的结果中 ,
选中所要的元器件并双击 ,该元器件就会出现在左侧预览
窗口中。
图 1 元件拾取图
元器件拾取完毕后 ,关闭 Pick Devices 窗口回到主设
计页面。在左侧预览窗口中 ,选中元器件放置到合适的位
置。然后 ,在最左侧选中图标 ( terminals mode) ,分别
选中 POWER(电源) 和 GROUND (地) ,放置在合适的位
置 ,并进行连接。欲改变元器件的参数 ,双击该元器件 ,然
后在出现的属性框中直接修改即可。本文所设计的由 12
个 DS18B20 组成的测温网络如图 2 所示。
图 2 仿真设计原理图
2 单总线器件 DS18B20 的使用
2. 1 DS18B20 的工作原理
在该测温系统中 ,单片机 PIC16F877A 作为主机 ,
DS18B20 温度传感器作为从机。由于 DS18B20 采用的是
主从结构 ,只有主机呼叫从机时 ,从机才能应答。因此 ,访
问器件时必须严格遵循单总线命令序列 ,以及初始化、
ROM、命令功能的命令。如果序列混乱 ,则器件不响应主
机。从机主机和从机之间的通信通过 3 个步骤完成 :初始
化器件 ;识别器件 ;交换数据。
单总线器件采用严格的通信协议来保证数据的完整
性。通信协议包括 :复位脉冲、应答脉冲、写 0、写 1、读 0
和读 1。所有这些信号都是以先低位、后高位的方式发
送的。
(1) 复位脉冲和应答脉冲
复位脉冲和应答脉冲即为初始化过程 ,所有的通信都
是以初始化开始的。首先主机要拉低总线至少 480μs ,接
着释放总线并持续 15~60μs ,然后进入接收状态 ,检测总
线 DQ 的电平。若 DQ 为低电平 ,则表示从机已就绪 ,可
以发送 ROM 命令。由于 C 语言简洁紧凑、灵活方便且可
移植性好 ,因此本文程序采用 C 语言来完成。相应的初
始化程序如下 :
void reset (void ) {
unsigned char dq = 1 ; / / dq 为用来存放 DS18B20 返
/ / 回的存在脉冲
while (dq) {
DQ_IO = 0 ; / / 将 DQ 设置为输出口
DQ = 0 ; / / 将 DQ 拉低 ,产生复位脉冲
delay_560us(1) ; / / 560μs
DQ_IO = 1 ; / / 将 DQ 设置为输入 ,由上拉
/ / 电阻将其拉至高电平
delay_40us (1) ; / / 将 DQ 置高 ,并延时 40μs ,
/ / 等待从机的存在脉冲
if (DQ = = 1) / / 判断 DQ 的电平
dq = 1 ; / / 若DQ 为高电平 ,则 dq为 1
else
dq = 0 ; / / 若DQ 为低电平 ,则 dq为 0
delay_150us (1) ;
/ / 保持查询 DQ 电平状态 ,保持时间为 150μs
}
DQ = 1 ; / / 释放总线
DQ_IO = 0 ; / / 将 DQ 设置为输出口
}
TECHNOLO GY REVIEW 技术纵横
paper @mesnet. com. cn (投稿专用) 2010 年第 7 期 Microcontrollers & Embedded Systems 19
其中 ,变量 dq 用来判断 DS18B20 是否有返回的存在
脉冲 ,为 0 即有返回脉冲 ,表明复位成功 ,可跳出循环 ;DQ
表示总线的电平 ,当总线为高电平时 DQ 为 1 ,否则为 0 ;
DQ_IO 用来表示 DQ 所连的单片机 I/ O 口的状态 ,若该
I/ O 口对单片机是作为输入使用则 DQ_IO 为 1 ,作为输出
使用则 DQ_IO 为 0。
(2) 写操作时序
无论是命令还是数据 ,所有的写操作都是以字节
为单位的 ,全部以先低位、后高位的方式传输的。位写
入过程是这样的 :主机将总线拉低 15 μs ,然后根据要
发的那位数据的电平来决定接下来总线的电平。若数
据待发位为低电平 ,则主机须将 DQ 置为低电平并保持
15~45μs ;若数据待发位为高电平 ,则主机需将 DQ 置
为高电平且保持 15~45 μs。发送 1 位数据的时间 (从
总线拉低开始到发送结束) 必须控制在 60~120 μs。
位与位之间要有一个大于 1 μs 的高电平时间间隙隔
开。一个字节的数据写入结束后需要将总线释放 ,以
确保之后操作的正确进行 [ 3 ] 。
(3) 读操作时序
所有数据的读取是以字节为单位 ,以先低位、后高位
的方式进行传输的。位读取的过程如下 :首先需要主机将
总线拉低 1~15μs ,然后释放总线 ,对总线的电平进行判
断。若总线为低电平 ,说明带读取数据位为 0 ;若总线为
高电平 ,则表明带读取数据位为 1。读取 1 位数据的时间
(从总线拉低开始到将总线置高准备下一位数据) 必须大
于 60μs。同样 ,位与位之间须有一个大于 1μs 的高电平
时间间隙隔开。一个字节的数据读取结束后需要将总线
释放 ,以确保操作的正确进行。由于 DS18B20 的温度采
用 9~12 位的分辨率 ,因此一个温度数据需要读取 2 字节
的温度数据。2 字节的数据读取结束后将总线释放 ,以便
接下来数据的正确传输[ 4 ] 。
2. 2 读温度主要使用的命令
读温度主要使用的命令如表 1 所列。
表 1 主要命令及功能
命 令 功 能
0x44 开始温度转换
0xBE 读取暂存器的内容
0x55 寻找与指定序列号匹配的器件
0xCC 忽略 ROM 匹配 ,可同时访问所有从机
0x33 读取器件的序列号 (仅适用于单从机状态)
3 测温的实现及在 Proteus 中的仿真
3. 1 测温的实现
整个读取温度步骤具体如下 :
(1) 配置寄存器
① reset () ;调用初始化子程序
② send_com (0xCC) ;忽略 ROM 匹配
③ send_com (0x4 E) ;发送配置参数的命令
④ send_com ( T H1)
;配置 T H 报警温度 , T H1 为报警温度的上限
⑤ send_com ( TL1)
;配置 TL 报警温度 , TL1 为报警温度的下限
⑥ send_com (COM1) ;设置分辨率
(2) 读取温度数值
① reset () ;初始化
② send_com (0xCC) ;忽略 ROM 匹配
③ send_com (0x44) ;温度开始转化
④delay () ;根据所选的分辨率选择合适的延迟时间
⑤ send_com (0x55) ;进行 ROM 匹配
⑥ send_num () ;发送 64 位的器件序列号
⑦ send_com (0xB E) ;发送读取温度的命令
⑧ read_dat () ;先低后高的方式读取 2 字节的温度值
⑨check () ;判断是否所有器件的温度都已读取
若还要读其他芯片的温度 ,则从②~⑤开始循环。其
中 ,reset () 为调用初始化子程序 ; send_com () 为机向从机
发送 1 字节的子程序 ; send_num () 为主机向从机发送 64
位器件序列号的子程序 ;delay() 为延时子程序 ;check () 为
主机判断所有从机的温度是否全部读取完毕的子程序。
3. 2 Proteus 仿真
在 Proteus 中使用多个 DS18B20 时 ,必须改变器件的
属性 ,使仿真中每个器件的序列号各不相同。具体作法
是 :右击 DS18B20 ,选中 Edit Properties 选项 ,在其中改变
ROM Serial Number 的值 ;还可改变 Granularity 的数值 ,
即改变每次调整温度的额度。在 Proteus 中 ,可以人为改
变 3 个字节的器件序列号。要想得到全部 8 个字节 ,一个
简单的方法就是每一次总线上只连接一个器件 ,利用
0x33 读器件序列号的命令在程序中得到完整的器件序列
号。具体的程序如下所示 :
unsigned char read_num (void) {
unsigned char i ;
send_com (0x33) ; / / 读序列号命令
for (i = 0 ;i < 8 ;i + + ) {
A[i ] = read_dat () ; / / 先低位后高位 ,A[0]为最低位
}
}
其中 ,send_com() 为主机向从机发送一个字节的子程
序 ,read_dat ()为主机读取从机一个字节的子程序。例如 ,将
器件序列号改为B8C530 ,在 MPLAB IDE中的 Watch 窗口中
可直接观察到该器件的完整的器件序列号 ,如图 3 所示。
本系统中共使用 12 个 DS18B20 ,序列号为 B8C530~
B8C53B。通过上述的方法可得到所有器件的序列号 ,然
后组成一个数组 ,在读取温度程序中就可直接使用。数组
技术纵横 TECHNOLO GY REVIEW
20 2010 年第 7 期 adv @mesnet. com. cn(广告专用)
图 3 Watch窗口中的序列号
如下所示 :
const unsigned char NUM[12 ] [ 8 ] = {
{0x28 ,0x30 ,0xC5 ,0xB8 ,0x00 ,0x00 ,0x00 ,0x8 E} ,
/ / 第 1 个器件的序列号
{0x28 ,0x31 ,0xC5 ,0xB8 ,0x00 ,0x00 ,0x00 ,0xB9} ,
/ / 第 2 个器件的序列号
{0x28 ,0x32 ,0xC5 ,0xB8 ,0x00 ,0x00 ,0x00 ,0xE0} ,
/ / 第 3 个器件的序列号
{0x28 ,0x33 ,0xC5 ,0xB8 ,0x00 ,0x00 ,0x00 ,0xD7} ,
/ / 第 4 个器件的序列号
{0x28 ,0x34 ,0xC5 ,0xB8 ,0x00 ,0x00 ,0x00 ,0x52} ,
/ / 第 5 个器件的序列号
{0x28 ,0x35 ,0xC5 ,0xB8 ,0x00 ,0x00 ,0x00 ,0x65} ,
/ / 第 6 个器件的序列号
{0x28 ,0x36 ,0xC5 ,0xB8 ,0x00 ,0x00 ,0x00 ,0x3C} ,
/ / 第 7 个器件的序列号
{0x28 ,0x37 ,0xC5 ,0xB8 ,0x00 ,0x00 ,0x00 ,0x0B} ,
/ / 第 8 个器件的序列号
{0x28 ,0x38 ,0xC5 ,0xB8 ,0x00 ,0x00 ,0x00 ,0x2F} ,
/ / 第 9 个器件的序列号
{0x28 ,0x39 ,0xC5 ,0xB8 ,0x00 ,0x00 ,0x00 ,0x18} ,
/ / 第 10 个器件的序列号
{0x28 ,0x3A ,0xC5 ,0xB8 ,0x00 ,0x00 ,0x00 ,0x41} ,
/ / 第 11 个器件的序列号
{0x28 ,0x3B ,0xC5 ,0xB8 ,0x00 ,0x00 ,0x00 ,0x76} ,
/ / 第 12 个器件的序列号
} ;
在 MPLAB IDE 中 ,使用 Proteus VSM 仿真模式。根
据上述读取温度程序的过程 ,编写读取温度的程序 ,经编
译、运行 ,即可得到仿真结果。
结 语
经验证 ,在 Proteus 中的仿真结果和实际实验结果完
全一致。这充分说明该软件仿真结果真实性很高 ,在缺乏
硬件的情况下 ,这是款非常实用的仿真软件。其仿真的原
理图和结果经实验验证后可直接应用到实际项目中。
单总线数字式温度传感器 DS18B20 具有体积小、动
态范围宽、测量精度高等特点 ,分辨率可根据实际的需求
进行相应的设置。单总线器件连接简单 ,且具有很强的扩
展性 ,可以组建多点的温度检测网络 ,在电子产品各部件
特别是半导体器件的温度测量领域具有良好的应用前景。
编者注 :本文为期刊缩略版 ,全文见本刊网站 www.
mesnet . com. cn。
参考文献
[ 1 ] 单总线 (12Wire Bus) 技术及其应用 [ OL ] . [ 2010203 ] . www.
symcukf . com.
[ 2 ] 李正荣 ,刘启中 ,陈学军. PIC 单片机原理及应用[ M ] . 北京 :
北京航空航天大学出版社 ,2003.
[ 3 ] Maxim. DS18B20 datasheet [ OL ] . [ 2010203 ] . www. maxim2
ic. com.
[ 4 ] 12wire 单总线的基本原理 [ OL ] . [ 2010203 ] . www. symcukf .
com.
陈芳 (研究生) 、江和 (副教授) ,主要研究方向为智能电器及其在线
监测。
(收修改稿日期 :2010203202)
“开放式、可重构的智能控制技术论坛”圆满结束
2010 年 5 月 11 日 ,由德国 3S 软件有限公司、北京工业大学联合主办的“开放式、可重构的智能控制技术论
坛”隆重开幕。
会议期间 ,来自全国数十所高校和近百家企业的专家、学者们 ,共同围绕 IEC 6113123 国际
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
深入探讨了
如何构建“开放式、可重构的智能控制系统”,以及基于强大的 CoDeSys 开发平台如何实现智能控制系统的设计
和优化。德国 3S 公司全球 CEO Dieter Hess 先生发表的基于 CoDeSys V 3. 4 如何设计和实现智能化的冗余
( Redundancy)及安全 (Safety)系统的精彩演讲 ,引起了与会者的浓厚兴趣和强烈反响。