MCU低功耗设计(一)理论
MCU低功耗设计(一)理论
关键词:MCU低功耗, STM8L低功耗, 节能技巧
一.MCU耗能因素
现代的MCU一般使用CMOS技术,耗能包括2方面:
静态消耗 主要是晶体管消耗能量;
动态消耗 公式=C×V2×f,其中C是CMOS的负载电容,V是供电电压,f是时钟频率;
总电能消耗是静态消耗和动态消耗之和,即:IDD=f×IDynamicRun[uA/MHz]+IStatic[uA].
因此,电能消耗依赖于:
MCU芯片尺寸 或者说晶体管的数目;
MCU供电电压 降低电压可以成平方级别地降低电能消耗;
时钟频率 可以把时钟频率降低到刚好满足应用需要;
外设数目 使能的外设越多,耗能越大;
运行模式 合理选择工作模式可以大幅节能,如,全速工作极短时间后进入睡眠模式。
二.节能方法
1. 关闭不需要使用的外设;
2. 所有未使用的引脚必须连接到一个确定的逻辑电平;
3. 当有外设必须保持激活时,使用Wait模式来获得低功耗;
4. 使用合适的VDD值;
5. 尽可能地使用低功耗运行模式;
6. 如果不能使用低功耗模式,那就将主频降低到满足应用的最小值;
7. 如果可能,使用动态控制I/O引脚的上拉功能。
三.低功耗模式
支持低功耗的MCU一般都有好几种运行模式,以ST公司的STM8L为例,它支持5种低功耗模式:等待、低功耗运行、低功耗等待、主动停止和停止。每一种模式的进入方式,节能级别和外设工作要求,总结表1:
表1 STM8L低功耗运行模式
模式 |
等待 |
低功耗运行 |
低功耗等待 |
主动停止 |
停止 |
|
入口 |
WFI |
WFE |
软件代码 |
软件代码+WFE |
HALT |
HALT |
晶振 |
开 |
开 |
LSI或LSE |
LSI或LSE |
LSI或LSE |
关 |
CPU |
关 |
关 |
开 |
关 |
关 |
关 |
外设 |
开 |
开 |
开 |
开 |
关,仅RTC开 |
关 |
唤醒 |
所有内部和外部中断,复位 |
所有内部和外部中断,复位,唤醒事件 |
软件代码,复位 |
内部和外部事件,复位 |
外部中断,RTC中断,复位 |
外部中断,复位 |
电压调节器 |
MVR |
MVR |
ULP |
ULP |
CLK_ICKCR |
ULP |
程序执行区 |
FLASH |
FLASH |
RAM |
RAM |
FLASH |
FLASH |
FLASH+E2 |
开 |
开 |
关 |
关 |
关 |
关 |
中断 |
允许 |
允许 |
禁止 |
禁止 |
允许 |
允许 |
中断服务后 返回状态 |
AL=0:main AL=1:WFI |
WFE |
/ |
/ |
AL=0:main AL=1主动停止 |
AL=0:main AL=1:停止 |
事件处理后 返回状态 |
/ |
Main |
/ |
低功耗运行 |
/ |
/ |
RAM+寄存器 |
保留 |
保留 |
保留 |
保留 |
保留 |
保留 |
@3V/25℃ |
5.9uA |
5.4uA |
3.3uA |
1.0uA |
0.4uA |
|
特殊事项 |
/ |
/ |
禁止ADC |
/ |
清除外设悬挂中断标志位 |
上述低功耗运行模式对于开发者来说有点多,尤其刚接触STM8L处理器。我们需要一般性的指导原则,表2是来源于实践的经验。
表2 选择合理的STM8L节能模式
节能要求 |
应用场合 |
睡眠时长 |
唤醒方式 |
恢复时长 |
运行模式 |
苛刻 |
CPU空闲,等待外部信号唤醒 |
长 |
外部中断 |
≥2.8us |
HALT |
苛刻 |
CPU空闲,等待时钟周期唤醒 |
长 |
RTC周期 |
≥2.8us |
Active-halt |
严格 |
CPU有持续、微负荷任务运行 |
/ |
/ |
≥2.8us |
低功耗运行 |
严格 |
CPU短暂等待中断发生 |
短 |
任意中断 |
短 |
等待中断 |
严格 |
CPU短暂等待事件发生 |
短 |
注册事件 |
短 |
等待事件 |
需要 |
CPU有持续、轻负荷任务运行 |
/ |
/ |
/ |
调整主频 |
四.鲜为人知的技巧
1. 使用Wait替换查询方式达到节能目的
常见的查询方式如下,此时CPU无事可干,白白消耗电能。
ADC_CR1 = ADC_START; /* start conversion */
while (!(ADC_SR & ADC_SR_EOC)) ; /* wait for EOC bit set */
可以使用等待事件的方式来节省电能。
先配置ADC为事件源,并使能相应的中断:
WFE_CR2 = ADC_COMP_EV; /* enable ADC as a source of event */
ADC_CR1 = ADC_EOCIE; /* enable interrupt for end of conversion */
当ADC转换完成后,唤醒处于等待的CPU:
ADC_CR1 = ADC_START; /* start conversion */
_asm(“wfe”); /* enter wait mode until waked by ADC_EOCIE*/
2. 无须上下文切换的中断模式
应用程序设计时,如果所有中断事件由ISR完成,可以通过将CFG_GCR寄存器中AL位置1来节省电能:避免保存/恢复context、无须主程序运行(返回到WFI模式),如下图1所示。
图1 WFI模式下中断无须上下文切换
将AL位置1节省电能的方法同样可以用于HALT模式,原理如下图2所示。
图2 HALT模式下中断无须上下文切换
3. 动态设置I/O口的上拉功能
很多应用需要按键作为人机接口,按键一般连接到I/O上。当按键没有动作时I/O口设置内部上拉而获得确定的逻辑电平;一旦按键按下,I/O口对地导通将产生额外的40~70uA电流,这对于电池供电的低功耗来说是十分重要的。
可以动态地控制I/O口的上拉达到节能的目的:一旦按键按下,中断服务程序将禁止该I/O口的上拉功能;然后软件定时执行—先使能上拉功能,再检测I/O口状态,如果按键仍按下再次禁止上拉功能,否则使能I/O口的上拉功能。整个逻辑如下图3所示:
图3 动态设置I/O口的上拉而节能
4. CPU空闲节能策略
CPU的空闲节能如下图4所示,它的逻辑包括以下几个步骤:
(1)发现CPU空闲:带OS系统,表现为任务没有事件需要响应,或者进入idle进程;无OS系统,表现为程序运行结束。
(2) 选择一种合适的CPU节能模式:chip_EnterLowPower()完成进入节能前的准备工作,包括:关闭外设,切换I/O引脚到节能状态。
(3) 退出节能模式需要调用chip_ExitLowPower(),可能发生在以下2种情形:
a. 需要使用被关闭外设的ISR:
b. 由process直接退出;
chip_ExitLowPower()的善后工作包括:使能外设,切换I/O引脚到工作状态。同时为避免ISR和process两次操作chip_ExitLowPower(),该函数设置了状态变量避免重复退出。
图4 CPU空闲节能策略
相关文章:
《MCU低功耗设计(二)实践》
《MCU低功耗设计(三)产品》
欢迎加入“LoRaWAN论坛”http://lora.timeddd.com/forum.php
MCU低功耗设计(一)理论相关推荐
- 转《MCU低功耗设计》
关键词: 低功耗设计, 无线通信产品, LoRa长距离, Contiki系统, 能耗实时跟踪 引言: 能耗对电池供电的产品来说是一个重大问题,一旦电能耗尽设备将"罢工".在< ...
- 借鉴前辈们MCU低功耗设计和思路的记录-硬件角度
低功耗MCU达成的方式大概有三种: 降低工作模式的消耗 : 较低的系统频率或运行电压来节省功耗. 减少休眠模式的功耗 :有两个处理的方向,向下压低休眠时的最低功耗与提供不同等级的待机模式,本质上是针对 ...
- 32位低功耗MCU的设计
作者: 新唐科技 1 前言 传统的低功耗 MCU 设计都是以8位MCU为主,因为8位内核逻辑门数相对较少,运行或泄露 电流 低,售价也相对低廉.但是,许多新兴的应用都需要比8位内核更大的处理效率.近年 ...
- 【嵌入式设计】嵌入式低功耗设计
本文转自https://www.amobbs.com/thread-4932393-1-1.html 文章目录 前言 1.低功耗的概念 1.1.一种AD采样功耗优化方案 2.硬件低功耗设计概述 3.软 ...
- 工业物联网LCD数码屏的驱动原理及低功耗设计(华大半导体HC32L136)
目录 1.驱动原理 2.驱动程序 3.低功耗设计 在工业物联网传感器可视化设计时,仅仅为显示传感器的数值变化,多选用低成本.低功耗.尺寸合适的LCD数码屏,本次博客为各位分享华大半导体HC32L136 ...
- stm32外部中断_STM32学习笔记 | 电源管理及低功耗设计要点
一款好的电子产品,都需要认真考虑电源管理的问题,电池供电的产品更应该注意低功耗的实现. STM32电源介绍 嵌入式开发直播课 - STM32 USART串口的应用 - 创客学院直播室www.make ...
- RISC-V MCU低功耗场景的应用分析
CH32V203系列是基于32位RISC-V内核设计的工业级增强型低功耗通用微控制器,高性能,最高支持144MHz系统主频,低功耗,运行功耗低至45uA/MHz. 本文已CH32V203为例,聊聊MC ...
- 数字SOC设计之低功耗设计入门(一)——低功耗设计目的与功耗的类型
低功耗设计这个专题整理了好久,有一个月了,有图有证据: 然而最近一直有些烦心事.郁闷事,拖延了一下,虽然现在还是有点烦,但是还是先发表了吧.下面我们就来聊聊低功耗设计吧,由于文章比较长,因此我就不一次 ...
- 基于STM32、FreeRTOS低功耗设计思路和原理
关注+星标公众号,不错过精彩内容 作者 | strongerHuang 微信公众号 | 嵌入式专栏 如今电池供电的产品很多,电池供电通常设计到一个问题,那就是低功耗. 本文为大家讲讲基于STM32.F ...
- 保证MCU低功耗 这五点很重要
保证MCU低功耗 这五点很重要 低功耗是MCU的一项非常重要的指标,比如某些可穿戴的设备,其携带的电量有限,如果整个电路消耗的电量特别大的话,就会经常出现电量不足的情况,影响用户体验. 本文引用地址: ...
最新文章
- 谷歌Chrome浏览器发布
- 中科大硬核“毕业证”:“一生一芯”计划下,5位本科生带自研芯片毕业
- 独家 | 为什么Z世代会掉入网络错误信息的陷阱
- 自定义ProgressBar(自定义View和ClipDrawable)
- python详细安装教程3.7.4-Linux下Python3.7.4 安装教程
- Python初学者之ImportError: No module named moviepy.editor 的解决办法
- hdu 5569(二维dp,水题)
- 力软快速开发平台源码7.0.6
- Linux快捷键笔记
- springcloud视频教程
- PHP 获取微视无水印源地址_如何提取获取下载美拍、微视、微拍等手机视频
- 【STM32H7的DSP教程】第26章 FFT变换结果的物理意义
- 最新借条模板,如何写
- 基于MapGIS的GIS二次开发作业文档
- 如何挑选童书《神奇的校车》
- uni-app调用android方法,uni-app 调用 jar 包
- 雷泰RAYR3I2MSCL3+高温红外测温仪的参数指标
- tl-wdr5620虚拟服务器设置,TP-Link TL-WDR5620路由器怎么设置
- local-preference-实践理解(22/3/2)
- 在Linux下搭建带MOD 我的世界(Minecraft)服务器