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低功耗设计(三)产品》

作者简介:

蒋俊,男,硕士研究生,现任长沙市锐米通信科技有限公司CEO。

从事通信研究与嵌入式开发10年,主攻微功率无线网络。

精通LoRa无线扩频通信,无线星型/树型/MESH网络设计;

通晓Contiki,Linux,uC/OS-II,OSAL等操作系统;

熟悉ARM,DSP,STM8,PIC,PC104等处理器;

擅长AD,RF等集成IC开发。

Web: www.rimelink.com

EMail: [email protected]

QQ群:35212129

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-05 02:00:59

MCU低功耗设计(一)理论的相关文章

MCU低功耗设计(二)实践

MCU低功耗设计(二)实践 关键词: MCU低功耗, STM8L低功耗, 节能实践, IAR开发环境, 电流表测功耗 引言: 用电池供电的产品来说能耗是一个重大的问题,一旦电能耗尽设备将"罢工".在<MCU低功耗设计(一)理论>中,我们介绍了节能的原理,本文用万用表和MCU电路板,真刀真枪地测试功耗值.简单,但绝对真实的测试数据,看看官方宣称低功耗与实测结果有多大差距,Let's go! 说明: 博客的书写工具对于图片的编辑支持力度不够,喜欢本博文的读者可以从以下连接下载P

MCU低功耗设计(三)产品

关键词: 低功耗设计, 无线通信产品, LoRa长距离, Contiki系统, 能耗实时跟踪 引言: 能耗对电池供电的产品来说是一个重大问题,一旦电能耗尽设备将"罢工".在<MCU低功耗设计(一)理论>中,我们介绍了节能的原理:在<MCU低功耗设计(二)实践>中,实测了STM8L151C8的低功耗值. 本文介绍无线通信产品的低功耗设计,首先实测MCU与射频芯片I/O设置的功耗,然后测试射频芯片不同模式下功耗,其次使用Contiki系统的energest模块实时跟

(数字IC)低功耗设计入门(一)

低功耗设计这个专题整理了好久,有一个月了,有图有证据: 然而最近一直有些烦心事.郁闷事,拖延了一下,虽然现在还是有点烦,但是还是先发表了吧.下面我们就来聊聊低功耗设计吧,由于文章比较长,因此我就不一次性发完,我整理之后再发上去.当然,这里的低功耗设计基本上是入门阶段,也就是大部分从理论角度进行阐述,你也可以说是从书本上说的,但是呢,我可以先给大家剧透一下:不仅仅是从理论上说,我还结合EDA工具进行说明如何进行低功耗设计.废话不多说,下面就来看看这个专题的主要内容: ·低功耗设计的目的 ·功耗的构

我的“第一次”,就这样没了:DDD(领域驱动设计)理论结合实践

写在前面 插一句:本人超爱落网-<平凡的世界>这一期,分享给大家. 阅读目录: 关于DDD 前期分析 框架搭建 代码实现 开源-发布 后记 第一次听你,清风吹送,田野短笛:第一次看你,半弯新湖,鱼跃翠堤:第一次念你,燕飞巢冷,释怀记忆:第一次梦你,云翔海岛,轮渡迤逦:第一次认你,怨江别续,草桥知己:第一次怕你,命悬一线,遗憾禁忌:第一次悟你,千年菩提,生死一起. 人生有很多的第一次:小时候第一次牙牙学语.第一次学蹒跚学步...长大后第一次上课.第一次逃课.第一次骑自行车.第一次懂事.第一次和喜

(数字IC)低功耗设计入门(六)——门级电路低功耗设计优化

三.门级电路低功耗设计优化 (1)门级电路的功耗优化综述 门级电路的功耗优化(Gate Level Power Optimization,简称GLPO)是从已经映射的门级网表开始,对设计进行功耗的优化以满足功耗的约束,同时设计保持其性能,即满足设计规则和时序的要求.功耗优化前的设计是已经映射到工艺库的电路,如下图所示: 门级电路的功耗优化包括了设计总功耗,动态功耗以及漏电功耗的优化.对设计做优化时,优化的优先次序如下: 由此我们可以找到, 优化时,所产生的电路首先要满足设计规则的要求,然后满足延

(数字IC)低功耗设计入门(八)——物理级低功耗设计&amp;to be continued?

前面学习了从系统级到门级的低功耗设计,现在简单地了解了一下物理级设计.由于物理级的低功耗设计与后端有关了,这里就不详细学习了.这里主要是学习了一些基本原则,在物理级,进行低功耗设计的基本原则是:   ·对于设计中翻转活动很频繁的节点,采用低电容的金属层进行布线; ·使高翻转率的节点尽可能地短;  ·对于高负载的节点与总线,采用低电容的金属层; ·对于特别宽的器件,采用特殊的版图技术,以得到更小的漏极结电容.  ·在有些布局布线工具中,可以将功耗作为优化目标来生成时钟树. 低功耗设计入门的学习到这

(数字IC)低功耗设计入门(二)——功耗的分析

前面学习了进行低功耗的目的个功耗的构成,今天就来分享一下功耗的分析.由于是面向数字IC前端设计的学习,所以这里的功耗分析是基于DC中的power compiler工具:更精确的功耗分析可以采用PT,关于PT的功耗分析可以查阅其他资料,这里不涉及使用PT的进行功耗分析. (1)功耗分析与流程概述 上一个小节中讲解了功耗的构成,并且结合工艺库进行简要地介绍了功耗的计算.但是实际上,我们根本不可能人工地计算实际的大规模集成电路的功耗,我们往往借助EDA工具帮我们分析电路的功耗.这里我们就介绍一下EDA

低功耗设计技术--Multi VDD--Level shifter

本文转自:自己的微信公众号<集成电路设计及EDA教程> 前面的推文中我们分别介绍了低功耗设计中的Multi-VDD技术以及门控电源技术.在实际的低功耗设计中,门控电源技术中也常常结合Multi-VDD技术一起使用. 在使用了Multi-VDD技术之后,设计中会形成多个Power Domain(PD): 不同Power Domain之间如果需要数据的Talk,那么在中间需要插入Level Shifter(电平转换单元): 本推文我们来讲解一下第二个特殊的Cell -- Level Shifter

DDD领域驱动设计基本理论知识总结

领域驱动设计之领域模型 加一个导航,关于如何设计聚合的详细思考,见这篇文章. 2004年Eric Evans 发表Domain-Driven Design –Tackling Complexity in the Heart of Software (领域驱动设计),简称Evans DDD.领域驱动设计分为两个阶段: 以一种领域专家.设计人员.开发人员都能理解的通用语言作为相互交流的工具,在交流的过程中发现领域概念,然后将这些概念设计成一个领域模型:由领域模型驱动软件设计,用代码来实现该领域模型: