基于STM32的无线温湿度控制器
2015-01-13李常贤
赵 科 李常贤 张 彤
(大连交通大学 a.电气信息学院;b.动车运用与维护工程学院,辽宁 大连 116028)
随着工业的发展,对现场温湿度控制的要求越来越高,传统的模拟开关控制已经很难满足生产要求,因此设计更加可靠、智能的无线温湿度控制器将具有较高的经济效益和实用价值。无线温湿度控制器是一种集温湿度信号采集、数据存储、无线收发、控制及通信等功能于一体的新型控制器[1]。对于有害及危险等人类难以或无法到达的工作现场,通过设计无线温湿度控制器对生产现场的温湿度进行采集、控制和记录,可达到可靠生产、提高产品质量的目的[2]。另外,由于工业现场空间较大,温湿度又是非线性、纯滞后和大惯性的被控量,因此采用从机分布控制与主机集中控制相结合的方式进行现场温湿度控制,即通过多点从机进行温湿度采集和控制,采用无线模块将信息传送到中心主机,中心主机通过无线通信向各从机传送给定值和控制参数,主机可进行监控。在此,笔者以STM32控制器为核心,给出其硬件电路和软件流程。
笔者提出的基于STM32的无线温湿度控制器总体设计方案如图1所示。其硬件电路由高性能的STM32控制器、温湿度传感器、固态继电器和必要的人机接口电路构成。温湿度信号采集可以使用集成温湿度传感器,也可以使用自行设计的温湿度传感器,并进行信号调理,然后由STM32控制器内的ADC实现模/数转换与采集,之后的温湿度信号由STM32控制器进行线性化处理和温度补偿,通过编程可以采用灵活的控制算法控制执行机构,使温湿度值为系统给定值。控制器的工况和报警情况可以通过状态指示电路和报警电路输出。RS232串口电路用于对控制器进行本地化参数设置、程序调试或作为功能扩展接口。无线通信电路用于主机和从机的双向无线通信,实现多个从机分布控制和主机集中控制的结合,在此笔者仅介绍单个从机控制器的设计。
图1 无线温湿度控制器总体设计方案
2 硬件部分
2.1 主控模块
主控模块的核心是STM32 F103ZET6控制器,该控制器是32位高性能、低成本和低功耗的RISC处理器,内核采用CortexTM-M3架构,最高工作频率72MHz,具有512KByte的程序存储空间、64KByte的SRAM、8个定时器/计数器、3个SPI、集成5个USART通信接口、3个12位ADC及1个DAC等,硬件资源丰富,非常适合功能扩展。使用STM32控制器的PA1和PA4引脚连接传感器,GPIO与内部外设ADC1复用,方便扩展或互换传感器。
STM32控制器要求2.0~3.6V的操作电压,设计采用如图2所示的电源电路为控制器提供3.3V的工作电压。ZEN056V130A24LS器件具有相对平稳的电压与电流响应,有助于对输出电压的钳位,有利于保护齐纳二极管Z1和后续电子元件。
图2 电源电路
设计的时钟和复位电路如图3所示,采用外部时钟X1为系统提供RTC实时时钟,采用X2为控制器提供系统时钟。设计了外部复位电路,可以手动复位也可以通过看门狗自动复位。采用STWD100作为外部看门狗电路,使系统具有很强的抗EMC能力,防止程序“跑飞”,提高系统可靠性。在系统编程或开机期间,STWD100可防止自动生成复位信号,使开发人员可以灵活地控制和管理应用。在不占用 CPU 资源的情况下,STWD100硬件看门狗可使系统工作稳定度和可靠性提高到100%,非常适用于继电器及接触器等具有较强干扰的控制系统中[3]。图3中WDO为看门狗溢出后的漏极开路输出端,使用时须接上拉电阻;EN为低电平有效的使能输入信号,最低保持时间1μs;WDI为时钟信号输入端,上升沿定时器置数并启动。
图3 时钟和复位电路
2.2 温湿度测量模块
温湿度传感器选用插针型封装的SHT75,该传感器采用CMOSen专利技术,具有较高的可靠性与长期稳定性。SHT75温湿度传感器将湿敏元件、测温元件、A/D转换器、校准存储器、状态寄存器、循环冗余校验码寄存器及串行接口等电路集成在一个芯片上,因此具有体积小、功耗低、响应快、抗干扰能力强及性价比高等优点[4]。SHT75的典型工作电压为3.3V,平均工作电流28μA;相对湿度范围0~100%RH,最高分辨率12位,测量精度±1.8%RH;温度测量范围-40.0~123.8℃,最高分辨率14位,测量精度±0.3℃,完全满足工业生产现场的要求。SHT75传感器与STM32控制器接口电路简单,采用二线串口与控制器进行通信,双向串行数据DATA端须接上拉电阻,SCK信号提供串行通信的时钟信号,双向串行数据DATA信号仅在SCK时钟上升沿有效,在SCK时钟下降沿之后改变状态,通信时序可方便地使用STM32控制器的I/O口模拟。SHT75传感器温湿度传输过程分为启动传输、发送命令、测量数据和休眠。湿度传输时序如图4所示,相对湿度测量输出数据SORH为00000100 00110001。温度传输时序类似,温度测量输出为SOT,由于篇幅所限,不再详细介绍。
图4 湿度传输时序
2.3 执行模块
该设计通过STM32控制器控制交流固态继电器SSR的输入波形,实现对中低温电加热器和加湿器的功率控制,使温湿度恒定在一定范围内。与传统的继电器相比,固态继电器是由固态电子元器件组成的新型无触点开关器件,具有开关速度快、电磁干扰小、工作效率高、使用寿命长及易于控制器编程控制等优点[5]。交流固态继电器SSR主要由输入电路、光电耦合电路、触发电路、三端双向可控硅开关和缓冲电路构成。STM32控制器在输入电路上加上一定的控制信号,就可以控制三端双向可控硅的通断,实现开关电路。耦合电路常用光电耦合器,以防止输出端对输入端的影响。由于开关电路易产生射频干扰,并以高次谐波或尖峰等污染电网,因此在光电耦合器和触发电路之间加设过零控制电路。触发电路产生符合要求的触发信号,驱动负载电路。缓冲电路一般采用RC吸收电路或压敏电阻,防止从电源或负载电路中传来的尖峰或浪涌脉冲对三端双向可控硅开关冲击和干扰。
2.4 人机接口模块
人机接口模块包括状态指示电路、报警电路、无线通信电路和RS232串口电路。
状态指示电路通过LED灯指示控制器的工况,包括电源指示、串口收发指示、无线通信指示、控制器运行正常与否指示和信号超限指示。STM32控制器GPIO连接SN74ABT245BPW总线收发器驱动LED指示灯。
报警电路实现控制器运行错误报警和温湿度值超上下限报警。STM32控制器输出报警信号,通过驱动电路使蜂鸣器报警,并进行适当的紧急处理。
无线通信电路采用NRF24L01芯片,该芯片全球开放2.4G的ISM频段,免许可证使用;最高工作速率2Mbit/s,具有高效的GFSK调制及抗干扰能力强等优点;多达125个可选频道,满足多点通信和调频通信的需要;内置CRC检错和点对多点通信地址控制;低工作电压(1.9~3.6V);可设置自动应答,确保数据可靠传输。该无线通信电路与STM32控制器接口电路简单,通过SPI接口与STM32控制器通信,配置方便,最大SPI速度可达18MHz。
RS232串口电路采用带隔离电源的ADM3251收发器,同时对串口收发进行共模保护处理,使接口电路抗干扰能力强、数据传输可靠,适合恶劣工业现场环境下工作。由于STM32控制器需3.3V供电,为了使用ADM3251内部自带的隔离电源,收发器必须5.0V供电,因此使用74HCT08与门作为接口电路,实现STM32控制器与RS232收发器的电平匹配,电路如图5所示。该串口电路也方便控制器的功能扩展,实现键盘输入或显示输出等。
3 软件部分
无线温湿度控制器的软件部分主要包括系统主程序、状态指示子程序、报警输出子程序、RS232数据收发子程序、无线数据通信收发子程序及控制量算法子程序等,其中主程序流程如图6所示。主程序首先进行系统初始化,配置STM32主控器的GPIO端口、初始化串口USART、温湿度传感器和无线模块,接收远程主机对温湿度值的给定和对控制算法参数的设置,之后进入无限循环,根据不同功能标志位的变化进行相应模块的处理。状态指示子程序用来驱动LED灯,显示控制器的工作状态。报警输出子程序用于驱动温湿度值超出上下限后的蜂鸣器报警,并及时停止系统运行。RS232数据收发子程序完成对控制器的数据配置和程序调试功能。无线数据通信收发子程序实现远程数据收发,可以发送分布的控制器状态、温湿度信号到远程控制中心,也可以接收远程控制中心对分布控制器的初始值给定及参数配置等信息,实现远程集中控制。
图5 RS232串口电路
图6 主程序流程
主控器处理包括对温湿度信号的计算与补偿。STM32控制器按T=-39.6+0.01×SOT处理SHT75采集的温度信号SOT,求得温度值T。
STM32控制器按RH1=-2.0468+0.0367×SORH-1.5955×10-6×SORH2处理SHT75采集的相对湿度信号SORH,求得25℃条件下的相对湿度RH1。
并按RH=(T-25)×(0.01+0.00008×SORH)+RH1进行温度补偿,求得相对湿度RH。
控制量输出采用数字增量式PID控制算法,即Δu(k)=KP[e(k)-k(k-1)]+KIe(k)+KD[e(k)-2e(k-1)+e(k-2)],其中e(k)为第k次采样时刻输入的偏差值;KP、KI、KD分别为比例、积分和微分系数;Δu(k)为控制量的增量。
限于篇幅,下面只介绍无线通信中SPI操作的基本方法。
使能SPI2的时钟,设置SPI2的相关引脚为复用输出,本设计使用的是PB13、PB14和PB15(SCK、MISO、MOSI)引脚:
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//PORTB时钟使能
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);//SPI2时钟使能
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//PB13/14/15复用推挽输出
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);//初始化GPIOB
初始化SPI2,通过库函数SPI_Init设置SPI2的工作模式和数据位数,设置SCK时钟极性与采样方式,设置SPI2的时钟频率,设置数据格式(MSB在前或LSB在前):
void SPI_Init(SPI_TypeDef*SPIx,SPI_InitTypeDef*SPI_InitStruct)
使能SPI2,初始化完成之后要使能SPI2通信:
SPI_Cmd(SPI2,ENABLE);//使能SPI外设
SPI传输数据需要有发送数据和接收数据函数,固件库提供的发送数据和接收数据函数为:
void SPI_I2S_SendData(SPI_TypeDef* SPIx, uint16_t Data);//往SPIx数据寄存器写入数据Data
ata(SPI_TypeDef* SPIx);//从SPIx数据寄存器读出接收到的数据Data
查看SPI传输状态,在SPI传输过程中,要判断数据是否传输完成:
SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE);//判断发送区是否为空
SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE);//判断是否接收完成
4 结束语
经测试,基于STM32的无线温湿度控制器能够准确采集和控制温湿度信号,并通过无线通信准确地与主机进行双向通信,工作稳定可靠、结构简单、成本低廉;另外,STM32主控器硬件资源丰富、功能强大、开发方便灵活,便于后期进行功能扩展。该设计基本实现数字化,通过数字PID控制能达到较好的温湿度控制要求,有较高的稳定性和可靠性,实现了节能低耗的要求。
[1] 张会新,龚进,樊姣荣,等.分布式数字无线测温系统[J].化工自动化及仪表,2011,38(12):1493~1495.
[2] 薛玲,孙曼,张志会,等.基于单片机AT89S51的温湿度控制仪[J].化工自动化及仪表,2010,37(7):66~69.
[3] 晏勇,高晓琴.基于STWD100xP WTD嵌入式系统抗EMC技术[J].现代电子技术,2011,34(16):10~13.
[4] 李国柱.利用温湿度传感器SHTxx实现湿度测量[J].西安文理学院学报(自然科学版),2008,11(1):101~103.
[5] 李文涛,余福兵.基于STM32单片机的电阻炉智能温度控制器的设计[J].化工自动化及仪表,2012,39(1):89~91.