本文从实际应用出发,较全面地介绍了全数字温湿度仪的设计与实现。方案采用AT89S52单片机作为MCU,DS18B20作为数字温度传感器,奥松DHT11为数字湿度传感器,1602液晶模块为显示部件,结合相关电路组成温湿度计的硬件部分,嵌入式编程采用C51语言。
本文不仅包括器件选型方面的硬件知识,同时给出了传感器驱动等典型程序段。实践证明,本温湿度仪具有测量数据准确、显示直观、反应快、量程大、误差小、免标定、报警温度可设定等优点,稳定可靠,值得推广。
0引言
温湿度仪是日常生活、工矿企业、养殖等场所经常使用的测量温度、湿度的仪表,老式温湿度仪存在反应慢、精度低、量程小、标定繁琐等缺点。近年来,随着数字传感器发展与普及,温湿度仪也在朝着数字化、免标定、方便设置报警、实时监控等方向发展。尤其以DS18B20、DHT11为代表的数字传感器,属于集成传感器,可靠性很高,因此,采用微控制器结合数字传感器,设计全数字的温湿度仪,具有普遍的实际意义和社会价值。
1.功能结构描述
本温湿度仪以MCU为核心,利用最新数字化温湿度传感器作为测量器件,LCM为显示部件,蜂鸣器为提示音和报警声输出,由于本仪表还具有其他功能,所以设置了三个按键作为输入部分,以完成多个显示界面切换及进行相关设置的功能。
2.硬件选型
2.1 温度传感器选型
以热电偶、热敏电阻等为主,输出电压、电流或频率等模拟物理量的模拟传感器,在需要数字信号的场合应用不够方便。近几年涌现出一些数字温度传感器,如ADT7301、TMP205等,但经过综合比较,这里采用了美国Dallas公司出品的DS18B20[1],优势是反映快、精度高(可编程9-12位,最高0.0625℃)、体积小、误差小(<±0.5℃)、测温范围大(-55~125℃)、接口简单,尤其值得称道的是其“单总线”数据传输方式,与单片机交换信息仅需要一根I/O线。而且,可同一总线挂接多个传感器,每一个都有自己唯一的64位序列号。实际应用中,采用了DS18B20的外部电源供电方式。
2.2 湿度传感器选型
近年来市面上典型数字湿度传感器有瑞士SHT11等型号,精度高范围大,但价格较高,这里最终选用奥松DHT11[2],该传感器由一个电阻式感湿元件、NTC测温元件和8位单片机组成,相比前者有较大价格优势,精度5%RH,误差<2%RH,湿度范围20~95%RH.而且,该传感器也是单线制串行接口,编程上与18B20有一定相似之处。该传感器缺点是不如电容型精度高。由于该传感器温度测量的性能指标不及DS18B20,所以只用了其湿度测量功能。
2.3 MCU选型
鉴于温湿度测量实时性要求不高,数字化温度、湿度传感器及液晶显示模块对M C U速度要求也不算高,以上器件加上键盘、蜂鸣器等硬件资源占用的引脚数也不多,所以采用经典的51系列单片机是很好的选择。尤其美国Atmel公司生产的AT89S5x系列单片机[3],质优价廉,完全满足上述要求,而且具有ISP下载功能,可实现在对板载芯片进行程序升级,十分方便。最终C51程序经编译生成的HEX文件为15k大小,可下载到AT89S52芯片。
2.4 显示部件选型
为了提升仪表外观档次,没有使用传统数码管,而是采用了应用较广的字符点阵型液晶显示模组LCM1602,其具有微功耗、体积小、编程显示灵活等特点。由于各厂家1602液晶大都基于HD44780液晶芯片的,故控制原理相同,方便替换。该液晶型号国内外生产厂家不少,如长沙太阳人、深圳金马等,价格约十元。应用时通过模拟口线方式将LCM1602与MCU连接。
2.5 电源选型
本系统MCU、传感器等都可使用+5V供电,故需配置直流电源。这里采用两种供电方案(开关切换),一是外置220VAC转5VDC的线性电源或开关电源,PCB板上只留一个DC-002电源插座,二是采用两节碱性电池结合Boost电路为系统提供电源。在采用后一方案时,有MAX1674、TPS60110、SP6641A等多种芯片选择,但从经济性和方便采购等方面考虑,最终选择上海贝岭公司的开关型DC/DC升压稳压芯片BL8530[4].该芯片仅0.8V的启动电压、高电流的负载驱动能力,极低的静态功耗(Iq<5.5uA),非常适合于便携式电池应用的场合。采用了高性能、低功耗的参考电压电路结构,同时在生产中引入修正技术,保证了输出电压的高输出精度及低温度漂移,且对周边电路干扰很小。
配合肖特基二极管1N5819、100uf钽电容和33uH屏蔽功率电感,输出电压实测维持在4.98V,十分稳定。
3.软件编程
3.1 软件流程图
开始上电后,首先进行系统初始化,包括定义IO口、设置默认值,显示开机画 面等工作。然后默认进入显示当前温度的状态,如果没有收到DS18B20返回的存在脉冲,蜂鸣器报警且液晶有相关信息提示。
根据官方数据手册,相关温度操作包括启动温度转换(Conver T),跳过ROM(SkipRom),写暂存器(Write Scratchpad),设置高低温报警寄存器TH和TL,拷贝暂存器(Copy Scratchpad),Recall E2和读暂存器(Read Scratchpad)等。接下来进行按键判断,本仪表共有3个输入按键,按键1是功能切换键,每当按下一次则软件状态计数器加1,进入相应测试界面,且在温度测量、湿度测量及其他几个功能间循环。键2分长按和短按,在温度模式下有摄氏/华氏温度切换、最大值保持、关闭报警等功能。键3有切换液晶屏手动/自动背光,关闭报警等功能。如果所有按键都没有被按下,则先判断当前状态,然后判断是否存在相应传感器,如果有只更新当前温度或湿度值,或进入其他功能。最后返回,整个是一个大循环结构。另外,此处仅是软件流程图示意图,提供设计思路,某些具体实现可能会根据实际情况放到中断里处理,更为方便。 3.2 温度传感器典型程序段DS18B20对时序要求非常严格,编程时应确保延时程序要符合datasheet中的要求,这里首先编制了一个较精确的10us延时,之后的程序中多次调用。另外,摄氏、华氏温度的转换,以及低于0摄氏度时,需要显示的负号等情况都可在液晶显示温度的程序段中考虑。
3.3 湿度传感器典型程序段
相比同样是单总线设计的DS18B20,国产DHT11在编程思路上有一定相似性,但时序、移位等操作都不同,协议较前者简单。
用户主机(M C U)发送一次开始信号后,DHT11从低功耗模式转换到高速模式,待主机开始信号结束后,DHT11发送响应信号,送出40bit的数据,并触发一次信采集。而操作DS18B20时,MCU初始化收到应答信号后,就可随时发个指令写或读,主机有更多主动权。
主程序、1602显示驱动、其他功能等程序略去。
4.结论
本数字温湿度仪经试制、长时间运行,表现稳定,效果良好。在调试阶段,遇到并解决了一些问题,一个比较棘手的问题是,显示温度时偶尔会出现异常数字。经仔细分析发现,这是由于本仪表的多按键、多功能而采用的多个定时器,定时器产生的中断导致了DS18B20与MCU通信时序遭到破坏,造成传输的数据出错。本问题后来通过增加CRC8校验,对偶然出现的错误数据进行舍弃得到解决。
现阶段该温湿度仪只作为单独使用,在以后的升级型号中,可以加入数据存储功能(如24C02芯片记录峰值),以及多传感器总线方式,通过上位机监控各点温湿度等功能。