添加至 如何测量MSP430的功耗? wiki 页面

This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

如何测量MSP430的功耗?【TI FAE 分享】

Other Parts Discussed in Thread: MSP430FR5969, MSP430FR5739, MSP430G2553, MSP430G2452

    众所周知,MSP430以其超低功耗而著称。但是很多用户反应,在实际应用中,测量MSP430的功耗时,测量结果和MSP430数据手册相差甚远。其实这里主要涉及到两方面的内容:

1. 如何使用MSP430合理的设计硬件和软件,使整个应用最大限度的达到低功耗?

2. 如何测量MSP430的功耗?

就如何测量MSP430功耗,我来分享一下我个人的经验。

一、未使用的GPIO的处理

     为了使MSP430最大限度的达到低功耗,对于MSP430未使用的GPIO而言,应该将其设置为输出;或者是设置为输入,但是将管脚的电平固定,可以通过外部电路将管脚连接至Vcc或者GND,也可使能内部上下拉电阻,将管脚电平固定。

    对于MSP430而言,大部分情况下,测量到的功耗与datasheet不符均是由对MSP430未使用的GPIO处理不当引起的。默认情况下,MSP430的GPIO是作为输入的,其等效电路如下图所示,为推挽模式:

    当GPIO管脚配置为输入管脚且外部电平处于浮动状态时(0<Vin<Vcc),那么内部的MOSFETs管的导通电流本身就处于一个不稳定的值,会导致整体功耗的升高,示意图见上图右半边。另外过高或过低的温度更会加剧这种不稳定,且当供电电压升高时,本身MOSFETs管的导通电流也会变大。故在高压和低温双重作用下,就会出现功耗攀升现象。

二、前提条件的确定

    MSP430数据手册各种模式下功耗的提供,均注明了相关的前提条件的,具体包括:测量温度,供电电压,系统时钟的时钟源,系统时钟的大小,CPU主频,MSP430工作模式以及active的模块(例如Brownout: BOR, WDT)等。故要验证MSP430在特定模式下的功耗时,一定要注意这些前提条件。

    如果要与别家的MCU比较功耗时,切记一定要在相同的前提条件下比较才有意义。而MSP430的BOR功能在7种LPM mode下均是打开的,且几乎是零功耗的。

三、测量MSP430处于LPM4/LPM3 mode下的功耗

    为了更准确的测量整个用户应用的功耗并且使得最大限度的降低整个应用的功耗,建议先对MSP430处于LPM4/LPM3模式下时,板子的整体功耗进行测量。在LPM4,LPM3模式下,将MSP430功耗与数据手册调至一致后,在此基础上,再进行其他情况下功耗的测量。

1.低功耗测试程序的编写

a. LPM4 低功耗测试程序编写

         LPM4低功耗测试程序的编写,建议参考Wolverine MSP430FR5969 LPM4 code example,如下图所示,注意事项主要有:当作为输入时,将GPIO状态固定, 不让其受外部浮动电平的影响。示例中,GPIO设置为输入,但是使能其内部下拉电阻将GPIO的状态固定了。当然也可以直接将GPIO配置为输出。另外,注意将不必要的模块均关掉,以避免不必要的功耗增加。例如:MSP430FR5739, 在LPM4下,记得将参考源REF关闭。

  REFCTL0 |= REFTCOFF;

  REFCTL0 &= ~REFON;

b. LPM3 低功耗测试程序编写

         首先需要明白,对于LPM3 mode下功耗的测试,需要选定ACLK的时钟源, 是内部VLO还是LFXT1。因为在LPM3下,MSP430的系统时钟只有ACLK可用,MCLK和SMCLK均不可用。而ACLK的时钟源选择不同时,LPM3 mode下,MSP430的功耗是不同的。以MSP430G2553为例,其数据手册中写明,LPM3下,ACLK=LFXT1时,功耗约为0.7uA;而LPM3下,ACLK=VLO时,功耗约为0.5uA。

