基于STM32的低功耗温湿度采集器的设计与实现

控制/MCU

1882人已加入

描述

STM32嵌入式系统在许多控制领域有着广泛的应用。STM32是一款基于Cortex-M3内核的微控器,该控制器在性能和成本以及低功率操作和硬实时控制方面设定了新的标准。

尽管市场上已有多种温湿度采集系统,但具有低功耗且自带数据记录功能的采集器较少,并且费用较高。本文中采用STM32F103RET6设计了温湿度采集系统。该系统工作时间长约30天,低功耗模式采用了停止模式实现,温湿度传感器使用SHTIO温湿度传感器。结合实际使用环境,采集周期为5分钟。采用18650锂电池供电,具有SD卡存储功能,且能实现USB全速通信和串口通信。

1、温湿度采集器设计

1.1、硬件设计

采集器的结构框架如图l所示,主要有供电模块,USB全速通信模块,STM32芯片,SD卡存储模块,温湿度传感器,串口通信模块,JTAG在线调试模块组成。

stm32f103ret6

图1  系统硬件组成示意图

考虑体积因素,系统采用18650充电锂电池供电,单节2400mah电池充满电后可以工作2个月左右时间。

STM32以合秦公司的HT7333降压模块供电。通过RTC实时时钟控制,每5分钟唤醒一次,进行数据采集。以自定义的通信协议通过SHT10温湿度传感器获取数据。采集到的温湿度数据以16进制形式写入SD卡。SD卡中的数据可以经由串口通信模块和USB全速通信模块导出,也可以直接由SD卡读出。

1.2、SHT10温湿度传感器通信时序

SHT10温湿度传感器的通信时序如图2所示。

stm32f103ret6

图2  SHT10时序图

传感器以不小于1V/ms的上电速率供电后,首先进入11ms的休眠状态,在此期间不允许对传感器发送任何指令。当准备传输数据时,需用一组“启动时序”完成数据传输的初始化。该启动时序为:当SCK时钟为高电平时,DATA翻转为低电平,紧接着SCK变为低电平,随后在SCK时钟高电平时,DATA翻转为高电平。后续命令包含三个地址位和五个命令位。传感器接收到命令后,会在第8个SCK下降沿后将DATA下拉为低电平(ACK位)。在第9个SCK下降沿后,释放DATA,将其恢复为高电平。

其5位的命令集如表1所示。

表1  SHT10命令集

stm32f103ret6

在“启动时序”发送温湿度测量的命令(00000101表示相对湿度,00000011表示温度)后,控制器等待测量结束。过程大约为20/80/320ms,分别对应8/12/14bits测量。传感器通过下拉DATA至低电平并进入空闲模式表示测量结束。控制器在再次出发SCK前必须等待“数据备妥”信号读取数据。温湿度数据可以先被存储,这样控制器可以继续指向其他任务,在需要时再读出数据。

接着传输2个字节的测量数据和1个字节的CRC奇偶校验。传感器下拉DATA为低电平,以确认每个字节。所有数据从MSB开,右值有效。收到CRC确认位之后,表示通讯结束。若不使用CRC-8校验,过保持ACK高电平终止通讯。测量和通讯完成后,传感器进入休眠模式。

1.3、通讯接口配置

温湿度传感器与STM32的GPIOBPIN6和GPIOBPIN7连接,其中PIN6为时钟通讯端口,PIN7为数据通讯端口。STM32的PIN6脚为传输速度50MHz的推挽输出,PIN7脚为传输速度50MHz的推挽输入输出模式(接受数据时为输入,发送应答指令时为输出)。

“启动时序”通过写SHT10的SCK和DATA实现。先将PIN7脚配置为推挽输出,速率为50MHz,然后通过拉低SCK时钟,拉高SCK,拉低DATA,拉低SCK,拉高SCK,拉高DATA,拉低SCK的顺序进行操作,操作之间设置一段延迟。在“启动时序”完成后,通过写0x03和0x05来实现发送命令,进行温度测量和湿度测量。

2、时钟系统及功耗测试分析

2.1、STM32的时钟系统

时钟系统正常工作是使STm32及其外设正常运行的前提,且系统时钟频率及外设时钟频率配置的高低对采集器耗电量有着很大影响。STm32有内部RC振荡器,其能够为内部提供PLL时钟,可以达到微控器最高频率72MHz的要求。但是内部时钟不及外部晶振准确和稳定,所以在温湿度采集系统中选用了外部时钟源,这个外部时钟源被称为外部高速振荡器(HSE)。外部时钟源用来为Cortex处理器和STM32外设提供时钟。由于内部PLL时钟是用整数值乘以HSE振荡频率,因此外部时钟频率需能被72MHz。实际采集系统中选用了振荡频率为8MHz的晶振。

