基于STC15单片机的温湿度计设计
2020-12-16吕小兵
吕小兵
(厦门紫光展锐科技有限公司,福建 厦门 361000)
0 引言
温度和湿度是两个基本的环境参数,在日常生活、环境保护、农业、化工等领域,经常需要对周围环境的温度和湿度进行监测[1]。目前,温湿度的测量方法有很多种,传统的温湿度计,精度不高,不易读数。单片机集成度高、功耗低、可靠性高,本文以STC15单片机和热敏电阻测量温度、湿敏电容HS1101测量湿度为基础,进行温湿度计的设计,并将温湿度的数值显示在数码管上。
1 温湿度计的硬件设计
该温湿度系统采用STC15W4K32S4单片机作为微控制单元,MF52热敏电阻模块组成温度测量电路,并通过数码管进行温湿度的显示。通过按键来实现温湿度、时间、温湿度上限值显示的切换,通过按键也可以实现对温湿度上限值的调整。当前温度或湿度超过温湿度上限值时,通过蜂鸣器进行报警。其中,时钟模块用于记录实时时钟,采用PCF8563来实现。
图1 温湿度计系统框图
1.1 单片机模块
STC15W4K32S4是宏晶科技生产的单机器周期的单片机,是宽电压、低功耗、超强抗干扰的新一代的8051单片机。内部集成高精度R/C时钟,ISP编程时5 MHz~35 MHz宽范围可设置,可省掉外部的晶振;内置4k字节SRAM,32k字节片内程序存储器,8路高速10位A/D转换器,共7个定时器[2]。
1.2 温度模块
温度的测量方法有多种,热敏电阻因其体积小、反应灵敏和低成本的特点而被大量应用于温度测量中。在本设计中,采用了MF52型热敏电阻。MF52型热敏电阻器是采用新材料、新工艺生产的小体积的树脂包封型NTC热敏电阻器,具有高精度和快速反应等优点[3]。
图2所示为温度模块电路,采用常规的串联分压电路,其中R31为10k,RT为MF52型B值为3950的热敏电阻。TEMP_AN与单片机STC15W4K32S4的高速ADC输入口P16相连。此处的P16IO口需设为高阻输入模式,测出的AD的数值才会准确,如若设为默认的准双向口,则实际测出的AD的数值比真实值小。
图2 温度模块电路
根据电路RT两端的电压为:
VRT=VCC×RT/(RTR31)
.
(1)
式中,VCC为电源电压,为3.3V;R31为分压电阻,为10kΩ。
“科技之光照亮了中国印刷业前进的道路。而重视科技进步是中国印工协与生俱来的基因、始终不渝的追求”,徐建国理事长总结道。产业不同发展阶段,协会面临的使命和挑战也有所不同。他认为,对协会来讲,当前的一个重要任务是,要积极探索在市场经济条件下如何推进自身建设,不能办成“二政府”,且因为环境使然也很难像国外同业协会那样完全市场化运作。“协会据此提出一个思路:“企业家办会,开放式办会”,目的是,立足市场、深植企业,在服务企业、服务产业中体现协会的价值。而今,通过几年的实践,成效显著,良性互动的产业协作氛围已然形成。
由于STC15W4K32S4的ADC为10位,故有如下式(2)
VRT/VCC=AD/1024
.
(2)
从而得到式(3)
AD=1024×RT/(RT+R31)
.
(3)
AD即为STC15W4K32S4的10位ADC采到的数值。
1.3 湿度模块
湿度模块主要选用了湿度传感器HS1101,它是一种将湿度变化转化为电容变化的传感器。HS1101具有湿度测量范围宽、温漂效应较小、平均灵敏度较高和反应快速等优点[4]。
温度模块电路如图3所示,采用的是HS1101的典型电路。HS1101与NE555搭建成多谐振荡电路,其输出为方波信号。输出信号F_OUT与STC15单片机的P32(INT0)相连接。HS1101的一脚连接着555的TH与TRIG,另一脚连接着GND。R2,R1,HS1101构成了充电回路;R1,HS1101构成了放电回路。电路充放电的时间由R1,R2的阻值及HS1101的电容值来决定。
图3 湿度模块电路
T充电=CHS1101*(R1+R2)*ln2.
(4)
T放电=CHS1101*R1*ln2.
(5)
可得输出方波的频率为:
f=1/(T充电+T放电)=
1/(CHS1101*(2R1+R2)*ln2).
(6)
空气湿度的变化,引起了HS1101的电容值变化,进而使得555电路的输出信号频率发生变化。信号的频率与相对湿度之间的关系如表1所示。
表1 输出信号频率与相对湿度之间的关系
1.4 数码管和蜂鸣器
图4所示为数码管驱动电路。采用了8个共阳极的数码管,通过两片74HC595实现对单片机IO的扩展并对数码管的驱动。74HC595芯片是一种硅结构的CMOS器件,可实现8位串行输入并行输出,在使用成本、驱动能力、操作便捷度等方面具备良好的性能优势[5]。由于人眼的视觉暂留效应,通过定时器进行动态扫描,能使数码管稳定显示。在此设计中,将定时器设为0.2 ms,每隔0.2 ms切换显示8个数码管中的一个。
图4 数码管电路
本设计采用的是有源蜂鸣器,通过单片机的IO来控制三极管S8550的通断,从而控制蜂鸣器的开关。
1.5 时钟模块
时钟模块主要采用了PCF8563芯片。PCF8563是PHILIPS公司推出的一款工业级内含I2C总线接口功能的,具有极低功耗的多功能时钟/日历芯片[6]。STC15单片机通过I2C接口控制PCF8563芯片以获取时间信息。
1.6 按键电路
该电路共有4个独立按键,分别为SW1、SW2、SW3、SW4。其中SW1相当于主菜单键,用来切换显示温湿度值、时间、温湿度阈值;SW2相当于次级菜单键,当前若处于时间显示时,用来选择时钟、分钟或秒钟的调整,当前若处于温湿度阈值,则用来选择温度或湿度阈值的调整;SW3、SW4则分别对当前正在调整的数值进行加或者减操作。
2 温湿度计的软件设计
2.1 主程序设计
本系统共有三组显示界面,分别是温湿度值的显示、时分秒显示,温湿度阈值的显示。可以通过按键来调整时分秒和温湿度阈值的数值。当前的温湿度值超过阈值时,单片机会控制蜂鸣器发出“嘀-嘀-嘀-”的报警声。
本系统使用了STC15中的一个定时器进行系统时钟的控制。定时器进行1 ms的设定,在定时器中断函数时,对100 ms、1 s的标志位进行置1,在main函数的循环里,根据需要,将不同的任务放在不同的时间间隔来处理,并且当检测到这些时间标志为1时会对这些时间标志进行置0。
图5所示为主程序的流程图,在系统初始化里实现了对各个模块的初始化,当检测到100 ms时间到了以后,进行按键处理、数码管缓冲区填充、蜂鸣器时间控制、时间读取;当检测到1 s时间到了以后,进行温度采集、湿度计算、报警处理。
图5 主程序流程图
2.2 温度计算程序设计
STC15W4K32S4的10位ADC采到的数值可以反映温度的数值。此次设计采用的是B值为3950的NTC热敏电阻,通过查阅资料,选取部分R-T数据,如表2所示。
表2 R-T关系
根据式(3)可以推得部分AD的数值与温度之间的关系如表3所示。
表3 AD-T关系
在STC15单片机程序中,通过查AD-T的表格,就可以计算出具体的温度的数值。
2.3 湿度计算程序设计
湿度模块的频率信号与STC15单片机的P32(INT0)相连。将单片机的外部中断0的工作方式设为下降沿有效,并开启外部中断0。对于外部中断0的中断服务程序,每一次外部中断0响应时,shidu_cnt++,每当系统时间过去1 s,则令freq_value=shidu_cnt,shidu_cnt=0。此处的freq_value则为湿度模块的频率信号的频率值。
根据表1就能算出当前的湿度所处的区间值,再通过双线性插值的方法,就可以算出具体的湿度值。假设当前的Freq值处在表1中的Freq1与Freq2之间,Freq1对应的湿度值为RH1,Freq2对应的湿度值为RH2,并且RH2-RH1=10,则可以根据式(7)算出当前湿度的数值。
RH=RH1+10*(Freq1-Freq)/(Freq1-Freq2)
.
(7)
3 温湿度计测试
在测试过程中,采用了美德时家用温湿度计JR900与本设计进行对比,测试结果如表4所示。从测试结果来看,本设计所测得的温湿度数值基本一致,二者所测得的温度相差不超过1℃,所测得的湿度相差不超过5%。
表4 温湿度测试结果数据
4 结语
本设计是基于单片机STC15W4K32S4的温湿度计的设计,包含温度检测、湿度检测、实时时钟、数码管显示等功能。本设计电路简单可靠、操作方便、成本低,测量误差在可接受范围内,基本达到日常温湿度测量要求。