低功耗设计实战:借助RTC唤醒与电源门控实现IoT设备“深度睡眠”

芯兔兔 20260331

  • 低功耗设计
  • 电源门控技术
  • RTC唤醒机制
在物联网设备开发中,电池续航能力直接影响产品竞争力。通过RTC(实时时钟)唤醒与电源门控技术的协同应用,可让设备在大部分时间处于"深度睡眠"状态,将功耗降低至微安级别。本文以STM32L4系列为例,详细阐述实现路径。

低功耗设计实战:借助RTC唤醒与电源门控实现IoT设备“深度睡眠”

在物联网设备开发过程中,电池续航能力始终是决定产品市场竞争力的关键因素。通过合理结合RTC(实时时钟)唤醒机制与电源门控技术,设备可在绝大多数时间内进入“深度睡眠”状态,将功耗控制在微安级别。本文以STM32L4系列MCU为例,系统阐述实现低功耗设计的具体方法。

一、RTC唤醒机制实现

RTC模块能够在系统休眠状态下持续运行,并通过定时中断实现周期性唤醒。其实现核心在于精确配置闹钟中断,使设备在设定时间自动唤醒。以下为典型实现流程。

以下是RTC初始化配置示例(基于STM32L4平台):

  • 启用LSE或LSI作为RTC时钟源
  • 设定异步与同步预分频器以匹配所需时间精度
  • 配置闹钟时间(例如每10分钟一次)
  • 启用相应闹钟通道以触发唤醒事件

代码示例如下:

// RTC初始化配置(以STM32L4为例)void RTC_Init(void) {    // 启用RTC时钟(LSE或LSI)    LL_RCC_LSE_Enable();    while(!LL_RCC_LSE_IsReady());    // 配置RTC时钟源    LL_RCC_SetRTCClockSource(LL_RCC_RTC_CLKSOURCE_LSE);    LL_RTC_InitTypeDef RTC_InitStruct = {0};    RTC_InitStruct.AsynchPrescaler = 0x7F;    RTC_InitStruct.SynchPrescaler = 0x00FF;    LL_RTC_Init(&RTC_InitStruct);    // 设置闹钟唤醒(每10分钟)    LL_RTC_Alarm_InitTypeDef Alarm_InitStruct = {0};    Alarm_InitStruct.AlarmTime.Hours = 0;    Alarm_InitStruct.AlarmTime.Minutes = 10;    Alarm_InitStruct.AlarmTime.Seconds = 0;    LL_RTC_Alarm_Init(&RTC_InitStruct);    LL_RTC_EnableAlarm(RTC, LL_RTC_ALARM_A);}

在深度睡眠模式下,系统仅维持RTC运行,实测电流可低至1.2μA(以STM32L476为例)。当设定时间到达,RTC模块通过中断唤醒CPU,系统开始执行预定任务。

二、电源门控技术深度应用

电源门控技术通过关闭非必要的外设时钟和模块,进一步降低系统功耗。关键在于对外设进行分类管理,并在唤醒后逐步恢复供电。

  • 始终供电模块:如RTC、备份寄存器
  • 唤醒时供电模块:如GPIO、SPI
  • 完全关闭模块:如ADC、TIM2-TIM7

进入深度睡眠前,需关闭所有非必要外设,并配置唤醒源。示例代码如下:

// 进入深度睡眠前的时钟配置void Enter_DeepSleep(void) {    // 关闭所有非要外设时钟    __HAL_RCC_ADC1_CLK_DISABLE();    __HAL_RCC_TIM2_CLK_DISABLE();    // ...其他外设    // 配置唤醒源(RTC+GPIO)    HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);    // 设置睡眠模式    HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);}

此外,备份寄存器可确保系统在主电源关闭时仍能保存关键数据。以下为数据写入示例:

// 存储数据到备份寄存器void Save_BackupData(uint32_t data) {    HAL_PWR_EnableBkUpAccess();    __HAL_RCC_PWR_CLK_ENABLE();    WRITE_REG(PWR->BKPR1, data);}

