ESP 常用的低功耗配置选项解析

news2024/11/24 18:35:22

此篇博客介绍 ESP 常用的低功耗配置选项。

1.常用功耗优化配置选项

1.1.动态调频

CPU 工作的频率越高,功耗消耗也越大。通过 DFS(dynamic frequency scaling,动态调频)可以让系统自动切换工作频率,达到功耗和性能间的平衡。开启该功能需要使能如图 1-1 的这两项,这样系统会在工作的时候切换到最大频率,在系统空闲时切换到最低频率,最大频率默认为主频,如 ESP32-C3 为 160 MHz, 最低频率为外部主晶振的频率,一般为 40 MHz。最大和最小的频率可以通过调用esp_pm_configure 进行设置。

在这里插入图片描述

图 1-1 动态调频配置项
配置项名称PM_ENABLE
配置项路径(Top) -> Component config -> Power Management -> Support for power management
配置项名称PM_DFS_INIT_AUTO
配置项路径

(Top) -> Component config -> Power Management -> Support for power management

-> Enable dynamic frequency scaling (DFS) at startup

注意:如果是带有 Wi-Fi 应用的自动调频,最小频率不能小于 40 MHz。

1.2.自动 light sleep

在开启动态调频后如果需要进一步降低功耗,如图 1-2 所示,需要开启自动 light sleep。 Modem sleep 模式加上自动 light sleep 也就是我们常说的 power save 模式

在这里插入图片描述

图 1-2 自动 light sleep 配置项
配置项名称FREERTOS_HZ
配置项路径(Top) -> Component config -> FreeRTOS -> Tick rate (Hz)
配置项名称FREERTOS_USE_TICKLESS_IDLE
配置项路径(Top) -> Component config -> FreeRTOS -> Tickless idle support

这里涉及两个配置项,A 项为 FreeRTOS 的 Tick 频率,默认为 100,即每个 Tick 需要 1000 / 100 = 10 ms。B 项是自动进入 light sleep 状态需要的最小空闲 Tick 数,默认为 3,即

当系统检测到空闲时间大于 3 个 Tick 时就会自动进入 light sleep。如上图所示,当空闲时间大于 3 * 10 = 30 ms 时系统将自动进入 light sleep。通过增加 A 项,可以让系统更敏感地检测到空闲时间并进入睡眠。如将 tick rate 配置为 1000,即当 3 ms 内没有任务工作就进入睡眠,从而达到更低的功耗。

注意:

1.自动进入 light sleep 必须在使能 2.1 的配置项后才能进行配置。

2.在开启了自动调频和自动睡眠后,一些外设的通信会受到影响,具体可以参照编程指南。

1.3.隔离 GPIO

系统休眠过程中的 GPIO 漏电会产生电流损耗,增大系统功耗。esp-idf 中 light sleep 休眠时通过 GPIO 管脚悬空(禁止管脚内部上下拉电阻)及隔离(断开管脚输入输出)来消除 GPIO 漏电流,该功能对应的 menuconfig 配置项如下。

注意:该配置项必须在使能 2.2 的自动睡眠后才能启用。

在这里插入图片描述

图 1-3 隔离 GPIO 配置项
配置项名称PM_SLP_DISABLE_GPIO
配置项路径(Top) -> Component config -> Power Management -> Disable all GPIO when chip at sleep
打开该选项,系统休眠过程中所有 GPIO 管脚将被禁用,消除了 GPIO 漏电对休眠功耗的影响,但也导致了休眠过程中 GPIO 无法进行信号输入和输出,然而在一些应用中,应用层希望在系统休眠过程中能够正常使用 GPIO 功能(输入/输出/内部上下拉),因此 IDF 中提供了一组 API 用于管理休眠过程中的 GPIO 状态,相关 API 参考如下:

休眠过程 GPIO 管理 API:

  • 设置休眠状态下的 GPIO 输入输出状态 gpio_sleep_set_direction

  • 设置休眠状态下的 GPIO 上下拉状态 gpio_sleep_set_pull_mode

  • 使能自动 GPIO 状态切换 gpio_sleep_sel_en

  • 禁止自动 GPIO 状态切换 gpio_sleep_sel_dis

如果想在睡眠时保持 GPIO 管脚的状态,比如控制灯输出,控制开关闭合,可以使用 gpio_hold_engpio_hold_dis 两个 API,在进入睡眠前对需要保持电平的 GPIO 进行 hold,醒来后进行 hold_dis

