一.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:
表1STM8L低功耗运转形式
形式 |
等候 |
低功耗运转 |
低功耗等候 |
自动中止 |
中止 |
|
进口 |
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所示。
图2HALT形式下中止无须上下文切换
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闲暇节能战略