MCU低功耗设计(一)理论
来源:互联网 发布:用邮箱注册淘宝小号 编辑:程序博客网 时间:2024/04/25 17:23
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低功耗设计(三)产品》
- MCU低功耗设计(一)理论
- MCU低功耗设计(二)实践
- MCU低功耗设计(三)产品
- 32位低功耗MCU的设计
- 32位低功耗MCU的设计
- 集成电路中的低功耗设计(一)
- IC设计基础系列之低功耗篇1:(数字IC)低功耗设计入门(一)——低功耗设计目的与功耗的类型
- 【低功耗设计学习笔记】(一)Bus Invert
- KL25利用低功耗定时器进行MCU低功耗唤醒
- 低功耗设计一之Bus-invert
- 实现MCU应用的低功耗
- stm32f030c8t6 MCU进入低功耗模式
- 做到这五点,就能让MCU低功耗
- CC2640R2F低功耗无线MCU特性介绍
- CC2640R2F低功耗无线MCU特性介绍
- 保证MCU低功耗 这五点很重要
- 关于MCU低功耗的调试注意事项
- 集成电路中低功耗设计(二)
- AngularJS Tutorial(18)from w3school
- Android SDK Manager列表显示不全
- ORA-01114 ORA-01110 ORA-27091 ORA-27041 磁盘挂载问题
- JQuery循环取出checkbox选中的值
- HDU4514湫湫系列故事——设计风景线(并查集判环+最长直径)
- MCU低功耗设计(一)理论
- MDK4新手建立stm32工程易犯错误
- VC 局域网内上传文件 FTP或盘符映射
- 【Hibernate】(4)Hibernate一对多映射
- iOS学习笔记4-xcode构建iOS app时为什么分version和build两个版本号
- 润乾快逸报表超链接问题
- ViewPager中使用fragment用法
- UVA568求n!的最后一位非零数
- poj 2478 Farey Sequence(欧拉函数)