1.4. flash 下电

ESP32 通过外接 flash 和 PSRAM 来增大系统存储器资源。flash 具有掉电后数据不丢失特性,PSRAM 掉电后数据无法保持,当系统中没有使用到 PSRAM 时,可以使能 flash 下电功能来降低芯片休眠电流,相关 menuconfig 选项如下:

在这里插入图片描述

图 1-4 Flash 掉电配置项
配置项名称

ESP_SYSTEM_PD_FLASH (release/v4.3)

ESP_SLEEP_POWER_DOWN_FLASH (4.4以后)

配置项路径(Top) -> Component config -> ESP System Settings -> PD flash at light sleep when there is no SPIRAM (release/v4.3)
(Top) -> Component config -> Hardware Settings -> Sleep Config -> Power down flash in light sleep when there is no SPIRAM (4.4以后)

注意:现实情况中 flash 断电所需的时间很难预测,即使可以预知 flash 彻底断电所需的时间,有时也不能通过设置足够长的睡眠时间来确保 flash 断电的安全(比如,突发的异步唤醒源会使得实际的睡眠时间不可控),因此可以对配置项进行以下调整:

在这里插入图片描述

在这里插入图片描述

图 1-5 Flash 掉电配置优化

这种方式比断电 flash 更好,相比之下增加了十几 μA 的底电流消耗,但同时兼顾了安全性和功耗。

2. Wi-Fi / 蓝牙低功耗优化配置

乐鑫芯片是无线 MCU,因此大部分时候的低功耗功能都需要和 Wi-Fi / 蓝牙功能一起使用。这里对 Wi-Fi / 蓝牙相关的一些低功耗配置和参数进行解释。

2.1.蓝牙低功耗优化项

目前蓝牙端可以优化配置比较少,可以使能 BLE modem sleep

在这里插入图片描述

图 2-1 蓝牙低功耗配置
配置项名称BT_CTRL_MODEM_SLEEP
配置项路径(Top) -> Component config -> Bluetooth -> Bluetooth -> Bluetooth controller -> MODEM SLEEP Options

如果想在保活的时候不是进入 modem sleep 而是 light sleep,参考2.2的做法即可。

蓝牙需要使用 32 K 外接晶振。

2.2. Wi-Fi 低功耗优化项

Wi-Fi 优化涉及的配置项较多,比较通用的有以下几点:

2.2.1.无线数字电路掉电

在使能自动 light sleep 后,可以开启这个选项,让无线数字电路模块在关闭物理层的时候也相应的掉电。
在这里插入图片描述

图 2-2 无线数字电路掉电配置
配置项名称ESP_PHY_MAC_BB_PD
配置项路径(Top) -> Component config -> PHY -> Power down MAC and baseband of Wi-Fi and Bluetooth when PHY is disabled

2.2.2.更改最小等待时间和最大保活时间

当 ESP32 作为 STA 和 AP进行通信时,接收完一次数据后需要等待一段时间再关闭 RF,这个时间称为 Minimum active time,默认值为50 ms, 在保证每次数据吞吐量的基础上,可以适当减少这个等待时间来降低功耗。

而当 ESP32 处于power save 模式下时,需要周期性的给 AP 发送一个 keep alive 包来告诉 AP 自己还保持着连接。Maximum keep alive time就是发送这个 keep alive 包的时间周期,默认为 10 s,可以通过增大该参数来减少发包从而降低功耗。

在这里插入图片描述

图 2-3 最小等待时间和最大保活时间配置
配置项名称ESP_WIFI_SLP_DEFAULT_MIN_ACTIVE_TIME
配置项路径(Top) -> Component config -> Wi-Fi -> WiFi SLP IRAM speed optimization -> Minimum active time
配置项名称ESP_WIFI_SLP_DEFAULT_MAX_ACTIVE_TIME
配置项路径(Top) -> Component config -> Wi-Fi -> WiFi SLP IRAM speed optimization -> Maximum keep alive time

推荐配置:Minimum active time = 15~20,Maximum keep alive time = 60。

2.2.3.开启断连电源管理

使能该配置项后,发生断连时依旧可以保持 Modem sleep 状态。

在这里插入图片描述

图 2-4 开启断连电源管理
配置项名称ESP_WIFI_STA_DISCONNECTED_PM_ENABLE
配置项路径(Top) -> Component config -> Wi-Fi -> Power Management for station at disconnected

