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/MSP430F5132:使用比较器从LPM4唤醒控制器的问题(更改为问题以进入LPM4休眠模式)

Guru**** 2618835 points

Other Parts Discussed in Thread: MSP430F5132, MSP-FET

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/666766/ccs-msp430f5132-problem-to-wake-up-controller-from-lpm4-with-comparator-change-to-problem-to-go-into-lpm4-sleep-mode

部件号:MSP430F5132
主题中讨论的其他部件:Tida-0.0476万,MSP-FET430UIF, MSP-FET

工具/软件:Code Composer Studio

我正在研究一个基于TIDA-0.0476万的solarcharger ,这个源代码和其他示例 的软件现在应该可以使用了。
现在我有一个问题,如果蓄电池电压低于11V ,我初始化比较器,并将控制器置于LPM4中。

但我永远不能再次唤醒控制器,我确定一切正常吗?   我在改变太阳能电池板电压时测量针脚en
我可以在针脚上测量此值。 我还将引脚置于最小en最大电平,但比较器/中断不工作。
我检查了数据表中的所有内容(我想是),以便我查看完整的数据表。

这是蓄电池低于11V的位置:


如果(蓄电池电压<蓄电池最小电压){// BV < 11V

turn-off-Boost-Stage ();
load_disable;

INIT_Comparator_System_Reset();
__bis_sr_register(LPM4);

} 




初始比较器:

void init_Comparator_System_Reset(void){

SYSTEM_RESET_Mode_ON = 1;
load_Monitor_Mode_on = 0;

//清除所有寄存器
CBCTL0 = CBCTL1 = CBCTL2 = CBCTL3 = CBINT = 0;

CBCTL0 |= CBIPEN + CBIPSEL_0; //启用V+,输入通道cB0
CBCTL1 || CBPWRMD_1; //正常电源模式
CBCTL2 |= CBRSEL; // VREF应用于-terminal

CBCTL3 |= BIT0; //输入缓冲器禁用@WFP 1.0 cB0

//#define CBREF1_10 (0x0A00)/* Comp. B内部 参考1选择2:11/32 */
CBCTL2 || CBRS_1 + CBREF1_10 + CBREF0_10;// VCC应用于R-Ladder;在计算后设置

__DELAY周期(7500); //延迟以使引用稳定

//TI建议在配置比较器以在操作过程中正确的中断行为之后清除CBIFG。

CBINT &=~(CBIFG + CBIIFG); //清除任何错误的中断
CBINT |= CBIE; //启用CBIFG上升沿上的CompB中断(CBIS=0)
CBCTL1 || CBON; //打开比较器B
} 




// Comp_B ISR -用于系统重置和过电流保护


#pragma vector=COMP_B_vector


__interrupt void Comp_B_ISR(void){

如果(Load_Monitor_Mode_on){

关闭_升压_阶段;
load_disable;
load_on = 0;

oc_riggered = 1;
oc_trigged_Counter =0;//通过设置标志
对过电流保护采取措施}
如果(System_reset_Mode_on){

PMMCTL0 |= PMMSWBOR; //软件退电重置。 将此位设置为1将触发BOR。 此位是自清除的。
// PMMCTL0 |= PMMSWPOR; //软件开机重置。 将此位设置为1将触发POR。 此位是自清除的。
}

CBINT &=~CBIFG; //清除Comp_B输出中断标志//als hier komt is er altijd een interrupt
} 

