摘要:为了克服空调检测系统存在的布线复杂、温度采集稳定性差的缺点,利用数字温度传感器DS18B20具有一线总线、可组网的特点,结合AT89S52单片机,给出一种用于空调检测系统的高效稳定的温度采集方案,讨论了16片DS18B20数字温度传感器硬件连接和程序设计。应用情况表明,该温度采集方案具有准确率高、稳定性好、安装方便等特点,有效提高了空调检测系统的性能。
在空调生产过程中,为确保空调产品的质量,空调制造商在产品出厂前都必须对空调进行加热带、制热、制冷等环节的测试,通过标准机的电压、功率、输入管温、输出管温、回气温度、排气温度等参数判断空调是否合格,其中温度参数检测是整个空调检测系统的重要部分。
在传统的空调检测系统中,温度采集模块多以热电阻、热电偶为温度传感器,温度模拟信号必须经过专门的调理电路转换为数字信号后才能被单片机处理,使用一段时间后,系统检测到的温度值往往不够准确,同时由于温度采集点分布范围广,增加了布线难度,也给系统维护带来不便。
本文采用DS18B20数字温度传感器、AT89S52单片机,设计出适合空调检测现场的温度采集模块,实现现场16个采集点温度数据的同步采集和传输。
1 系统构成
空调检测系统温度采集模块的结构框图如图1所示。温度采集模块包括电源子模块、16路温度采集子模块、看门狗子模块、报警子模块、RS485接口子模块。微控制器采用Atmel公司的AT89S52,温度采集采用Dallas公司的数字温度传感器DS18B20。上位机采用研祥工控机,监控软件采用Visual Basic 6.0编程。
温度采集模块电路板固定在每个工作站的控制柜里,并将现场采集到的各点温度值实时传送给上位机,因此,温度采集模块并没有集成LCM子模块和键盘电路。
2 硬件连接
2.1 DS18B20数字温度传感器
DS18B20数字温度传感器温度测量范围为-55℃~+125℃,在-10℃~+85℃范围内,精度为±0.5℃,可实现9bit~12bit温度读取。DS18B20具有一线总线的特点,可以轻松组建温度采集网络,并且体积小、分辨率高、抗干扰能力强,实用性和可靠性比同类产品更高[1],因此,在轴承测温[2]、冻土区公路路基温度测量[3]等场合有着广泛的应用。
DS18B20温度寄存器中的温度值以9bit数据格式表示,而输出温度则是以16bit符号扩展的二进制补码形式提供,其中低8bit用补码表示,第9bit~16bit为扩展符号位。空调检测系统所需检测的温度值均在0℃以上,这样,只需读取缓存9个字节的前两个字节即可。
2.2 DS18B20硬件连接
DS18B20器件都有一个唯一的64bit ROM地址,通过协议就能识别这些序列号,这样多个DS18B20可以挂接在同一条单总线上,构成多点温度采集网络。由于DS18B20具有“单总线”的技术特点,因此可以采用两种不同的方式连接单片机。
(1)单端口并联连接:所有DS18B20均连接在同一条总线上,然后再连接到单片机的某个I/O端口。这种连接方式具有硬件开销小的优点,理论上一根总线可以挂接256个DS18B20,但若连接的数字传感器数量较多,单片机需要花较多的时间才能获得每个传感器的序列号,会降低系统的实时性,同时使得软件编程变得复杂。
(2)多端口并行连接:每个DS18B20独占单片机某个I/O端口。这种并行连接方式使得单片机能够对所有的数字传感器进行并行操作,同一时间能实现多个输入输出,实现对温度数据的快速读取,从而提高系统的实时性,同时也使得软件编程变得简单,缩短了项目的开发周期。这种连接方式的缺点是硬件开销比较大。
根据空调检测系统的实际需要,系统使用16片DS18B20构成小型温度数据采集网络,结合单端口并联连接和多端口并行连接的连接特点,每个I/O端口连接两片DS18B20,共使用8个I/O端口,单片机与16片DS18B20连接框图如图2所示。DS18B20芯片的DQ端和单片机的I/O端口相连,并接上一个4.3kΩ的上拉电阻,芯片的GND端接地线,VDD端接5V电源线。AT89S52是一种低功耗、高性能CMOS 8bit微控制器,具有8KB Flash,256B RAM,32bit I/O口线,3个16bit定时器/计数器,其资源性能可以满足空调检测系统温度采集的需要。
单片机需要通过接口电路实现与DS18B20的连接,接口电路图如图3所示。J1是接线端子台, DS18B20通过三芯电缆连接到J1;二极管IN4148实现电压钳位;RWDS1和单片机AT89S52的一个I/O端口相连;16片DS18B20通过J1~J8与温度采集模块连接。
3 程序设计
3.1 DS18B20温度采集
DS18B20温度采集基本流程:单片机发出复位脉冲,当信号线上的DS18B20发出存在脉冲后,即完成DS18B20的初始化工作;单片机检测到存在脉冲,便发起ROM操作命令;发送内存操作指令,启动DS18B20温度转换;延时2μs等待温度转换完成;发出匹配ROM命令后紧接着发送片内ROM序列号;读取序列号对应的DS18B20暂存器,从而读出温度值;读完一个DS18B20温度值后,接着转向下一个DS18B20的操作。这样的操作循环进行,从而完成对所有DS18B20温度值的读取。温度采集基本流程图[1]如图4所示。
DS18B20作为智能集成温度传感器,其智能化实现要以高质量代码作保障。因为读取每一个DS18B20都需要匹配序列号,复位、读、写操作都需要针对不同的I/O口,所以,16片DS18B20经单片机8个I/O口接入,需要定义对应8个I/O口的变量:18b20_0~18b20_7、18b20_0定义语句表示如下:“sbit 18b20_0=P1^0;”;需要定义8个复位(初始化)函数:void re18b20_0()~void re18b20_7();需要定义8个写函数:void wr18b20_0(uchar ml)~void wr18b20_7(uchar ml);需要定义8个读函数:void rd18b20_0()~void rd18b20_7()。对于单个I/O口(如P1.0),单片机在发送温度转换命令后,发送匹配命令wr18b20_0(0x55);连续调用8次写函数发送序列号;发送读温度暂存器命令wr18b20_0(0xbe);调用读函数rd18b20_0()读取温度低8 bit;经温度转换函数处理后,将温度整数部分保存在wd[0],小数部分保存到wd[1]。读取另外一片DS18B20,其温度值的整数和小数部分分别保存到wd[2]、wd[3]。读取P1.1端口,温度读取过程相同。所有传感器的温度值都保存到wd数组中,最后由单片机AT89S52按照Modbus协议发送给上位机。
3.2 程序编写需要注意以下几点
(1)单片机采用C51编程,代码功能模块清晰,可读性强。从本应用状况来看,其实时性能得到保证,因此,汇编语言不一定是最好的选择。
(2)空调检测系统所采集的温度均在0℃以上,并且上位机软件可以实现温度报警功能,因此,读函数读取RAM寄存器只需读取前两个字节。
(3)单片机和上位机软件通信采用Modbus协议的RTU模式,因此,温度转换函数实现的功能就是将温度低字节转化为十六进制数据,并保存到数组里。
4 应用分析
空调检测是在一个温湿度变化复杂、干扰源多的空调检测房里进行,空调检测系统包括1#~6#工作站,每个工作站均配有5台标准室内机。定频、变频一拖一、一拖多等机型的室外机由生产线运送到各站台,电源线、信号线等连接完毕后,即可扫描条码进行检测。检测过程中,上位机软件能实时检测温度、压力等参数,检测完毕,系统自动存储各种数据,如果参数不合格,则发出报警信号。
基于空调检测环境温湿度变化复杂的现场状况,数字温度传感器DS18B20需要采用不锈钢外壳封装,以达到防水防潮目的。DS18B20温度采集点主要分布在室内标准机的进风口、出风口和盘管。测量压缩机排气管温度时,不锈钢封装的DS18B20需要嵌入固定到金属夹里面,通过这样测量方式得到的是排气管表面温度,需要利用上位机软件进行必要的数据处理,才能得到排气管的实际温度。
上位机监控软件采用模块化设计,软件分为数据通信、数据采集、数据显示、数据管理、用户管理模块,并将各模块的实现代码封装成模块和类模块。需要注意的是:为了方便对DS18B20数字温度传感器进行安装、测试和维护,监控软件应该有针对连接温度传感器的I/O端口,以及I/O端口上的温度传感器的测试界面。上位机监控界面温度显示区如图5所示,图中显示的是某机型在制冷期间某时刻温度值,图中排气温度1和排气温度2为压缩机管温。
采用DS18B20的温度采集模块已应用到某大型空调生产厂的空调检测系统中,温度采集的准确性和实时性均满足系统的要求。数字温度传感器DS18B20和单片机AT89S52组成的温度采集模块,能同时满足成本和技术的要求,对组建多点温度采集网络具有一定的借鉴意义。
参考文献
[1] 周月霞,孙传友.DS18B20硬件连接及软件编程[J].传感器世界,2001(12):25-29.
[2] 张海传,吴晨霞,许东卫,等.低功耗轴承温度无线检测系统的设计[J].电子技术应用,2009,35(10).
[3] 何东坡,任贵波,韩春鹏,等.DS18B20在季冻土区公路路基温度场测量中的应用[J].电子技术应用,2010,36(4).
[4] 求是科技.单片机典型模块设计实例导航[M].北京:人民邮电出版社,2004.