2.2.4.开启 Beacon lost 优化(仅release/v4.4 及以上)

配置项名称ESP_WIFI_SLP_BEACON_LOST_OPT
配置项路径(Top) -> Component config -> Wi-Fi -> Wifi sleep optimize when beacon lost

3.补充内容

3.1. DTIM 和 listen interval 的区别

当芯片作为 STA 和路由器建立连接的时候,会被告知路由器的 DTIM,即每隔多少时间路由器会发送一个 beacon, STA 需要在这个时间起来接收 beacon,查看是否有需要自己处理的信息。而 listen interval 则是 STA 告诉路由,我需要隔多少时间起来接受 beacon,即前者是根据路由端来定的,后者是可以自己配置到芯片里的。时间间隔为DTIM 或者 listen interval 的数字 * 100 ms,如果当 DTIM = 10,即每次唤醒的时间间隔为 10 * 100 ms = 1 s。

3.2.外接 32 KHz 晶振

使用外接 32 KHz 晶振可以获得更低的功耗。主要有以下几个原因:

内部的晶振容易受到干扰,相比之下外接晶振的精度更高,并可以在各种睡眠情况下使用。

对于时间精度要求比较高的应用,如蓝牙和 Wi-Fi 的保活,需要定时起来接受 beacon,一旦时钟漂移过大,错过了接收的点,会导致打开RF等待的窗口期变长,从而大大增加功耗。

使能外部时钟源需要如下配置:

在这里插入图片描述

图 3-1 使能外部晶振
配置项名称ESP32C3_RTC_CLK_SRC_EXT_CRYS
配置项路径(Top) -> Component config -> ESP32XX-Specific -> RTC clock source

外部晶振有两种,External 32 kHz crystal 为外部无源晶振,也是大部分时候推荐的晶振,External 32 kHz oscillator at 32K_XP pin 为外部有源晶振,价格更贵,同时会造成底电流上升晶振的布局可以参考各芯片对应的硬件设计指南。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/100191.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Transformers学习笔记1. 一些基本概念和编码器、字典

Transformers学习笔记1. 一些基本概念和编码器、字典一、基本概念1. Hugging Face简介2. Transformers(1)简介(1)预定义模型(2)使用方法3. Datasets查看有哪些公开数据集方法1: 使用datasets包的…

深入分析JVM执行引擎

程序和机器沟通的桥梁 一、闲聊 相信很多朋友在出国旅游,或者与外国友人沟通的过程中,都会遇到语言不通的烦恼。这时候我们就需要掌握对应的外语或者拥有一部翻译机。而笔者只会中文,所以需要借助一部翻译器才能与不懂中文的外国友人交流。咱…

Android入门第51天-使用Android的SharedPreference存取信息

简介 上一篇我们介绍了在android里如何读写本地文件。我们有一种场景,类似网页的cookie,要把用户的一些储如上一次登录、使用的痕迹等信息保存下来以便于每次不需要做重复“填表单”的操作,当在这种场景下我们如果也使用本地文件读写的话显然…

关于Unity使用Aspose.Words创建表格单元格垂直合并不生效情况说明

文章目录👉一、前言👉二、问题重现1、首先看一下我用下面两段代码创建的表格:2、被这个问题折磨的心路历程👉三、分析原因👉四、解决方法👉一、前言 最近在使用Aspose.Words.dll实现创建表格功能时&#x…

Google Earth Engine APP(GEE)——用一个选择器选择不同城市的应用

我们很多时候在进行应用制作的时候,都会用到选择器用于添加不同的城市,从而进一步选择不同的区域进行分析,本文就将准备一个包含有城市的矢量数据,按照名字进行筛选,最终展示不同城市的所在范围,从而实现简单的select选择器的调用。本文最主要的就是这个回调函数。 具体…

C语言基础—指针(地址引用、指针数组、二次指针)

