码迷,mamicode.com
首页 > 其他好文 > 详细

MCU低功耗设计(二)实践

时间:2015-08-06 00:39:33      阅读:727      评论:0      收藏:0      [点我收藏+]

标签:mcu低功耗   stm8l低功耗   节能实践   iar开发环境   电流表测功耗   

MCU低功耗设计(二)实践

关键词:

MCU低功耗, STM8L低功耗, 节能实践, IAR开发环境, 电流表测功耗

引言:

用电池供电的产品来说能耗是一个重大的问题,一旦电能耗尽设备将“罢工”。在《MCU低功耗设计(一)理论》中,我们介绍了节能的原理,本文用万用表和MCU电路板,真刀真枪地测试功耗值。简单,但绝对真实的测试数据,看看官方宣称低功耗与实测结果有多大差距,Let’s go!

说明:

博客的书写工具对于图片的编辑支持力度不够,喜欢本博文的读者可以从以下连接下载PDF版本的博文,那将是一个更好的排版文档。

一.    搭建测试环境

1.   硬件平台:

选用“长沙市锐米通信科技有限公司(www.rimelink.com)”的无线通信模块iWL881A(下图左),考虑只测试MCU能耗,特地将无线电射频模块去除(下图右),MCU为ST公司超低功耗STM8L151C8T6。

技术分享

技术分享

2.   软件平台:

开发平台选用IAR集成开发环境,它的具体型号如右图:

 技术分享

 

3.   测试工具:

超高精度测低功耗,需要电池模拟器,那玩意可是RMB二十多万一台;老外(如Contiki之父Adam Dunkels)经常接100欧姆电阻,用示波器算积分,比较繁杂;我们使用最简单的办法,串联电流表,不要小看它,测量到uA的精度是可行的。测试环境搭建如下图所示

技术分享

二.    低功耗模式下功耗测试

测试MCU低功耗比较科学的办法是,采用加法原则,即,首先测试最低工作状态下功耗,然后累加外设或I/O引脚,一步一步测试使能部件的功耗值。

为更好地测试STM8L151C8的功耗,我们写了一个C语言测试软件,它把MCU的5种低功耗运行模式都包括在内。当测试对应的运行模式时,只需要修改宏定义:#define MCU_MODE  MODE_xxxxxx。

读者可以从以下链接直接下载该测试代码:

http://download.csdn.net/detail/jiangjunjie_2005/8959145

以下链接下载本博文的姊妹篇:《MCU低功耗设计(一)理论》

http://download.csdn.net/detail/jiangjunjie_2005/8957767

1.   Halt功耗

将测试代码宏定义设置为:

#define MCU_MODE  MODE_HALT

编译并烧录到MCU中,并电流表调整到2mA量程。可以看到,HALT模式下,功耗为0.4uA。

ST公司产品手册:Halt(400 nA)

看来,有信仰的民族(西欧基本都是基督教徒)更容易说真话呀!

 技术分享

 

 

2.   Active-Halt功耗

将测试代码宏定义设置为:#defineMCU_MODE  MODE_ACTIVE_HALT,编译并烧录到MCU中,电流表仍为2mA量程。可以看到,Active-Halt模式下,功耗为1.0uA和2.2uA,为什么会有2个值呢?

如果您看过本系列的第一篇博文《MCU低功耗设计(一)理论》,那就知道,较低的功耗(1.0uA)是Halt状态,而较高的功耗(2.2uA)是唤醒状态。为什么同样是停止,Active-Halt(1.0uA)比Halt(0.4uA)功耗要高呢?答案是,前者有一个38kHz的内部RC晶振在运行,它给RTC提供时钟源,它也需要电能哦!

ST公司产品手册:Active-halt with full RTC(1.4 uA)

如果我们把1.0uA和2.2uA简单地取个平均,那将是1.6uA,和官方数据还是接近吧。当然,要更精确测量,需要拿示波器记录唤醒时间的占空比,这个工作留给更严谨的后续者来完成吧(记得给读者发博文,科技报国,需要身体力行!)。

技术分享

技术分享

3.   LowPowerWait功耗

将测试代码宏定义设置为:

#define MCU_MODE

MODE_LOW_POWER_WAIT,

可以看到功耗为:2.7uA。

ST公司产品手册:Low power wait(3 uA)

那个0.3uA可以算测试误差否?欢迎讨论。

 技术分享

 

4.   LowPowerRun功耗

将宏定义设置为:

#define MCU_MODE

MODE_LOW_POWER_RUN

该模式下功耗为:4.6uA。

ST公司产品手册:Low power run(5.9 uA).

实测功耗比官方宣称功耗还低1.3uA。

 技术分享

我们一起看看该模式下MCU的工作原理。

①进入“Low power run”模式的代码序列:

l 跳转到RAM;

