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.

[参考译文] CCS/MSP430FR2355:LPM3电流问题(极高)

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/755510/ccs-msp430fr2355-problem-with-lpm3-current-it-is-extremely-high

器件型号:MSP430FR2355
主题中讨论的其他器件:CCStudioENERGYTRACE

工具/软件:Code Composer Studio

您好!

我对 MSP430和 CCStudio 非常陌生。 我尝试从连接到微控制器的湿度传感器读取数据、将传感器数据与随机生成的10个数字进行比较、然后进入睡眠模式。 计时器中断唤醒微控制器、并再次从传感器读取。  

传感器输出连接到引脚1.1。 引脚1.0用于打开/关闭传感器。 传感器数据需要从模拟信号转换为使用 ADC 的数字值。 我使用了其中一个示例中的 ADC 代码。

我通过在电源和电路板之间连接万用表来测量电流。 在器件上刷写了代码、并移除了连接调试探针的跳线。 我在 LPM3模式下看到大约400uA 的电流-这是否意味着器件不会进入低功耗模式? 我的设置中是否存在问题? 如果能在这方面提供任何帮助,或指明我可以检查的地方,将不胜感激。  

以下是代码:

#include  

unsigned int ADC_Result;

INT 触发;

int main (空)

   WDTCTL = WDTPW | WDTHOLD;                  //停止 WDT

   //配置 GPIO

   P1DIR |= BIT0;                        //将 P1.0/LED 设置为输出方向

   P1OUT &=~BIT0;                       // P1.0 LED 关闭

   //配置 ADC A1引脚

   P1SEL0 |= BIT1;

   P1SEL1 |= BIT1;

   //禁用 GPIO 上电默认高阻抗模式以激活

   //先前配置的端口设置

   PM5CTL0 &=~LOCKLPM5;

   //配置 ADC

   ADCCTL0 |= ADCSHT_2 | ADCON;                 // ADCON、S&H=16 ADC 时钟

   ADCCTL1 |= ADCSHP;                      // ADCCLK = MODOSC;采样定时器

   ADCCTL2 &=~ADCRES;                     //清除 ADCCTL 中的 ADCRES

   ADCCTL2 |= ADCRES_2;                     // 12位转换结果

   ADCMCTL0 |= ADCINCH_1;                    // A1 ADC 输入选择; Vref=AVCC

   ADCIE |= ADCIE0;                       //启用 ADC 转换 完成中断

   int k、p、in[10]、out[10]、match[10];

   //使用  随机数初始化输入数组以进行比较

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

   {

     in[k]=k*(k+1);

   }

   while (1)

   {

     P1OUT = 1;

     ADCCTL0 |= ADCENC | ADCSC;                //采样和转换开始

//     P1OUT = 1;

     _bis_SR_register (LPM0_bits | GIE);           // LPM0、ADC_ISR 将强制退出

//     __no_operation();                    //仅用于调试

     for (p=0;p<10;p++)

     {

       //与  上面初始化的数组进行比较

       OUT[p]= IN[p]^ ADC_Result;

       if (OUT[p]= 0x00)

       {

         //P1OUT |= BIT0;    //SET P1.0 LED 亮起以指示匹配

         匹配[p]= 0x01;

 //          _delay_cycles (5000);

       }

       其他

       {

         P1OUT = 1;    //将 P1.0 LED 设置为开、以指示不匹配仅用于调试

         匹配[p]= 0x00;

         _delay_cycles (5000);

       }

     }//结束

    //配置计时器并启动计时器。

     TB0CCTL0 = CCIE;

     TB0CTL = MC_1|ID_3|TBSSEL_1|TBCLR;  //设置计时器并启动计时器

     TB0CCR0 = 100000 * 100000;            //设置计时器周期  

     触发= 1;              //用于调试

     P1OUT = 0;

     //输入 lpm3

     _bis_SR_register (LPM3_bits | GIE);

     //在计时器中断时,ISR 负责退出 lpm 并将计时器设置为关闭。

   }//结束 while

}//结束 main

// ADC 中断服务例程

#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)

#pragma vector=ADC_vector

_interrupt void ADC_ISR (void)

#Elif defined (_GNU_)

void __attribute__ ((interrupt (ADC_vector))) ADC_ISR (void)

其他

错误 编译器不受支持!

#endif

   switch (__evo_in_range (ADCIV、ADCIV_ADCIFG))

   {

     案例 ADCIV_NONE:

       中断;

     ADCIV_ADCOVIFG 案例 :

       中断;

     案例 ADCIV_ADCTOVIFG:

       中断;

     ADCIV_ADCHIIFG 案例 :

       中断;

     ADCIV_ADCLOIFG 案例 :

       中断;

     ADCIV_ADCINIFG 案例 :

       中断;

     ADCIV_ADCIFG 案例 :

       ADC_RESULT = ADCMEM0;

       P1OUT = 0;

       _BIC_SR_REGISTER_ON_EXIT (LPM0_BITS);        //从 LPM0清除 CPUOFF 位

       中断;

     默认值:

       中断;

   }