本章主要讲解指针的基本定义和指针的传递、偏移。后面继续讲解指针数组和多维指针、二级指针等 知识点: 指针的定义和指针分类各类指针的字节长度取决于系统位数指针的传递(值传递和引用(地址传递))指针的偏移(自增自减号&#x…

动态优化解决方案空间中的最小支持(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 相对于求解函数极值这类静态问题,许多存在于真实世界的优化问题都是在动态变化的,这一类问题被称为动态…

201732-35-6,H2N-AFP-pNA

AFP-pNA,来自牙周病原体牙龈卟啉单胞菌和黑普氏菌的脯氨酸三肽基氨基肽酶的底物。 编号: 189876中文名称: 三肽Xaa-Xaa-Pro tripeptidylpeptidase substrateCAS号: 201732-35-6单字母: H2N-AFP-pNA三字母: H2N-Ala-Phe-Pro-pNA氨基酸个数: 3分子式: C23H27N5O5平均分…

React 入门:脚手架代理配置

文章目录React AjaxAxios在 React 中使用 Axios脚手架代理配置React Ajax 理解 React 本身只关注于界面,并不包含发送 ajax 请求的代码。前端应用需要通过 ajax 请求与后台进行交互(json 数据)。React 应用中需要继承第三方 ajax 库&#xff…

C++ · 入门 | 准备知识

啊我摔倒了..有没有人扶我起来学习.... 👱个人主页:《CGod的个人主页》\color{Darkorange}{《CGod的个人主页》}《CGod的个人主页》交个朋友叭~ 💒个人社区:《编程成神技术交流社区》\color{Darkorange}{《编程成神技术交流社区》…

uniapp实现楼层导航 ,滚动定位,锚点导航

uniapp实现楼层导航的核心技术要点: 1、scroll-view作为视图容器, 2、用其属性scroll-into-view,用于完成点击联动 3、uni.createSelectorQuery().selectAll();获取右侧所有元素信息,获取top值存入数组,用于计算滑动时需要的联动…

Vue-cli工程中每个文件夹和文件的用处

dist 文件夹:默认 npm run build 命令打包生成的静态资源文件,用于生产部署 node_modules:存放npm命令下载的开发环境和生产环境的依赖包 public:有的叫assets:存放项目中需要用到的资源文件,css、js、im…

【Linux】软件包管理器yum

​🌠 作者:阿亮joy. 🎆专栏:《学会Linux》 🎇 座右铭:每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根 目录👉Linux软件…

未来已来,光伏产业将走向何方?十大趋势待揭晓!

碳中和大背景下,光伏已经成为发展最迅猛的热门产业之一。在能源产业变革中,光伏将成为未来最大的绿电来源。 据预测,到2030年,全球可再生能源的占比将超过50%。届时,光伏发电和风电将成为全球可再生能源的主力军。根据…

Android入门第50天-读写本地文件

简介 为了这个系列,我的代码已经准备到了第150天了。接下来的内容会越来越精彩,我们也越来越开始进入Android的一些高级功能上的编程了。今天我们就要讲Android中对本地文件进行读写的全过程。 课程目标 输入文件名、输入文件内容后按【保存到SD卡】&a…

毕业设计 - 基于SSH的任务调度系统的设计与实现 【源码+论文】

文章目录前言一、项目设计1. 模块设计2. 实现效果二、部分源码项目源码前言 今天学长向大家分享一个 Java web 毕业设计项目: 基于SSH的任务调度系统的设计与实现 一、项目设计 1. 模块设计 根据需求调研结果确定本任务调度系统的功能结构,最终系统实现的系统将…

Django

文章目录基础知识创建项目启动项目创建超级用户创建项目构建个人博客网站简单构建开启本地虚拟环境初步创建blog应用常用的模板标签和过滤器注:常用的模板标签注:常用的过滤器模板嵌套全局模板文件夹模板文件设置建议使用css美化页面导航栏页面美化css框…

捋一捋什么是MySQL插入意向锁?

Insert Intention Lock,中文我们也称之为插入意向锁。 这个可以算是对我们之前所讲的 Gap Lock 的一个补充,关于 Gap Lock,如果还有小伙伴不懂,可以参考:聊一聊MySQL的记录锁、间隙锁与 Next-Key Lock。 1. 为什么需…

Java基础之《netty(14)—异步模型》

一、基本介绍 1、异步的概念和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的组件在完成后,通过状态、通知和回调来通知调用者。 2、netty中的I/O操作是异步的,包括Bind、Write、Connect等操作会简单的返…

【云原生 | 47】etcdctl客户端的使用方法详解

🍁博主简介: 🏅云计算领域优质创作者 🏅2022年CSDN新星计划python赛道第一名 🏅2022年CSDN原力计划优质作者 🏅阿里云ACE认证高级工程师 🏅阿里云开发者社区专…