您当前的位置:五五电子网电子知识单片机-工控设备综合-其它温度传感器DSl8B20在Proteus中的仿真 正文
温度传感器DSl8B20在Proteus中的仿真

温度传感器DSl8B20在Proteus中的仿真

点击数:7452 次   录入时间:03-04 11:53:18   整理:http://www.55dianzi.com   综合-其它

  引言

  目前,微机与外设之间进行数据的串行总线主要有I2C总线、SPI总线和SCI总线。其中,I2C总线以同步串行2线方式进行通信(1条时钟线和1条数据线),SPI总线以同步串行3线方式进行通信(1条时钟线、1条数据输入线和1条数据输出线),而SCI总线则是以异步方式进行通信的(1条数据输入线和1条数据输出线)。这些总线至少需要2条信号线及地线。DALLAS公司推出的单总线技术用单根信号线及地线,既传输时钟又传输数据,而且数据的传输时双向的,具有线路简单、硬件开销少、成本低、便于总线扩展和维护等优点。

   DSl8B20 是典型的单总线数字式 温度传感器 ,工作电压为3~5V,测量温度范围为-55~+125℃,可根据实际需要通过软件设置选择 9~12位分辨率;用户设置的报警温度存储在芯片内部EEPROM中,可掉电保持;每个芯片都有全球唯一的编码,用户可以通过其特有的序列号查询其温度,因此理论上一条总线上可连接无数个该测温元件。单总线通常要求外接一个约4.7 kΩ的上拉电阻,保证总线闲置时其状态为高电平。

  1 Proteus 中DSl8B20 仿真 图的设计

  1.1 Proteus简介

  Proteus是英国Labcenter ELECTRONICS公司研发的EDA工具软件。它是能进行模拟电路、数字电路、模/数混合电路、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD、LED系统的设计与仿真的平台。Proteus具备原理图设计、电路分析与仿真、PCB设计功能,可以通过调入程序的编译结果.hex或.cof文件来调试单片机程序,还可直接嵌入到MICROChip公司的单片机调试软件MPLABIDE中,进行程序的调试和仿真。

  Proteus的特色是能实现单片机与外设的混合电路系统、软件系统的设计和仿真。在仿真过程中,用户可以用鼠标单击开关、键盘、电位计、可调电阻等外设设备,使单片机系统根据输入信号做出相应的响应,并将响应处理结果根据所编制的软件在LCD、LED等显示器件上显示,整个过程与硬件仿真器调试过程相似。因此,在缺乏硬件的情况下,这是款非常实用的仿真软件,其仿真的原理图经验证后可直接应用到现实中。Proteus还提供虚拟示波器、逻辑分析仪、信号发生器和I2C、SPI调试器等多种虚拟终端,方便用户仿真调试。

  1.2 DSl8B20仿真的实现

  目前,国内采用单片机作控制系统中的微处理器时多选择.PIC、51系列或FREESCALE系列单片机。PIC单片机具有外围电路简单、功耗低、外围资源丰富等优点。本系统选用PIC系列单片机PICl6F877A作为控制芯片。

  Proteus仿真图设计的第一步就是拾取仿真所需要的元器件,单击图1所示界面预览窗口下面的P按钮,弹出Pick Devices(元器件拾取)对话框。然后,在Keywords文本框内分别输入DSl8820、LM041L(4行×16字符型LCD)、 PICl6F877A、RES(电阻)。在检索出来的结果中,选中所要的元器件并双击,该元器件就会出现在左侧预览窗口中。

界面预览窗口

  元器件拾取完毕后,关闭Pick Devices窗口回到主设计页面。在左侧预览窗口中,选中元器件放置到合适的位置。然后,在最左侧选中图标(terminals mode),分别选中POWER(电源)和GROUND(地),放置在合适的位置,并进行连接。欲改变元器件的参数,双击该元器件,然后在出现的属性框中直接修改即可。本文所设计的由12个DSl8B20组成的测温网络如图2所示。

