基于STM32 的多通道温湿度测量仪设计
2021-06-11郝结来王子权
郝结来,王子权,林 华
(1.安徽省汽车工业学校现代制造系,安徽合肥 231131;2.上海卫星装备研究所总装中心,上海 200240;3.合肥工业大学机械工程学院,安徽合肥 230009)
农业、林业、环保等工程中经常需要得到土壤的温湿度数据[1-2],文献[3]提出了一种基于射频识别技术传感标签的农田土壤环境监测方法,设计分析了一种无源射频识别温湿度传感标签。文献[4]对土壤的温湿度数据进行取样,探究温湿度对高寒草甸土壤氮矿化的影响;文献[5]测量出了土壤温湿度数据,研究了不同的覆盖方式对土壤温湿度的影响。工程中通常采用电子仪表对土壤进行温湿度测量[6-7]。文献[8]利用虚拟仪器技术,基于51 单片机搭建了一套农田土壤温湿度监测平台,实现了单个土壤温湿度的测量与显示,装置的测量通道数较少,并行处理能力较弱。相较于51 单片机和DSP 处理器,STM32 单片机具有更强大的计算能力和丰富的参考资料与设计案例[9-12]。文献[13]利用PWM 输出功能实现了对LED 灯的亮度调节。文献[14]基于STM32,针对分布式光纤拉曼测温系统中定标光纤和雪崩光电二极管的温控要求,设计了一套高精度恒温控制系统。文献[15]在STM32 单片机中移植了UCOS 操作系统,设计了一种智能在线分析仪。
文中基于STM32F103ZET6 单片机,在单片机上移植UCOS 操作系统,实现了多任务的并行处理功能;进行了8 通道温湿度采集系统硬件、电路、软件等的设计,通过按键设置温湿度报警值,并对报警信号进行功率放大,基于STemWin 设计制作操作简便、友好的人机交互界面。
1 系统硬件设计
1.1 系统整体组成
系统的整体组成如图1 所示,主要包括8 对传感器组件,即温度传感器1~8、湿度传感器1~8,温度传感器通过单总线与单片机连接;PCF8591A 和PCF8591B 分别与湿度传感器1~4 和湿度传感器5~8连接,PCF8591 模数转换芯片通过自身的IIC 总线与单片机连接。
图1 系统整体组成
复位电路、晶振电路等为单片机正常工作的基本电路,留有串口电路的目的有两个:程序烧写和与上位机通信;通过按键设置温湿度的报警值;对8 个传感器组分别设置LED 指示灯,当LED 等亮起时表明对应的传感器组在工作;设置报警信号的功率放大电路的目的是保证报警信号的响度足够大,以使人员及时感知报警。
1.2 SEN0114土壤湿度传感器
SEN0114 土壤湿度传感电路如图2 所示。该传感器是一种简易的水分传感器,可用于检测土壤的水分。当土壤缺水时,传感器输出值减小,反之增大。采用4 线制进行模拟量的采集,其中,VCC 和GND 分别表示电源的高电平和地。当湿度低于或高于设定值时,DO 输出高电平或低电平。AO 为湿度模拟量的输出端口,该接口与PCF8591 连接,用于实现模拟量到数字量的转换。
图2 土壤湿度传感电路
1.3 PCF8591转换芯片
A/D 转换模块集成了2 块PCF8591 芯片,该芯片内部集成了IIC 总线,占用单片机2 个GPIO 端口,所以两块芯片共用IIC 总线。芯片的A0、A1 和A2 为器件地址配置端口,PCF8591A 配置为0x01 时,A0 为高电平,A1 和A2 均为低电平;PCF8591B 配置为0x00时,A0、A1 和A2 均为低电平。STM32 单片机可通过IIC 通信功能与其连接,转换芯片的模拟量输入端口为AIN0~AIN4,所以每个芯片可与4 个湿度传感器连接。PCF8591 模数转换芯片如图3 所示。
图3 PCF8591模数转换芯片
1.4 DS18B20温度传感器
DS18B20 温度传感器的电路简单、测温精度较高,遵循单总线通信协议,可使用STM32 单片机的通用GPIO 引脚实现与DS18B20 的数据通信。配置8个DS18B20 的单总线引脚分别为PB0、PB1、PC5、PC6、PA0、PA1、PE2 和PE3。
1.5 触摸屏
设计使用4.3 英寸电容触摸屏,其分辨率为800×480 像素,采用16 位真彩显示。相对电阻式触摸屏而言,电容触摸屏只需轻微的手指触碰就能激活,容易进行多点触摸,采用硬度较大的钢化玻璃材料,使用寿命长[16]。
1.6 按键设计
在按键设计中,共设置了7 个按键,其中一个为复位按键,其余6 个为湿度×10、湿度×1、湿度×0.1,温度×1、温度×0.1、温度×0.01,分别表示湿度相对变化量10、1、0.1,温度相对变化量1、0.1 和0.01。配置6个按键的GPIO 分别为PA11、PA12、PB8、PB9、PB10和PB11,按键引脚的初值化值均配置为高电平,通过人机交互界面可进一步设置温湿度报警值。
1.7 功率放大电路
为提高报警器的响度,降低单片机的负载,使用D2822A 芯片完成对报警信号的单声道音频功率放大,如图4 所示。Input 为音频输入端,可与音频设备进行连接。扬声器接口配置为USB 标准的4 接口方式,接口的第一位和第三位为音频线,第二位和第四位为地线,图4 中USB4 元器件的1 和3 脚为音频线,2 和4为地线。
图4 音频功率放大电路
2 系统软件设计
系统软件设计主要包括系统任务配置、人机界面设计、互斥信号量配置、系统程序整体流程、温湿度测量任务等。
2.1 系统任务配置
系统任务主要包括任务创建函数start_task、触摸屏刷新任务touch_task、人机界面显示与刷新任务emwin_task、报警任务boom_task、按键检测任务key_task、系统工作指示任务led_task、温湿度测量任务THmer_task1~THmer_task8。
start_task 用于创建其他任务,执行完毕后挂起,配置该任务的优先级为8,堆栈容量为128 B。touch_task 用于触摸屏的刷新任务,配置该任务的优先级为3,堆栈容量为128 B。emwin_task 用于人机交互界面的显示与刷新,配置该任务的优先级为5,堆栈容量为512 B。报警任务boom_task 用于输出报警信号至功率放大芯片的音频输入端,配置该任务的优先级为7,堆栈容量为64 B。按键检测任务key_task 用于实时检测哪个按键按下,同时将按键的对应值在触摸屏上刷新,配置该任务的优先级为9,堆栈容量为128 B。led_task 用于通过led 的亮灭判断系统是否已经开始工作,配置该任务的优先级为10,堆栈容量为64 B。THmer_task1~THmer _task8为温湿度测量任务,通过调用温度和湿度的测量函数完成对温湿度数据的采集,并将处理后的数值显示在触摸屏的对应位置,配置该任务的优先级为6,堆栈容量为512 B,时间片长度为50 ms。
2.2 人机界面设计
友好的人机界面可大大提高系统的工作效率,文中主要设计了温湿度报警值设置界面、温湿度值显示界面,两界面可相互切换,以方便设置与观测。
2.2.1 温湿度报警值设置界面
温湿度报警值设置界面为系统初始化界面,即系统开机时自动进入该界面,如图5 所示。按住“START”按钮并释放,系统开始工作,按住“STOP”按钮并释放,系统停止工作。按住“Temperature Set”按钮并释放,此时系统进入温度设置状态,通过温度设置按键即可完成温度报警值的设置。按住“Humidity Set”按钮并释放,此时系统进入湿度设置状态,通过湿度设置按键即可完成湿度报警值的设置。滑动长条的作用是通过触摸屏对温湿度值进行设置。在温度和湿度设置中,长条的运动单位分别为0.01和0.1。
图5 温湿度报警值设置
设置好温湿度报警值后,按住“ENTER”按钮并释放,系统进入温湿度值显示界面。在此界面下,“RETURN”按钮不起作用。
2.2.2 温湿度值显示界面
温湿度值显示界面较简便地显示了各通道的温湿度数值,如图6 所示,T1~T8 和H1~H8 分别表示第1~8 通道的温度和湿度数据。当测量到温湿度数值时,在对应位置显示温湿度数值,当没有测量到温湿度数值时,在对应位置显示“NULL”字符串。在此界面中,按住“RETYRN”按钮并释放,界面返回到报警值设置界面,“ENTER”按钮不起作用。
图6 温湿度值显示界面
2.3 互斥信号量配置
由于2 个PCF8591 芯片共享一组IIC 总线,因此每次只能读取一个芯片上的数据,为了避免由共享总线导致的数据串联,配置了一个互斥信号量以防止优先级反转,同时保证单片机在一次通信周期里只与一个转换芯片进行通信。
在程序中配置一个任务标志变量TASK_FLAG,用于记录每个任务的状态,变量的位数为32 位。通过配置32 位中部分位的逻辑功能,可标志不同任务的运行状态。其位逻辑设置如表1 所示。
表1 TASK_FLAG位逻辑
2.4 系统程序整体流程
系统的整体程序流程如图7 所示[17]。程序首先完成系统所必须的初始化过程,如单片机时钟初始化、程序库的初始化、串口初始化等。在UCOS 操作系统初始化后,进行start_task 任务,开始创建系统所需的其他任务,运行结束后挂起。任务都包含在任务池中,其中,emwin_task 任务完成人机界面的显示。系统初始化后进入报警值界面,在该界面设置好数值后,通过“START”按钮使系统正式进入工作状态,通过“ENTER”按钮进入数值显示界面。在数值显示界面,通过“RETURN”按钮返回到报警值界面。
图7 系统整体流程
2.5 温湿度测量任务
温湿度测量任务的主要工作是调用温度、湿度测量函数,得到温湿度数据,通过一定的数据处理,将温湿度值显示在触摸屏上,其任务流程如图8 所示。图中,变量err 是操作系统必须定义的变量,用于存储程序运行错误信息。由于温度测量函数没有共享数据总线,所以调用温度测量函数无需增加互斥信号量的判断,而湿度测量函数必须进行互斥信号量的判断。
湿度测量函数如图9 所示。在进行器件地址判断之前,需要请求互斥信号量,当请求到信号量时,继续执行后续程序,若没有请求到信号量,则一直执行请求操作。PCF8591 的AD 转换的数字量为8 位,以相对湿度最大为100 进行计算,可得相对湿度处理函数为:
式中,d为数字量(d≤255),对应图9 中的函数变量ad。
图8 温湿度测量任务
图9 湿度测量函数
2.6 开发板调试
如图10 所示,实验装置主要包括温度传感器、湿度传感器、变送器、STM32F103ZET6 开发板、触摸屏、功率放大器、PCF8591 芯片组、LED 指示灯等。其中,变送器与湿度传感器连接,用于得到准确的模拟量电信号。
图10 实验调试装置
调试结果表明,土壤湿度传感器经过变送器后将模拟量的电信号传送到PCF8591 芯片组,经过模数转换后得到了湿度数据,同时得到温度传感器的温度数据;界面显示正常,按钮功能正常,能够在报警值界面和数值显示界面间切换;数据显示正常,测量任务运行正常,温度测量函数和湿度测量函数调用正常;功率放大器正常,在温湿度到达报警值时能够发出响度较大的报警信号。
3 结束语
基于STM32F103ZET6 单片机与UCOS 操作系统设计实现了多通道并行土壤温湿度测量装置,实现了8 通道的温湿度并行采集与显示。装置不仅可用于土壤的温湿度测量,也可用于环境温度、盆栽绿植、流体温度及湿度等的测量中,可方便地扩展装置的通道数,并对装置增加其他测量功能。