三、实战优化技巧

为提升唤醒响应速度和系统效率,可采取以下优化措施:

  • 在RTC中断中快速关闭唤醒源以减少功耗
  • 使用DMA实现数据采集,降低CPU负载
  • 配置GPIO为模拟模式,以减少漏电流
  • 动态调整核心电压以进一步降低功耗

以下是GPIO低功耗配置示例:

// 配置GPIO为模拟模式(低漏电流)void GPIO_LowPower_Config(void) {    GPIO_InitTypeDef GPIO_InitStruct = {0};    GPIO_InitStruct.Pin = GPIO_PIN_All;    GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;    GPIO_InitStruct.Pull = GPIO_NOPULL;    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);    // ...其他GPIO端口}

在STM32L4系列中,可通过调节核心电压实现更优的低功耗表现,代码如下:

// 设置核心电压为0.95V(低工作电压)void Set_LowVoltage(void) {    HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE0);}

四、实测数据对比

将上述技术应用于某款环境监测设备后,系统功耗显著下降,具体对比数据如下:

工作模式电流消耗占空比日均功耗
持续工作模式8.2mA100%196.8mAh
传统休眠模式150μA10%36mAh
深度睡眠模式1.8μA0.5%2.16mAh

五、常见问题解决

在实际开发中,常见问题包括唤醒失败、数据丢失、时钟延迟等。针对这些问题,可采取以下措施:

  • 唤醒失败:检查唤醒源配置是否正确,确保RTC时钟源稳定。
  • 数据丢失:将关键数据写入备份寄存器,并在唤醒后及时恢复外设状态。
  • 时钟恢复延迟:对时间敏感的场景,优先恢复RTC时钟;可使用HSI作为过渡时钟源。

通过合理设计RTC唤醒与电源门控机制,物联网设备可实现“一次充电,多年运行”的续航目标。在工程实践中,建议建立包含电流测量、唤醒时间统计、功耗分布分析在内的完整测试体系。随着MCU集成更多电源管理单元(PMU)功能,低功耗设计将变得更加高效和便捷。

查看全文

点赞

芯兔兔

作者最近更新

  • 电平转换芯片中缓冲型与非缓冲型的差异解析
    芯兔兔
    20小时前
  • 四大核心要素引领汽车智能化革新及芯片竞争格局演变
    芯兔兔
    22小时前
  • 低功耗设计实战:借助RTC唤醒与电源门控实现IoT设备“深度睡眠”
    芯兔兔
    19小时前

期刊订阅

相关推荐

  • 解读无线传感器

    2020-03-20

  • 国外研发基于压缩感知的CMOS图像传感器 实现低功耗图像分类

    2020-04-13

  • 思特威推出两款新型CMOS图像传感器 针对物联网和安防应用

    2020-06-10

  • Microchip推出最小maXTouch触摸屏控制器

    2021-08-16

评论0条评论

    ×
    私信给芯兔兔

    点击打开传感搜小程序 - 速览海量产品,精准对接供需

    • 收藏

    • 评论

    • 点赞

    • 分享

    收藏文章×

    已选择0个收藏夹

    新建收藏夹
    完成
    创建收藏夹 ×
    取消 保存

    1.点击右上角

    2.分享到“朋友圈”或“发送给好友”

    ×

    微信扫一扫,分享到朋友圈

    推荐使用浏览器内置分享功能

    ×

    关注微信订阅号

    关注微信订阅号,了解更多传感器动态

  • #{faceHtml}

    #{user_name}#{created_at}

    #{content}

    展开

    #{like_count} #{dislike_count} 查看评论 回复

    共#{comment_count}条评论

    加载更多

  • #{ahtml}#{created_at}

    #{content}

    展开

    #{like_count} #{dislike_count} #{reback} 回复

  • #{ahtml}#{created_at}

    #{content}

    展开

    #{like_count} #{dislike_count} 回复

  • 关闭
    广告