DSl8B20组成的测温网络

  2 单总线器件DSl8B20的使用

  2.1 DSl8B20的工作原理

  在该测温系统中,单片机PICl6F877A作为主机,DSl8B20温度传感器作为从机。由于DSl8B20采用的是主从结构,只有主机呼叫从机时,从机才能应答。因此,访问器件时必须严格遵循单总线命令序列,以及初始化、ROM、命令功能的命令。如果序列混乱,则器件不响应主机。从机主机和从机之间的通信通过3个步骤完成:初始化器件;识别器件;交换数据。

  单总线器件采用严格的通信协议来保证数据的完整性。通信协议包括:复位脉冲、应答脉冲、写0、写1、读O和读1。所有这些信号都是以先低位、后高位的方式发送的。

  (1)复位脉冲和应答脉冲

  复位脉冲和应答脉冲即为初始化过程,所有的通信都是以初始化开始的。首先主机要拉低总线至少480μs,接着释放总线并持续15~60μs,然后进入接收状态,检测总线DQ的电平。若DQ为低电平,则表示从机已就绪,可以发送ROM命令。由于C语言简洁紧凑、灵活方便且可

  移植性好,因此本文程序采用C语言来完成。相应的初始化程序如下:

初始化程序



www.55dianzi.com

   其中,变量dq用来判断 DSl8B20 是否有返回的存在脉冲,为O即有返回脉冲,表明复位成功,可跳出循环;DQ表示总线的电平,当总线为高电平时DQ为1,否则为0;DQ_IO用来表示DQ所连的单片机I/O口的状态,若该I/O口对单片机是作为输入使用则DQ_IO为1,作为输出使用则 DQ_IO为O。

  (2)写操作时序

  无论是命令还是数据,所有的写操作都是以字节为单位的,全部以先低位、后高位的方式传输的。位写入过程是这样的:主机将总线拉低15μs,然后根据要发的那位数据的电平来决定接下来总线的电平。若数据待发位为低电平,则主机须将DQ置为低电平并保持1 5~45μs;若数据待发位为高电平,则主机需将DQ置为高电平且保持15~45μs。发送1位数据的时间(从总线拉低开始到发送结束)必须控制在 60~20μ s。

  位与位之间要有一个大于1μs的高电平时间间隙隔开。一个字节的数据写入结束后需要将总线释放,以确保之后操作的正确进行。

  (3)读操作时序

  所有数据的读取是以字节为单位,以先低位、后高位的方式进行传输的。位读取的过程如下:首先需要主机将总线拉低1~15μs,然后释放总线,对总线的电平进行判断。若总线为低电平,说明带读取数据位为0;若总线为高电平,则表明带读取数据位为1。读取1位数据的时间(从总线拉低开始到将总线置高准备下一位数据)必须大于60 μs。同样,位与位之间须有一个大于1 μs的高电平时间间隙隔开。一个字节的数据读取结束后需要将总线释放,以确保操作的正确进行。由于DSl8B20的温度采用9~12位的分辨率,因此一个温度数据需要读取2字节的温度数据。2字节的数据读取结束后将总线释放,以便接下来数据的正确传输。

  2.2 读温度主要使用的命令

  读温度主要使用的命令如表1所列。

读温度主要使用的命令

  3 测温的实现及在 Proteus 中的 仿真

  3.1 测温的实现

  整个读取温度步骤具体如下:

整个读取温度步骤

  若还要读其他芯片的温度,则从②~⑤开始循环。其中,reset()为调用初始化子程序;send_com()为机向从机发送1字节的子程序;send_num()为主机向从机发送64位器件序列号的子程序;delay()为延时子程序;check()为主机判断所有从机的温度是否全部读取完毕的子程序。

  3.2 Proteus仿真

  在Proteus中使用多个DSl8B20时,必须改变器件的属性,使仿真中每个器件的序列号各不相同。具体作法是:右击DSl8B20,选中 Edit Properties选项,在其中改变ROM Serial Numbet的值;还可改变Granularity的数值,即改变每次调整温度的额度。在Proteus中,可以人为改变3个字节的器件序列号。要想得到全部8个字节,一个简单的方法就是每一次总线上只连接一个器件,利用Ox33读器件序列号的命令在程序中得到完整的器件序列号。具体的程序如下所示:

具体的程序

  其中,send_com()为主机向从机发送一个字节的子程序,read_dat()为主机读取从机一个字节的子程序。例如,将器件序列号改为B8C530,在MPLAB IDE中的Watch窗口中可直接观察到该器件的完整的器件序列号,如图3所示。

器件序列号



www.55dianzi.com

   本系统*使用12个 DSl8B20 ,序列号为B8C530~B8C53B。通过上述的方法可得到所有器件的序列号,然后组成一个数组,在读取温度程序中就可直接使用。数组如下所示:

[1] [2]  下一页


本文关键字:温度传感器  综合-其它单片机-工控设备 - 综合-其它