多点高速同步温度采集系统的设计
2011-05-08马殷元
赵 睿 ,马殷元
(兰州交通大学 机 电技术研究所, 兰州 7 30070)
针对传统的温度采集方法。速度慢、多点信号不同步等问题,本文提出了多点、高速、同步温度采集的方法,采用DS18B20数字温度传感器来采集温度信号。通常在单总线上串联很多DS18B20,需要查询DS18B20的64位ROM才能得到对应传感器的温度值,为了节省掉64位序列号的时间开销,采取在每个总线上挂载一个DS18B20的方法,通过并口对多个DS18B20进行统一操作,既节省了大量的存储空间,又提高了温度转换的同步性和速度。
图1 多点高速同步温度采集系统
1 系统构成
多点并行温度采集系统如图1,ATmega16单片机的每个I/O口上挂接一个DS18B20数字温度传感器,通过读取每个口的电平值来同时读取多路DS18B20的温度值,并在LCD显示器上显示,同时通过RS232发送到上位机。
2 系统硬件设计
2.1 主要元件介绍
AVR ATmega16单片机是一款采用RISC指令的8位高速单片机, 具有速度快、片上资源丰富、驱动能力强、功耗低、性价比高、保密性好等众多的优点。
DS18B20温度传感器,属于新一代适配微处理器的智能温度传感器,全部传感元件及转换电路集成在形如一只三极管的集成电路内。DS18B20采用单线的接口方式,在与微处理器连接时仅需要一条I/O 口线即可实现微处理器与DS18B20的双向通讯。并支持多点组网功能,在使用中,DS18B20不需要任何外围元件,大大简化了数据采集电路的设计。
另外,DS18B20输出的信号是数字量,同时可传送CRC校验码,具有极强的抗干扰纠错能力,与采集模块之间的连接电缆可以很长,采用屏蔽3芯线作为信号线,DS18B20的可靠传输距离可以达到200 m。作为智能传感器,用户可以设定传感器的报警温度,此温度值存储在EEPROM中,掉电后不会丢失。DS18B20还具有自诊断功能,当由于意外原因导致传感器故障时,传感器将返回错误代码FF。 DS18B20测温范围-55℃~125℃,测温误差在±0.5℃以内,这与各监测点的温度范围和测量精度都是符的,所以设计时选用该温度传感器。
图2 系统硬件电路设计
2.2 硬件电路设计
本系统采用一片ATmega16单片机作为核心控制单元,其中PA、PB、PC、PD口的32个引脚作为输入输出使用,PA、PB口的16个引脚分别挂载16个DS18B20,PC口的PC2、PC3、PC4、PC5引脚作为程序下载端口使用,PC0、PC1、PC7三个引脚分别挂载3个DS18B20,PD口的PD0和PD1作为串口通讯引脚使用,PD3~PD7,5个引脚分别挂载5个DS18B20.整个系统充分利用了mega16单片机的I/O资源,挂载了24个DS18B20,可同时采集24路温度信号。由于mega16单片机价格低廉如需采集更多路的温度信号可将多个mega16单片机并联使用。系统硬件电路设计如图2。
3 系统软件设计
由于单片机与单总线温度传感器是通过1根信号线链接的,主机要实现各类操作命令以及温度的读取与设置,必须严格地按照DS18B20的通信协议来进行。在进行数据写“0”、写“1”时隙、读“0”、读“1” 时隙,所有的数据传输必须从字节的低位开始,编写程序时必须按照其对应的时序操作,否则不能获得正确完整的数据。下面对DS18B20进行各类操作的重要函数说明如下:
resetDS18B20_ABCD(void):发送复位脉冲,每次对DS18B20的操作必须调用此函数。
*readByteDS18B20_ABCD(void):向DS18B20读一个字节。
writeByteDS18B20_ABCD(BYTE wb):向DS18B20写一个字节。
*readTempDS18B20_ABCD(void):分别从24个DS18B20中读取24路温度。
UART_transmit():串口发送函数,将24路温度值发送上位机显示。
在本系统中,DS18B20 采用9位分辨率,温度的最大转换时间可达到93.75 ms。采集多路温度信号的时间约为750 ms。大大的提高了温度采集的速度,实现了多路温度的同步采集。
3.1 主程序设计
本系统采取模块化设计,首先对mega16单片机的I/O口、定时器和串口进行初始化,然后调用resetDS18B20_ABCD(void)复位函数对24个DS18B20进行复位操作,接着调用*readTemp-DS18B20_ABCD(void)函数读取24路温度值,并通过一个数据换算函数将温度值转化为十进制,最后调用UART_transmit()串口发送函数将24路温度值发送到上位机进行显示处理,主程序流程如图3。
3.2 主要子程序设计
并行温度采集的难点在于对多路DS18B20数字温度传感器的同步操作。如同步读时序、同步写时序等。本文设计了同步读写时序函数,能够同时读写24路DS18B20。下面对读字节函数*read-ByteDS18B20_ABCD(void)进行详细说明:
图3 主程序流程图
定义数组Adata[24]用来存放24路温度值,定义DATA,DATA1,DATA2,DATA3来分别存放读取的A,B,C,D口的电平值。
每次读取24路温度信号的一位,并将其分别存放在数组Adata中,每次读取完毕后将Adata中的每个数均右移一位(读取温度时,先读取低位信号)当读取完8次后,将获得24路温度值,程序流程如图4。
图4 读字节程序流程图
4 结束语
系统采用AVR ATmega16高速单片机和24路DS18B20数字温度传感器,实现对多路温度信号的高速同步采集。软件采用模块化设计,提高系统的执行效率,通过设计同步读写多路DS18B20时序函数,实现了同步性。通过实验实现了高速同步采集温度的目的,具有较好的实用性。
[1] 叶 钢. 基于DS18B20温度控制系统的设计[J].电子测量与仪器学报,2007,26(4):31-32.
[2]张海洋,高 成,高泽溪. 多路温度采集系统[J]. 电子测量技术,2005.
[3]丁幼春,熊丽荣,黄 剑. 基于AT89S52和DS18B20的多点温度检测报警系统[J]. 农机化研究,2007(5).
[4]唐一鸣. 基于只能传感器的网络化多点温度测量系统[D].成都:西南交通大学硕士论文,2009.
[5]邓小燕,朱维璐,刘建华. 单总线温度传感器DS18B20及其在温室系统中的应用[J]. 冶金自动化,2004.