#pragma vector = TIMER0_B0_vector

_interrupt void TB0_ISR (void)

   _BIC_SR_REGISTER_ON_EXIT (LPM3_BITS);

   TB0CTL &=~MC_1;                //关闭计时器

感谢您的帮助!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在移除了 LED (P1.0)跳线和 SBW 跳线的 FR2355 Launchpad 上、我的 DMM 显示大约30uA。 平均值计算需要一段时间。 自由运行模式下的 EnergyTrace (无 LED 跳线)主要显示约0.22mW (可能为70uA)。 我更信任 EnergyTrace、而不是我的 DMM。

    您能否展示电路板的原理图? 我想知道您的传感器和 LED 是否真的被关闭了。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Yaman、您好!

    是否有任何关于 Bruce 回复的反馈?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Bruce、

    这是设置图(目前没有传感器)和电路图。 我移除了跳线并在代码中添加了以下行、电流现在为26uA。 LPM3电流应小于1uA、因此这仍然非常高、符合我的预期:

    添加到代码中的行:  

    //使所有引脚变为0

       /*P1OUT = 0x00;*/ P2OUT = 0x00;

       P3OUT = 0x00;P4OUT = 0x00;

       P5OUT = 0x00;P6OUT = 0x00;

       /*P1DIR = 0xff;*/ P2DIR = 0xff;

       P3DIR = 0xff;P4DIR = 0xff;

       P5DIR = 0xff;P6DIR = 0xff;

    此外、当 LED 亮起且电路板进入工作模式时、消耗的电流仅增加2uA 或3uA。 您是否认为微控制器将完全进入 LPM3?  

    我添加了几个断点来跟踪指令流、所有这些断点似乎都按我的预期运行。  

    感谢您在您的系统上检查它、如果您需要更多信息、请告诉我。  

    谢谢、

    Yaman

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

    >/*P1OUT = 0x00;*/ P2OUT = 0x00;
    >/*P1DIR = 0xff;*/ P2DIR = 0xff;

    我未对这些内容进行注释、并将其从24uA 降至18uA 左右。 然后、我添加了:

    > CSCTL4 = SELA_VLOCLK | SELMS_DCOCLKDIV;// BMC

    将 ACLK 设置为 VLOCLK (REFOCLK 的最后用户)、EnergyTrace 要求0.8uA、而 LPM01A 要求1.0uA (平均值)。 我进行的其他测量表明、FR2311上的 REFOCLK 成本约为15uA、因此这是一种合理的效果。

    我尝试用替换 VLO 线路

    > CSCTL3 |= REFOLP;// BMC

    并且获得1.7/2.25uA、但对于(小)额外成本、(我想)会为您提供32kHz 的 ACLK 而不是10kHz 的 ACLK。

    我希望您在程序激活时看到的相对较小的"跳跃"是由于 DMM 中的平均值计算。

    [编辑:我还移除了 P3.1-3和 P6.6的跳线、其本身并不能产生明显的差异。]

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

    我当时在旅行、刚回来。 我明天会尝试、并告诉您它是否起作用。  

    感谢所有的帮助!

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

    您好、Bruce、
    这很成功-我将需要阅读更多有关时钟的信息;感谢您的所有帮助!
    但是、我有两个后续问题-第一个问题是、工作模式下的电流仅为几 uA。 这看起来很奇怪、因为额定工作模式电流大约为 mA。 我不确定电流为何如此低。
    第二个是时钟设置为10kHz 时、这意味着在工作模式中使用的时钟也设置为10kHz 或仅适用于睡眠模式。
    再次感谢您的帮助!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    根据数据表(SLASEC4A)第5.4节、1MHz 时的工作模式应为250-550uA。 我把我的设置分开了、但我记得看到的活动时间很短、可能是几十毫秒。 任何 DMM 取平均值都会使这很难看到。

    我只将 ACLK 设置为 VLOCLK (10kHz)、当激活时、CPU (MCLK)仍在使用由 REFOCLK 规定的 DCO (1MHz)。 TB0的运行速度大约是以前的1/3、但我认为一个慢定时器是目的。

    我看到您有一个 Launchpad;我建议您亲自试用 EnergyTrace。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我看到、活动时间确实非常短、如果不小于10毫秒、肯定会是大约10毫秒。  

    我可能会尝试降低工作时钟、我怀疑这会显著降低功耗。  

    我还使用了 EnergyTrace、但我们需要在万用表上测量数据、因此我一直在那里进行所有测量。 我还将检查 EnergyTrace。  

    感谢 Bruce 的所有帮助!