其中外部晶振HSE振荡后,产生8MHz的时钟信号,经PLL锁相环9倍频后至72MHz。系统时钟以72MHz运行,并将APBI外设时钟配置为系统时钟的2分频,将APB2外设时钟配置为系统时钟的1分频。

2.2、功耗测试分析

STM32芯片电源供电框图如图3。

stm32f103ret6

图3  STM32芯片电源框图

温湿度采集器选用4.2v单节锂电池供电,锂电池容量约为2600mah。由于锂电池电压输出大于芯片供电电压,且锂电池使用过程中电压不断波动变化,影响数据采集准确性。故采集器中选用了降压模块,将电压降且稳定至3.3V,为芯片和外设供电。

该芯片转换效率约为90%,通过估算方式可得其在3.3V供电时容量约为3000mah。当系统时钟运行在最高速72MHz时,用万用表测量采集系统电流约为100ma。待锂电池充满电后进行测试,采集周期5分钟。STM32每次将测量获得的温度数据、湿度数据通过SDIO接口协议写入SD卡中。该状态下采集时间约为26小时。由此可知,未使用低功耗模式的采集系统耗电量较大。该试验要求的密闭环境中进行采集时,不能满足长时间持续工作的设计要求。

3、低功耗模式的实现

3.1、STM32的低功耗模式

STM32共有睡眠、停止以及待机三种低功耗工作模式:

a、睡眠模式:默认情况下,当一个WFE指令或WFI指令被执行时Cortex处理器将停止内部时钟,并停止执行应用程序代码。该模式下,STM32其余部分将继续运行。当某个外设产生一个中断时,其将退出睡眠模式。理论上,若STM32首先禁用所有外设时钟(除了唤醒Cortex的外设以外),再到HSI振荡器,且将HSI时钟频率1MHz一下,可将功耗降低至大约为5ma。

b、停止模式:停止模式是Cortex-M3的深睡眠模式基础上结合了外设的时钟控制机制。在停止模式下,电压调节器可以运行在正常或者低功耗模式。此时1.8V供电区域的所有时钟被停止。PLL、HSI和HSE振荡器功能被禁。本采集器采用停止模式实现低功耗工作。该模式下,WFI或WFE指令的执行将停止Cortex处理器,并且关闭HSE和HSI振荡器。停止模式下,任意的外部中断都会将STM32唤醒。

c、待机模式:待机模式可实现系统最低功耗,该模式是在Cortex-M3睡眠模式时关闭电压调节器,整个1.8V供电区域被断电。PLL、HIS和HSE振荡器也被断电。SRAM和寄存器内容丢失,只有备份的寄存器和待机电路维持供电。可以使用RTC闹钟唤醒待机模式,也可以使用外部STM32复位或独立看门狗复位唤醒,也可以通过PORTA引脚0的上升沿退出待机模式,但是该引脚必须被配置为唤醒引脚WAKEUP。相应的,该模式退出时间花费最长,约为50us。

3.2、低功耗停止模式的软件实现

首先使能电源控制时钟和RTC后备寄存器时钟,之后使能RTC和后备寄存器访问。通过查血RTCCR寄存器中的RTOFF状态位,判断RTC寄存器是否处于更新中。当且仅当RTOFF状态位为“1”时,方可写入RTC寄存器。RTC寄存器配置过程如图4。

stm32f103ret6

图4 系统软件流程图

3.3、对比测试分析

在未开启低功耗停止模式下,取满电的2600mAh锂电池进行电量测试,采集要素为户外温湿度环境。采集数据过程中对电池电流进行测试,电流为103mAh。采集点数为316个点,即采集了26小时20分钟。试验测试采集的数据如图5所示。

stm32f103ret6

图5  未开启低功耗的采集数据

在开启低功耗停止模式下,取满电的2600mAh锂电池进行电量测试,采集要素也为户外温湿度环境。采集数据过程中对电池电流进行测试,低功耗模式下电流为4mA,唤醒启动时,工作电流为54mA。试验开始10天后,测试电源电压。电压显示为3.96V,这表明10天后温湿度采集器仍在工作。读取SD卡数据。采集点数为2936个点,即采集了10天4小时40分钟。试验测试采集的数据如图6所示。

stm32f103ret6

图6  开启低功耗采集的数据

按电压每天下降0.3V速度计算,当电压下降的工作下限3.35V时,其工作时间约为60天。可以满足长时间工作需要,达到设计要求。

4、结语

介绍了基于STM32F03RET6的低功耗温湿度采集系统的设计原理,简述了SHTIO温湿度传感器通讯配置,并给出了“启动时序”的部分程序实例。描述了STM32的低功耗模式,并予以实现。通过实际测试,发现低功耗模式可以使其工作周期延长接近25倍。实现了长时间连续采集的设计要求。该低功耗方法适用于其他STM32控制系统,具有较大意义。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分