开发低功耗应用
← 低功耗知识地图 | ← 主页
降低动态功耗
1. 选择合适的微控制器
- 先根据产品的平均电流、峰值电流、唤醒延迟、
存储容量(如果实际使用的微控制器的FLASH或SRAM比所需的大,那么存储器就会带来更多的功耗)
2. 选择合适的时钟频率
- 不要简单地认为“降频一定省电”:任务所需的切换次数近似不变,降频可能延长活跃时间,使静态电流、Flash 读取和外设功耗增加。
- 对固定计算量,测量“高频率快速运行后立即休眠”和“低频率慢速运行”的事件能量,用实测数据选取最优点。
3. 选择合适的时钟源
- HSE/HCLK 适合高速计算和高速通信;HSI 启动快、无需外部晶振;LSE/RTC 适合休眠期间保持低速时间基准。
- 选型时同时看启动时间、起振电流、频率精度、温漂和停机后是否仍可用。
- 需要长时间休眠时,使用 RTC/LSE/LPTIM 作低功耗唤醒源,避免依赖高速系统时钟。
4. 关闭未使用的时钟信号
- 现在许多微控制器都允许关闭未使用的外设时钟,或者多数情况是,在使用前再将始终信号打开,
- 另外,对于一些设备来说,可以将这些外设关掉以节能
5. 利用时钟系统特性
- 有些微控制器为系统的不同部分提供了各种时钟分频器,可以利用它们降低外设或外设总线等的速度。
6. 供电设计
- 一个良好的电源设计是提高能耗效率的另一个关键因素。例如,若电源的电压高于实际需要,就可以降低电压,避免转换带来的损耗
7. 在 SRAM 中运行程序
- 这一点看起来很奇怪,不过对于一些微控制器,可以在SRAM中运行整个应用,而且还可以关闭内部flash存储器的供电以节能,
为实现这个目的,微控制器开始时运行flash,中的程序代码,复位处理器将程序映像复制到SRAM中并从此处开始执行,之后关掉flash存储器以节能
- 不过,许多微控制器只有很小的SRAM空间,将整个程序复制到这里是不可能的,
在这种情况下,仍然可以只将程序中常用的部分复制到sram,而且只在执行程序中生于部分的时候打开FLASH存储器
8. 使用正确的 IO 端口配置
- 休眠前将未使用引脚设为没有浮动的模式,常用方法是模拟输入或根据外部电路设置为上拉/下拉。
- 有些微控制器具有可配置的IO端口,可以为他们设置不同的驱动电流和转换速率,
根据连接IO引脚的设备,可以利用低驱动电流和更慢的转换速率配置来降低IO接口逻辑的功耗
降低活跃周期
1. 使用休眠模式
- 系统没有任务需要执行时,使用 WFE 停止 CPU 取指;休眠深度由
SCB->SCR.SLEEPDEEP 和芯片 PWR 寄存器共同决定。
- 无 RTOS 时可在主循环中使用休眠;FreeRTOS 则应在 Tickless Idle 中统一决定休眠时长和唤醒源。
2. 降低运行时间
- 用中断、DMA 和硬件阈值代替周期轮询;中断服务函数只采集事件,不在 ISR 中做大量计算和打印日志。
- 对传感器采样、无线上报和 Flash 写入做批量处理,用一次唤醒完成多个事件。
- 使用代码优化、适当缓存、DMA 和硬件外设减少 CPU 参与时间,但需同时评估 DMA 自身的时钟和 SRAM 功耗。
3. 使用合适的休眠模式
- 短暂空闲选 Sleep:唤醒快,外设大多仍可运行,适合频繁响应。
- 中等时长空闲选 Stop/DeepSleep:关闭大部分高速时钟,保留 RAM 和指定唤醒源。
- 长时间无任务选 Standby/Shutdown:电流最低,但可能丢失 SRAM 和大多数外设状态,唤醒后需按复位重新启动。
- 模式选择应比较“进入+唤醒+恢复”的总能量,而不是只看标称休眠电流。
4. 使用电源控制特性
- 可以对不同活跃和休眠状态下对电源管理进行精确调整
- 例如,可以在某些休眠模式期间关掉PPL,部分外设或FLASH存储器
- 不过在默写情况下,唤醒等待时间会受到影响