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.

[参考译文] 无法达到数据表中指定的功耗级别

Guru**** 2380860 points
Other Parts Discussed in Thread: MSP430FR5994
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/660538/trouble-achieving-power-consumption-levels-specified-in-datasheet

主题中讨论的其他部件:MSP430FR5.9941万MSP430FR5994MSP430WARE

尊敬的先生:

    我之前进行过低功耗测试,认为3.0 中的功耗低于10 UA。  但现在我回到这个问题时,消耗量大约是0.18马,是可以接受的10倍!

    也许我之前读错了,或者其他什么。   它在两个不同的MSP430FR5994 LaunchPad开发套件上是相同的。  (该芯片实际上是MSP430FR5.9941万,但这似乎对这一点无关紧要。)

    无论如何,您是否可以检查以下示例代码以了解问题所在?  非常感谢

 

谢谢!

John Moore

 

//************************************************************************************************

// MSP430FRxx演示- WDT,低功耗模式,间隔溢出ISR,DCO SMCLK

//

//说明:使用WDT ISR定时的软件进入LowPowerMode。 LED

//休眠时将关闭,端口1中断将唤醒MCU并打开

// LED。 根据默认值,MCU将在大约250 * 32ms的时间休眠

//本示例中用于WDT的DCO/SMCLK时钟源。

// ACLK = N/A,MCLK = SMCLK =默认值

 

//                       6秒后,WDT中断设置为低功耗模式。

//                       通过使用WFP 1.3 上的低到高输入进行唤醒,它会使端口1中断

//                         返回到正常模式。   因为这是一个上升的边缘,所以需要在中下拉

//                         示波器探测器的形式等

//                         在进入睡眠模式之前,它将0到10的10个值写入到0x4000的帧内存中。

//                         使用向导和“持久性”关键字。

//

//                         如果调试器启动程序,它会FRAM数据重新设置为0,并且将丢失(在“持续”模式下)。

//                         但在"noinit"模式下不会丢失。  在"noinit"模式中,调试器可以读取非易失性fram数据。

 

//                         程序

//                         设置为在启动时读取fram loc 1和2。  如果这两个位置分别为1和0,则会打开

//                         绿色LED。  这样,您就不必从调试器开始检查fram位置。

//

//

//                                       使用3.2ma和.165ma (睡眠LPM 3.0)

//                           必须卸下所有跳线并测量3.3V跳线的电流

 

// MSP430G2xxx

//-----------

///|\\| Xin|-

//||||

//--|RST XOUT|-

//||

//| WFP 1.0 |-->LED

//

// Aldo Briano

//德州仪器(TI)

// 2010年7月

//************************************************************************************************

#include <MSP4S.h>

//#include "driverlib.h"

 

静态int wdtCounter =0;

 

//#pragma persistent(FRAM_ARr)//     此操作有效

//unsigned int frm_arr[10]={0};

 

#pragma NOINIT(FRAM_ARr)           //这也有效

unsigned int frm_arr[10];

 

 

/************************************************************************

 *             Pre_init()

 ***************** /

int _system_pre_init(void)

   //停止监视计时器

   WDT_A_HOLD (__MSP430_BASEADDRESS_WDT_A_);    //停止WDT

 

//   gPIO_setOutputHighOnPin (gPIO_PORT_P4,gPIO_PIN0);

//   gPIO_setAsOutputPin (gPIO_PORT_P4,gPIO_PIN0);

 

   /*=========================================== */

   /*如果段初始化,请选择*/

   /*是否应执行。 */

   /* return: 0忽略初始化*/

   /* 1运行初始化*/

   /*=========================================== */

   返回1

}

 

********************

                                  主

 *

 ******************* /

Void主(void)

 INT A;

 

PM5CTL0 &=~LCKLPM5;     //禁用GPIO开机默认高阻抗模式

 

//初始化时钟和I/O:

//启动时钟系统,最大DCO设置为~8MHz

CSCTL0_H = CSBey >> 8;                   // CSBKey=A500。  解锁时钟寄存器

CSCTL1 = DCOFSEL_3 | DCORSEL;            //将DCO设置为8MHz。  6|40

CSCTL2 =拉美_ VLOCLK | SESS__DCOCLK | SELM__DCOCLK;

CSCTL3 = DIVA__1 | DIVs__1 | DIVM__1;    //设置所有分隔线

