导言:
用电池供电的产品来说能耗是一个严重的问题,一旦电能耗尽设备将“停工”。在《MCU低功耗规划(一)理论》中,咱们介绍了节能的原理,本文用万用表和MCU电路板,真刀真枪地测验功耗值。简略,但肯定实在的测验数据,看看官方声称低功耗与实测成果有多大距离,Let’s go!
阐明:
博客的书写东西关于图片的修正支撑力度不行,喜爱本博文的读者能够从以下链接下载PDF版别的博文,那将是一个更好的排版文档。
http://download.csdn.net/detail/jiangjunjie_2005/8966291
一. 建立测验环境
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 | / |
30uA | IWDG | / |
I/O引脚归于模仿器材,往往它的功耗更高,如在上述测验电路有一Pin5(PA4),它连接到LED上。使能与制止该LED引脚后,测得电流为320uA。
一般来说,I/O引脚需求连接到一个确认的逻辑电平。关于一切没有连接到确认逻辑信号的I/O引脚需求改动装备,不然,外部噪声会导致功耗添加,如引脚内部的施密特触发器检测噪声的翻转而耗费能量:输入引脚装备成上拉;输出引脚装备低(或高)的逻辑电平。