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.

为什么MSP430G2231的板子待机功耗有600uA?

Other Parts Discussed in Thread: MSP430G2231

首先,我在mian函数最后,已经让430进入LMP4模式:

  _BIS_SR(LPM4_bits + GIE);       
    
然后打开了定时器A,28ms中断一次,在中断中计数,每300ms做按键扫描等工作

/********************************定时器A中断**************************************************/
// Timer A0 interrupt service routine
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
 
  CCTL0 = 0;   
 
  delay_cnt++;          
  if(delay_cnt == 12)               //每300ms才检测一次
  {
    keyscan();
 
    charge_scan(); 

    delay_cnt = 0;

}

  WDTCTL = WDTPW + WDTCNTCL;    //喂狗
 
  CCTL0 = CCIE;                 // CCR0 interrupt enabled 

}

我在程序中有用到ADC10,AVCC做基准,使用完后也有关闭:

  ADC10CTL0 &= ~ENC;         
  ADC10CTL0 = 0;           
  ADC10CTL1 = 0;         

 板子上的其它外设,经过排除,最大不会超过300uA的电流。现在用15B万用表的uA档,测量待机电流稳定在600uA左右。

  • 低功耗模式4会把CPU和所有的时钟全部关掉,唤醒CPU是利用复位按键,同时在这种模式下430的耗电仅有0.1uA,你可以用万用表测一下MSP430的输入电流,再就是把430未用到的管脚设为确定的状态。

  • yibin wang,

    首先MSP430进入LPM4是不可能被Timer_A唤醒的,只能通过外部按键中断来唤醒,因为在LPM4 mode下,MCLK, SMCLK,ACLK均是关闭的,故Timer_A是没有时钟源输入的,故也是不可能工作的。

    另外关于测量功耗,有以下几点建议:

    1. 将不用的GPIO管脚设置为输出,或者设置为输入且让其状态固定(上拉或下拉),以排除周围电平浮动引起功耗增加的干扰,因为默认情况下,GPIO是输入的;

    2. 为了进一步排除干扰,配置完GPIO后,直接使用multimeter测试MSP430一直处于LPM4下的功耗,看看此数据时候和datasheet一致,一致后再考虑添加中断唤醒;

    3. 确保程序真的已经跑起来,或者进入了LPM4, 建议在程序进入LPM4之前加入 亮LED灯再灭LED灯,这样既可直观判断程序真的跑起来了。

  • 谢谢回复!

    1、很奇怪的是,在LMP4下,定时器A也是可以工作的。所以以上程序运行正常。因为我看了另外的文章:在LPM4模式下wdt看门狗也能运行

    http://bbs.eeworld.com.cn/thread-342620-1-1.html

    而我的程序就是打开了看门狗的

    2、所有的IO口我都用起来了,有的配置为输入,有的配置为输出,也有的配置为ADC输入口

    3、我尝试改为LMP3,功耗变化不大

  • yibin wang,

     

    1. 对于WDT模块用作看门狗时,关于它的时钟提供是有保护模式的,当进入LPMx时,当其选择的时钟源失效时,会自动切换到VLO上,进而保证看门狗一直运行。当把WDT用作定时器时,此机制是没有的。原文如下:

     

    If SMCLK or ACLK fails as the WDT_A clock source, VLOCLK is automatically selected as the WDT_A

    clock source.

    When the WDT_A module is used in interval timer mode, there is no fail-safe feature within WDT_A for

    the clock source.

     

    2. Timer_A是没有此机制的,若时钟源来自内部,进入LPM4, 肯定不会工作的。你关闭看门狗,在Timer_A定时中断中,加入闪灯,LPM4肯定是不亮的。

  • yibin wang,

    你所有的IO口都用了,那就是有可能使用的管脚的电平和外部电路不一致,有时会导致功耗增大。

    1.除了一个闪灯管脚, 对于MSP430G2231而言,目前建议先将所有管脚设置为输入,均使能下拉电阻。

    对应程序为:

    PxDIR = 0;
    PxOUT = 0;
    PxREN = 0xFF;

    2. 若有管脚接外部电路,外部电路是上拉的话,就使能内部上拉电阻;

    关了看门狗,加个灯亮灯灭指示,然后确保程序进入了LPM4. 再测功耗。此时功耗应该很低,然后逐步排查管脚,看看功耗高是由哪个管脚设置不当引起的。

    希望对你有帮助!O(∩_∩)O~

  • 1、我现在是使用DCO 1MHz,外部什么晶振都没有接。这个VLO是从哪里来的?频率是多少?

    2、我本来设计的看门狗溢出时间是32ms:  WDTCTL = WDT_MRST_32;    如果在LMP4下看门狗用的是VLO时钟,那么这时候的看门狗溢出时间是多少?

    3、我测试了,在设置DCO为1MHZ,用以上命令打开看门狗,并用进入LMP4的命令后,在定时器A中断中是可以检测按键的(当然在中断中要清狗),也就是可以进入定时器A中断程序中。所以现在的问题非常奇怪

  • yibin wang,

    1. VLO是内部超低功耗,超低频率晶体,典型值为12kHz, 但是随着供电电压,温度的变化会有变化,从4kHz~20KHz均有可能,不精准,但是是MCU内部自带的,低功耗,低成本。详见user guide和datasheet。

    2. 关于此问题,我具体看了一下user guide, 非常抱歉,之前看的那个保护机制,我看的是MSP430F5xx系列的user guide,5xx WDT看门狗时钟失效时启用的VLO, 但是对 MSP430G2231, 其保护机制如下,明确说明了LPM4 mode下,不可用ACLK作为时钟源。

    10.2.5 Watchdog Timer+ Clock Fail-Safe Operation
    The WDT+ module provides a fail-safe clocking feature assuring the clock to the WDT+ cannot be
    disabled while in watchdog mode. This means the low-power modes may be affected by the choice for the
    WDT+ clock. For example, if ACLK is the WDT+ clock source, LPM4 will not be available, because the
    WDT+ will prevent ACLK from being disabled. Also, if ACLK or SMCLK fail while sourcing the WDT+, the
    WDT+ clock source is automatically switched to MCLK. In this case, if MCLK is sourced from a crystal,
    and the crystal has failed, the fail-safe feature will activate the DCO and use it as the source for MCLK.
    When the WDT+ module is used in interval timer mode, there is no fail-safe feature for the clock source.

    3. 你现在是在连着仿真器调试状态还是断开仿真器一直运行状态?建议断开仿真器,关闭看门狗,进入LPM4, 用timer中断唤醒,唤醒程序中闪灯,你看看就行可不可以闪灯?先试试这个看看。

    希望对你有帮助!O(∩_∩)O~

  • 如果是仪表的低功耗,还有按键开机等操作,一般不进LPM4,你好好考虑是否需要进入这一级别的低功耗再确认你遇到的问题怎么解决。

  • 经过修改硬件,程序没有改变,目前把万用表串入电池正极,测试待机电流在80uA到122uA变化,满足要求,谢谢!

  • 楼主你好!

    可以试试使用ULP advisor帮助分析程序,降低功耗。

    http://www.ti.com/tool/ulpadvisor