吴亮亮,曹江涛
(1.厦门南洋职业学院航空机电学院,厦门361102;2.北京高伟达钽云科技有限公司云运营服务部,北京100000)
单片机开发设计电路已广泛深入应用于生产生活中,温湿度检测反馈系统在地铁、冷链存储运输、纺织定型机、烟叶发酵、农业、机房等诸多领域有重要的实用价值。以往设计的温湿度检测系统较多采用51单片机进行设计开发,且系统设计针对具体一种特定应用场合,不便于移植,通用性差。温湿度检测反馈系统往大存储、智能化方向发展已经成为市场主流趋势[1],并且,主流MCU单片机公司之一的ST意法半导体公司自2014年起,已经不再更新固件库。结合可视化、图形化的CubeMX软件和HAL库,以其抽象和可移植性等诸多优势,取代固件库开发也是大势所趋。基于STM32和HAL驱动库,结合CubeMX软件设计的温湿度监测反馈系统,可以自主调节温湿度上下限值以实现不同场合的运用,具备功能更强、功耗更低、开发周期更短等显著优势。
温湿度监测反馈系统整体规划有六个部分:STM32单片机、温湿度采集、显示电路、阈值设置、声光报警电路、外设反馈控制电路。系统整体框图见图1。
图1系统整体框图
主流MCU(单片机)公司之一意法半导体(ST),推出的产品STM32 MCU融高性能、实时性、数字信号处理、低功耗、低电压于一身,同时保持高集成度和开发简易的特点。本系统正是采用Cortex-M3基础型MCU主流级的STM32F103C8T6。该系列有丰富的外设、低压、低功耗、高集成度、高性能,同时价格适中。工作频率达72MHz,集成了512KBFlash和64KBSRAM,具有I2C、SPI、SDIO等接口模块,并且具有8个16位的定时器[2]。软件实现部分结合可视化软件CubeMX和HAL驱动库。高效便捷开发周期短,可移植性强。
单片机STM32F103核心电路设计方面针对系统所需,省去非必要环节,有效降低成本。核心电路设计包含以下内容:
(1)电源:采用5V充电器接DC直流电源插座,核心电路使用ASM1117得到单片机所需的3.3V供电电压;电源和地之间接电容以提高电源稳定性。
(2)时钟:单接外部8M晶振,省去RTC时钟。单片机引脚数量少,设计上原本接RTC晶振的两个引脚PC14(OSC32_IN)和PC15(OSC32_OUT)通过10K电阻直接接地。硬件设计上也可把两个引脚重映射到PD0/PD1,设置推挽输出0,节省两个电阻。
(3)复位:采用按键连接NRST端口完成复位电路,并联电容以消除抖动。
(4)启动:BOOT1接地,BOOT0通过跳线帽完成高/低电平转换,实现程序运行和在线调试的转换。
(5)下载:用最节省资源的SWD下载方式,实际接线时候只接SWIO/SWCLK/GND三条线,仅占用单片机两个引脚。
温湿度采集选用DHT11数字温湿度传感器,这是一款含有已校准数字信号输出的温湿度复合传感器,它应用专用的数字模块采集技术和温湿度传感技术,产品具有极高的可靠性和卓越的长期稳定性。精度为湿度+-5%RH,温度+-2℃,湿度量程20-90%RH,温度量程0~50℃,可满足多种场合要求。
硬件上DHT11脚1接5V电源;2脚通过5K电阻接电源,同时连接单片机PA1输入数据;3脚悬空;4脚接地。
显示采用微功耗、体积小、显示内容丰富、超薄轻巧,抗震性能更好等诸多优点的OLED,相比LCD,OLED不需要背光。在数据传输方面,提供多种对外接口方式,例如I2C(Inter-Integrated Circuit)接口,串行SPI(Serial Peripheral Interface)接口,6800、8080并行接口[3]。
七针OLED模块共有七个管脚,硬件设置上1(GND)脚接地、2(VCC)脚节电源、3(SCLK)时钟管脚接PA5、4(SDA)数据管脚接PA7、5(REST)低电平复位接PB1、6(DC)数据和命令控制管脚接PB0、7(CS)片选管脚接PA4,采用SPI方式驱动OLED。
用四个按键开关,分别接单片机PB3/PB4/PB5/PB6引脚,以设置温湿度上下限值。
用红色LED和喇叭,当前温度或者湿度超过设定的阈值,LED点亮同时喇叭响起实现声光报警。
LED阳极通过IK限流电阻接3.3V电源,阴极接单片机PB10,低电平驱动;蜂鸣器通过PNP接单片机PB11,低电平驱动。
单片机PB12/PB13/PB14/PB15四个引脚分别通过三极管8050驱动四路继电器输入端,继电器输出端分别接排湿、加湿、降温、升温设备。每个继电器反并联一个二极管以避免过高的感应电压损坏三极管,设计上继电器和单片机不共地。产品在结合实际应用场合可采用不同的控制设备。
系统设计原理图如图2所示。
图2系统原理图
(1)默认使用STM32F103C8T6的8M内部时钟源。
(2)开启ST-Link调试口(PA13和PA14)
(3)开启SPI1端口,使用硬件NSS端口,驱动OLED,使用端口PA4、PA5、PA7、PB0、PB1。
(4)开启外部中断,接收处理按键输入,使用端口为PB3、PB4、PB5、PB6。
(5)温湿度模块接PA1,需动态配置输入输出,输出为唤醒模块,输入为读取模块数据。
(6)声光报警端口,PB10/PB11设置为GPIO_Out-Put模式。
(7)外设开关端口,引脚PB12、PB13、PB14、PB15设置为GPIO_OutPut模式。
软件实现是结合CubeMX软件,采用HAL驱动库,在Keil uVision5平台开发,方便实现移植。Keil5支持常见的ARM公司系列产品,最主要的是与STM32系列完美兼容,提供了直接可用的启动文件,直接进行C语言编程开发,适用于多种机型和多种操作系统[4]。可以通过开发软件自动寻找中断地址,不需要重新设置启动文件,不仅方便也有效缩短开发周期[5]。
程序主要包括温湿度监测、显示、阈值上下限设定、反馈调节控制等几个模块。系统流程图如图3所示。
图3系统流程图
通过硬件测试(未接外设控制设备),用温湿度计记录数据作为参照,分别采用空调降温升温、加湿器加湿等手段来改变当前环境的温湿度,实验结果表明系统能够实时显示当前温度湿度,超过设定温湿度实现声光报警(蜂鸣器响起,LED灯亮),同时相应继电器开关动作,温湿度值回到阈值内,声光报警再度停止工作。响应速度快,性能可靠。
本系统开发的温湿度检测反馈系统是使用单片机STM32F103C8T6结合CubeMX软件和HAL驱动库运行程序开发,完成声光报警和反馈控制。硬件电路设计成本低,功能完善,通用性好,适用于多种环境的需求、长时间工作、无人值守的场合。