l 切换系统时钟到LSI或LSE;

l 关闭高速晶振、ADC和没有使用的外设;

l 屏蔽所有中断;

l 关闭FLASH和EEPROM;(添加软件延时,确保关闭成功)

l 配置低功耗电压调节器。

②退出“Low power run”模式的代码序列:

l 打开主电压调节器;

l 打开FLASH和EEPROM;

l 使能所有中断;

l 打开需要使用的外设,如有必要跳转到FLASH和EEPROM。

特别注意的是,Lowpower run模式下,MCU是从RAM(不是ROM)取指令解析执行,因为需要将该代码段定位到RAM中。在IAR环境下,将代码段定位于RAM,需要在函数前加关键字“__ramfunc”。实例函数申明如下:

__ramfunc void LPR_Ram(void)

5.   Wait功耗

看过第一篇博文《MCU低功耗设计(一)理论》的读者会了解到,Wait模式下仅CPU暂停运行,这样一来晶振可以是HSI(内部高速)或LSI(内部低速)。我们先测试HIS模式下功耗,设置模式:#define MCU_MODE  MODE_WAIT,设置时钟:#define IS_ENABLE_LSI  0。实测功耗为:687uA,下图右所示。

再测试LIS模式下功耗,设置模式:#define MCU_MODE  MODE_WAIT,设置时钟:#define IS_ENABLE_LSI  1,实测功耗为:82uA,下图左所示。

ST公司产品手册:Wait, Low power run(5.9 uA)

为什么会有如此大的差距,这个答案肯怕得ST公司的技术人员来回答了!

技术分享

技术分享

6.   Run功耗

当MCU以HSI(16MHz)高速运行时,它的功耗如下图左所示:5.3mA(实测时小数点后2和3位在跳动)。

ST公司产品手册:Consumption: 200 uA/MHz + 330 uA.

按上述公式计算,理论功耗应该是3.5mA,与实测值5.3mA有较大差别,很想ST公司的技术人员来解答下。

当MCU以LSI(38kHz)低速运行时,它的功耗如下图右所示:95.6uA。按官方宣称Static能耗330uA,相差也不小。

 技术分享

技术分享

 

我们一起总结下上述运行模式下功耗和使能部件。

ST宣称

实测功耗

低功耗指令

晶振

说明

使能部件

400nA

0.4uA

halt

无关

关闭内部参考电压

/

1.4uA

1.1uA

ActiveHalt

无关

由RTC定时唤醒

LSI+RTC

3uA

2.7uA

LowPowerWait

LSI=38kHz

程序在RAM中等待

LSI+CPU+SRAM

5.9uA

4.6uA

LowPowerRun

LSI=38kHz

程序在RAM中运行

LSI+CPU+SRAM

5.9uA

82uA

wfi/wfe

LSI=38kHz

低速晶振下等待

LSI+CPU+SRAM+FLASH+EEPROM

/

687uA

wfi/wfe

HSI=16MHz

高速晶振下等待

HSI+CPU+SRAM+FLASH+EEPROM

3.5mA

5.3mA

16MHz运行

HSI=16MHz

while(1)不间断运行

HSI+CPU+SRAM+FLASH+EEPROM

330uA

95.6uA

38kHz运行

LSI=38kHz

while(1)不间断运行

LSI+CPU+SRAM+FLASH+EEPROM

三.I/O引脚与外设功耗测试

外设需要HSI(高速外部晶振)或LSI(低速晶振)提供时钟源,因此测试外设一般工作在Wait模式下:此时CPU停止运行,将外设开启的测量功耗值减去关闭时的测量功耗值,即可得该外设的运行功耗值。

 

 

外设数目比较多,我们测试一些常用的外设功耗如下:

功耗

外设

说明

170uA

UART

空闲耗能

60uA

SPI

空闲耗能

30uA

TIM1

定时器1持续运行

30uA

IWDG

独立看门狗持续运行

 

I/O引脚属于模拟器件,往往它的功耗更高,如在上述测试电路有一Pin5(PA4),它连接到LED上。使能与禁止该LED引脚后,测得电流为320uA。

 

一般而言,I/O引脚需要连接到一个确定的逻辑电平。对于所有没有连接到确定逻辑信号的I/O引脚需要改变配置,否则,外部噪声会导致功耗增加,如引脚内部的施密特触发器检测噪声的翻转而消耗能量:输入引脚配置成上拉;输出引脚配置低(或高)的逻辑电平。

 

相关文章:

《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: jiangjunjie_2005@126.com

QQ群:35212129

 

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

MCU低功耗设计(二)实践

标签:mcu低功耗   stm8l低功耗   节能实践   iar开发环境   电流表测功耗   

原文地址:http://blog.csdn.net/jiangjunjie_2005/article/details/47304927

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!