众所周知,MSP430以其超低功耗而著称。但是很多用户反应,在实际应用中,测量MSP430的功耗时,测量结果和MSP430数据手册相差甚远。其实这里主要涉及到两方面的内容:
一、未使用的GPIO的处理
当GPIO管脚配置为输入管脚且外部电平处于浮动状态时(0
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的配置,来时系统功耗达到最低。