引言
温度和湿度是标定环境不可缺少的参数,在蔬菜大棚、粮食仓库等许多场合,对温、湿度的要求非常严格,因此对环境温、湿度参数的实时检测提出了更高的要求,温湿度测试系统[1]在工业生产和日常生活中的应用也越来越广泛。本文介绍的温湿度测量仪利用16位单片机SPCE061A作为控制中心,配合电容式湿度传感器HS1101和一线制数字温度传感器DS18B20采集数据,具有实时显示和语音提示功能。
1、系统工作原理及硬件设计
1.1 系统基本构成
温湿度测量仪主要包括两个部分:温度测量和湿度测量。其基本构成如图1所示。该系统利用16位单片机SPCE061A作为系统的控制中心,采用电容式湿度传感器HS1101和一线制数字温度传感器DS18B20,将测量到的温度值和湿度值送入单片机中,经过数据处理后,进行实时显示,并通过按键控制测量结果的语音播放。
1.2 SPCE061A单片机
SPCE061A单片机是以16位微处理器μ‘NSPTM为核心生产的一种16位微控制器,其时钟频率范围为0.32MHZ~49.125MHZ,具有较高的处理速度,能快捷的处理各种复杂的数字信号,它内置2K的RAM和32K的内存FLASH,具有14个中断源,32位可编程的并行I/O口,两个16位可编程定时器/计数器,7通道10位A/D转换器和单通道声音A/D转换器,双通道10位D/A转换器和可编程音频处理,具有较强的语音处理功能[2].
1.3 温度测量
温度传感器选择DALLAS公司生产的一线制数字温度传感器DS18B20,它具有3引脚TO-92小体积封装形式;温度测量范围为-55℃~+125℃,可编程为9位~12位A/D转换精度,测温分辨率可达0.0625℃,被测温度用符号扩展的16位数字量方式串行输出。
由于DS18B20只有一个串行通信接口,与单片机的连接电路非常简单,只需和单片机的一个I/O端口连接即可,本系统选择了IOB7端口,其连接电路图如图2所示。DS18B20的I/O口属于漏极开路输出,外接上拉电阻后常态下呈高电平。该器件内含寄生电源,其供电方式可以选择寄生电源方式,也可以选用外部电源[3].为方便起见,采用外部电源供电。
1.4 湿度测量
湿度是指空气中水蒸气的含量,其表示方法有绝对湿度、相对湿度、露点等。日常生活中所指的湿度是相对湿度,即空气中所含水蒸气量(水蒸气压)与其相同情况下饱和水蒸气量(饱和水蒸气压)的百分比,用%RH表示[3].
电容式湿度传感器HS1101具有检测速度快、高精度、高可靠性、长期稳定性和使用方便、体积小等特点,适用于一些对精度要求不高的场合。在不同的相对湿度中传感器的电容值不同,单片机不能直接读电容值,需要外接测量电路。电容式传感器的测量电路有电压输出式和频率输出式两种,考虑到单片机内有两个定时/计数器,测量频率比较方便,选用频率输出测量电路,如图3所示。采用555定时器和湿度传感器HS1101以及一些电阻构成多谐振荡器电路,产生的振荡频率由下式计算。
由湿度传感器HS1101的工作原理知道,测得的频率值与相对湿度值有关,关系如下式:
其中, 为25℃,55%RH时电路的参考频率。
1.5 显示及键盘
系统采用液晶显示模块RT12864M显示温度值和湿度值,该模块有并行和串行两种连接方式,考虑到传输速率,令PSB端接高电平,使用8位并行口进行指令/数据传输。并行口DB0~DB7与单片机的IOA0~IOA7相连接,使能端E与IOB6连接,指令/数据选择端与IOB4连接,读/写选择端与IOB5连接,另外每个端口都需要外接上拉电阻,如图4所示。单片机通过IOB4~IOB6对显示模块进行控制,按照液晶显示模块的读写时序编程,使显示模块正常显示温度值和湿度值。
系统的语音提示功能利用按键来控制,连接电路简单,按键一端接上拉电阻,另一端与单片机IOB3相连,按下键时,IOB3端口输入为高电平。
2、系统软件设计
单片机支持C语言与汇编语言之间的相互调用,为提高程序的可读性与移植性,同时也便于调试,采用模块化的方法编写程序。系统软件包括主程序、温度测量子程序、湿度测量子程序、键盘扫描子程序、中断子程序、语音播放子程序。在主程序中依次调用这些子程序,实现系统功能,主程序流程图见图5.
在主程序中,首先要对单片机端口进行初始化,将IOA端口设置为高电平输出,IOB端口设置为低电平输出。然后分别调用测量温度子程序和测量湿度子程序,完成测量和显示大约需要1秒钟的时间,然后再扫描键盘,判断是否进行语音播放。因为单片机内的看门狗计数器每0.75s的时间内会使系统自动复位,为防止该情况发生,需要在0.75s内将看门狗清零。
温度测量子程序首先对DS18B20初始化,如果计算机检测到单总线上有DS18B20器件存在,就发出跳过ROM命令(CCH)。当该命令被成功执行后,主机发出温度转换命令(44H)。延时一段时间,待转换结束后,再重新初始化,跳过ROM命令,然后主机发出读存储器命令(BEH),得到温度数据。为了缩短传感器数据的转换时间,将传感器的分辨率改为9位(出厂时默认分辨率为12位),这样温度转换时间97.5ms,精度0.5℃。
湿度测量部分采用频率输出电路,因此软件编程时,利用单片机的定时/计数功能得到与湿度值有关的频率值,再转换成相应的湿度值。单片机中有两个定时/计数器,利用定时器TimerB定时1s,在这段时间内,计数器TimerA采用外部中断源EXT1(下降沿触发)作为时钟源,从0x0000开始计数,利用定时中断,定时时间到则进入中断程序,保存计数值。执行完中断程序后,停止定时器定时和计数器计数,此时保存的计数值就是接到IOB2端口的输出频率,再根据频率与相对湿度的关系转换成相应的湿度值。
3、语音播放程序设计
SPCE061A单片机支持语音播放所要求的硬件和软件的全部功能。硬件方面:SPCE061A有两类D/A转换通道,一类是直接采用数/模转换的DAC方式,另一类是采用脉宽调制的PWM驱动方式。两类实现方式实质都是将数字信号转换成模拟信号输出。本系统采用双通道数/模转换DAC方式,将数字信号转换成模拟信号输出,经信号放大后,由扬声器输出。软件方面:SPCE061A自带有多种音频压缩算法,可分别实现高保真音乐、普通话等语音效果[6],本系统采用SACM_S480音频压缩算法将录制的语音文件压缩成音频格式,语音播放程序调用语音文件进行测量结果播报。
语音播放程序框图如图6所示。语音播放程序主要完成D/A转换器、TimerA定时器和音量的初始化,从ROM里取出预先压缩好的语音数据,解压缩后存放在播放队列中,中断服务程序定时地从播放队列中读取数据,从D/A转换器转换后送扬声器发出声音。本系统设计温湿度显示和播放整数部分,在程序中分别对温度和湿度测量结果计算十位和个位,判断十位是否为零,如果十位是零,则直接播放个位;如果十位不是零,再判断个位是否为零,如果个位是零,则直接返回,播放十位;如果个位不是零,则播放个位。
4、测试结果及误差分析
表1是采用本装置得到的恒温箱温度实测值与标准二类水银温度计的测量温度值以及误差。表2是在25℃下室内环境中,通过空气加湿器调节湿度,采用便携式露点湿度检测仪(精度1% RH)测量的环境湿度与本系统测试的湿度值对比及误差。
从表1可以看出,DS18B20的温度测量比较稳定,本设计中温度分辨率为0.5℃,如果调整传感器的分辨率可将测温精度提高到0.1℃。表2的数据可以看出,HS1101由于容易受到环境因素的干扰,误差控制在5%范围之内,当湿度超过80%时,由于湿度过大达到饱和状态,系统无法测量出湿度。
5、结论
本文开发的集数据采集、处理、显示及语音提示一体的便携式测量仪,可用于室内温湿度测量,温度测量范围0~80℃,精度0.5℃;湿度测量范围0~80%RH,精度5%RH.温湿度测量结果可通过液晶模块实时显示及按键控制进行语音播报。采用数字式温度传感器、频率测量技术及单片机智能技术,本系统具有较高的稳定性和准确性。