另外,在测量时,为确保程序成功跑到LPM3模式下。最好能够在进入LPM3之前有个指示,譬如让某个LED灯亮0.5s再灭掉。一定要记得进入LPM3时,灭掉LED, 因为一个LED灯亮,本身就很耗电的,有时会高达2mA。而为什么要有指示呢?是因为当采用LFXT1作为ACLK时钟源时,在程序中需要check LFXT1是否成功起振,万一用户忘记焊LFXT1,或者是低频晶体没有起振,那么就会导致程序一直处于check flag,而不会进入LPM3。在这些情况下,如果没有指示,当对功耗测量时,就会发现测量结果与数据手册上LPM3下的功耗不符。

另外,切记判断LFXT1是否起振,千万不要直接用示波器测量低频晶体的管脚,因为LFXT1本身是非常脆弱的,一旦外部有波动,就会停振。建议将LFXT1作为ACLK时钟源,然后将ACLK从对应管交输出后,用示波器进行观察。

 

2. MSP430低功耗的测量硬件注意事项

         为保证功耗测试的准确性,请尽量少接外围电路,除非是想测量特定外设的功耗。如果使用MSP430 value line的launchpad进行测量时,记得将其EMULATION部分的5个跳线去掉,直接从板下端的Vcc, GND进行供电和功耗测量。因为如果不去掉的话,EMULATION部分的电路也会耗电的。

         如果硬件电路时用户自己设计的,测量LPM3,LPM4下面的功耗时,最好不要焊接MSP430相关的其他电路。如果已经焊接了的话,那么MSP430 GPIO的状态配置一定要根据外部硬件电路的设计来配置。如果功耗大于MSP430数据手册上处于LPMx的功耗的话,可以尝试更改GPIO的配置,来时系统功耗达到最低。

 

四.MSP430功耗的测量

         无论何种情况下,MSP430的功耗测量,一定要注意前提条件。对想要测试的MSP430的工作状态进行规划,确定此时MSP430工作的供电电压,温度,主频,可用资源等,然后再测量。使用Power Supply 输出固定电压给测试板,例如3V。

1. 固定工作模式(固定功耗的测量)

如果用户程序的编写,MSP430一直处于某种固定的模式下的话,即其功耗是固定的话,可以将万用表调至测试电流档直接串联进入供电线路,即可直接观察到此时电流值。

我曾经用过测量精度为6位半的仪器:Agilent 34401A Digit Multimeter 和 RIGOL DM3061 Digital Multimeter,均可以精确的测量到MSP430FR5969处于LPM3下0.7uA的电流。

2. MSP430在active和LPMx mode下切换时功耗以及上电初始化功耗的测量

         虽然高级万用表,有对电流进行累计测量求平均的功能,但是其测量结果还是不够精确,并且一般而言,用户的程序在开始一般都有初始化过程,有时初始化过程还分很多段,当用户想要测量初始化过程不同时间段对应的功耗时,将万用表串联入供电线路就无法完成这个功能了。此时,建议用户使用示波器测量串联入供电线路精密电阻两端的电压的方法,来对系统的功耗有个更直观,精确且有说服力的测量。具体的方法是,用一个约为10~20欧的精密电阻(误差为1%甚至更低)串联入供电线路中,然后用示波器直接观察此电阻两端电压的变化,测出各个阶段,各个工作模式下电阻两端的电压值,而后处于电阻值即可得到对应的工作电流。

