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

发布者:温馨时光最新更新时间:2024-09-02 来源: elecfans关键字:STM32  低功耗 手机看文章 扫描二维码
随时随地手机看文章

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


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


1、温湿度采集器设计

1.1、硬件设计

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

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

图1  系统硬件组成示意图

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


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


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

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

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

图2  SHT10时序图

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


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

表1  SHT10命令集

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

在“启动时序”发送温湿度测量的命令(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。

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

图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。

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

图4 系统软件流程图


3.3、对比测试分析

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

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

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

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

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

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

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


4、结语

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


关键字:STM32  低功耗 引用地址:基于STM32的低功耗温湿度采集器的设计与实现

上一篇:你知道STM32F4中的CCM内存该如何使用?
下一篇:STM32单片机的GPIO输入、输出模式与配置方法

推荐阅读最新更新时间:2024-11-12 23:42

STM32 串口之中断接受
使用STM32串口的中断方式接收数据,接收来自另外一板子的按键数字,同时点亮相应的LED灯。 工程结构图: 1、 main.c代码截图如下; 2、其中的LED代码与另外一篇《STM32 基于库函数控制按键蜂鸣器 LED显示》代码完全同。这里就不上了。 3、USART驱动部分: #include stm32f10x.h #include usart1.h #include #include //===================================================
[单片机]
stm32程序下载调试之swd
说明: IAR环境版本 IAR ARM 6.30.0 1.swd使用jtag的4根线VCC,GND,JTMS,JTCK 注意 :必须将boot0=0,boot1=x 2.JLINK(20pin)的引脚对应引脚定义如下图 3.iar环境的设置 第一步:Options- Debugger- Setup选项中driver选择Jlink/J-TRAC 第二步: Options- Debugger- Download选项中我习惯选成verify download(其实不选也没关系) 对于use flash loader,这个选项的意思可能是用iar自带的flash loader去下载程序,不选时使用j-l
[单片机]
<font color='red'>stm32</font>程序下载调试之swd
STM32的内部温度传感器
1、STM32的内部温度传感器 STM32内部温度传感器与ADC的通道16相连,与ADC配 合使用实现温度测量。测量范围–40~125℃,精度 ± 1.5℃ 操作流程: 1)、设置ADC相关参数 // ADC1 configuration ----------------------------- ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode = ENABLE; ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; ADC_InitStructu
[单片机]
STM32串口USART1的使用方法和程序
通用同步异步收发器(USART)提供了一种灵活的方法来与使用工业标准NR 异步串行数据格式的外部设备之间进行全双工数据交换。 USART利用分数波特率发生器提供宽范围的波特率选择,支持同步单向通信和半双工单线通信。 1、STM32固件库使用外围设备的主要思路 在STM32中,外围设备的配置思路比较固定。首先是使能相关的时钟,一方面是设备本身的时钟,另一方面如果设备通过IO口输出还需要使能IO口的时钟;最后如果对应的IO口是复用功能的IO口,则还必须使能AFIO的时钟。 其次是配置GPIO,GPIO的各种属性由硬件手册的AFIO一章详细规定,较为简单。 接着相关设备需要如果需要使用中断功能,必须先配置中断优先级,后文详述。 然后是配
[单片机]
<font color='red'>STM32</font>串口USART1的使用方法和程序
STM32初识I2C
1、通讯协议。 I2C是PHILIPS公司开发的两线式串行总线,属于同步半双工。 数据有效 在传输数据的时候,SDA线必须在时钟的高电平周期保持稳定,SDA的高或低电平状态只有在SCL 线的时钟信号是低电平时才能改变 。 起始停止 SCL 线是高电平时,SDA 线从高电平向低电平切换,这个情况表示起始条件; SCL 线是高电平时,SDA 线由低电平向高电平切换,这个情况表示停止条件。 起始和停止条件一般由主机产生,总线在起始条件后被认为处于忙的状态 ,在停止条件的某段时间后总线被认为再次处于空闲状态。 如果产生重复起始条件而不产生停止条件,总线会一直处于忙的状态,此时的起始条件(S)和重复起始条件(Sr) 在功能上是一样的。 数
[单片机]
<font color='red'>STM32</font>初识I2C
STM32—ADC单通道采集模拟量
前言: 最近在调试STM32L152芯片ADC单通道采集数据程序,总结下STM32L152芯片ADC单通道采集模拟量的使用方法。 硬件平台:STM32L152 软件平台:keil v5+cubeMX 函数库:HAL库 ADC配置过程: 1.先初始化ADC的管脚,本例中ADC对应PA1管脚。 ADC_HandleTypeDef hadc; void ADC_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; /*Configure GPIO pin : PA1 */ GPIO_InitStructure.Pin = GPIO_PIN_1;
[单片机]
英飞凌AIROC™ CYW20829低功耗蓝牙系统级芯片支持最新蓝牙5.4规范
英飞凌AIROC™ CYW20829低功耗蓝牙系统级芯片支持最新蓝牙5.4规范 【2023 年 04 月 06日,德国慕尼黑讯】 英飞凌科技股份公司近日宣布,AIROC™ CYW20829低功耗蓝牙系统级芯片(SoC)将支持最新的蓝牙5.4规范 。凭借其低功耗与高性能完美结合,AIROC™ CYW20829可支持完整的低功耗蓝牙(LE)用例,包括智能家居、传感器、医疗看护、照明、蓝牙mesh网络、远程控制、人机交互设备(鼠标、键盘、虚拟现实和游戏控制器)、工业自动化以及汽车等。 最新发布的蓝牙核心5.4规范在现有规范的基础上增加了包括PAwR(带响应的周期性广播)、加密广播数据(EAD)、LE GATT安全级别特征在
[网络通信]
英飞凌AIROC™ CYW20829<font color='red'>低功耗</font>蓝牙系统级芯片支持最新蓝牙5.4规范
STM32】HAL库 STM32CubeMX教程三----外部中断(HAL库GPIO讲解)
前言 上一节我们讲解了STM32CubeMX的基本使用和工程的配置,那么这一节我们正式来学习CubeMX配置STM32的各个外设功能了 今天我们会详细的带你学习STM32CubeMX配置外部中断,并且讲解HAL库的GPIO的各种函数,带你学习不一样的STM32 那么话不多说,我们开始正式的讲解吧! 准备工作: 1、STM32开发板(我的是STM32F407ZE和STM32F103RC) 2、STM32CubeMx软件、 IDE: Keil软件 3、STM32F1xx/STM32F4xxHAL库 4、按键管脚 PA11 PB4 5 LED管脚 PC4 PC5 PB0 PB1 1新建工程 1.1New Pr
[单片机]
【<font color='red'>STM32</font>】HAL库 STM32CubeMX教程三----外部中断(HAL库GPIO讲解)
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved