引言
在工业、农业和医疗领域,温控系统有着巨大的市场前景和价值,在这些领域中,传统的人工监控已不能满足日益增长的技术需求,因此电子监控类设备将极其走俏。现有的方法是在一根I/O线上连接多个DS18B20的数据采集方法,而在DS18B20接入系统之前,需要人工将DS18B20的64位ROM序列号逐一读出,并进行存储。这种方法在确定DS18B20的物理位置上有很大困难,特别是当更换出现故障的DS18B20时,这个矛盾变得尤为突出。
因此,本文研究了一种方法,解决了单片机与DS18B20结合的测温系统数字传感器的更换问题,系统结合了软件编程与硬件设计。在提出的解决方案中,数据采集模块采用低功耗AVR单片机-Atmega16、单总线数字温度传感器DS18B20以及外部存储器-低能耗串行EEP-ROM。系统根据DS18B20数量的多少,可以选择基于MAX485的有线组网,也可以选择基于nRF905或ZigBee的分布式无线组网。
1 DS18B20简介
1.1 概述
DS18B20是一款高性能单线数字式温度传感器,由美国DALLAS(达拉斯)公司生产。该传感器提供9到12位温度读数;可实现-55℃到+125℃范围内的温度测量,增量值为0.5℃。现场测量的温度值通过单总线接口传给微处理器,多个DS18B20可以存在于同一条单线总线上。因此,在实际应用中,可以在不同的地方放置DS18B20,并将这些传感器接在同一条单线总线上,只由一个单片机进行控制。那么,如何对DS18B20数字传感器供电呢?这里我们给出两种方式:一是寄生电源供电;二是外部电源供电。
1.2 引脚说明
DS18B20只有三个引脚:一个是GDN(电源地);一个是VDD(当采用寄生电源供电时,VDD接地;若采用外部电源供电时,VDD接工作电源);另一个是DQ(数据输入/输出引脚)。
1.3 硬件电路
1.3.1 寄生电源供电电路
1.3.2 外部电源供电电路
采用寄生电源供电时,VDD引脚必须接地,由I/O引脚为DS18B20提供电源电流。采用外部电源供电时,VDD接外部电源,为DS18B20提供电源电流。寄生电源有双重优点:
a.远程温度检测无需本地电源;
b.缺少正常电源条件下也可以读ROM。
但是这种供电方式就不能确保数据转换时仍有效供电,从而DS18B20无法进行精确地温度转换。当多个DS18B20挂在同一根I/O线上并同时进行温度转换时,这个问题变得更加明显。因此本文决定采用外部电源供电方式,以达到提高温度转换精确度的目的。
1.4 内部结构
DS18B20内部主要包括:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。如图3所示:
1.4.1 64位光刻ROM
用于存储64位序列号。该序列号作为DS18B20的唯一编号,在出厂前就被光刻在64位ROM中。DS18B20在与单片机通信时,就用此序列号区别于其它传感器。64位序列号可以看作是DS18B20的地址序列码。
64位光刻ROM的位排列是:低8位是产品类型标号;接着的48位是该DS18B20的自身序列号;最后高8位是低56位的循环冗余校验码,该8位又被单独提出,称为CRC发生器,主要是实现串行通信中的数据校验,判断接收的数据是否正确。64为序列号的作用,是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20。
1.4.2 非易失性温度报警触发器
DS18B20的温度报警触发器TH和TL各由一个非易失性EEPROM字节构成,如果没有对DS18B20使用报警搜索指令,可以作为一般的EEPROM存储器使用。利用每个DS18B20唯一的序列号可读取同一根I/O线上的多个DS18B20的温度数据,利用I/O端口号和已经写入层数信息的DS18B20的温度报警触发器(TH和TL),可将每个DS18B20的温度数据和其物理位置对应起来。因此在DS18B20安装之前,就需将DS18B20所在层的信息写入到温度报警触发器(TH和TL)中。
2 AVR单片机与DS18B20的结合
在本文中DS18B20采用寄生电源供电,单片机选用AVR单片机。之所以选择AVR单片机,是因为其具有51单片机无法提供的优点:
a.读写速度快,AVR单片机采用了大型快速存取寄存器文件和快速单周期指令。
b.性价比高。
c.工作电压范围宽(2.7~6V)、抗干扰能力强。
总之,AVR单片机在一个芯片内将增强性能的RISC 8位CPU与可下载的FLA-SH相结合使其成为适合于许多要求、具有高度灵活性和低成本的嵌入式高效微控制器。
图4是DS18B20采用外部电源供电方式时,与Atmega16单片机的硬件连接图。
3 解决方案
本文深入研究数字传感器的工作原理,通过设计硬件和软件,提出了更换数字传感器的方案,并已在网络远程控制传感器的设计中应用,在硬件平台上实现了仿真。图5是通过Proteus 7单片机软件仿真系统设计的,单片机控制DS18-B20并显示测试结果的电路图。
3.1 硬件设计
单片机通过I/O口控制DS18B20,每个I/O口外接60个DS18B20,同时单片机通过SPI串行接口外接外部存储器EEPROM,如图6所示。
M95128芯片采用MLP8微型封装技术,因此,可以大大节省产品的空间和成本;待机功耗低于3μA,也是该芯片的一大特点;四线的SPI接口支持最高 2 Mbit/s的通信速率,除提供标准的硬件写保护功能外,还支持软件写保护。外部存储器EEPROM用来存放单片机控制的所有DS1-8B20的序列号,和对应的逻辑地址。一个DS18B20的序列号占八个字节,所以一路数据线上所接DS18B20温度传感器的个数与外部存储器EEPR-OM的存储空间有关。M95128芯片的容量达128kbit,可以存储13107个DS18B20的序列号和对应的逻辑地址,足以满足本文的需要。
单片机Atmega16的PB5(MOSI)口接EEPROM的DI(数据输入)口,PB6(MISO)口接DO(数据输出)口,PB7(SCK) 口接SK(读写时钟信号输入引脚)。单片机读到每个DS18B20的序列号后,通过PB5口将序列号和对应的逻辑地址写入EEPROM中。需要某个逻辑地址对应的序列号时,EEPROM通过DO口将序列号传入单片机中。
3.2 软件设计
本文设计使单片机每次上电时,都重新读取每根数据线上的每个DS18B20的序列号和温度报警器中的内容,I/O端口号+温度报警触发器中的层信息即为该DS18B20的逻辑地址。单片机将读取到的各DS18B20的序列号与其对应的逻辑地址,通过MOSI引脚保存在外部存储器EEP-ROM中。在控制模块的固化程序中,只涉及传感器的逻辑地址。当需要访问某个传感器时,单片机会根据固化程序中的逻辑地址在EEPROM中查找该逻辑地址对应的 DS18B20序列号,从而找到需要访问的传感器。在更换了某个DS18B20时,只需给单片机重新上电,微控制会更新EEPRO-M,而不需修改控制模块中的固化程序。
本文中,使用ICCAVR编译器作为软件开发环境,编译C语言程序代码。向EEPROM中保存序列号的程序流程图如图7所示。
根据控制模块中涉及的逻辑地址,单片机在EEPROM中查找对应的DS18B20的序列号的程序流程如图8所示。
4 结语
本文上述的解决方案,通过外接存储器,保存DS18B20的序列号和相应的逻辑地址,很好地解决了数字传感器的更换问题。这一方案,极大地提高了设计人员和工作人员的工作效率。与此同时,因为在通信链路中传输的是逻辑地址,减少了冗余信息,提高了有效信息的传输率。因此,本文设计的温度采集系统,优点很多,不仅运行速率快、性能稳定、数字化程度高,而且维护方便。此系统在各类数字通信、环境监测、安防系统等多个领域具有广泛的应用价值。