CSCTL0_H = 0;                            //锁定CS寄存器

 

 

//将未使用的端口设置为下拉

P2SEL0 &=~BIT0;         //为WFP 1.0 选择GPIO

P2SEL1 &=~BIT0;

P2DIR =0;//将P2设置为输入方向

P2REN = 0;     //下拉(几乎没有区别)

//P2DIR =0xff;//将P2设置为输出方向(几乎不会产生差异)

 

 

 

P3SEL0 &=~BIT0;         //为WFP 1.0 选择GPIO

P3SEL1 &=~BIT0;

P3DIR =0;//将P2设置为输入方向

P3REN = 0;     //下拉

 

P5SEL0 &=~BIT0;         //这有按钮

P5SEL1 &=~BIT0;

P5DIR =0;//将P2设置为输入方向

P5REN = 0;     //下拉

 

 

//为1.0 LED1开发的WFP:

P1SEL0 &=~BIT0;         //为WFP 1.0 选择GPIO

P1SEL1 &=~BIT0;

P1DIR || BIT0;//将WFP 1.0 设置为输出方向

P1OUT || BIT0;//在1.0 处打开红色LED1

 

//为1.1 LED2开发的WFP:

P1SEL0 &=~BIT0;         //为WFP 1.0 选择GPIO

P1SEL1 &=~BIT0;

P1DIR || BIT1;//将WFP 1.0 设置为输出方向

P1OUT |= BIT1; //打开grn LED

 

IF ((FRAM_ARr[1]== 1)&&(FRAM_ARr[2]== 2))

   P1OUT || BIT1;//打开1.1 处的绿色LED指示灯

否则

   P1OUT &=~BIT1;//关闭1.1 处的绿色LED

 

 

//在WFP 1.3 上设置上升边缘中断:

P1SEL0 &=~BIT3;         //为WFP 1.3 选择GPIO

P1SEL1 &=~BIT3;       //select1

//P1DIR =0;            //全部设置为输入

P1DIR &=~BIT3;         //将目录设置为输入(0)

P1REN |=(BIT3);      //pullup

P1IES &=~BIT3;         //上升边缘0->1.

P1IE |= BIT3;       //启用WFP 1.3

 

P4SEL0 &=~BIT4;         //为P4选择GPIO

P4SEL1 &=~BIT4;

P4DIR =0;//将P2设置为输入方向

P4REN = 0;     //下拉

 

//在WFP 5.5 上设置下降边缘中断(按钮2):

P5SEL0 &=~BIT5;         //为P5选择GPIO

P5SEL1 &=~BIT5;

P5DIR &=~BIT5;         //将dir设置为输入

P5REN |=(BIT5);      //pullup仅限位5

P5IES |= BIT5;         //下降边缘1->0

P5IE |= BIT5;        //启用P5,5

 

 

WDTCTL = WDT_MDLY_32;//将看门狗计时器时间间隔设置为~32ms

SFRIE1 || WTIE;//启用WDT中断

 

P1IE |= BIT3;//启用WFP 1.3 中断

__enable_interrupit()

 

对于(;;)

   A=A+1;

}

}

 