我忘记了什么?

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

    我在您的代码中找不到您尝试从LPM4唤醒设备的地方。 请描述或展示您是如何做到这一点的?

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

    你好,Nathan,

    我想在进行了一次退电重置后,他也会退出LPM4?

    对于TI的示例,我并不清楚。

    在数据表中,我可以清楚地看到:

    此致,

    Rob Keij

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

    当我查看msp430f5132.h文件时 ,我发现在某些示例中用于输入LPM4的命令看起来不正常。

    并引用我必须使用的数据表:

                __bis_sr_register(LPM4_bits + GIE); //在启用中断的情况下输入LPM4

    而不    是__bis_sr_register(LPM4);  (我在一些示例中找到的内容)

    /*在SR */
    
    #ifdef __ASM_header__/* begin #defines for assembler */
    #define LPM0中使用位4-7编码的低功耗模式 (CPUOFF)
    #定义LPm1 (SCG0+CPUOFF)
    #定义LPM2 (SCG1+CPUOFF)
    #定义LPM2 (SCG1+SCG0+CPUOFF)
    #define LPM4 (SCG1+SCG0+OSCOFF + CPUOFF)
    /* end #defines for assembler */
    
    #else /* begin #defines for C */
    #define LPM0_bits (CPUOFF)
    #define LPM1_Bits (SCG0+CPUOFF)
    #define LPM2_bits (SCG1+CPUOFF)
    #define LPM3_bits (SCG1+SCG0+CPUOFF)
    #define LPM4_bits (SCG1+SCG0+OSCOFF + CPUFF)
    
    #include "in430.h"
    #include <intrinsics.h>
    
    #define LPM0 __bis_sr_register (LPM0_bits) /*输入低功率模式0 */
    #define LPM0_exit __BIC_SR_REGISTER_ON_EXIT (LPM0_bits)/* Exit Low Power Mode 0*/
    #define LPM1 __bis_sr_register (LPM1_bits) /*输入低功率模式1 */
    #define LPM1_EXIT __BIC_SR_REGISTER_ON_EXIT (LPM1_bits)/* Exit Low Power Mode 1*/
    #define LPM2 __bis_sr_register (LPM2_bits) /*输入低功率模式2 */
    #define LPM2_EXIT __BIC_SR_REGISTER_ON_EXIT (LPM2_bits)/* Exit Low Power Mode 2 */
    #define LPM3 __bis_sr_register (LPM3_bits) /*输入低功率模式3 */
    #define LPM3_EXIT __BIC_SR_REGISTER_ON_EXIT (LPM3_bits)/* Exit Low Power Mode 3*/
    #define LPM4 __bis_sr_register (LPM4_bits) /*输入低功率模式4 */
    #define LPM4_EXIT __BIC_SR_REGISTER_ON_EXIT (LPM4_bits)/* Exit Low Power Mode 4 */
    #endif /* END #defines for C */
    

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

    我用做了很多测试:

    __bis_sr_register(LPM4_bits + GIE); //在启用中断的情况下输入LPM4

    而且它似乎运作良好.......

    但改回:

    __bis_sr_register(LPM4);  (我在一些示例中找到的内容)

    现在也可以使用?

    但是在放电的情况下进行了耳器测试,如果我增加了太阳能电池板电压,PCBA就不会被唤醒。

    我还做了一些测试,以确保我处于LPM4模式。  如果没有,则电流为14.4mA ,而LPM4的电流为0.395mA

    这样就可以了。

    所以现在唯一的问题是“为什么从LPM4唤醒 看起来不那么稳定,我忘了什么吗”

    在带有测试电源的工作台上,现在看起来很好,但使用实际使用值对蓄电池放电需要48小时。


    还有什么需要我考虑的呢?


    感谢您的建议,

    此致,

    Rob Keij

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

    我整天都在忙于处理这个问题,我发现的最新情况是:

                当我蓄电池电压快速调至11伏以下时,一切正常,LPM4可以很好地唤醒       (LPM4电流0.4mA)

                当我慢慢输入<11V电压时,一切看起来都很好(但不好),他从LMP4 ( LPM4电流10mA)中永远不会唤醒

    我希望有人认识到这个问题。


    该硬件基于 TIDA-0.0476万  

    此致,

    Rob Keij

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

    __bis_sr_register(LPM4_bits + GIE);在启用常规中断的情况下输入LPM4 (这就是GEE位正在执行的操作)。 因此,__bis_sr_register(LPM4);如果已启用常规中断(如某些示例所示),则将工作。 如果您尚未启用常规中断,则设备将无法从LPM4唤醒。 请确保您包含GIE位,这样应该可以解决该问题。

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

    你好,Nathan,

    感谢您的回答,但我已经使用了:

     __bis_sr_register(LPM4_bits + GIE); //在启用中断的情况下输入LPM4  

    如果我快速切换到低于11伏的电压,这种情况就会发生。

    但如果我达到<11V慢电压,控制器就不会进入休眠状态(我认为)
    然后PCBA的电流为10mA,而不是0.4mA  

    www.youtube.com/watch

    因此我认为我必须重命名"进入LPM4模式的问题"中的标题  

    此致,

    Rob Keij

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

    首先,当程序应该在LPM4中时,您能否检查CCS中的寄存器,以查看是否设置了正确的位? 如果是,则可能是从其他东西中提取的额外电流。 您能否解释一下您的设置,以便我们了解是否有其他因素导致了此问题?

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

    你好,Nathan,

    一切正常工作 ,"如果"我将蓄电池电压快速降低到11伏以下  ,但实时电压缓慢降低到11伏以下
    我看不到/发现硬件有问题。  
    请检查此软件中是否有任何愚蠢之举???
    我经常阅读数据表,但我找不到任何错误。

    如果软件看起来不错,我认为应该放弃,LPM4对我不起作用,所以这种太阳能充电器是无用的。

    //如果电池电压<11V I初始化比较器,进入休眠(LPM4)并等待太阳能电池板电压>15V
    //当我将电池电压快速提高到<11V时,一切正常,从LPM4良好唤醒 (LPM4电流0,4mA)
    //当我慢慢输入<11V电压时,一切看起来都很好(但实际上不是),他从LMP4 (LPM4电流10mA)
    
    唤醒void init_Comparator_System_Reset (void){
    
    SYSTEM_RESET_Mode_ON = 1;
    load_Monitor_Mode_on = 0;
    
    
    turn-off-Boost-Stage (); // PW_L en PW_H Laag (无PWM驱动)
    Deinit_TimerD_BOUST(); //取消初始化升温计时器
    load_disable; //禁用加载
    Present状态= start_standby_State;
    
    
    CBCTL0 = CBCTL1 = CBCTL2 = CBCTL3 = CBINT = 0;//清除所有寄存器
    
    CBCTL0 |= CBIPEN + CBIPSEL_0; //启用V+,输入通道cB0
    CBCTL1 || CBPWRMD_1; //正常电源模式
    CBCTL2 |= CBRSEL; // VREF应用于-terminal
    
    CBCTL3 |= BIT0; //输入缓冲器禁用@WFP 1.0 cB0
    
    //#define CBREF1_10 (0x0A00)/* Comp. B内部 参考1选择2:11/32 */
    CBCTL2 || CBRS_1 + CBREF1_10 + CBREF0_10;// VCC应用于R-Ladder;在计算后设置
    
    __DELAY周期(7500); //延迟以使引用稳定
    
    //TI建议在配置比较器以在操作过程中正确的中断行为之后清除CBIFG。
    
    CBINT &=~(CBIFG + CBIIFG); //清除任何错误的中断
    CBINT |= CBIE; //启用CBIFG上升沿上的CompB中断(CBIS=0)
    CBCTL1 || CBON; //打开比较器B
    
    #ifdef调试
    TERM_Send_Str_RP ("I已初始化比较器!!! ",34,8);
    TERM_Send_Str_RP ("我现在要睡觉了 ",35,8);
    #endif
    
    __bis_sr_register(LPM4_bits + GIE);//在启用中断的情况下输入LPM4
    
    }//
    
    
    Comp_B ISR -用于系统重置和过流保护
    #pragma vector=COMP_B_vector
    __interrupt void Comp_B_ISR(void){
    
    如果(Load_Monitor_Mode_on){
    
    turn-off-Boost-Stage ();
    load_disable;
    load_on = 0;
    
    CBINT &=~CBIFG; //清除Comp_B输出中断标志
    
    OV_OC_Triggered = 1;
    OV_OC_Trigged_Counter =0;//通过设置标志
    对过电流保护采取措施}
    如果(System_reset_Mode_on){
    CBINT &=~CBIFG; //清除Comp_B输出中断标志
    PMMCTL0 |= PMMSWBOR; //软件掉电重置。 将此位设置为1将触发BOR。 此位是自清除的。
    }
    } 

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

    您是否检查了系统寄存器以查看设备是否实际位于LPM4中? 我认为当您降低电压时,很有可能会缓慢地通过阈值,导致其他东西消耗更高的功率。 仅查看整体电源数并不一定表示设备是否处于LPM4状态,尤其是如果它是较大系统的一部分。

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

    你好,Nathan,

    IM试图使系统寄存器无化,但调试器有问题。  
    运行fsslean后,它仍然不工作。  如果我解决了问题,我会报告我找到的内容。

    谢谢!

    Rob  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我有一个MSP-FET430UIF,正如我所看到的那样,它不能用作调试器,我错了一个xml文件(编译器说)
    我要订购最新的MSP-FET调试器,我希望能在几天内找到问题.......
    如果我已经检查了系统寄存器...

    谢谢!

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

    您对此有任何更新吗?

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

    你好,Nathan,

    感谢您的耐心等待,

     我仍然无法读取寄存器。 我有一个新的调试器,但我可以让调试器工作。   

    但是  我发现 TIDA-0.0476万 设计存在问题。  在我解决了这个问题后,电流始终是  

    太高(10mA) ,我认为这必须是0.5mA  ,但后来我看到这是在原始设计中的5mA。

    通过硬件校正,PCBA始终从睡眠模式唤醒。  (我希望稍后可以查阅登记册)

    考虑到已解决的问题,我的测量值是0.4 mA,而不是5mA (TIDA-0.0476万 50mW /12V = 4.7mA)  (以及我的10mA) ,我改变了我的硬件设计。
    如果电池低于11V (带负载),我禁用 3.3V (来自太阳能电池板的电压启用3.3V电源)。

    下周末,我有了新的PCB,但现在我用我的修改测量了0.5mA ,因为我禁用了3.3V,所以我不需要LPM4睡眠模式。

    这对蓄电池深度放电保护很好。 但如果阳光低,蓄电池电量耗尽(最坏的情况下工作),我仍将继续获得良好的LPM3 / 4。


    我希望下周有最新消息,

    此致,

    Rob