首页 > 范文大全 > 正文

读DS18B20 ROM序列号电路设计与仿真

开篇:润墨网以专业的文秘视角,为您筛选了一篇读DS18B20 ROM序列号电路设计与仿真范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:设计了一种完全独立于应用系统的读ds18b20 rom序列号的电路,结构简单,程序简洁,并且在嵌入系统设计与仿真软件Proteus中进行了软、硬件交互仿真。与现有的基于复杂算法的单总线识别系统相比,具有较高的实用性。

关键词:电路设计 ROM序列号 Proteus仿真 单总线

Abstract:The author designs a kind of reading ROM serial number of DS18B20 which is independent of application system completely. The structure of this circuit is simple and the software is very concise. The system hardware and software are simulated interactively on the platform of Proteus. This system possesses higher practicality compared with single bus identifying system based on existing complex algorithms.

Keywords:DS18B20ROM serial number Proteus simulationsingle bus

一、引言

美国DALLA公司生产的基于单总线结构的数字式温度传感器DS18B20,以其检测精度高、抗干扰力强、硬件结构简单,已逐步取代了其它常用温度传感器在温度检测领域中的地位。单总线技术是美国DALLA半导体公司近年推出的新技术。它将地址线、数据线、控制线、电源线合为一根信号线,允许在这根信号线上挂数百个测控对象[1]。

使用基于单线总线结构的数字式温度传感器DS18B20测量温度,特别是在多点测量领域,必须首先确定其64位ROM序列号。开始8位是产品类型编码(DSl8B20编码均为28H而DSl820编码均为10H),接着的48位是每个器件唯一的序号,最后8位是前面56位的CRC(循环冗余校验)码[2]。

每一个DS18B20都有唯一一个编号,且这个编号是存在内部ROM中的,在产品上或产品说明书上是无法找到的,必须通过电的方法读出来。而单总线应用系统必须要知道每个DS18B20的序列号后才可以工作。所以正确识别出每个实际元件的ROM序列号是应用DS18B20的第一步,也是非常关键的一步。

在DSl8B20单总线应用系统设计之前,首先要设计一种电路或程序来读出所有DSl8B20的序列号。而通常的思路是,在系统应用电路不变的前提下,即使用单总线上挂多个DSl8B20的电路结构,来设计软件程序,利用复杂的算法来在线识别所有DSl8B20的序列号。大部分算法搜索速率相当可观,但是逻辑复杂,程序冗长,在程序存储空间十分匮乏的嵌入式系统中应用不便。有研究人员事先将序列号存到程序空间,这样跳过复杂的序列号搜索过程,从而大大简化了测温过程,但是在传感器应用数量比较多的场合存储序列号所需的程序空间消耗相当大,而且不利于系统维护[3]。

本文介绍一种比较实用的读DSl8B20序列号的电路设计,电路及程序都非常简洁,不涉及复杂的算法,把设计者有效的精力更多地投入到应用系统设计中去。

二、系统硬件电路设计

在DSl8B20单总线应用系统中,是把多个DSl8B20挂在一根总线上,而在读DSl8B20 ROM序列号电路中,还是把多个DSl8B20挂在一根总线上,但是用多位开关,采取分时复用的办法,一个一个地读DSl8B20的ROM序列号。

图1是在Proteus中画出的读ROM序列号电路。图中,使用AT89C51单片机通过单总线对DS18B20进行控制。四位开关分时把四个DS18B20与单总线接通,启动按钮后,发光二极管每亮一次,在两位数码管中读出一个字节的十六制数并记录下来。该电路可以一次顺序读四个DSl8B20的ROM序列号。设置发光二极管的作用是等间隔的读数,以正确区分连续相同的十六进制数。

三、 Proteus中DS18B20的参数设置

在温度控制系统仿真进行前,必须在Proteus中对DS18B20进行参数设置,即精度设置和ROM序列号设置两项。双击图1中的U1,打开如图2所示的元件属性对话框。

在“Granularity”一栏中,把1改成0.1,即测量温度的精确度由1℃改成了0.1℃。

在“ROM Serial Number”一栏,有三个字节的十六进制数,是ROM序列号的第五、六、七字节(从高到低),我们只能对这三个字节进行更改,以区别不同的DS18B20仿真元件,即只要使四个DS18B20的ROM序列号不一样就行。其它五个字节是系统设置好的,能通过软件编程读出来,最高位字节固定为28H[4]。

我们把Proteus中四个DS18B20的三字节ROM序列号分别设为:

U1:39C524;U2:B8C530;U3:B8C531;U4:B8C532

四、系统软件流程设计

读DS18B20序列号的程序并不复杂,主程序流程如图3所示。首先对单片机的P2口和P3.0进行清零,然后查询按钮是否按下,没有则等待;按下,则往下执行。先调一个对DS18B20进行初始化的子程序,然后写入读ROM序列号命令33H,该命令只对单总线上挂一个DS18B20进行操作,调写命令子程序。接下来调从DS18B20读取一个字节数据的子程序,把读出来的一个字节数据存入40H,最先读出的是ROM中64位序列号的高八位, 28H。继续进行数据读操作,顺序把读出的其余七个字节分别存入单片机的41H~47H。

然后是按从高到低字节顺序把8个字节的ROM序列号输出给P2口的十六进制数码管进行显示。8个字节显示完毕后,程序再回去判断启动开关的状态,继续进行下一个DS18B20的ROM序列号读取和显示。

子程序比较简单,不再介绍。

在Keilμversion3中进行程序编写和调试,编译成十六进制文件“*.hex”。在Proteus中,双击单片机AT89C51,打开元件属性对话框,把编译好的程序文件“*.hex”虚拟下载到单片机[5]。点击仿真运行按钮。把四位选择开关放置到一个位置,按下启动按钮,顺序读八个字节的ROM序列号。操作时,要保证在每次灯亮时读数。

五、结束语

通过以上方法获取所有DS18B20 ROM序列号后,设计者可以开始设计单总线应用系统,只需把读到的DS18B20 ROM序列号适时地嵌入程序中即可。正是由于本文的设计思路完全独立于应用系统,电路简单、程序简洁,所以大大简化了系统设计之前为读DS18B20 ROM序列号而所化费的劳动,设计者可以把更多的精力集中在系统设计上。

参考文献:

[1] 刘晓阳,周炎涛. 一线总线结构的DS18B20的序列号搜索方法研究[J]. 计算机技术与自动化,2010,3:38~42.

[2] 丁晓俊,史小军等. 基于DS18B20的多点温度检测[J]. 电子工程师,2006,7:1~3.

[3] 王禹,王飞等. 一种基于DS18B20的热网温度检测系统[J].自动化技术与应用,2008,10:118~121.

[4] 蒋鸿宇,王勇等. 由DS18B20构成的多点温度测量系统[J]. 应用天地,2007,1:59~61.

[5] 朱清慧,张凤蕊等. Proteus教程―电子线路设计制版与仿真[M]. 2008,9:152~153.

注:“本文中所涉及到的图表、公式、注解等请以PDF格式阅读”