节能减排是我国长远的政策方针,而对于供热行业来说,节能的潜力又是巨大的。长期以来,我国城市室内采暖系统在设计上基本上都采用单管水平串联的系统方案进行设计,然而该方案不便于住户进行热量调节,并且现今绝大部分的暖气费用是按面积进行集中收取,存在很大的不合理性,这两个主要因素造成了极大的供热用热浪费。随着人们生活水平的不断提高和供暖行业的不断发展,对供暖系统实现分户计量和独立控制的呼声越来越高,本文针对分户计量中的无线测温系统提供一个可靠的设计方案。
ZigBee数传技术是一种短距离、低功耗、低复杂度、短时延、低速率的大容量无线网络技术,是目前短距离无线传感器网络的首选技术之一。ZigBee数传模块组网方式丰富灵活,可根据实际应用来选择。
1 系统架构设计方案
该设计以CC2530 无线单片机为核心, 整个收发系统由主站( 监控中心)和子站( 测温终端)组成( 如图1所示) 。在正常环境下,将温度传感器采集到的温度数据处理后通过ZigBee无线模块发送给主站节点,完成主站节点与子站节点的通信过程。结合串口通信技术,通过RS-232 串口线连接主站上位机( PC) ,上位机接收并存储数据后,根据住户在冬季实际获得的温度值,结合一系列算法以及当地制定的收费标准,就可以简单地计算出住户在冬季的真实采暖费用,真正做到收费公平合理。
图1 收发系统
2 硬件设计
子站( 测温终端)由ZigBee数据采集、无线通信和处理器等模块构成,其任务是采集待测点的温度,并将温度数据通过无线通信网络发送至主站中。主站是由微处理器和无线通信模块组成,主要负责接收各节点的温度信息,并通过RS232 串口将其传送至服务器上进行显示和处理。另外,根据实际需要,也可在终端节点上安装显示模块或报警模块,以方便网络安装测试。
2.1 数据采集模块
数据采集模块又称温度采集节点,温度传感器选用美国Dallas 公司生产的DS18B20,它可直接将温度转化成串行数字信号进行处理,无需进行模数转换,处理器可以直接读取温度数据。该温度传感器测量范围为-55℃~+125℃,温度转换位数可以选择9~12 bit ,对应的温度分辨率分别为0.5℃、0.25℃、0.125℃和0.062 5℃( 温度/数据关系如表1 所示),电压范围为3.0 V~5.5 V,可用数据线供电。DS18B20 具有微型化、精度高、低功耗、响应时间短和抗干扰能力强等特点,适用于本设计的温度采集模块。值得注意的是,与CC2530 的I/O 端口连接时,需要上拉一个4.7 k赘的电阻,原理图如图2 所示。
表1 DS18B20 温度/数据关系
图2 温度采集节点原理图
2.2 ZigBee无线模块
ZigBee无线模块是基于CC2530 芯片实现的( 如图2 所示) 。其主要特点是体积小、高性能、低功耗、具有优良的无线接收灵敏度和强大的抗干扰性。CC2530 是一个兼容IEEE 802.15.4 的片上系统, 支持专有的802.15.4协议,此外还集成了符合ZigBee技术2.4 GHz 频段RF无线电收发模块。CC2530 工作电压范围内2.0 V~3.6 V,工作温度为-40 ℃~+125 ℃, 休眠时功耗电流可降低至0.6 uA。本设计中的网络通过ZigBee数传模块将多个温度采集节点组建成星形网络( 如图3 所示) ,将各个ZigBee数据采集节点采集的温度数据实时发送至协调器,并由协调器通过串口汇聚到主站上位机中,从而实现温度数据的实时采集。
图3 星形网络结构示意图
3 软件设计
系统的软件设计包括数据采集、通信控制和监控中心3 个部分。其中,数据采集程序运行在子站的微处理器上,其主要任务是负责采集温度数据并实现无线收发;通信控制程序运行在主站的微处理器上,该程序需要实时地处理从子站节点传来的温度数据,并且还要控制它们按照上位机的操作指令进行工作,它是整个系统程序的核心;监控程序运行在上位机中,它会监视节点的工作状态,对子站发送的温度数据进行有效处理。
3.1 温度采集节点软件设计
图4 DS18B20工作流程图
DS18B20 工作流程图如图4 所示, 其主程序( 仅测温)如下。
void main ( )
{
……;
init ( ) ;
while ( 1 )
{temp_tran ( ) ;
value1=get_tmp_value ( ) ;
temp1=abs ( temp_value1 ) ;
}……;
}
另外,向DS18B20 内写数据函数编辑如下( 严格按照时序图进行编程) 。
void write_byte ( unsigned char dat )
{……;
for ( j=0 ;j<8 ;j++)
{
b=dat & 0x01 ;
dat>>=1 ;
if ( b )
{
ds=0 ;
i++; i++;
ds=1 ;i=8 ;
while ( i>0 )
i--;
}
else
{
ds=0 ; i=8 ;
while ( i>0 )
i--;
ds=1 ;
i++; i++;
}
}
值得注意的是,在温度转换函数中,需要添加“跳过序列号”命令,即:
void temp_tran ( )
{
……;
write_byte ( 0xcc ) ;
……;
}
本设计于每日5:00 、13:00 和21:00 3 个时段进行温度采样,采用DS12CR887 时钟芯片进行计时。参考该芯片的技术手册,依据DS12CR887 时钟芯片的时序图,可写出对应总线( 选用intel 总线)读数据与写数据的函数,如下所示。
void write_ds ( uchar add ,uchar dataa )//intel 总线写数据
{
ds_cs=0 ;ds_as=1 ;
ds_ds=1 ;ds_rw=1 ;
P0=add ;
ds_as=0 ;
ds_rw=0 ;P0=dataa ;
ds_rw=1 ;
ds_as=1 ; ds_cs=1 ;
}
uchar read_ds ( uchar add )
{
uchar ds_dataa ;
ds_cs=0 ;ds_as=1 ;
ds_ds=1 ;ds_rw=1 ;
P0=add ;ds_as=0 ;
ds_ds=0 ;
P0=0xff ;
ds_dataa=P0 ;ds_ds=1 ;
ds_as=1 ;ds_cs=1 ;
return ds_dataa ;
}
另外,该时钟芯片时、分、秒的读取函数分别为shi=read_ds( 4 ) 、fen=read_ds ( 2 )和miao=read_ds ( 0 ) 。
温度节点作为终端节点,通电后加入由协调器建立的ZigBee网络,其中协调器负责建立网络和接收终端节点加入。温度采集节点和网络协调器之间构成简单的星形网络( 如图3 所示) ,温度采集模块的工作流程如图5 所示。
图5 温度采集模块工作流程图
3.2 协调器设计
协调器的主要功能有:收集各个节点的温度数据, 并将其通过串口传至上位机中进行数据处理;将上位机的监控需求传到协调器中,并通过ZigBee网络发送到终端节点上,图6 仅展示上述第一种功能的流程图。
图6 网络协调器工作流程图
接收系统接收到ZigBee数据采集的温度数据后,再通过RS-232 串行通信接口与上位机相连,将接收的温度数据实时存储在上位机中并显示在上位机界面上,方便后期处理。上位机数据处理流程如图7 所示。
图7 上位机数据处理流程图
4 系统测试
由于家用水暖系统有进出水管,为了测量温度差,将两个温度采集节点标号后分别贴附在进水管和出水管上,把每次测得的两组数据发送到上位机端, 我国供暖时间( 不计特殊情况)为11 月15 日至次年3 月15 日,供暖时间为120 天,进水管和出水管的数据均为360 个,结合供暖热量算法以及当地供暖收费标准,将这些数据在上位机中做最优计算,再根据每家每户的最终数据进行精确收费。
本设计采用串口调试助手V3.7.1 进行系统测试,端口参数如下:比特率为9600 b/s ,数据位为8 bit 、停止位为1 bit ,校验位为NONE。为了验证该设计能否正常工作,搭建了如图8 所示简易场景进行测试。
图8 测试场景示意图
从串口调试助手窗口中,可以看到两个节点的温度,如图9 所示。
图9 测试结果
通过分析了ZigBee网络相关特性, 以CC2530 为核心、DS18B20 为温度节点, 设计实现了基于ZigBee无线模块的温度采集与传输,阐明了硬件框架设计以及ZigBee数传模块网络组建流程,完成了对多个不同位置的温度ZigBee数据采集数据采集的设计要求。本系统具有通信可靠性高、结构简单及成本低的特点,通过实验验证,在此基础上经过系统后期完善与调试之后,便可投放给用户进行使用。