/***************************************************************************

                    看门狗计时器中断服务例程

***************** /

#pragma vector=WDT_vector

__interrupt void watchdog计时器(void)

 int i;

 

   IF (wdtCounter == 200)          //现在为6而不是8

   {

       P1OUT = 0x00;// WFP 1.0 关闭

       WdtCounter =0;

 

      //存储FRAM数据:

 

       对于(i=0;i<10;i++)

           frm_arr[i]=i;

 

       _BIS_SR (LPM3_Bits + GIE);//输入带中断的LPM3

       //enterLPM35();//enter 3.5              L40.w/interrupt

   }

   否则

   {

       WdtCounter++;

   }

 

}

/*******************************************************************************

            端口1中断服务

***************** /

#pragma vector=Port1_vector

__interrupt void Port_1 (void)

   wdtCounter =0;//重置看门狗计时器计数器

   P1OUT |= 0x01;//打开LED

   P1IFG = 0x0;

   _BIC_SR (LPM3_EXIT);//从低功率模式唤醒

 

}

 

/*******************************************************************************

            按钮S2的端口5中断服务例程?

***************** /

#pragma vector=PORT5_vector

__interrupt void Port_5 (void)

   wdtCounter =0;//重置看门狗计时器计数器

   P1OUT |= 0x01;//打开LED

   P5IFG = 0x0;

   _BIC_SR (LPM3_EXIT);//从低功率模式唤醒

 

}

 

/*******************************************************************************

 *进入低功率模式3.5

 ***************** /

Void enterLPM35()

   //配置按钮S2 (WFP 5.5)中断

//   gPIO_selectInterruptEdge (gPIO_PORT_P5,gPIO_PIN5,gPIO_HIGH TO LOW _Transition);

//   gPIO_setAsInputPinWithPullUp阻 抗器(GPIO_PORT_P5, gPIO_PIN5);

//   gPIO_clearInterrupt (gPIO_PORT_P5,gPIO_PIN5);

//   gPIO_enableInterrupt (gPIO_PORT_P5,gPIO_PIN5);

 

   //设备进入时,请求禁用内核电压调节器

   // LPM3 (或LPM4),这样我们就可以有效地进入3.5 (或4.5)。

   //PMM_turnOffRegulator();

 

   PMMCTL0 &=~BIT4;               //关闭电脑控制器

   //在启用中断的情况下进入LPM3模式

   __bis_sr_register (LPM3_bits + GIE);

   //__bis_sr_register (LPM4_bits + GIE);

   __no_operation()

}

 

 

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,John:

    您似乎是在设置未使用的GPIO以通过内部下拉进行输入。 这会消耗大量电流。 我们建议将未使用的GPIO设置为低输出。 此外,由于我们的一些启动板上的MSP430连接,因此很难实现数据表中的低功耗数字。 为了获得最准确的电流测量,我们建议使用目标板,该板与MSP430的GPIO的连接极少。

    最后,您可以找到有关如何在MSP430Ware中实现尽可能低的功耗的示例。 可通过下面链接的TI资源浏览器找到一个示例:
    dev.ti.com/.../

    此致,
    Caleb Overbay
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,John:

    首先,您是否在设置LPM3位的行设置了断点? 这样,我们就可以确保设备实际进入LPM3,并且问题不出在WDT。

    此外,您能否描述一下您是如何测量功率的? 您正在使用什么设置?

    此致,
    Nathan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢,Nathan:



    我使用的是MSP430FR5994启动板,它没有连接,SD卡被拉出松动。 除了调试引脚和UART输出外,看不到任何连接到它的内容。

    除接地外,所有调试部分的跳线都将被移除,并插入电流DVM以测量流经3V3针脚的电流。

    WDT执行以下指令:

    _BIS_SR (LPM3_Bits + GIE);//使用interrup输入LPM3



    当跳线接触到WFP 1.3 以提供上升边缘中断时,电流将变为3+Ma。 几秒钟后,WDT将会自动执行instr to

    当电流降至.47ma时,将其放入lpmMA 3.0 中。如果我点击红色方块并停止调试器,电流将降至.31 ma。 (通过两个调试完成调试

    跳线已连接。)

    拔出2个调试跳线后,电流将略微降至.30 mA。



    谢谢!
    John
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    最新的软件1/31/181:46,已清除init

    //************************************************************************************************

    // MSP430G2xx演示- WDT,低功耗模式,间隔溢出ISR,DCO SMCLK

    //

    //说明:使用WDT ISR定时的软件进入LowPowerMode。 LED

    //休眠时将关闭,端口1中断将唤醒MCU并打开

    // LED。 根据默认值,MCU将在大约250 * 32ms的时间休眠

    //本示例中用于WDT的DCO/SMCLK时钟源。

    // ACLK = N/A,MCLK = SMCLK =默认值

    //             6秒后,WDT中断设置为低功耗模式。

    //             唤醒是使用低到高输入的WFP 1.3 完成的,它会导致端口1中断

    //              返回到正常模式。  因为这是一个上升的边缘,所以需要在中下拉

    //              示波器探测器的形式等

    //              在进入睡眠模式之前,它会将0到10的10个值写入0x4000的帧内存中。

    //              已使用向导和“持久性”关键字。

    //

    //              如果调试器启动程序,它会将FRAM数据重新设置为0,并且将丢失(在“持续”模式下)。

    //              但在"noinit"模式下不会丢失。  在"noinit"模式中,调试器可以读取非易失性fram数据。

    //              程序

    //              设置为在启动时读取fram loc 1和2。  如果这两个位置分别为1和0,则会打开

    //              绿色LED。  这样,您就不必从调试器开始检查fram位置。

    //

    //

    //                     使用3.2ma和.165ma (睡眠LPM 3.0)

    //               必须卸下所有跳线并测量3.3V跳线的电流

    // MSP430G2xxx

    //-----------

    ///|\\| Xin|-

    //||||

    //--|RST XOUT|-

    //||

    //| WFP 1.0 |-->LED

    //

    // Aldo Briano

    //德州仪器(TI)

    // 2010年7月

    //************************************************************************************************

    #include <MSP4S.h>

    //#include "driverlib.h"

    静态int wdtCounter =0;

    //#pragma persistent(FRAM_ARr)//   此操作有效

    //unsigned int frm_arr[10]={0};

    #pragma NOINIT (FRAM_arr)       //这也是有效的

    unsigned int frm_arr[10];

    /************************************************************************

    *        pre_init()(初始化)

    ***************** /

    int _system_pre_init(void)

      //停止监视计时器

      WDT_A_HOLD (__MSP430_BASEADDRESS_WDT_A_);  //停止WDT

    //  gPIO_setOutputHighOnPin (gPIO_PORT_P4,gPIO_PIN0);

    //  gPIO_setAsOutputPin (gPIO_PORT_P4,gPIO_PIN0);

      /*=========================================== */

      /*如果段初始化,请选择*/

      /*是否应执行。 */

      /* return: 0忽略初始化*/

      /* 1运行初始化*/

      /*=========================================== */

      返回1;

    }

    ********************

    *                  主

    *

    ******************* /

    Void主(void)

    INT A;

    PM5CTL0 &=~LCKLPM5;   //禁用GPIO开机默认高阻抗模式

    //初始化时钟和I/O:

    //启动时钟系统,最大DCO设置为~8MHz

    CSCTL0_H = CSOKEY >> 8;           // CSNKey=A500。  解锁时钟寄存器

    CSCTL1 = DCOFSEL_3 | DCORSEL;       //将DCO设置为8MHz。  6|40

    CSCTL2 =拉美_ VLOCLK | SESS__DCOCLK | SELM__DCOCLK;

    CSCTL3 = DIVA__1 | DIVs__1 | DIVM__1;  //设置所有分隔线

    CSCTL0_H = 0;               //锁定CS寄存器

    //将未使用的端口设置为低输出:

    P2SEL0 = 0;      //为P2选择GPIO

    P2SEL1 =0;

    P2DIR =0xff;//将P2设置为输出方向

    P2REN = 0;   //无拉力

    P2OUT=0;    //将输出设置为0

    P2OUT=0xff;  //设置为全部高

    P2OUT=0;    //设置回低位

    P3SEL0 = 0;      //为P1选择GPIO的所有引脚

    P3SEL1 = 0;

    P3DIR =0xff;//将P3设置为输出方向

    P3REN = 0;   //无拉线

    P3OUT=0;       //将输出设置为低

    //WFP LED1的1.0 :

    //WFP LED2 1.1 :

    //在WFP 1.3 上设置上升边缘中断:

    P1SEL0 =0;      //为所有P1选择GPIO

    P1SEL1 =0;    //select1

    P1DIR = 0xff;       //全部设置为输出

    P1DIR &=~BIT3;      //将位3设置为输入(0)

    //P1REN |=(BIT3);   //pullup

    P1IES &=~BIT3;      //上升边0->1.

    P1IE |= BIT3;    //启用WFP 1.3

    P1OUT || BIT0;//在1.0 处打开红色LED1

    P1OUT |= BIT1; //打开grn led,WFP 1.1

    P1OUT =0;   //全部关闭

    //检查fram中的数据:

    IF ((FRAM_ARr[1]== 1)&&(FRAM_ARr[2]== 2))      //“重置”按钮仅在调试器关闭时才起作用

      P1OUT || BIT1;//打开1.1 处的绿色LED指示灯

    否则

      P1OUT &=~BIT1;//关闭1.1 处的绿色LED

    P4SEL0 =0;      //为所有P4选择GPIO

    P4SEL1 =0;

    P4DIR =0xff;//将P2设置为输出方向

    P4REN = 0;   //无拉线

    P4OUT =0;   //输出低

    //在WFP 5.5 上设置下降边缘中断(按钮2):

    P5SEL0 =0;      //为P5选择GPIO

    P5SEL1 =0;

    P5DIR = 0xff;   //设置为所有位输出

    P5DIR &=~BIT5;      //将位5方向设置为输入

    P5OUT = BIT5;      //必须为高,才能上拉

    //P5REN |=(BIT5);   //pullup仅适用于位5

    P5IES |= BIT5;      //Falling edge 1->0

    P5IE |= BIT5;     //启用P5,5

    P5OUT = 0x20;       //驱动所有低电平,但Bit5为低功耗

    P6SEL0 =0;      //为所有P4选择GPIO

    P6SEL1 =0;

    P6DIR =0xff;//将P2设置为输出方向

    P6REN = 0;   //无拉线

    P6OUT =0;   //输出低

    P7SEL0 =0;      //为所有P4选择GPIO

    P7SEL1 =0;

    P7DIR =0xff;//将P2设置为输出方向

    P7REN = 0;   //无拉线

    P7OUT =0;   //输出低

    P8SEL0 =0;      //为所有P4选择GPIO

    P8SEL1 =0;

    P8DIR =0xff;//将P2设置为输出方向

    P8REN = 0;   //无拉线

    P8OUT =0;   //输出低功率

    WDTCTL = WDT_MDLY_32;//将看门狗计时器时间间隔设置为~32ms

    SFRIE1 || WTIE;//启用WDT中断

    P1IE |= BIT3;//启用WFP 1.3 中断

    __enable_interrupit();

    对于(;;)

      A=A+1;

    }

    }

    /***************************************************************************

              看门狗计时器中断服务例程

    ***************** /

    #pragma vector=WDT_vector

    __interrupt void watchdog计时器(void)

    int i;

      IF (wdtCounter == 250)      //现在为6秒,而不是8秒

      {

        P1OUT = 0x00;// WFP 1.0 关闭

        WdtCounter =0;

       //存储FRAM数据:

        对于(i=0;i<10;i++)

          frm_arr[i]=i;

        _BIS_SR (LPM3_Bits + GIE);//输入带中断的LPM3

        //enterLPM35();        //输入L黎巴嫩(L)的3.5 w/interrupt

      }

      否则

      {

        WdtCounter++;

      }

    }

    /*******************************************************************************

          端口1中断服务

    ***************** /

    #pragma vector=Port1_vector

    __interrupt void Port_1 (void)

      wdtCounter =0;//重置看门狗计时器计数器

      P1OUT |= 0x01;//打开LED

      P1IFG = 0x0;

      _BIC_SR (LPM3_EXIT);//从低功率模式唤醒

    }

    /*******************************************************************************

          按钮S2的端口5中断服务例程?

    ***************** /

    #pragma vector=PORT5_vector

    __interrupt void Port_5 (void)

      wdtCounter =0;//重置看门狗计时器计数器

      P1OUT |= 0x01;//打开LED

      P5IFG = 0x0;

      _BIC_SR (LPM3_EXIT);//从低功率模式唤醒

    }

    /*******************************************************************************

    *进入低功率模式3.5

    ***************** /

    Void enterLPM35()

      //配置按钮S2 (WFP 5.5)中断

    //  gPIO_selectInterruptEdge (gPIO_PORT_P5,gPIO_PIN5,gPIO_HIGH TO LOW _Transition);

    //  gPIO_setAsInputPinWithPullUp阻 抗器(GPIO_PORT_P5, gPIO_PIN5);

    //  gPIO_clearInterrupt (gPIO_PORT_P5,gPIO_PIN5);

    //  gPIO_enableInterrupt (gPIO_PORT_P5,gPIO_PIN5);

      //设备进入时,请求禁用内核电压调节器

      // LPM3 (或LPM4),这样我们就可以有效地进入3.5 (或4.5)。

      //PMM_turnOffRegulator();

      PMMCTL0 &=~BIT4;         //关闭电脑控制器

      //在启用中断的情况下进入LPM3模式

      __bis_sr_register (LPM3_bits + GIE);

      //__bis_sr_register (LPM4_bits + GIE);

      __no_operation();

    }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    还应该说电流仍为.27ma。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Caleb和Ryan:

    最后检查了您引用的示例。 使用msp430fr5994评估板,使用200瓦刻度的Fluke仪表,电流可降至约0.8瓦。 现在需要将信息应用到我的项目。

    谢谢,你们都是救生员!

    John
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    吴建的例子也是一个救生员。  检查后,发现我忘记了J端口,并且在WDT IRQ中启用中断时出错。

    John