上面仅是个人经验分享,若大家有补充和更正,欢迎发表您的意见。O(∩_∩)O~

  • 很好的技术分享,Lina写的很深入,强烈支持!!!

  • 写得太好了,非常有用。

    整理成pdf格式的文档了,方便收藏

    如何测量MSP430的功耗.pdf
  • 实现低功耗方法:

    1.直接把未使用管脚置为输出;

    2.把未使用管脚置为输入,接地或VCC。

  • 您好,我用msp430g2452,设置WDT用外部32.768kHz的晶振源,上电的时候,OFIFG置位,如果不清除OFIFG位的话任何设置LFXT1作为时钟源的模块,都不进行切换LFXT1时钟吗?

  • deliang zhang,

    对于MSP430G2452而言,如果焊了外部32768 XT1, ACLK默认会从XT1来,如果没焊或者XT1起振失败的话,就是使得对应LFXT1OF 置位,OFIFG也会置位,由于MSP430有完整的时钟失效机制,会自动将ACLK的时钟源切换为VLO。然后再使用ACLK作为外设的时钟源。

    After a PUC, MCLK and SMCLK are sourced from DCOCLK at ~1.1 MHz (see the device-specific data
    sheet for parameters) and ACLK is sourced from LFXT1CLK in LF mode with an internal load capacitance
    of 6 pF.

    MSP430有灵活的时钟系统模块,建议把这块弄明白了,其实MSP430也就理解的差不多了。一般外设使用的时钟源,都是系统时钟(ACLK, SMCLK,MCLK), 这些系统时钟又有时钟源(XT1, XT2, VLO, DCO). 

    希望对你有帮助!

  • 既然用34401测试过。最好分享下,怎么连接的。

    有图更有说服力啊。

    另外33401的小电流测试档,取样电阻,应该不小的。

    实际功耗也许更低哦

     

  • 很好的东西,谢谢。

  • 使用串联电阻测量功耗时,比如使用20欧的电阻,功耗如果是2.2uA,那么电压就是44uV,使用示波器能否测出来呢?我做了实验,在这个量程里,波形受噪声影响非常严重了,几乎无法辨认电压幅度值。或许是电源不干净所致?

    我可能用示波器不太熟,是不是有什么地方没配置好。这个地方的测量具体还要注意些什么?

  • John C Smith,

    当测量MSP430的低功耗模式对应的功耗时,用电阻测量,的确会引入较大噪声和干扰,建议直接用电流表测量。而串联电阻测量功耗,建议在下面情况使用“2. MSP430在active和LPMx mode下切换时功耗以及上电初始化功耗的测量”, 此时超低功耗模式下测量也是不准确的,建议参考电流表直接测量结果,此时更注重的是功耗的变化以及active下功耗估计。

  • 非常实用的分享,mark一下

  • 谢谢你的分享,最近我在使用MSP430单片机做产品的过程中也遇到了此类的问题,通常情况下,因为一些引脚连接了外设,例如外需要检测外中断时使用了内部上拉电阻,此时如果将引脚配置成输出高电平或低电平会影响此类功能,显示是不现实的。

    为此,我做了几个实验,MSP430在输出高电平或低电平的时候电流消耗最低,而如果一旦配置成输入,无论有无上下拉电阻,其功耗都是不稳定的,3.3V 25摄氏度左右空板时的电流有时会达到1mA,而且电流受外部影响非常大,例如人体的移动、将手靠近单片机、用手触摸引脚、在绝缘的情况下活动板子等。

    然后我按照你说的Wolverine MSP430FR5969 LPM4 code example例程做了测试,输入,下拉,关VREF,而功耗和上边的测试结果一样,电流消耗非常不稳定。

    所以,在这种情况下,是否会有更好一些的解决办法呢?

  • Feng Zhang8,

    如果在输入状态下即使固定管脚电平功耗还是有浮动的话,一般而言,有某种原因导致了电压不平衡,进一步有电流流动而导致功耗不稳定。如果可以配成输出的配成输出,不能的话,你可以尝试增加使用外部上下拉来增强上下拉能力试试,另外,想想办法如何可以避免周围干扰的引入,PCB layout等。其他也没有什么其他办法了。

  • 请问,把io设为输出态,哪是高电平,还是低电平?

  • 一般输出低电平

  • 现在的问题很奇怪,如果把IO配置为输出,低电平,则功耗为40mA,如不管IO的配置,作为输入,则有40多uA,请专家帮忙分析一下,什么原因?

    20150822大功率无线采集发射v3原理图.pdf
  • zhang qingmin,

            当单片机接了外围器件后,就不能将IO口一律设成输出低了。比如有些IO外部接了上拉电阻,如果设置成输出低就会使电流增大;还有些IO可能接了外部器件的使能引脚,而且是低电平使能,这样输出低也会造成电流增大。

  • 帖子很好,很全面的介绍了低功耗测试需要的注意事项。

  • 做低功耗产品,本贴是一项基本功

  • 写得好,很有帮助